Ogólne#
Notifications#
W tym miejscu umieszczam powtarzające się specyficzne pojęcia i algorytmy w dziale Notifications.
Pojęcia#
list-of-pending-notifications
list-of-active-notifications
Aplikacja kliencka musi utrzymywać listę oczekujących powiadomień # (list of pending notifications) oraz listę aktywnych powiadomień # (list of active notifications).
Zawsze, gdy lista oczekujących powiadomień nie jest pusta, to aplikacja kliencka musi czekać i monitorować zmiany w dostępnej przestrzeni dla powiadomień na urządzeniu.
Kiedy dostępna przestrzeń wyświetlania zmienia się na urządzeniu w taki sposób, że nowe powiadomienie może być wyświetlone, na przykład z powodu odwołania wcześniejszego powiadomienia, to aplikacja kliencka powinna uruchomić kroki wyświetlenia dla pierwszego powiadomienia na liście oczekujących powiadomień a następnie usunąć je z listy oczekujących powiadomień.
garbage collection
Specyfikacja precyzuje, że obiekt Notification
nie może podlegać mechanizmowi GC w chwili, gdy jego odpowiadające powiadomienie znajduje się na liście oczekujących powiadomień lub liście aktywnych powiadomień i obiekt Notification
o którym mowa ma zarejestrowany nasłuch zdarzenia z typem click
, show
, error
lub close
.
Algorytmy#
show steps
Krokami pokazania # (show steps) dla powiadomienia notification są:
- Jeśli zezwolenie dla pochodzenia w notification nie jest łańcuchem znakowym
"granted"
to przerwij każde trwające pobieranie dla URL ikony w notification, a następnie dla każdego (for each) obiektuNotification
reprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaerror
na obiekcieNotification
i pomiń kolejne kroki. - Jeśli istnieje powiadomienie na liście oczekujących powiadomień lub liście aktywnych powiadomień, którego etykieta nie jest pustym łańcuchem znakowym i jest równa etykiecie w notification, i którego pochodzenie jest równe pochodzeniu w notification to uruchom kroki zastąpienia dla tego powiadomienia przez notification i pomiń kolejne kroki.
- Jeśli urządzenie pozwala powiadomieniom na natychmiastowe wyświetlanie bez ograniczeń co do liczby równoczesnych powiadomień to uruchom kroki wyświetlenia dla notification i pomiń kolejne kroki.
- Jeśli urządzenie posiada ograniczenia co do liczby równoczesnych powiadomień to albo natychmiast wywołaj platformę powiadomień, która natywnie wspiera kolejkowanie, albo dodaj notification do listy oczekujących powiadomień.
activate steps
Kiedy powiadomienie zostało aktywowane przez użytkownika, przy założeniu że podstawowa platforma powiadomień obsługuje aktywację, to krokami aktywacji # (activate steps) dla powiadomienia notification są:
Dla każdego (for each) obiektu
Notification
reprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclick
na obiekcieNotification
.W całej platformie webowej "aktywacja" jest świadomie (chociaż mylnie) nazywana "kliknięciem".
Aplikacje klienckie są usilnie zachęcane do automatycznego wywoływania metody
windows.focus()
z poziomu nasłuchu zdarzenia dla zdarzenia typuclick
w celu ustawienia zogniskowania na spokrewnionym z powiadomieniem kontekście przeglądania.
close steps
Kiedy powiadomienie zostało zamknięte, albo przez podstawową platformę powiadomień albo przez użytkownika, to krokami zamknięcia # (close steps) dla powiadomienia notification są:
- Jeśli notification nie znajduje się ani na liście oczekujących powiadomień ani na liście aktywnych powiadomień to pomiń kolejne kroki.
- Usuń notification zarówno z listy oczekujących powiadomień jak i listy aktywnych powiadomień, i dla każdego (for each) obiektu
Notification
reprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclose
na obiekcieNotification
.
display steps
Krokami wyświetlenia # (display steps) dla powiadomienia notification są:
Jeśli platforma powiadomień obsługuje ikony, URL ikony w notification jest ustawiony i wskazywana ikona nie została jeszcze pobrana, to pobierz ją i poczekaj na odpowiedź.
Jeśli typem w odpowiedzi wewnętrznej dla odpowiedzi jest
default
to spróbuj zdekodować zasób jako obraz.Kiedy pobieranie zostanie zakończone i format obrazu jest obsługiwany, ustaw obraz ikony dla notification na zdekodowany zasób. W przeciwnym razie notification nie posiada obrazu ikony.
- Wyświetl notification na urządzeniu (np. poprzez wywołanie odpowiedniej platformy powiadomień).
- Jeśli wyświetlanie zawiedzie (np. platforma powiadomień zgłasza błąd), to dla każdego (for each) obiektu
Notification
reprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaerror
na obiekcieNotification
i pomiń kolejne kroki. - Dodaj notification do listy aktywnych powiadomień.
- Dla każdego (for each) obiektu
Notification
reprezentującego notification kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniashow
na obiekcieNotification
.
replace steps
Krokami zastąpienia # (replace steps) dla starego powiadomienia old przez nowe powiadomienie new są:
Jeśli platforma powiadomień obsługuje ikony, URL ikony w new jest ustawiony i wskazywana ikona nie została jeszcze pobrana, to pobierz ją i poczekaj na odpowiedź.
Jeśli typem w odpowiedzi wewnętrznej dla odpowiedzi jest
default
to spróbuj zdekodować zasób jako obraz.Kiedy pobieranie zostanie zakończone i format obrazu jest obsługiwany, ustaw obraz ikony dla new na zdekodowany zasób. W przeciwnym razie new nie posiada obrazu ikony.
- Jeśli old znajduje się na liście oczekujących powiadomień to zastąp old przez new na tej samej pozycji w liście oczekujących powiadomień, i dla każdego (for each) obiektu
Notification
reprezentującego old kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclose
na obiekcieNotification
i pomiń kolejne kroki. W przeciwnym razie zastąp old przez new na tej samej pozycji w liście aktywnych powiadomień, następnie dla każdego (for each) obiektu
Notification
reprezentującego old kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniaclose
na obiekcieNotification
, a następnie dla każdego (for each) obiektuNotification
reprezentującego new kolejkuj zadanie dla odpalenia zdarzenia z nazwą zdarzeniashow
na obiekcieNotification
.Jeśli platforma powiadomień nie obsługuje zastępowania to wymóg ten można zapewnić poprzez uruchomienie kroków zamknięcia dla old a następnie uruchomienie kroków wyświetlenia dla new.
Platformy powiadomień usilnie zachęca się do wspierania natywnego zastępowania. To jest o wiele subtelniejsze.