Files
2025-06-16 01:13:41 +02:00

49 lines
1.5 KiB
JavaScript
Executable File

self.addEventListener('push', event => {
let data = {
title: 'Eira',
body: 'You have a new notification',
icon: '/icons/eira-icon.png',
badge: '/icons/eira-badge.png',
data: {
url: '/' // default fallback
}
};
if (event.data) {
try {
const json = event.data.json();
data.title = json.title || data.title;
data.body = json.body || data.body;
data.icon = json.icon || data.icon;
data.badge = json.badge || data.badge;
data.data.url = json.data.url || data.data.url;
} catch (e) {
console.error('Error parsing push event data:', e);
}
}
event.waitUntil(self.registration.showNotification(data.title, {
body: data.body,
icon: data.icon,
badge: data.badge,
data: { url: data.data.url }
}));
});
self.addEventListener('notificationclick', event => {
event.notification.close();
const urlToOpen = event.notification.data.url || '/';
event.waitUntil(clients.matchAll({ type: 'window', includeUncontrolled: true })
.then(windowClients => {
for (const client of windowClients) {
if (client.url === urlToOpen && 'focus' in client) {
return client.focus();
}
}
if (clients.openWindow) {
return clients.openWindow(urlToOpen);
}
}));
});