Retire le texte de chantier theme rendu en haut de /recherche #52
@@ -25,22 +25,6 @@
|
|||||||
comportements de la SPA et ne sont pas rejoués ici.
|
comportements de la SPA et ne sont pas rejoués ici.
|
||||||
Sidebar statique (navigation de l'app) : les vaults, tags et
|
Sidebar statique (navigation de l'app) : les vaults, tags et
|
||||||
récents dynamiques vivent dans la SPA, pas sur cette page. -->
|
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>
|
<script>
|
||||||
/* Thème ObsiGate, étape 1 (synchrone, avant les feuilles) : poser
|
/* Thème ObsiGate, étape 1 (synchrone, avant les feuilles) : poser
|
||||||
data-theme = mode persisté AVANT la première peinture, sinon la
|
data-theme = mode persisté AVANT la première peinture, sinon la
|
||||||
|
|||||||
@@ -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