Merge pull request 'ObsiGate 2.83.3 : barre v0.3.0 — liens Hub du menu compte (HUB-1)' (#63) from hub1-barre-v030 into main
CI / lint (push) Successful in 1m31s
CI / security (push) Successful in 22s
CI / test (push) Successful in 3m55s
CI / build (push) Successful in 11s
CI / e2e (push) Successful in 17m28s

This commit was merged in pull request #63.
This commit is contained in:
2026-11-04 19:48:18 -05:00
16 changed files with 170 additions and 31 deletions
+1
View File
@@ -130,6 +130,7 @@ DEEPSEEK_MODEL=deepseek-chat
# DRACO_TIKTAK_URL=https://tiktak.dracodev.net # DRACO_TIKTAK_URL=https://tiktak.dracodev.net
# DRACO_KANBANTE_URL=https://kanbante.dracodev.net # DRACO_KANBANTE_URL=https://kanbante.dracodev.net
# DRACO_SHAARIT_URL=https://shaarit.dracodev.net # DRACO_SHAARIT_URL=https://shaarit.dracodev.net
# DRACO_HUB_URL=https://hub.dracodev.net
# DRACO_GITEA_URL=https://git.dracodev.net # DRACO_GITEA_URL=https://git.dracodev.net
# ── Fusion — émission d'événements vers le service d'agents (#220) ── # ── Fusion — émission d'événements vers le service d'agents (#220) ──
+7 -1
View File
@@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
> **En cours de développement** : les changements à venir sont listés dans la section > **En cours de développement** : les changements à venir sont listés dans la section
> [Unreleased](#unreleased). La dernière version livrée est **2.83.2**. > [Unreleased](#unreleased). La dernière version livrée est **2.83.3**.
--- ---
@@ -14,6 +14,12 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
--- ---
## [2.83.3] — 2026-11-04
- **Barre commune v0.3.0 — liens Hub du menu compte (HUB-1, fusion #115)** : `frontend/draco-barre.js` et `frontend/draco-barre.css` re-vendangés **verbatim** depuis dracodev-commons v0.3.0 (branche `hub-menu-compte-v0-3-0`, PR commons #9). Le menu compte gagne les liens **Télécharger**, **À Propos**, **Aides** et **Profil** (devenu un lien, plus un relais) vers le Hub. Branchement hôte : `backend/draco_config.py` gagne la clé `hub` (défaut officiel `https://hub.dracodev.net`, variable `DRACO_HUB_URL`, dérivation `-dev` → `hub-dev` depuis l'hôte de l'agent), servie dans `window.DRACO_URLS` ; `frontend/index.html` la passe en `urls.hub` de `DRACO_BAR_CONFIG`. « Déconnexion » reste relayée, inchangée. Aucun nouvel onglet : le Hub n'apparaît que dans le menu compte.
---
## [2.83.2] — 2026-11-04 ## [2.83.2] — 2026-11-04
- **Recherche fédérée — ShaarIt, 5e source de « Rechercher partout »** (demande de Bruno, 2026-11-04 ; contrat dracodev-commons v0.2.1, `contrats/recherche-federee.md`) : `frontend/js/recherche.js` **re-vendangé verbatim** depuis la source canonique de commons (`ui/recherche/`) — ShaarIt devient une source de la page `/recherche` comme les autres (bases prod/dev, onglet, normaliseur : lien profond canonique `{base}shaare/<shorturl>`, contexte « Bookmark · privé · tags », repli recherche native `/?q=`). Le fichier reste strictement identique chez les cinq hôtes. - **Recherche fédérée — ShaarIt, 5e source de « Rechercher partout »** (demande de Bruno, 2026-11-04 ; contrat dracodev-commons v0.2.1, `contrats/recherche-federee.md`) : `frontend/js/recherche.js` **re-vendangé verbatim** depuis la source canonique de commons (`ui/recherche/`) — ShaarIt devient une source de la page `/recherche` comme les autres (bases prod/dev, onglet, normaliseur : lien profond canonique `{base}shaare/<shorturl>`, contexte « Bookmark · privé · tags », repli recherche native `/?q=`). Le fichier reste strictement identique chez les cinq hôtes.
+3 -3
View File
@@ -4,7 +4,7 @@
**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive. **Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.
[![Version](https://img.shields.io/badge/Version-2.83.2-blue.svg)]() [![Version](https://img.shields.io/badge/Version-2.83.3-blue.svg)]()
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/)
[![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/)
@@ -977,8 +977,8 @@ Ce projet est sous licence **MIT** — voir le fichier [LICENSE](LICENSE) pour l
## 📝 Changelog ## 📝 Changelog
Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.83.2). Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.83.3).
--- ---
*Projet : ObsiGate | Version : 2.83.2 | Dernière mise à jour : Septembre 2026* *Projet : ObsiGate | Version : 2.83.3 | Dernière mise à jour : Septembre 2026*
+3 -3
View File
@@ -2,7 +2,7 @@
**Ultra-light web gateway for your Obsidian vaults** — Access, browse, and search all your Obsidian notes from any device via a modern, responsive web interface. **Ultra-light web gateway for your Obsidian vaults** — Access, browse, and search all your Obsidian notes from any device via a modern, responsive web interface.
[![Version](https://img.shields.io/badge/Version-2.83.2-blue.svg)]() [![Version](https://img.shields.io/badge/Version-2.83.3-blue.svg)]()
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/)
[![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/)
@@ -1152,8 +1152,8 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE)
## 📝 Changelog ## 📝 Changelog
See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.83.2). See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.83.3).
--- ---
*Project: ObsiGate | Version: 2.83.2 | Last updated: September 2026* *Project: ObsiGate | Version: 2.83.3 | Last updated: September 2026*
+1 -1
View File
@@ -1 +1 @@
2.83.2 2.83.3
+6
View File
@@ -18,6 +18,9 @@ Variables (voir ``.env.example``) :
- ``DRACO_TIKTAK_URL`` — base publique de TikTak. - ``DRACO_TIKTAK_URL`` — base publique de TikTak.
- ``DRACO_KANBANTE_URL`` — base publique de Kanbante. - ``DRACO_KANBANTE_URL`` — base publique de Kanbante.
- ``DRACO_SHAARIT_URL`` — base publique de ShaarIt (barre v0.2.0). - ``DRACO_SHAARIT_URL`` — base publique de ShaarIt (barre v0.2.0).
- ``DRACO_HUB_URL`` — base publique du Hub (barre v0.3.0,
HUB-1 : liens Télécharger / À Propos / Aides / Profil du menu
compte ; le Hub n'a pas d'onglet dans la barre).
- ``DRACO_GITEA_URL`` — base publique de Gitea (les cartes - ``DRACO_GITEA_URL`` — base publique de Gitea (les cartes
Kanbante *sont* des issues Gitea, contrat liens-profonds) ; Kanbante *sont* des issues Gitea, contrat liens-profonds) ;
distincte de ``OBSIGATE_GITEA_URL`` (source connectée de distincte de ``OBSIGATE_GITEA_URL`` (source connectée de
@@ -52,6 +55,7 @@ DEFAUTS: dict[str, str] = {
"tiktak": "https://tiktak.dracodev.net", "tiktak": "https://tiktak.dracodev.net",
"kanbante": "https://kanbante.dracodev.net", "kanbante": "https://kanbante.dracodev.net",
"shaarit": "https://shaarit.dracodev.net", "shaarit": "https://shaarit.dracodev.net",
"hub": "https://hub.dracodev.net",
"gitea": "https://git.dracodev.net", "gitea": "https://git.dracodev.net",
} }
@@ -62,6 +66,7 @@ _VARIABLES: dict[str, str] = {
"tiktak": "DRACO_TIKTAK_URL", "tiktak": "DRACO_TIKTAK_URL",
"kanbante": "DRACO_KANBANTE_URL", "kanbante": "DRACO_KANBANTE_URL",
"shaarit": "DRACO_SHAARIT_URL", "shaarit": "DRACO_SHAARIT_URL",
"hub": "DRACO_HUB_URL",
"gitea": "DRACO_GITEA_URL", "gitea": "DRACO_GITEA_URL",
} }
@@ -75,6 +80,7 @@ _SLUGS_HOTE: dict[str, str] = {
"tiktak": "tiktak", "tiktak": "tiktak",
"kanbante": "kanbante", "kanbante": "kanbante",
"shaarit": "shaarit", "shaarit": "shaarit",
"hub": "hub",
} }
# Premier label de l'hôte de l'agent : ``agent`` suivi d'un suffixe # Premier label de l'hôte de l'agent : ``agent`` suivi d'un suffixe
+1 -1
View File
@@ -2626,7 +2626,7 @@ dependencies = [
[[package]] [[package]]
name = "obsigate-desktop" name = "obsigate-desktop"
version = "2.83.2" version = "2.83.3"
dependencies = [ dependencies = [
"chrono", "chrono",
"env_logger", "env_logger",
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "obsigate-desktop" name = "obsigate-desktop"
version = "2.83.2" version = "2.83.3"
description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian" description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian"
authors = ["Bruno Charest"] authors = ["Bruno Charest"]
edition = "2021" edition = "2021"
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json", "$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json",
"productName": "ObsiGate", "productName": "ObsiGate",
"version": "2.83.2", "version": "2.83.3",
"identifier": "com.obsigate.desktop", "identifier": "com.obsigate.desktop",
"build": { "build": {
"frontendDist": "../frontend", "frontendDist": "../frontend",
+1 -1
View File
@@ -1,6 +1,6 @@
# ObsiGate — Roadmap # ObsiGate — Roadmap
> **Version :** 2.83.2 | **Dernière mise à jour :** 2026-11-04 > **Version :** 2.83.3 | **Dernière mise à jour :** 2026-11-04
> **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact > **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact
> vers les fonctionnalités livrées. > vers les fonctionnalités livrées.
> - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)** > - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)**
+4
View File
@@ -20,6 +20,10 @@
le clair via data-theme="light" héritait quand même du sombre le clair via data-theme="light" héritait quand même du sombre
système (piège constaté dans les copies vendangées de système (piège constaté dans les copies vendangées de
Kanbante/Flowdeck ; les re-vendanges de la v0.2.0 le corrigent). 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. Jetons repris du prototype validé Console v7.2.
Thème : clair par défaut, sombre via [data-theme="dark"] sur <html> Thème : clair par défaut, sombre via [data-theme="dark"] sur <html>
ou prefers-color-scheme si l'app intégratrice ne force rien ou prefers-color-scheme si l'app intégratrice ne force rien
+82 -11
View File
@@ -14,6 +14,21 @@
* contrat que les autres apps), entrée APP_LABELS ; l'onglet * contrat que les autres apps), entrée APP_LABELS ; l'onglet
* (data-app="shaarit", après Kanbante, avant agent) est repris * (data-app="shaarit", après Kanbante, avant agent) est repris
* automatiquement par la construction du menu de la marque. * 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 : <a href>, classe draco-menu-item) — Télécharger
* → <hub>/telecharger, À Propos → <hub>/a-propos, Aides →
* <hub>/aide — et « Profil » devient lui aussi un lien, vers
* <hub>/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 * 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 * (patron validé par le prototype — les onclick du HTML généré sont
@@ -33,7 +48,8 @@
* kanbante: "https://kanbante.dracodev.net/", * kanbante: "https://kanbante.dracodev.net/",
* shaarit: "https://shaarit.dracodev.net/", * shaarit: "https://shaarit.dracodev.net/",
* agent: "https://agent.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 * onAction: function (act, el) { … } // l'app relaie les actions
* } // qu'elle ne connaît pas * } // 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) : * la marque et DRACO_BAR.urls. Même résolution pour shaarit (v0.2.0) :
* explicite > dérivation -dev shaarit-dev > href rendu * explicite > dérivation -dev shaarit-dev > href rendu
* ({{URL_SHAARIT}}) > défaut officiel. * ({{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), * Actions émises (data-act) : rail, palette, domaine (data-dom),
* alertes, spark, rappel-entete. L'app intégratrice décide de chacune * alertes, spark, rappel-entete. L'app intégratrice décide de chacune
* (ouvrir la palette, le panneau Spark, changer de domaine…). * (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. * mais le menu affiche l'identité même sans gestionnaire hôte.
* Accessibilité : vrais <button>, aria-haspopup / aria-expanded, * Accessibilité : vrais <button>, aria-haspopup / aria-expanded,
* role="menu" / "menuitem", fermeture par Échap et clic extérieur. * role="menu" / "menuitem", fermeture par Échap et clic extérieur.
* Menu compte (v0.3.0) — Profil n'est PLUS relayé : c'est un lien
* vers <hub>/profil, comme Télécharger / À Propos / Aides (liens
* Hub, data-hub-link, href resynchronisés à chaque ouverture via
* refreshCompteHrefs / refreshMenuHrefs). Seule « Déconnexion »
* reste relayée à l'hôte (data-compte-act="deconnexion"), inchangée.
* Les hôtes qui traitaient onAction("profil") (Kanbante → /profile)
* voient ce comportement remplacé par le lien Hub — décision du
* plan Hub : un seul Profil, celui du Hub.
*/ */
(function () { (function () {
"use strict"; "use strict";
@@ -155,7 +185,8 @@
kanbante: "https://kanbante.dracodev.net/", kanbante: "https://kanbante.dracodev.net/",
shaarit: "https://shaarit.dracodev.net/", shaarit: "https://shaarit.dracodev.net/",
agent: "https://agent.dracodev.net/", agent: "https://agent.dracodev.net/",
spark: "https://spark.dracodev.net/" spark: "https://spark.dracodev.net/",
hub: "https://hub.dracodev.net/"
}; };
/* Dérivation -dev (v0.1.6) — appliquée UNIQUEMENT quand l'hôte courant /* Dérivation -dev (v0.1.6) — appliquée UNIQUEMENT quand l'hôte courant
@@ -168,7 +199,8 @@
tiktak: "https://tiktak-dev.dracodev.net/", tiktak: "https://tiktak-dev.dracodev.net/",
kanbante: "https://kanbante-dev.dracodev.net/", kanbante: "https://kanbante-dev.dracodev.net/",
shaarit: "https://shaarit-dev.dracodev.net/", shaarit: "https://shaarit-dev.dracodev.net/",
agent: "https://agent-dev.dracodev.net/" agent: "https://agent-dev.dracodev.net/",
hub: "https://hub-dev.dracodev.net/"
}; };
var APP_LABELS = { var APP_LABELS = {
@@ -307,6 +339,28 @@
menu.querySelectorAll(".draco-apps-item").forEach(function (a) { menu.querySelectorAll(".draco-apps-item").forEach(function (a) {
if (a.dataset.app && resolvedUrls[a.dataset.app]) a.setAttribute("href", resolvedUrls[a.dataset.app]); if (a.dataset.app && resolvedUrls[a.dataset.app]) a.setAttribute("href", resolvedUrls[a.dataset.app]);
}); });
/* v0.3.0 : les liens du Hub (menu compte) sont resynchronisés
* eux aussi à l'ouverture d'un menu, pour refléter setUrls et
* la dérivation -dev même s'ils ont été construits avant. */
refreshCompteHrefs();
}
/* Liens du Hub dans le menu compte (v0.3.0) : chemin → libellé.
* « Profil » est le quatrième lien (vers <hub>/profil) ; il
* remplace l'ancien item relayé « profil ». */
var HUB_LINKS = [
["telecharger", "Télécharger"],
["a-propos", "À Propos"],
["aide", "Aides"],
["profil", "Profil"]
];
function hubHref(path) {
return withSlash(resolvedUrls.hub || DEFAULT_URLS.hub) + path;
}
function refreshCompteHrefs() {
if (!compteMenu) return;
compteMenu.querySelectorAll("[data-hub-link]").forEach(function (a) {
a.setAttribute("href", hubHref(a.getAttribute("data-hub-link")));
});
} }
function togglePopup(menu, btn, force) { function togglePopup(menu, btn, force) {
if (!menu) return; if (!menu) return;
@@ -429,10 +483,14 @@
if (!appsMenu.hidden) lastOpener = brand; if (!appsMenu.hidden) lastOpener = brand;
} }
/* Menu compte (v0.1.6) — en-tête d'identité + Profil / Déconnexion /* Menu compte (v0.1.6 ; v0.3.0 pour les liens) — en-tête
* relayés à l'hôte. L'en-tête est rafraîchi à chaque ouverture, pour * d'identité, puis les liens du Hub (Télécharger, À Propos,
* refléter un title posé après coup par l'hôte (ex. ObsiGate, qui * Aides, Profil — vrais <a href>, même patron que le menu des
* remplit l'avatar depuis /api/auth/me après chargement). */ * applications), un séparateur, puis « Déconnexion » relayée à
* l'hôte. L'en-tête et les href sont rafraîchis à chaque
* ouverture, pour refléter un title posé après coup par l'hôte
* (ex. ObsiGate, qui remplit l'avatar depuis /api/auth/me après
* chargement) et la résolution d'URL la plus récente. */
function buildCompteMenu() { function buildCompteMenu() {
if (!bar || !avatarBtn || compteMenu) return; if (!bar || !avatarBtn || compteMenu) return;
compteMenu = document.createElement("div"); compteMenu = document.createElement("div");
@@ -443,15 +501,26 @@
var head = document.createElement("div"); var head = document.createElement("div");
head.className = "draco-compte-nom"; head.className = "draco-compte-nom";
compteMenu.appendChild(head); compteMenu.appendChild(head);
[["profil", "Profil"], ["deconnexion", "Déconnexion"]].forEach(function (pair) { HUB_LINKS.forEach(function (pair) {
var a = document.createElement("a");
a.className = "draco-menu-item";
a.href = hubHref(pair[0]);
a.setAttribute("data-hub-link", pair[0]);
a.setAttribute("role", "menuitem");
a.textContent = pair[1];
compteMenu.appendChild(a);
});
var sep = document.createElement("div");
sep.className = "draco-menu-sep";
sep.setAttribute("aria-hidden", "true");
compteMenu.appendChild(sep);
var b = document.createElement("button"); var b = document.createElement("button");
b.type = "button"; b.type = "button";
b.className = "draco-menu-item"; b.className = "draco-menu-item";
b.setAttribute("data-compte-act", pair[0]); b.setAttribute("data-compte-act", "deconnexion");
b.setAttribute("role", "menuitem"); b.setAttribute("role", "menuitem");
b.textContent = pair[1]; b.textContent = "Déconnexion";
compteMenu.appendChild(b); compteMenu.appendChild(b);
});
bar.appendChild(compteMenu); bar.appendChild(compteMenu);
} }
function refreshCompteMenu() { function refreshCompteMenu() {
@@ -459,6 +528,7 @@
var head = compteMenu.querySelector(".draco-compte-nom"); var head = compteMenu.querySelector(".draco-compte-nom");
var name = displayName(); var name = displayName();
if (head) head.textContent = name || "Compte"; if (head) head.textContent = name || "Compte";
refreshCompteHrefs();
} }
function toggleCompteMenu(force) { function toggleCompteMenu(force) {
buildCompteMenu(); buildCompteMenu();
@@ -555,6 +625,7 @@
resolvedUrls = resolveUrls(); resolvedUrls = resolveUrls();
window.DRACO_BAR.urls = resolvedUrls; window.DRACO_BAR.urls = resolvedUrls;
applyUrls(resolvedUrls); applyUrls(resolvedUrls);
refreshCompteHrefs();
} }
}; };
+14 -3
View File
@@ -268,10 +268,14 @@
<!-- Main Application (wrapped for show/hide) --> <!-- Main Application (wrapped for show/hide) -->
<!-- Barre d'apps commune dracodev — Fusion #215 (ACC-1.1). <!-- Barre d'apps commune dracodev — Fusion #215 (ACC-1.1).
Snippet FIGÉ vendangé depuis Projets/dracodev-commons v0.2.0 Snippet FIGÉ vendangé depuis Projets/dracodev-commons v0.3.0
(ui/barre-apps/, commit 70c837a de la branche (ui/barre-apps/, branche hub-menu-compte-v0-3-0 de la PR
shaarit-phase3-barre-contrats) : ne pas modifier la structure commons #9 — HUB-1, fusion #115) : ne pas modifier la structure
ici ; toute évolution passe par une nouvelle version de commons. 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 (vers le Hub résolu par
backend/draco_config, clé "hub", passé en urls.hub de la
configuration ci-dessous) ; « Déconnexion » reste relayée.
v0.2.0 : 6e onglet ShaarIt (data-app="shaarit", après Kanbante, v0.2.0 : 6e onglet ShaarIt (data-app="shaarit", après Kanbante,
avant l'onglet agent) — son href porte le défaut officiel et avant l'onglet agent) — son href porte le défaut officiel et
la réécriture DRACO_URLS ci-dessous le résout comme les la réécriture DRACO_URLS ci-dessous le résout comme les
@@ -376,6 +380,13 @@
})(); })();
window.DRACO_BAR_CONFIG = { window.DRACO_BAR_CONFIG = {
current: "obsigate", current: "obsigate",
/* Barre v0.3.0 (HUB-1) : la base du Hub vient de
window.DRACO_URLS (clé "hub" de backend/draco_config :
DRACO_HUB_URL explicite, dérivation -dev, défaut
officiel) — le Hub n'a pas d'onglet, c'est par
urls.hub que le menu compte construit ses liens
Télécharger / À Propos / Aides / Profil. */
urls: (function () { var u = window.DRACO_URLS && window.DRACO_URLS.hub; return u ? { hub: u.replace(/\/$/, "") + "/" } : {}; })(),
domain: (function () { try { return localStorage.getItem("draco_domain") || "pro"; } catch (e) { return "pro"; } })(), domain: (function () { try { return localStorage.getItem("draco_domain") || "pro"; } catch (e) { return "pro"; } })(),
counts: {}, counts: {},
onAction: function (act, el) { onAction: function (act, el) {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "obsigate", "name": "obsigate",
"version": "2.83.2", "version": "2.83.3",
"description": "**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.", "description": "**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.",
"main": "patch.js", "main": "patch.js",
"directories": { "directories": {
+23
View File
@@ -78,6 +78,29 @@ def test_barre_v020_onglet_shaarit_et_garde_data_theme():
assert 'shaarit: "https://shaarit-dev.dracodev.net/"' in js assert 'shaarit: "https://shaarit-dev.dracodev.net/"' in js
def test_barre_v030_liens_hub_menu_compte():
# Barre v0.3.0 (dracodev-commons, HUB-1 / fusion #115) : clé
# urls.hub (défaut officiel + dérivation hub-dev), liens du menu
# compte (Télécharger, À Propos, Aides, Profil-lien) construits
# par le JS vendangé, et branchement hôte : index.html passe la
# base Hub de window.DRACO_URLS (backend/draco_config) en
# urls.hub de DRACO_BAR_CONFIG.
js = (FRONTEND / "draco-barre.js").read_text(encoding="utf-8")
assert 'hub: "https://hub.dracodev.net/"' in js
assert 'hub: "https://hub-dev.dracodev.net/"' in js
assert '"telecharger", "Télécharger"' in js
assert '"a-propos", "À Propos"' in js
assert '"aide", "Aides"' in js
assert '"profil", "Profil"' in js
assert 'data-hub-link' in js
# Profil n'est plus un item relayé ; Déconnexion le reste.
assert 'data-compte-act", "profil"' not in js
assert 'data-compte-act", "deconnexion"' in js
html = _index()
assert "window.DRACO_URLS.hub" in html
assert "v0.3.0" in html
def test_panneau_spark_integre_218(): def test_panneau_spark_integre_218():
# #218 : le bouton Spark de la barre ouvre le panneau de l'agent # #218 : le bouton Spark de la barre ouvre le panneau de l'agent
# commun (mêmes assets partagés que TikTak / Flowdeck / Kanbante). # commun (mêmes assets partagés que TikTak / Flowdeck / Kanbante).
+17
View File
@@ -20,6 +20,7 @@ def env_propre(monkeypatch):
for nom in ( for nom in (
"DRACO_AGENT_URL", "DRACO_OBSIGATE_URL", "DRACO_FLOWDECK_URL", "DRACO_AGENT_URL", "DRACO_OBSIGATE_URL", "DRACO_FLOWDECK_URL",
"DRACO_TIKTAK_URL", "DRACO_KANBANTE_URL", "DRACO_SHAARIT_URL", "DRACO_TIKTAK_URL", "DRACO_KANBANTE_URL", "DRACO_SHAARIT_URL",
"DRACO_HUB_URL",
"DRACO_GITEA_URL", "DRACO_GITEA_URL",
"AGENT_EVENEMENTS_URL", "AGENT_EVENEMENTS_URL",
): ):
@@ -52,6 +53,22 @@ def test_shaarit_defaut_et_derivation(env_propre):
assert draco_config.app_url("shaarit") == "https://bm.example.net" assert draco_config.app_url("shaarit") == "https://bm.example.net"
def test_hub_defaut_et_derivation(env_propre):
"""Barre v0.3.0 (HUB-1) : le Hub suit le même mécanisme que les
autres sœurs — défaut officiel, dérivation -dev depuis l'hôte
de l'agent, variable explicite prioritaire ; il est servi dans
urls_publiques() (window.DRACO_URLS) pour les liens du menu
compte, sans onglet dans la barre."""
assert draco_config.app_url("hub") == "https://hub.dracodev.net"
env_propre.setenv(
"AGENT_EVENEMENTS_URL", "https://agent-dev.dracodev.net/api/v1/evenements")
assert draco_config.app_url("hub") == "https://hub-dev.dracodev.net"
assert draco_config.urls_publiques()["hub"] == \
"https://hub-dev.dracodev.net"
env_propre.setenv("DRACO_HUB_URL", "https://hub.example.net/")
assert draco_config.app_url("hub") == "https://hub.example.net"
def test_agent_derive_des_evenements(env_propre): def test_agent_derive_des_evenements(env_propre):
"""Sans DRACO_AGENT_URL, l'origine suit AGENT_EVENEMENTS_URL — """Sans DRACO_AGENT_URL, l'origine suit AGENT_EVENEMENTS_URL —
la configuration réelle du poste (dev inclus).""" la configuration réelle du poste (dev inclus)."""