From e0e45ac048f86b4b075219c82746ef3d763199cb Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 28 Oct 2026 10:31:55 -0400 Subject: [PATCH 1/3] barre-apps v0.1.6 : fragment inline (avatar bouton compte, aria menu) - menu natif et DRACO_URLS inchanges --- frontend/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index a92a495..f5b5988 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -332,7 +332,7 @@ @@ -386,8 +386,8 @@ ✦Spark - - ✦ + + -- 2.54.0 From 87016e5581183a5cbdc9c445cff225f3186267bf Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 28 Oct 2026 10:32:01 -0400 Subject: [PATCH 2/3] barre-apps v0.1.6 : JS vendange (derivation -dev, menus) --- frontend/draco-barre.js | 443 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 403 insertions(+), 40 deletions(-) diff --git a/frontend/draco-barre.js b/frontend/draco-barre.js index b5e454b..86ace8f 100644 --- a/frontend/draco-barre.js +++ b/frontend/draco-barre.js @@ -1,5 +1,10 @@ /* Barre d'apps commune dracodev — comportement (v0.1.0, ACC-0.2 ; - * v0.1.3 : menu des applications ouvert par la marque ✦). + * 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 @@ -10,19 +15,158 @@ * 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, menu, rappel-entete. L'app intégratrice décide de - * chacune (ouvrir la palette, le panneau Spark, changer de domaine…). - * Action INTERNE (jamais relayée) : 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). + * 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