-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscript.js
74 lines (62 loc) · 2.02 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const quoteContainer = document.querySelector("#quote-container");
const quoteText = document.querySelector("#quote");
const authorText = document.querySelector("#author");
const twitterBtn = document.querySelector("#twitter");
const newQuoteBtn = document.querySelector("#new-quote");
const loader = document.querySelector("#loader");
// Array with quotes we fetch from the API
let apiQuotes = [];
let errorCounter = 0;
function showLoadingSpinner() {
loader.hidden = false;
quoteContainer.hidden = true;
}
function hideLoadingSpinner() {
if (!loader.hidden) {
quoteContainer.hidden = false;
loader.hidden = true;
}
}
// Picks a random quote from apiQuotes array and inserting into the DOM
function newQuote() {
showLoadingSpinner();
const quote = apiQuotes[Math.floor(Math.random() * apiQuotes.length)];
!quote.author
? (authorText.innerText = "Unknown")
: (authorText.innerText = quote.author);
quote.text.length > 120
? quoteText.classList.add("long-quote")
: quoteText.classList.remove("long-quote");
quoteText.innerText = quote.text;
hideLoadingSpinner();
}
// Fectching quotes from the API and inserting to the DOM
async function getQuotes() {
showLoadingSpinner();
const apiUrl = "https://type.fit/api/quotes";
try {
const response = await fetch(apiUrl);
apiQuotes = await response.json();
newQuote();
hideLoadingSpinner();
} catch (error) {
errorCounter < 10
? (getQuotes(), errorCounter++, console.log(errorCounter))
: (console.error(`Error: ${error}`),
hideLoadingSpinner(),
(quoteText.innerText = `Error: ${error}`),
(authorText.innerText = ""));
}
}
// Twitter button
function tweetQuote() {
const quote = quoteText.innerText;
const author = authorText.innerText;
const twitterUrl = `https://twitter.com/intent/tweet?text=${quote} - ${author}`;
window.open(twitterUrl, "_blank");
}
// Event Listeners
newQuoteBtn.addEventListener("click", newQuote);
twitterBtn.addEventListener("click", tweetQuote);
// On load
getQuotes();