57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
/* Barre d'apps commune dracodev — comportement (v0.1.0, ACC-0.2)
|
|
*
|
|
* Aucun gestionnaire inline : un seul écouteur délégué sur le document
|
|
* (patron validé par le prototype — les onclick du HTML généré sont
|
|
* proscrits dans tout le programme).
|
|
*
|
|
* Configuration attendue avant le chargement :
|
|
* window.DRACO_BAR_CONFIG = {
|
|
* current: "tiktak", // app courante
|
|
* domain: "pro", // domaine actif
|
|
* counts: { tiktak: 3, kanbante: 3, alertes: 3, spark: 0 },
|
|
* onAction: function (act, el) { … } // l'app relaie les actions
|
|
* } // qu'elle ne connaît pas
|
|
* Actions émises (data-act) : rail, palette, domaine (data-dom),
|
|
* alertes, spark, menu, rappel-entete. L'app intégratrice décide de
|
|
* chacune (ouvrir la palette, le panneau Spark, changer de domaine…).
|
|
*/
|
|
(function () {
|
|
"use strict";
|
|
var cfg = window.DRACO_BAR_CONFIG || {};
|
|
|
|
function setCounts(counts) {
|
|
Object.keys(counts || {}).forEach(function (k) {
|
|
var b = document.querySelector('.draco-badge[data-badge="' + k + '"]');
|
|
if (!b) return;
|
|
b.textContent = counts[k];
|
|
b.hidden = !(counts[k] > 0);
|
|
});
|
|
}
|
|
function setCurrent(app) {
|
|
document.querySelectorAll(".draco-apptab").forEach(function (t) {
|
|
t.dataset.active = t.dataset.app === app ? "true" : "false";
|
|
});
|
|
}
|
|
function setDomain(dom) {
|
|
document.querySelectorAll('.draco-domaines [data-dom]').forEach(function (b) {
|
|
b.dataset.on = b.dataset.dom === dom ? "true" : "false";
|
|
});
|
|
}
|
|
|
|
document.addEventListener("click", function (ev) {
|
|
var el = ev.target.closest("[data-act]");
|
|
if (!el) return;
|
|
var act = el.dataset.act;
|
|
if (act === "domaine") setDomain(el.dataset.dom);
|
|
if (typeof cfg.onAction === "function") cfg.onAction(act, el, ev);
|
|
else document.dispatchEvent(new CustomEvent("draco:bar", { detail: { act: act, el: el } }));
|
|
});
|
|
|
|
/* API publique : l'app met les compteurs à jour sans recharger. */
|
|
window.DRACO_BAR = { setCounts: setCounts, setCurrent: setCurrent, setDomain: setDomain };
|
|
|
|
if (cfg.current) setCurrent(cfg.current);
|
|
if (cfg.domain) setDomain(cfg.domain);
|
|
if (cfg.counts) setCounts(cfg.counts);
|
|
})();
|