hero.js: midlertidige ?hero= brytere for å finne hva som forstyrrer hydreringen
lint-and-reload / lint (push) Successful in 2s

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
blandClaude Fable 5.1 committed 2026-10-21 15:09:47 +02:00
1 parent 3522130b27
commit 30ef37381b
1 file changed
+10 -2
+10 -2
View File
@@ -308,6 +308,7 @@ const CSS = `
`; `;
function ensureStyle() { function ensureStyle() {
if (DEBUG.has('nostyle')) return;
if (document.getElementById(STYLE_ID)) return; if (document.getElementById(STYLE_ID)) return;
const style = document.createElement('style'); const style = document.createElement('style');
style.id = STYLE_ID; style.id = STYLE_ID;
@@ -336,7 +337,7 @@ class WestraHero {
this.hero = container.closest('.hero') || container.parentElement; this.hero = container.closest('.hero') || container.parentElement;
// Where the module's custom properties go: an element the app // Where the module's custom properties go: an element the app
// never hydrates, so writing to it cannot disturb hydration. // never hydrates, so writing to it cannot disturb hydration.
this.host = document.body; this.host = DEBUG.has('nobody') ? document.createElement('div') : document.body;
this.reduced = window.matchMedia('(prefers-reduced-motion: reduce)'); this.reduced = window.matchMedia('(prefers-reduced-motion: reduce)');
this.dark = window.matchMedia('(prefers-color-scheme: dark)'); this.dark = window.matchMedia('(prefers-color-scheme: dark)');
@@ -357,7 +358,7 @@ class WestraHero {
this.mark = mark; this.mark = mark;
// Both inside the piece, and nothing outside it (see .westra-line). // Both inside the piece, and nothing outside it (see .westra-line).
this.container = container; this.container = container;
container.append(this.canvas, this.name); if (!DEBUG.has('nodom')) container.append(this.canvas, this.name);
this.width = 0; this.width = 0;
this.height = 1; this.height = 1;
@@ -601,6 +602,13 @@ class WestraHero {
} }
} }
// Temporary, to find what disturbs hydration on the live site:
// ?hero=off mounts nothing, ?hero=nostyle skips the stylesheet,
// ?hero=nobody skips the custom properties on <body>, ?hero=nodom
// adds nothing to the piece. Removed once known.
const DEBUG = new Set((new URLSearchParams(location.search).get('hero') || '').split(','));
export function mount(container) { export function mount(container) {
if (DEBUG.has('off')) return { stop() {} };
return new WestraHero(container); return new WestraHero(container);
} }