All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
- Sprungmarken-Scroll im Backend: Wenn die vorgeschaute Frontend-URL einen Hash-Anker enthält (z.B. One-Page-Sites wie
https://example.com/#kontakt), scrollte das REDAXO-Backend automatisch zu einem gleichnamigen Element. Der Hash wird jetzt beim Setzen voniframe.srcentfernt – der Inhalt des iframes wird davon nicht beeinflusst, da der Browser die Seite ohnehin vollständig lädt.
- Slice-Scroll entfernt: Das automatische Scrollen zur bearbeiteten Slice-Position war nicht zuverlässig und wurde vorerst zurückgezogen
load_frontend: trueauspackage.ymlentfernt (war nur für Slice-Scroll benötigt)
- Slice-Scroll: Nach dem Speichern eines Slices scrollt der iframe automatisch zur Position des bearbeiteten Slices
SLICE_SHOW-Extension-Point injiziert unsichtbare Scroll-Anker (<span id="rex-slice-{id}">) ins Frontend – nur wenn?lp_anchors=1in der iframe-URL stehtload_frontend: trueinpackage.ymldamitboot.phpauch im Frontend ausgeführt wird
LivePreviewUrlApi: fehlendeuse-Statements für REDAXO-Klassen im Namespace ergänzt
- Float-Modus Darstellung nach Reload: Flex-Kette auf
.panel-collapseund#rex-lp-panelkomplettiert – iframe-Höhe füllt das Panel nun korrekt aus - Panel-Header als Drag-Zone: Im Float-Modus kann der gesamte Panel-Header zum Verschieben genutzt werden (außer Toggle-Switch und Dock-Button)
- Bootstrap-Collapse blockiert: Klick auf Header-Link wird im Float-Modus via Capture-Phase abgefangen
- Expand-Button deaktiviert: Im Float-Modus ausgegraut und funktionslos
- Draggable Panel: Panel lässt sich per Drag-Handle (
⤣-Icon in der Toolbar) aus der Sidebar lösen und frei im Viewport positionieren - Position und Breite werden in
localStoragegespeichert und nach Seitenreload automatisch wiederhergestellt - Platzhalter (gestrichelter Rahmen) markiert die ursprüngliche Stelle in der Sidebar
- Dock-Button: X-Button im floating Panel-Heading bringt das Panel zurück in die Sidebar
- Toggle ohne Reload: iframe ist jetzt immer im DOM (via
data-src). Beim Einschalten wirdsrc = data-srcdirekt per JS gesetzt – kein Seiten-Reload, kein PJAX nötig - Beim Ausschalten wird
src = about:blankgesetzt, der iframe lädt damit sofort ab - Panel-Body wird immer vollständig gerendert (iframe nie aus dem DOM entfernt)
Device Simulation
- Desktop-Vollbild-Modus (pixel-perfect, kein Scaling)
- Desktop-Custom-Modus mit Skalierung (Scale-to-fit) und frei einstellbarer Größe
- Tablet-Simulation (klassisches iPad-Design: breite Bezels, runder Home Button, Kamera-Dot)
- Mobile-Simulation (moderne Smartphone-Darstellung: Dynamic Island Pill, Home Indicator)
Desktop Presets
- Volle Breite (Desktop-Fullscreen)
- 5K (5120 × 2880)
- 4K UHD (3840 × 2160)
- Full HD (1920 × 1080)
- QHD (1440 × 900)
- HD (1280 × 800)
- XGA (1024 × 768)
- Tablet (768px)
- Mobile (390px)
Monitor-Bezel & Stand
- Desktop-Custom zeigt einen realistischen Monitor-Rahmen (Bezel mit Kamera-Dot)
- Separates Monitor-Stand-Element (
#rex-lp-monitor-stand), JS-positioniert unterhalb des Frames
Chalk Labels
- Breiten- und Höhenanzeige des Viewport als Chalk-Style-Labels
- JS-positioniert via
getBoundingClientRect, als Stage-Geschwister (nicht innerhalb des Frames) - Nur sichtbar im Desktop-Custom-Modus bei definierten Dimensionen
Resize Handles
- Resize-Handles (E / S / SE) im Desktop-Custom-Modus
- East-Handle erhält Vorrang und behält das Seitenverhältnis bei
Tablet-Scrolling
- Stage im Tablet-Modus:
overflow: auto; align-items: flex-start - Ermöglicht natürliches vertikales Scrollen langer Seiten
Rotation
- Im Modal-Modus (Vollbild): Tablet und Mobile per Toolbar-Button zwischen Hoch- und Querformat wechseln
Per-User-Toggle
- Aktivieren/Deaktivieren des Panels per Switch im Panel-Header, Einstellung wird per User gespeichert
- Bei deaktivierter Vorschau: Panel bleibt zugeklappt
Persistenz
- Gewähltes Gerät, Preset, Querformat-Status und Custom-Größe werden in
localStoragegespeichert - Wird beim erneuten Öffnen des Modals wiederhergestellt
Backend-Integration
- Sidebar-Panel im REDAXO-Backend (Extension Point
STRUCTURE_CONTENT_SIDEBAR) - Automatische Ermittlung der Frontend-URL inkl.
rex_version(Live/Work) - AJAX-API-Endpunkt (
rex-api-call=live_preview_url) für dynamische URL-Abfragen - API erfordert Backend-Session (kein öffentlicher Zugriff)
Internationaliserung
- Vollständige i18n-Unterstützung:
de_de.langunden_gb.lang
Namespace
- PHP-Klassen unter
FriendsOfREDAXO\LivePrevieworganisiert - API-Klasse per
rex_api_function::register()explizit registriert
Credits: Friends Of REDAXO