47 lines
1.7 KiB
JavaScript
47 lines
1.7 KiB
JavaScript
/**
|
|||
|
|
* Mærket på appens ikon — tallet i Dock'en på en Mac, på proceslinjen på en pc.
|
||
|
|
*
|
||
|
|
* Klokken i hovedet siger det samme, men kun til den, der kigger på fanen. Det
|
||
|
|
* halve af pointen med at få besked er at få den, mens man laver noget andet, og
|
||
|
|
* det eneste sted, appen kan sige noget dér, er på sit eget ikon.
|
||
|
|
*
|
||
|
|
* Sat to steder, fordi der er to tilstande: her, mens appen er åben og selv ved
|
||
|
|
* hvor mange ulæste der er, og i service-workeren, når den ikke er — se `push`-
|
||
|
|
* lytteren i service-worker.js, som får tallet med i beskeden.
|
||
|
|
*
|
||
|
|
* Ét tal, ikke en optælling. Mærket sættes til hvad der *er*, aldrig til hvad der
|
||
|
|
* lige er kommet, så det kommer ned igen af sig selv, når beskederne bliver læst.
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Kan browseren mærke sit ikon? Safari og Chrome kan, når appen er lagt i Dock'en
|
||
|
|
* eller installeret; en almindelig fane har intet ikon at mærke, og kaldet gør
|
||
|
|
* ingenting. Firefox kan ikke endnu.
|
||
|
|
*/
|
||
|
|
export function supported() {
|
||
|
|
return typeof navigator !== 'undefined' && 'setAppBadge' in navigator;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Sætter mærket til `n`, eller fjerner det ved nul.
|
||
|
|
*
|
||
|
|
* Tavs, når det ikke kan lade sig gøre. Et mærke er en venlighed oven på klokken,
|
||
|
|
* der allerede står i fladen — ikke noget at afbryde nogen med, hvis browseren
|
||
|
|
* siger nej.
|
||
|
|
*/
|
||
|
|
export function setBadge(n) {
|
||
|
|
if (!supported()) return;
|
||
|
|
const count = Number(n) || 0;
|
||
|
|
try {
|
||
|
|
const done = count > 0 ? navigator.setAppBadge(count) : navigator.clearAppBadge();
|
||
|
|
done?.catch?.(() => {});
|
||
|
|
} catch {
|
||
|
|
// Nogle browsere kaster i stedet for at afvise. Det er det samme svar.
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Fjerner mærket helt. Brugt ved log ud: den næste, der lander her, er en anden. */
|
||
|
|
export function clearBadge() {
|
||
|
|
setBadge(0);
|
||
|
|
}
|