export function injectPWA() {
if(!('serviceWorker' in navigator)) return;
navigator.serviceWorker.addEventListener('message', e => {
if(e.data?.type === 'SW_UPDATED') {
localStorage.setItem('sw-version', e.data.version);
showUpdateBanner(e.data.version);
}
if(e.data?.type === 'VERSION') {
const prev = localStorage.getItem('sw-version');
if(prev && prev !== e.data.version) showUpdateBanner(e.data.version);
localStorage.setItem('sw-version', e.data.version);
}
});
navigator.serviceWorker.register('sw.js', { updateViaCache: 'none' }).then(reg => {
reg.update().catch(() => {});
const ctrl = navigator.serviceWorker.controller;
if(ctrl) ctrl.postMessage({ type: 'GET_VERSION' });
}).catch(() => {});
}
export function showUpdateBanner(version) {
if(document.getElementById('update-banner')) return;
const b = document.createElement('div');
b.id = 'update-banner';
b.className = 'update-banner';
b.innerHTML = `
✦ Update verfügbar${version ? ' ('+version+')' : ''}
`;
document.body.appendChild(b);
}