Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8403b4fa08 | ||
|
|
757e32229d | ||
|
|
4c995f4c65 | ||
|
|
c950940e22 | ||
|
|
858dfd22e1 | ||
|
|
ab4a4dbd9d | ||
|
|
0bc1aca9bc | ||
|
|
515727ab9b | ||
|
|
3f375bca2a | ||
|
|
12a29b29f6 | ||
|
|
8feab0188c |
+6
-1
@@ -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).
|
||||
|
||||
> **En cours de développement** : les changements à venir sont listés dans la section
|
||||
> [Unreleased](#unreleased). La dernière version livrée est **2.82.3**.
|
||||
> [Unreleased](#unreleased). La dernière version livrée est **2.82.4**.
|
||||
|
||||
---
|
||||
|
||||
@@ -14,6 +14,11 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
---
|
||||
|
||||
## [2.82.4] — 2026-10-28
|
||||
|
||||
- **Recherche (PR #52)** : texte parasite du mécanisme de thème retiré du haut de la page `/recherche` (lignes 28-43 de `frontend/recherche.html`, hors commentaire).
|
||||
- **Démarrage (PR #53)** : écran de chargement plein écran `#boot-splash` retiré au démarrage d'ObsiGate (CSS, div et script de pilotage), sans écran de remplacement.
|
||||
|
||||
## [2.82.3] — 2026-10-28
|
||||
|
||||
- **Recherche (PR #49)** : la page `/recherche` applique désormais le thème ObsiGate.
|
||||
|
||||
Generated
+1
-1
@@ -2626,7 +2626,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "obsigate-desktop"
|
||||
version = "2.82.3"
|
||||
version = "2.82.4"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"env_logger",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "obsigate-desktop"
|
||||
version = "2.82.3"
|
||||
version = "2.82.4"
|
||||
description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian"
|
||||
authors = ["Bruno Charest"]
|
||||
edition = "2021"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json",
|
||||
"productName": "ObsiGate",
|
||||
"version": "2.82.3",
|
||||
"version": "2.82.4",
|
||||
"identifier": "com.obsigate.desktop",
|
||||
"build": {
|
||||
"frontendDist": "../frontend",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
# ObsiGate — Roadmap
|
||||
|
||||
> **Version :** 2.82.3 | **Dernière mise à jour :** 2026-10-28
|
||||
> **Version :** 2.82.4 | **Dernière mise à jour :** 2026-10-28
|
||||
> **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact
|
||||
> vers les fonctionnalités livrées.
|
||||
> - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)**
|
||||
|
||||
@@ -25,22 +25,6 @@
|
||||
comportements de la SPA et ne sont pas rejoués ici.
|
||||
Sidebar statique (navigation de l'app) : les vaults, tags et
|
||||
récents dynamiques vivent dans la SPA, pas sur cette page. -->
|
||||
Thème (défaut 4) : le thème ObsiGate n'est PAS une préférence
|
||||
serveur — il vit dans localStorage, lu par la SPA au démarrage
|
||||
(frontend/js/ui.js initTheme : mode ; frontend/js/sync.js
|
||||
init() -> themes.js initThemes : clé + mode). Étape 1 ci-dessous
|
||||
(script synchrone en tête, avant les feuilles) : pose
|
||||
data-theme = mode persisté (obsigate-theme-mode, repli
|
||||
obsigate-theme historique quand il valait déjà un mode, sinon
|
||||
'dark', le défaut SPA) pour que la première peinture soit déjà
|
||||
dans le bon mode clair/sombre. Étape 2 en fin de page (module
|
||||
différé) : initThemes() de themes.js applique la palette
|
||||
complète — 16 thèmes intégrés, modes high-contrast/sepia
|
||||
générés, thèmes personnalisés — via variables inline sur :root,
|
||||
exactement comme la SPA. data-theme="dark" sur <html> n'est
|
||||
plus que le repli sans JS. Aucun endpoint serveur, aucune
|
||||
police externe ajoutée (la CSP stricte de /recherche et le
|
||||
repli typographique système sont inchangés).
|
||||
<script>
|
||||
/* Thème ObsiGate, étape 1 (synchrone, avant les feuilles) : poser
|
||||
data-theme = mode persisté AVANT la première peinture, sinon la
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "obsigate",
|
||||
"version": "2.82.3",
|
||||
"version": "2.82.4",
|
||||
"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",
|
||||
"directories": {
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
"""Tests — page /recherche sans texte parasite dans <head>.
|
||||
|
||||
Régression du texte de chantier resté hors commentaire dans
|
||||
``frontend/recherche.html`` : le commentaire de tête se fermait, puis
|
||||
un paragraphe de description du mécanisme de thème suivait en texte
|
||||
brut dans ``<head>`` — le navigateur le rendait tout en haut de la
|
||||
page, au-dessus de la barre header. Le correctif supprime ce texte
|
||||
du rendu (il n'est pas remis en commentaire : un grep doit donner
|
||||
0 occurrence dans les gabarits) sans toucher au mécanisme lui-même,
|
||||
déjà documenté par les commentaires des scripts étape 1 / étape 2.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
FRONTEND = ROOT / "frontend"
|
||||
|
||||
|
||||
def _html() -> str:
|
||||
return (FRONTEND / "recherche.html").read_text(encoding="utf-8")
|
||||
|
||||
|
||||
def test_pas_de_texte_brut_dans_head():
|
||||
"""Entre les balises et les scripts, <head> ne contient aucun
|
||||
texte rendu : tout descriptif vit dans un commentaire ou dans un
|
||||
commentaire de script, jamais en texte brut."""
|
||||
head = _html().split("</head>")[0]
|
||||
sans_commentaires = re.sub(r"<!--.*?-->", "", head, flags=re.DOTALL)
|
||||
sans_scripts = re.sub(
|
||||
r"<script.*?</script>", "", sans_commentaires, flags=re.DOTALL
|
||||
)
|
||||
sans_titre = re.sub(
|
||||
r"<title>.*?</title>", "", sans_scripts, flags=re.DOTALL
|
||||
)
|
||||
texte = re.sub(r"<[^>]+>", "", sans_titre).strip()
|
||||
assert texte == "", f"texte brut rendu dans <head> : {texte[:200]!r}"
|
||||
|
||||
|
||||
def test_mecanisme_theme_intact():
|
||||
"""Le retrait du texte ne touche ni l'étape 1 (script synchrone
|
||||
avant les feuilles) ni l'étape 2 (initThemes différé)."""
|
||||
html = _html()
|
||||
assert html.index("<script>") < html.index('<link rel="stylesheet"')
|
||||
assert "obsigate-theme-mode" in html
|
||||
assert "import('/static/js/themes.js')" in html
|
||||
assert "initThemes" in html
|
||||
assert '<html lang="fr" data-theme="dark">' in html
|
||||
assert '<script src="/static/js/recherche.js"></script>' in html
|
||||
Reference in New Issue
Block a user