Dialogues & toastsNouveau
Une lightbox unique pour informer, confirmer ou demander une saisie, et des toasts pour dire « c’est fait ». Jamais de popup grise du navigateur : tout passe par AubuiDialog et AubuiToast.
Essayer
AubuiDialog.alert('Ton export est prêt.', { title: 'Export' });
if (await AubuiDialog.confirm('Supprimer cette note ?', { title: 'Supprimer', ok: 'Supprimer', danger: true })) {
// … suppression
}
const nom = await AubuiDialog.prompt('Nom de la liste ?', { value: 'Courses', placeholder: 'Ex. Vacances' });
if (nom !== null) { /* … */ }Installer
Rien à ajouter : dialog.js est chargé par aubui.js, aubui.light.js (pages de connexion) et même par actions.js seul. aubui.js crée en plus une file d’attente dès son exécution : un appel fait avant que dialog.js soit arrivé est rejoué ensuite, sans popup native.
<script src="https://ui.aubota.xyz/js/aubui.js" defer></script>
<!-- ou, seul, sur une page qui n’utilise pas aubui.js : -->
<script src="https://ui.aubota.xyz/js/dialog.js" defer></script>API AubuiDialog
| Appel | Renvoie | Options |
|---|---|---|
AubuiDialog.alert(msg, opts) | Promise<void> | title (défaut « Info »), ok (« OK »), danger |
AubuiDialog.confirm(msg, opts) | Promise<boolean> | title (« Confirmer »), ok (« Confirmer »), cancel (« Annuler »), danger |
AubuiDialog.prompt(msg, opts) | Promise<string|null> | title (« Saisie »), value, placeholder, ok (« Valider »), cancel, type: "password", multiline, danger. Une chaîne en 2ᵉ argument = value. |
AubuiDialog.toast(msg, opts) | { close() } | Alias de AubuiToast.show. |
- Le message est toujours affiché en texte (échappé, retours à la ligne conservés) : pas de HTML.
promptrenvoienullsi on annule (Échap, clic à côté, « Annuler ») ; Entrée valide (Ctrl/⌘+Entrée en multiligne).window.alert(…)est redirigé vers la lightbox.confirm()/prompt()natifs sont synchrones et ne peuvent pas l’être : réécris-les enawait AubuiDialog.confirm(…)ou utilisedata-aub-confirm.
Toasts
AubuiToast.success('Enregistré');
AubuiToast.error('Connexion perdue, réessaie.'); // reste 5,2 s au lieu de 3,2 s
AubuiToast.show('Note archivée', {
kind: 'info',
duration: 6000, // 0 = ne disparaît pas seul
action: { label: 'Annuler', onClick: () => restore() }
});| Option | Effet |
|---|---|
kind | success · error · warning · info (alias acceptés : ok, danger, err, warn). Couleur du liseré gauche. |
duration | Millisecondes avant disparition. Défaut 3200, 5200 pour une erreur, 0 = permanent. |
action | { label, onClick } : un bouton texte dans le toast (idéal pour « Annuler » après une action optimiste). |
Pile en bas au centre, 4 toasts au plus (les plus anciens partent), pause au survol et au focus, bouton × pour fermer.
Confirmation sans JavaScript : data-aub-confirm
Sur un lien, un bouton ou un formulaire : le clic (ou l’envoi) est retenu, la lightbox s’ouvre, puis l’action d’origine est rejouée telle quelle si on valide. Géré par actions.js.
<form method="post" action="/contacts/delete"
data-aub-confirm="Supprimer définitivement ce contact ?"
data-aub-confirm-title="Supprimer"
data-aub-confirm-ok="Supprimer"
data-aub-danger
onsubmit="return window.__aubConfirmBound ? true : confirm(this.dataset.aubConfirm)">
<input type="hidden" name="csrf" value="…">
<button type="submit" aub-btn danger>Supprimer</button>
</form>| Attribut | Rôle |
|---|---|
data-aub-confirm | Message (défaut « Confirmer cette action ? »). |
data-aub-confirm-title | Titre de la lightbox. |
data-aub-confirm-ok | Libellé du bouton de validation. |
data-aub-danger | Bouton rouge et focus initial sur « Annuler ». |
Le onsubmit de repli ne sert que si Aubui n’est pas encore chargé : dans ce cas une confirmation native vaut mieux qu’une suppression sans question.
Événements et file d’attente
| Élément | Détail |
|---|---|
aubui:dialog-ready | Émis sur document quand dialog.js a remplacé la file d’attente et rejoué les appels. |
AubuiDialog.__stub | Présent (true) tant que seule la file d’attente d’aubui.js existe. |
| Repli | Si dialog.js ne charge pas, la file repasse sur les popups natives : aucune Promise ne reste bloquée. |
role="dialog",aria-modal="true", titre et message reliés pararia-labelledby/aria-describedby.- Focus piégé dans la boîte (Tab / Maj+Tab), Échap annule, le focus revient sur l’élément d’origine à la fermeture.
- Avec
danger, le focus démarre sur « Annuler » : Entrée ne détruit rien par réflexe. - Toasts annoncés aux lecteurs d’écran : région
role="status"(polie),role="alert"pour les erreurs. - Animations coupées si « réduire les animations » est actif.