simple-pwa/app.js
2023-06-15 16:37:25 +02:00

61 lines
1.6 KiB
JavaScript

document.addEventListener('DOMContentLoaded', () => {
if ('serviceWorker' in navigator) {
const channel = new BroadcastChannel('sw-messages');
channel.addEventListener('message', (event) => handle_message(event.data));
navigator.serviceWorker.register('sw.js');
} else {
fetch_data(1);
}
});
async function previous() {
let id = parseInt(document.getElementById('api_id').innerHTML, 10);
id--;
if (id <= 0) {
id = 0;
}
fetch_data(id);
}
async function next() {
let id = parseInt(document.getElementById('api_id').innerHTML, 10);
id++;
fetch_data(id);
}
async function fetch_data(id) {
document.getElementById('api_id').innerHTML = id;
fetch(`https://swapi.dev/api/people/${id}`).then((response) => {
if (response.ok) {
response.json().then((data) => {
document.getElementById('result').innerHTML = JSON.stringify(data, null, 2);
document.getElementById('api_id').focus();
});
} else {
document.getElementById('result').innerHTML = "You're currently offline";
document.getElementById('api_id').focus();
}
});
}
function handle_message(message) {
if (message.ready === true) {
setTimeout(() => fetch_data(1), 0);
}
if (message.offline !== undefined) {
document.getElementById('offline').style.visibility = message.offline
? 'visible'
: 'hidden';
}
if (message.loading !== undefined) {
document.getElementById('loading').style.visibility = message.loading
? 'visible'
: 'hidden';
document.getElementById('result').style.visibility = message.loading
? 'hidden'
: 'visible';
}
}