diff --git a/docs/STATUS.md b/docs/STATUS.md index 691af78..1d7c113 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -10,7 +10,11 @@ **Nicht geprüft:** Safari und echtes iOS-Gerät, H.264 im Testbrowser (Playwright-Chromium spielt nur WebM), Lighthouse mit Video, Upload auf dem Hosting (PHP-Limits). -**Nächster Schritt:** Release, dann auf kant-it.de hochladen und in der Hero-Sektion als Hintergrundvideo wählen. +**Durchsicht vor dem Release (05.11.2026):** CSP (`default-src 'self'` deckt die Videos), Sicherung, Website-Paket, Auslieferung mit Range und Schema-Migration passen. Nachgebessert: „Video“, „Video anhalten“ und „Video abspielen“ fehlten im Wörterbuch von `kant_t` – auf `/en/`- und türkischen Seiten stand der Knopf deutsch; jetzt Englisch und Türkisch (Französisch fällt wie sonst auf Englisch zurück). `video.js` überspringt ein `data-video-loop` ohne Knopf (etwa aus „Eigenes HTML“), statt mit einem Fehler alle folgenden Videos stehen zu lassen. Im Design-Panel stehen beim Video Größe und Abstand vorn statt der Textgruppe. + +**Geprüft:** PHPUnit 686/686 grün unter PHP 8.4 (auch `UpdaterTest`) und 8.2 (dort nur die bekannte Warnung in `UpdaterTest::testTrackedEnvironmentFromAnOlderTagCannotReplaceInstallationSettings`); php-cs-fixer ohne Befund, `lint:twig`, `npm test` 41/41, `test:editor` grün, `test:browser` gegen 8080 grün (die zwei bekannten Kontrastbefunde auf `/grundlagen`, Inhalt). Lokale `var/cms.db` auf `Version20261104000100` migriert. + +**Nächster Schritt:** Release 1.37.0, dann auf kant-it.de hochladen und in der Hero-Sektion als Hintergrundvideo wählen. ## Sicherheitsupdate symfony/mime, Release 1.36.2 (03.11.2026) diff --git a/public/assets/design-panel.js b/public/assets/design-panel.js index 6b12809..4cac07b 100644 --- a/public/assets/design-panel.js +++ b/public/assets/design-panel.js @@ -513,7 +513,7 @@ export function createDesignPanel({ schema, onChange, onSavePreset, getBlock, ge }); panel.append(searchLabel, search, found); - const priority = ['image', 'gallery', 'logos'].includes(block.type) ? ['image', 'size', 'spacing'] : isContainer(block) ? ['layout', 'size', 'spacing', 'background'] : ['spacer', 'divider', 'embed'].includes(block.type) ? ['size', 'spacing'] : ['text', 'size', 'spacing']; + const priority = ['image', 'gallery', 'logos'].includes(block.type) ? ['image', 'size', 'spacing'] : isContainer(block) ? ['layout', 'size', 'spacing', 'background'] : ['spacer', 'divider', 'embed', 'video'].includes(block.type) ? ['size', 'spacing'] : ['text', 'size', 'spacing']; const orderedGroups = [...new Set([...priority, ...Object.keys(GROUPS)])]; for (const group of orderedGroups) { const groupLabel = GROUPS[group]; diff --git a/public/assets/video.js b/public/assets/video.js index 381b636..3a9d9fc 100644 --- a/public/assets/video.js +++ b/public/assets/video.js @@ -12,6 +12,8 @@ const saving = navigator.connection?.saveData === true; for (const video of document.querySelectorAll('[data-video-loop]')) { const toggle = video.parentElement.querySelector(':scope > .video-toggle'); + // Ein data-video-loop aus „Eigenes HTML“ hat keinen Knopf; ohne ihn bleibt es beim Standbild. + if (!toggle) continue; let wanted = !reduced.matches && !saving; let visible = false; const paint = () => { diff --git a/src/Twig/LanguageExtension.php b/src/Twig/LanguageExtension.php index acfe0cb..3bd3e55 100644 --- a/src/Twig/LanguageExtension.php +++ b/src/Twig/LanguageExtension.php @@ -31,6 +31,9 @@ final class LanguageExtension extends AbstractExtension 'Bildergalerie' => 'Image gallery', 'Bild' => 'Image', 'vergrößern' => 'enlarge', + 'Video' => 'Video', + 'Video anhalten' => 'Pause video', + 'Video abspielen' => 'Play video', 'Ansehen' => 'View', 'Weiterlesen' => 'Read more', 'Weitere Beiträge' => 'More posts', @@ -131,6 +134,9 @@ final class LanguageExtension extends AbstractExtension 'Bildergalerie' => 'Resim galerisi', 'Bild' => 'Resim', 'vergrößern' => 'büyüt', + 'Video' => 'Video', + 'Video anhalten' => 'Videoyu durdur', + 'Video abspielen' => 'Videoyu oynat', 'Ansehen' => 'İncele', 'Weitere Beiträge' => 'Diğer yazılar', 'Vorheriger Beitrag' => 'Önceki yazı',