2022-10-04 14:08:30 +02:00
|
|
|
// api used is at https://api.adviceslip.com
|
|
|
|
// specifically https://api.adviceslip.com/advice
|
|
|
|
// which takes a callback parameter
|
|
|
|
// advice is cached for 2 seconds
|
|
|
|
// so my plan is to disable the button for those
|
|
|
|
// 2 seconds
|
2022-10-04 15:35:30 +02:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
const title = document.getElementById("advice__title");
|
|
|
|
const quote = document.getElementById("advice__quote");
|
|
|
|
const button = document.getElementById("advice__button");
|
|
|
|
|
|
|
|
button.addEventListener("click", getAdvice);
|
|
|
|
|
|
|
|
window.document.addEventListener("DOMContentLoaded", getAdvice);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* [buttonClicked description]
|
|
|
|
*
|
|
|
|
* @param {[Event]} anEvent [anEvent description]
|
|
|
|
*/
|
|
|
|
async function getAdvice() {
|
|
|
|
try {
|
|
|
|
addAnimation();
|
|
|
|
|
|
|
|
const response = await fetch("https://api.adviceslip.com/advice");
|
|
|
|
const data = await response.json();
|
|
|
|
|
|
|
|
// verify its a slip
|
|
|
|
if (data.slip) {
|
|
|
|
title.textContent = `Advice #${data.slip.id}`;
|
|
|
|
quote.textContent = `“${data.slip.advice}”`;
|
|
|
|
} else {
|
|
|
|
// If for some reason the server sends a message type
|
|
|
|
// back rather than a slip
|
|
|
|
alert(`Something went wrong.\n\n${data.message.text}`);
|
|
|
|
|
|
|
|
removeAnimation();
|
|
|
|
}
|
|
|
|
// otherwise something horrible went wrong
|
|
|
|
} catch (error) {
|
|
|
|
alert(`Something has gone seriously wrong. HELP!!!!!\n\n ${error}`);
|
|
|
|
|
|
|
|
removeAnimation();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function addAnimation() {
|
|
|
|
button.children[0].classList.add("animate");
|
|
|
|
setTimeout(() => {
|
|
|
|
removeAnimation();
|
|
|
|
}, 2000);
|
|
|
|
}
|
|
|
|
|
|
|
|
function removeAnimation() {
|
|
|
|
button.children[0].classList.remove("animate");
|
|
|
|
}
|