/* Barre d'apps commune dracodev — comportement (v0.1.0, ACC-0.2 ; * v0.1.3 : menu des applications ouvert par la marque ✦ ; * v0.1.5 : noms publics par configuration — aucun nom public d'un * environnement particulier n'est codé en dur, voir « URL » ci-dessous ; * v0.1.6 (prochaine publication — VERSION non bumpée dans cette PR, * la publication est séparée) : dérivation -dev par l'hôte courant, * menu « ••• » par défaut et menu compte fonctionnels, voir ci-dessous). * * 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 }, * user: "Bruno", // nom affiché (v0.1.6) ; * // ou { display_name: "Bruno", username: "bruno" } * urls: { // bases des applications * obsigate: "https://og.dracodev.net/", * flowdeck: "https://flowdeck.dracodev.net/", * tiktak: "https://tiktak.dracodev.net/", * kanbante: "https://kanbante.dracodev.net/", * agent: "https://agent.dracodev.net/", * spark: "https://spark.dracodev.net/" * }, * onAction: function (act, el) { … } // l'app relaie les actions * } // qu'elle ne connaît pas * * URL des applications (contrat dev/prod, v0.1.5 puis v0.1.6) — * résolution, dans l'ordre STRICT, pour chaque app : * 1. DRACO_BAR_CONFIG.urls., injectée par l'app hôte (rendu * serveur ou client) depuis SA configuration d'environnement — * explicite, donc prioritaire, même sur un hôte -dev ; * 2. (v0.1.6) SI l'hôte courant est un hôte -dev dracodev.net * (première étiquette se terminant par -dev : tiktak-dev, * kanbante-dev, og-dev, flowdeck-dev, agent-dev…), l'URL sœur * dérivée avec -dev (voir DEV_URLS). C'est le correctif du bug * constaté sur tiktak-dev / kanbante-dev, où les liens suivaient * les noms SANS -dev faute de configuration explicite ; * 3. le href déjà rendu dans le fragment HTML, c.-à-d. le jeton * {{URL_}} remplacé côté serveur par l'app hôte ; * 4. le défaut officiel ci-dessous (production, noms SANS suffixe). * Un jeton {{URL_…}} non remplacé n'est jamais une URL : il est ignoré * partout (config injectée comme href rendu) et ne peut pas être exposé. * Cas spark (v0.1.6) : AUCUNE dérivation inventée — aucun hôte * spark-dev connu ; sur un hôte -dev, spark retombe sur l'étape 3 * (href rendu) puis 4 (défaut prod), sauf config explicite (étape 1). * Les clés agent et spark ne correspondent à aucun onglet de la barre : * elles sont résolues et exposées via DRACO_BAR.urls pour le panneau * Spark (panneau-agent), qui suit le même contrat d'injection. * Actions émises (data-act) : rail, palette, domaine (data-dom), * alertes, spark, rappel-entete. L'app intégratrice décide de chacune * (ouvrir la palette, le panneau Spark, changer de domaine…). * Actions INTERNES (jamais relayées comme avant) : apps — la marque ✦ * ouvre le menu des applications, construit depuis les onglets ; * c'est le moyen de changer d'app en mobile, où les onglets sont * repliés (v0.1.2). Menu « ••• » et compte : voir ci-dessous. * * Menu « ••• » (v0.1.6) — audit des hôtes : ObsiGate est le seul hôte * connu à gérer l'action "menu" via onAction (il déclenche son propre * bouton d'en-tête #header-menu-btn) ; les autres hôtes ne la gèrent * pas et le bouton restait mort (relais vers un onAction absent, puis * événement draco:bar sans écouteur). Comportement désormais : * - sans onAction : un menu par défaut FONCTIONNEL s'ouvre — accès à * la console agent (URL agent résolue, donc dérivée -dev sur un * hôte -dev) et aux quatre applications (URL résolues) ; fermeture * par clic extérieur, Échap ou choix d'un lien ; * - avec onAction : l'hôte garde la main (comportement historique, * zéro régression pour ObsiGate) ; il peut demander explicitement * le menu par défaut en retournant false pour l'action "menu". * Menu compte (v0.1.6) — l'avatar, auparavant un mort affichant * un « B » codé en dur dans le fragment, est un vrai