From 08e912d56f03dd00b91953a5290be4f949130f0a Mon Sep 17 00:00:00 2001 From: Spark Date: Wed, 4 Nov 2026 21:45:14 +0000 Subject: [PATCH] =?UTF-8?q?Flowdeck=207.84.13=20:=20barre=20v0.3.0=20?= =?UTF-8?q?=E2=80=94=20liens=20Hub=20du=20menu=20compte,=20URL=20Hub=20r?= =?UTF-8?q?=C3=A9solue=20comme=20les=20s=C5=93urs=20(draco=5Furls)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/config.py | 2 + app/services/draco_urls.py | 13 +++- app/templates/_draco_bar.html | 15 ++++- static/css/draco-barre.css | 4 ++ static/js/vendor/draco-barre.js | 101 +++++++++++++++++++++++++++----- 5 files changed, 116 insertions(+), 19 deletions(-) diff --git a/app/config.py b/app/config.py index b4445e3..bce6539 100644 --- a/app/config.py +++ b/app/config.py @@ -157,6 +157,7 @@ class Settings(BaseSettings): # TIKTAK_URL=https://tiktak-dev.dracodev.net # KANBANTE_URL=https://kanbante-dev.dracodev.net # SHAARIT_URL=https://shaarit-dev.dracodev.net + # HUB_URL=https://hub-dev.dracodev.net # FLOWDECK_URL=https://flowdeck-dev.dracodev.net draco_sso_url: str = "https://og.dracodev.net" # ObsiGate (émettrice SSO) # ── Coffre ObsiGate, côté consommateur Flowdeck (Phase 4, issue #22) ── @@ -170,6 +171,7 @@ class Settings(BaseSettings): tiktak_url: str = "https://tiktak.dracodev.net" kanbante_url: str = "https://kanbante.dracodev.net" shaarit_url: str = "https://shaarit.dracodev.net" + hub_url: str = "https://hub.dracodev.net" # URL publique de CETTE instance ; vide = dérivée de # OAUTH_REDIRECT_URI, puis d'APP_BASE_URL (si non locale), puis du # nom officiel. diff --git a/app/services/draco_urls.py b/app/services/draco_urls.py index b6a65c4..6c01818 100644 --- a/app/services/draco_urls.py +++ b/app/services/draco_urls.py @@ -98,6 +98,7 @@ OFFICIELLES = { "kanbante": "https://kanbante.dracodev.net", "shaarit": "https://shaarit.dracodev.net", "flowdeck": "https://flowdeck.dracodev.net", + "hub": "https://hub.dracodev.net", "gitea": "https://git.dracodev.net", } @@ -123,6 +124,7 @@ _SLUGS_SOEURS = { "tiktak": "tiktak", "kanbante": "kanbante", "shaarit": "shaarit", + "hub": "hub", } # Hôte de l'agent : agent.dracodev.net (SUFFIXE = ``-dev``…). @@ -133,7 +135,7 @@ _MOTIF_HOTE_AGENT = re.compile(r"^agent(-[a-z0-9-]+)?\.dracodev\.net$") # de TOUTE l'installation — jamais un suffixe inventé depuis un # hôte arbitraire : hors motif (autre domaine, LAN, IP), None. _MOTIF_HOTE_PUBLIC = re.compile( - r"^(og|flowdeck|tiktak|kanbante|agent)(-[a-z0-9-]+)?\.dracodev\.net$") + r"^(og|flowdeck|tiktak|kanbante|agent|hub)(-[a-z0-9-]+)?\.dracodev\.net$") # Slugs pour la résolution par l'hôte de la requête (l'agent inclus). _SLUGS_TOUTES = {**_SLUGS_SOEURS, "agent": "agent"} @@ -282,6 +284,14 @@ def shaarit_url() -> str: return _resoudre_soeur("SHAARIT_URL", "shaarit_url", "shaarit") +def hub_url() -> str: + """Hub (barre v0.3.0, HUB-1) : même résolution que les sœurs — + il n'a pas d'onglet, sa base sert les liens du menu compte + (Télécharger, À Propos, Aides, Profil) via ``urls.hub`` de la + configuration de la barre.""" + return _resoudre_soeur("HUB_URL", "hub_url", "hub") + + def gitea_url() -> str: return _resoudre("GITEA_URL", "gitea_url", "gitea") @@ -366,6 +376,7 @@ def toutes() -> dict[str, str]: "kanbante": kanbante_url(), "shaarit": shaarit_url(), "flowdeck": flowdeck_url(), + "hub": hub_url(), "gitea": gitea_url(), } diff --git a/app/templates/_draco_bar.html b/app/templates/_draco_bar.html index c75c4bd..db7ae4d 100644 --- a/app/templates/_draco_bar.html +++ b/app/templates/_draco_bar.html @@ -1,8 +1,11 @@ {# Barre d'apps commune dracodev — Fusion ACC-1.1 (issue #17). - Snippet FIGÉ vendangé depuis Projets/dracodev-commons v0.2.0 - (ui/barre-apps/, commit 70c837a de la branche - shaarit-phase3-barre-contrats) : ne pas modifier la structure ici ; + Snippet FIGÉ vendangé depuis Projets/dracodev-commons v0.3.0 + (ui/barre-apps/, branche hub-menu-compte-v0-3-0 de la PR commons + #9 — HUB-1, fusion #115) : ne pas modifier la structure ici ; toute évolution passe par une nouvelle version de commons. + v0.3.0 : menu compte — liens Hub Télécharger / À Propos / Aides + et Profil devenu lien (base draco_urls().hub passée en urls.hub + de la configuration ci-dessous) ; « Déconnexion » reste relayée. CSS/JS : /static/css/draco-barre.css, /static/js/vendor/draco-barre.js. v7.82.0 (dev/prod) : les href des onglets ne sont plus figés — l'hôte les injecte depuis sa config (draco_urls(), noms officiels @@ -105,6 +108,12 @@ repli si le module ne charge pas). */ window.DRACO_BAR_CONFIG = { current: "flowdeck", + /* Barre v0.3.0 (HUB-1) : le Hub n'a pas d'onglet — sa base + (draco_urls().hub : HUB_URL explicite, hôte de la requête, + dérivation par l'agent, défaut officiel) alimente les + liens du menu compte (Télécharger, À Propos, Aides, + Profil) via urls.hub. */ + urls: { hub: "{{ draco_urls().hub }}/" }, domain: (function () { try { return localStorage.getItem("draco_domain") || "pro"; } catch (e) { return "pro"; } })(), counts: {}, onAction: function (act, el) { diff --git a/static/css/draco-barre.css b/static/css/draco-barre.css index 8c9927c..c01145f 100644 --- a/static/css/draco-barre.css +++ b/static/css/draco-barre.css @@ -20,6 +20,10 @@ le clair via data-theme="light" héritait quand même du sombre système (piège constaté dans les copies vendangées de Kanbante/Flowdeck ; les re-vendanges de la v0.2.0 le corrigent). + v0.3.0 (HUB-1) : aucun style nouveau — les liens du Hub du menu + compte (Télécharger, À Propos, Aides, Profil) réutilisent + .draco-menu-item (déjà ancre-compatible : text-decoration none) + et le séparateur .draco-menu-sep du menu des applications. Jetons repris du prototype validé Console v7.2. Thème : clair par défaut, sombre via [data-theme="dark"] sur ou prefers-color-scheme si l'app intégratrice ne force rien diff --git a/static/js/vendor/draco-barre.js b/static/js/vendor/draco-barre.js index 4e77833..3de0f03 100644 --- a/static/js/vendor/draco-barre.js +++ b/static/js/vendor/draco-barre.js @@ -14,6 +14,21 @@ * contrat que les autres apps), entrée APP_LABELS ; l'onglet * (data-app="shaarit", après Kanbante, avant agent) est repris * automatiquement par la construction du menu de la marque. + * v0.3.0 (carte HUB-1, fusion #115) : le Hub, point central de la + * suite — nouvelle clé d'URL « hub » (jeton {{URL_HUB}} côté hôte, + * DRACO_BAR_CONFIG.urls.hub), défaut officiel + * https://hub.dracodev.net/, dérivation -dev hub-dev comme les + * sœurs. Le menu compte gagne trois vrais liens (patron + * buildAppsMenu : , classe draco-menu-item) — Télécharger + * → /telecharger, À Propos → /a-propos, Aides → + * /aide — et « Profil » devient lui aussi un lien, vers + * /profil (il n'est plus relayé aux hôtes : un seul Profil, + * celui du Hub). « Déconnexion » reste l'action relayée + * (data-compte-act="deconnexion" / onAction), inchangée. + * refreshMenuHrefs() resynchronise aussi les liens du Hub à + * l'ouverture des menus. Le Hub n'a pas d'onglet dans la barre : + * comme spark, sa clé est résolue et exposée via DRACO_BAR.urls, + * sans étape « href rendu » (voir « URL » 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 @@ -33,7 +48,8 @@ * kanbante: "https://kanbante.dracodev.net/", * shaarit: "https://shaarit.dracodev.net/", * agent: "https://agent.dracodev.net/", - * spark: "https://spark.dracodev.net/" + * spark: "https://spark.dracodev.net/", + * hub: "https://hub.dracodev.net/" * }, * onAction: function (act, el) { … } // l'app relaie les actions * } // qu'elle ne connaît pas @@ -67,6 +83,12 @@ * la marque et DRACO_BAR.urls. Même résolution pour shaarit (v0.2.0) : * explicite > dérivation -dev shaarit-dev > href rendu * ({{URL_SHAARIT}}) > défaut officiel. + * Cas hub (v0.3.0) : PAS d'onglet, donc pas d'étape « href rendu » — + * explicite (DRACO_BAR_CONFIG.urls.hub, alimenté par le jeton + * {{URL_HUB}} remplacé côté serveur par l'hôte) > dérivation -dev + * hub-dev sur hôte -dev > défaut officiel + * https://hub.dracodev.net/. La base résolue sert les quatre liens + * du menu compte (telecharger, a-propos, aide, profil). * 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…). @@ -141,6 +163,14 @@ * mais le menu affiche l'identité même sans gestionnaire hôte. * Accessibilité : vrais