Initial commit

This commit is contained in:
Kerboul
2026-03-09 07:44:27 -07:00
commit 14031f73a3
7 changed files with 589 additions and 0 deletions

59
app.js Normal file
View File

@@ -0,0 +1,59 @@
// Register Service Worker for PWA
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('./sw.js')
.then((registration) => {
console.log('SW registered: ', registration);
})
.catch((registrationError) => {
console.log('SW registration failed: ', registrationError);
});
});
}
// PWA Install Prompt Logic
let deferredPrompt;
const installBtn = document.getElementById('installBtn');
window.addEventListener('beforeinstallprompt', (e) => {
// Prevent Chrome 67 and earlier from automatically showing the prompt
e.preventDefault();
// Stash the event so it can be triggered later.
deferredPrompt = e;
// Update UI to notify the user they can add to home screen
if(installBtn) {
installBtn.hidden = false;
}
});
if(installBtn) {
installBtn.addEventListener('click', async () => {
if (deferredPrompt !== null) {
// Show the install prompt
deferredPrompt.prompt();
// Wait for the user to respond to the prompt
const { outcome } = await deferredPrompt.userChoice;
if (outcome === 'accepted') {
console.log('User accepted the install prompt');
} else {
console.log('User dismissed the install prompt');
}
// We've used the prompt, and can't use it again, throw it away
deferredPrompt = null;
installBtn.hidden = true;
}
});
}
// Interactive element animation
const pulseElement = document.getElementById('pulseElement');
if(pulseElement) {
pulseElement.addEventListener('click', () => {
pulseElement.style.transform = 'scale(0.9)';
setTimeout(() => {
pulseElement.style.transform = 'scale(1)';
const randomColor = Math.floor(Math.random()*16777215).toString(16);
pulseElement.style.background = `#${randomColor}`;
}, 150);
});
}