Aller au contenu
Aubui · Notifications
Composants

NotificationsNouveau

La cloche Comlink : un badge de non-lus, la liste des dernières transmissions, un toast quand quelque chose arrive pendant que tu es sur la page, et une notification système quand l’onglet est caché.

Essayer

La vraie cloche est dans la barre en haut (connecte-toi au Hub pour y voir tes notifications). Ici, des démos sans réseau — à l’ouverture, la cloche recharge depuis le serveur : si tu es connecté, tes vraies notifications remplacent la liste de démo.

JS
AubotaNotif.toast({ module: 'Listes', title: 'Nouvelle invitation', body: '@ana t’invite à « Courses »', href: 'https://hub.aubota.xyz/lists' });
AubotaNotif.setCount(3);
AubotaNotif.render([{ id: 'n1', unread: true, module: 'Hub', title: 'Rappel', body: 'Réunion à 14 h', ts: 1760000000, href: '/meetings' }]);
AubotaNotif.open();

Installer

Inclus dans aubui.js (mode complet). La cloche est créée par la barre globale ou par <nav aub-nav> ; toute .aub-notif présente au chargement (ou à l’événement aub-nav-ready) est branchée.

HTML (cloche faite main)
<script src="https://ui.aubota.xyz/js/notifications.js" defer></script>

<div class="aub-notif">
  <button type="button" class="aub-notif__btn" aria-label="Notifications" aria-expanded="false">🔔<span class="aub-notif__badge"></span></button>
  <div class="aub-notif__dropdown">
    <div class="aub-notif__header">Notifications</div>
    <div class="aub-notif__list"></div>
  </div>
</div>

API window.AubotaNotif

AppelRôle
setCount(n)Badge de toutes les cloches de la page.
render(items)Remplace la liste (voir format ci-dessous).
open() · close()Ouvre / ferme la première cloche.
load()Recharge tout de suite depuis l’endpoint.
toast({ module, title, body, href, onClick })Toast Comlink (bas-droite, 6 s, 3 au plus, cliquable).
Événement (document)Sensdetail
aubota:notif-newémis{ items } : nouveautés annoncées (pour rafraîchir une vue).
aubota:notif-countécouté{ unread } : une page (Comlink) signale ses marquages, le badge suit sans attendre.
aub-nav-readyécoutéRe-scan des cloches après un montage tardif.

Contrat de l’endpoint

Sur hub.* : /api/notifications.php ; sur social.* : /api/notifications ; ailleurs : Hub puis Social (le premier qui répond est gardé, lecture et écriture).

JSON
GET  → { "ok": true, "unread": 2, "items": [
         { "id": "n1", "unread": true, "module": "Listes", "title": "…", "body": "…",
           "href": "https://hub.aubota.xyz/lists", "ts": 1760000000 } ] }
POST ← { "act": "read", "id": "n1" }   (JSON, cookies inclus)
  • href n’est suivi que s’il commence par http(s):// ou / ; tout le texte est échappé.
  • Sans ts (Social), les nouveautés sont détectées par différence d’ids ; la première visite pose une référence sans rien annoncer.
  • Poll sans cache : 30 s onglet visible, 90 s caché, rechargement au retour sur l’onglet. Un même id n’est jamais annoncé deux fois, même entre onglets.
  • Rien n’est marqué lu à l’ouverture de la cloche : seulement au clic sur une notification.
  • Hub : un Web Push reçu par le service worker donne un toast immédiat (même tag aub-n-<id> que la notification système : pas de doublon).
Accessibilité
  • Le bouton a aria-label="Notifications" et aria-expanded ; Échap ferme la liste.
  • Les toasts Comlink sont dans une région aria-live="polite".
  • Les notifications système ne sont proposées que si la permission a déjà été accordée : jamais de demande surprise.
Aubui · design system AUBOTA · version 2026-10-19-3 · API figée · README · Une nouveauté Aubui = une section ici.