From 7901c7919d92df3d60f46151f9ce8964ae1da3a9 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 28 Oct 2026 12:02:32 -0400 Subject: [PATCH 1/3] fusion #70 : retirer le bouton trois points et le relais menu de la barre --- frontend/index.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/index.html b/frontend/index.html index f5b5988..6e03be8 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -386,7 +386,6 @@ ✦Spark - @@ -432,7 +431,7 @@ return; } if (act === "palette") { var s = document.getElementById("search-input"); if (s) { s.focus(); s.scrollIntoView({ block: "center" }); } return; } - if (act === "menu") { var m = document.getElementById("header-menu-btn"); if (m) m.click(); return; } + /* Correctif fusion #70 : relais "menu" supprimé avec le bouton trois points de la barre (la console agent est dans le menu de la marque, entrée « Console Spark »). Le bouton natif #header-menu-btn d'ObsiGate lui-même est inchangé et reste utilisable depuis l'en-tête ObsiGate. */ if (act === "alertes") { dire("Alertes unifiées : arrive avec la fédération (programme Fusion)."); return; } if (act === "spark") { if (window.DRACO_PANNEAU) { window.DRACO_PANNEAU.toggle(); } -- 2.54.0 From 33e4d14b8182fcdd9c564b0553fa6143d82ce841 Mon Sep 17 00:00:00 2001 From: bruno Date: Wed, 28 Oct 2026 12:02:37 -0400 Subject: [PATCH 2/3] fusion #70 : vendanger barre sans trois points, Console Spark, fermeture/focus corriges --- frontend/draco-barre.js | 233 ++++++++++++++++++++++++---------------- 1 file changed, 139 insertions(+), 94 deletions(-) diff --git a/frontend/draco-barre.js b/frontend/draco-barre.js index 86ace8f..d5a5261 100644 --- a/frontend/draco-barre.js +++ b/frontend/draco-barre.js @@ -4,7 +4,11 @@ * 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). + * menu trois points par défaut et menu compte fonctionnels, voir ci-dessous ; + * correctif fusion #70 (SANS bump de version, publication séparée) : + * bouton trois points et son menu par défaut SUPPRIMÉS, « Console Spark » + * ajoutée au menu de la marque, fermeture/focus corrigés (voir + * « Menu des applications », « Focus » et « Écouteurs globaux »). * * 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 @@ -54,22 +58,64 @@ * 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 ; + * ouvre le menu des applications, construit depuis les onglets, plus + * (depuis le correctif #70) une entrée « Console Spark » vers la + * console de l'agent commun (URL agent résolue, voir ci-dessous) ; * 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. + * repliés (v0.1.2). Menu compte : voir ci-dessous. + * L'action « menu » n'est PLUS émise nulle part : le bouton trois points + * a été supprimé (#70) ; les branches onAction("menu") des hôtes + * (TikTak/Kanbante/Flowdeck : retour false pour le menu par défaut ; + * ObsiGate : clic #header-menu-btn) sont donc mortes et ont été + * retirées des gabarits hôtes — le menu natif d'ObsiGate + * (#header-menu-btn) lui-même n'est pas touché. * - * 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". + * Retrait du bouton trois points (correctif fusion #70) — le bouton et + * son menu par défaut (console agent + applications) sont supprimés + * du fragment, du JS et du CSS. La console agent reste joignable par + * l'entrée « Console Spark » du menu de la marque (ci-dessous) et + * par le bouton Spark (panneau), donc aucun accès n'est perdu. + * Menu des applications (v0.1.3, étendu #70) — construit depuis les + * onglets présents dans la barre, puis une entrée « Console Spark » + * (logo ✦, rôle « Agent commun ») APRÈS Kanbante, vers l'URL agent + * résolue : 1) config explicite DRACO_BAR_CONFIG.urls.agent, + * 2) dérivation -dev agent-dev sur hôte -dev, 3) défaut officiel + * prod https://agent.dracodev.net/ (il n'y a pas d'onglet agent, donc + * pas d'étape « href rendu »). AUCUN hôte spark-dev n'est inventé : + * la clé spark, elle, suit toujours son propre contrat (explicite > + * href rendu > défaut prod) et ne sert qu'au panneau Spark. + * Focus (correctif #70) — ouverture au clavier : Entrée sur la marque + * (clic natif du lien) ; Espace sur la marque (keydown dédié, car un + * lien ne s'active pas à l'Espace) : ouvre le menu et met le focus + * sur son premier item. Fermeture : Échap (focus rendu au déclencheur + * qui avait ouvert le menu : la marque pour le menu apps, l'avatar + * pour le menu compte), nouvel appui sur le déclencheur (le focus y + * est déjà), choix d'un item, ou clic extérieur — ce dernier cas ne + * déplace VOLONTAIREMENT pas le focus (l'utilisateur vient de cliquer + * ailleurs : recherche, tâche… ; lui voler le focus casserait son + * geste). aria-expanded est tenu à jour sur chaque déclencheur. + * Écouteurs globaux (correctif #70, bug tiktak-dev) — les écouteurs + * clic/Échap de la barre sont posés via EventTarget.prototype (voir + * addGlobalListener), PAS via document.addEventListener. Cause + * prouvée sur TikTak (app/static/js/app.js, navigation #89) : app.js + * remplace document/window.addEventListener par un registre + * (__tcDocWin) et chaque navigation douce appelle tcInit() puis + * __tcTeardown(), qui SUPPRIME tous les écouteurs du registre — y + * compris ceux de draco-barre.js (script defer, enregistré après le + * tcInit() initial). La barre survit à la navigation (hors .layout + * remplacé) mais ses gestionnaires sont morts : un menu ouvert avant + * la navigation reste ouvert (Échap et clic extérieur sans effet) et + * la marque, lien href="/", est interceptée par l'intercepteur SPA + * brut de TikTak (__tcDocAdd, hors registre, donc survivant) comme + * une navigation interne au lieu de basculer le menu. Les écouteurs + * posés sur le prototype ne figurent pas dans le registre et ne sont + * donc jamais supprimés par le teardown ; en complément, le gabarit + * TikTak exclut désormais .draco-bar de l'intercepteur SPA, pour que + * la marque ne déclenche plus de navigation douce. Les autres hôtes + * (SSR, rechargement complet) ne sont pas concernés par le teardown + * mais bénéficient du même code ; repli : si EventTarget.prototype + * est indisponible (mini-DOM de tests), document.addEventListener + * classique est utilisé. * Menu compte (v0.1.6) — l'avatar, auparavant un mort affichant * un « B » codé en dur dans le fragment, est un vrai