You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 

64 lines
1.7 KiB

class JokeService {
constructor(categories = ['programming', 'coding', 'development'], lang = 'en') {
this.categories = Array.isArray(categories) ? categories : [categories];
this.lang = lang;
this.apiBaseUrl = 'https://v2.jokeapi.dev/joke/';
this.toldJokes = localStorage.getItem('toldJokes') !== null ? JSON.parse(localStorage.getItem('toldJokes')) : [];
}
setCategory(category) {
this.categories = Array.isArray(category) ? category : [category];
}
tell() {
let service = this;
axios.get(
service.apiBaseUrl + service.categories.join(',') + '?lang=' + service.lang
).then((response) => {
if (response.data.error === false) {
if (service.toldJokes.includes(response.data.id)) {
service.tell();
return false;
}
service.show(response.data);
}
}).catch((error) => {
console.error(error);
});
}
show(joke) {
let service = this;
if (joke.type === 'twopart') {
setTimeout(() => {
showNotification(joke.delivery)
}, 4000);
showNotification(joke.setup);
service.jokeTold(joke);
} else {
showNotification(joke.joke);
}
}
jokeTold(joke) {
this.toldJokes.push(joke.id);
localStorage.setItem('toldJokes', JSON.stringify(this.toldJokes));
}
getToldJokes() {
}
}
function showNotification(text) {
if (Notification.permission === 'granted') {
new Notification('', {
body: text
});
} else {
console.warn('Notifications sind nicht erlaubt.')
}
}