@agence-zef/astro 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@
6
6
  * dans le cookie `zef-consent` (redemandé si les catégories changent). Google Analytics 4
7
7
  * (`gaId`) n'est chargé qu'après accord sur « Mesure d'audience » ; un retrait efface ses
8
8
  * cookies `_ga*` et recharge la page. Un élément `data-zef-cookies` (lien « Gérer les cookies »
9
- * du footer) rouvre les préférences. Le choix est publié dans `window.zefConsent` et
9
+ * du footer) rouvre les préférences. Rien dans un cadre (aperçus du CMS). Le choix est publié dans `window.zefConsent` et
10
10
  * l'événement `zef:consent`. À placer une fois dans le gabarit, avant `</body>`. Habillage :
11
11
  * variables `--zef-*` (`@agence-zef/astro/styles.css`) ou `--cc-*` de vanilla-cookieconsent.
12
12
  */
@@ -187,6 +187,7 @@ const locale = Astro.currentLocale ?? "";
187
187
  });
188
188
  }
189
189
 
190
+ // Site ouvert dans un cadre (aperçus et vignettes du CMS) : pas de bandeau.
190
191
  const root = document.querySelector<HTMLElement>("[data-zef-cookie-banner]");
191
- if (root) start(root);
192
+ if (root && window.self === window.top) start(root);
192
193
  </script>
@@ -1,11 +1,19 @@
1
1
  ---
2
- /** Texte riche saisi dans le CMS (paragraphes, titres autorisés, listes, liens). */
2
+ /**
3
+ * Texte riche saisi dans le CMS (paragraphes, titres autorisés, listes, liens), dans un `<div>`.
4
+ * `inline` : texte riche en ligne d'un titre ou d'un sous-titre (`f.richtext({ inline: true })` :
5
+ * gras, italique, souligné, surligné, lien, retours à la ligne), rendu sans enveloppe, à placer
6
+ * dans la balise du titre : `<h1><RichText html={titre} inline /></h1>`.
7
+ */
8
+ import { inlineHtml } from "@agence-zef/schema";
9
+
3
10
  interface Props {
4
- html: string;
11
+ html: string | null | undefined;
5
12
  class?: string;
13
+ inline?: boolean;
6
14
  }
7
15
 
8
- const { html, class: className } = Astro.props;
16
+ const { html, class: className, inline = false } = Astro.props;
9
17
  ---
10
18
 
11
- {html && <div class={className} set:html={html} />}
19
+ {html && (inline ? <Fragment set:html={inlineHtml(html)} /> : <div class={className} set:html={html} />)}
@@ -1,10 +1,11 @@
1
1
  /*
2
2
  * Rendu à la demande (`rendering: "cached"`) : règles de cache des pages du CMS. Le CDN garde
3
- * une page un an ; une publication l'invalide par le tag `zef` (le CDN sert l'ancienne version
4
- * le temps d'en rendre une nouvelle, `swr`).
3
+ * une page un an ; une publication l'invalide par le tag `zef` et la visite suivante reçoit la
4
+ * nouvelle version. Pas de `swr` : il faisait servir l'ancienne version une dernière fois après
5
+ * la publication (« Voir la page » montrait l'ancienne page jusqu'au rechargement).
5
6
  */
6
7
 
7
8
  /** Tag posé sur toutes les réponses du site rendues depuis le CMS. */
8
9
  export const CACHE_TAG = "zef";
9
10
 
10
- export const PAGE_CACHE = { maxAge: 60 * 60 * 24 * 365, swr: 60 * 60 * 24 * 7 };
11
+ export const PAGE_CACHE = { maxAge: 60 * 60 * 24 * 365 };
@@ -52,6 +52,8 @@ if (!site || !section) Astro.response.status = 404;
52
52
  html { overflow: hidden; scrollbar-width: none; }
53
53
  body { pointer-events: none; }
54
54
  astro-dev-toolbar { display: none !important; }
55
+ /* Bandeau cookies et popups du gabarit : jamais dans une vignette. */
56
+ #cc-main, .zef-popup { display: none !important; }
55
57
  </style>
56
58
  <script>
57
59
  // La section seule : tout ce qui l'entoure dans le gabarit (header, footer…) est masqué.
package/dist/overlay.js CHANGED
@@ -37,6 +37,15 @@ export function startOverlay() {
37
37
  element.remove();
38
38
  element = container;
39
39
  }
40
+ else if (element && [...element.children].some((c) => c.tagName !== "BR")) {
41
+ // Texte posé à côté d'autres éléments (pictogramme, image) : il reçoit son propre
42
+ // `<span>`, sinon l'édition et la saisie en direct remplaceraient aussi ses voisins.
43
+ // Les `<br>` d'un texte sur plusieurs lignes ne comptent pas.
44
+ const span = document.createElement("span");
45
+ node.before(span);
46
+ span.append(node);
47
+ element = span;
48
+ }
40
49
  if (element && locations[0] && !element.hasAttribute(ATTR))
41
50
  element.setAttribute(ATTR, locations[0]);
42
51
  }
@@ -450,8 +459,10 @@ export function startOverlay() {
450
459
  const element = fieldElement(section, path);
451
460
  if (!element || element === editing)
452
461
  return;
453
- if (info(element)?.kind === "richtext")
454
- element.innerHTML = value;
462
+ if (info(element)?.kind === "richtext") {
463
+ // Espaces répétés (titre en ligne) : gardés comme une fois enregistrés.
464
+ element.innerHTML = value.replace(/(^|>)([^<]*)/g, (_, open, text) => open + text.replace(/ {2,}/g, (spaces) => ` ${"&nbsp;".repeat(spaces.length - 1)}`));
465
+ }
455
466
  else
456
467
  element.textContent = value;
457
468
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agence-zef/astro",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Intégration Astro du CMS ZEF : routes, rendu des sections, aperçu, composants réutilisables sans style.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -86,8 +86,8 @@
86
86
  "dependencies": {
87
87
  "jiti": "^2.6.1",
88
88
  "vanilla-cookieconsent": "3.1.0",
89
- "@agence-zef/schema": "0.8.0",
90
- "@agence-zef/sdk": "0.8.0"
89
+ "@agence-zef/schema": "0.9.0",
90
+ "@agence-zef/sdk": "0.9.0"
91
91
  },
92
92
  "homepage": "https://agence-zef.fr",
93
93
  "scripts": {