Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/blitzdonner/blitz-donner-pdf/archive/refs/heads/main.zipWordPress-Plugin von Blitz & Donner (Slug: blitz-donner-pdf, Code-/DB-Prefix: bdpdf). Stellt den Gutenberg-Block «PDF-Flipbook» bereit: Ein PDF aus der Mediathek wird im Frontend als blätterbares Buch mit Umblätter-Animation angezeigt.
Namenskonvention
Alle B&D-Plugins heissen «Blitz & Donner …» (zuerst die Marke, dann die Funktion) – der Slug ist die Marke plus Funktion (hier blitz-donner-pdf, wie blitz-donner-forms). Dazu kommt ein Code-Prefix von mindestens 5 Zeichen, beginnend mit bd (hier bdpdf): er gilt für Block-Namespace, REST-Namespace, CSS-Klassen, Options-/Meta-Schlüssel und PHP-Symbole. Die Textdomain folgt dem Slug.
Funktionsweise
Der Block «BD PDF» ist dynamisch (render.php). Nach der PDF-Auswahl rendert der Editor alle Seiten einmal mit PDF.js und lädt sie über die REST-Route bdpdf/v1/pages hoch (Ablage uploads/bdpdf/<attachment-id>/page-<n>.jpg, Metadaten am Attachment). Das Frontend zeigt die vorgerenderten Bilder sofort; nur wenn der Viewport mehr Pixel braucht als gespeichert, rendert PDF.js die sichtbaren Seiten nach. Der Editor zeigt eine Doppelseiten-Vorschau mit identischem Markup und Stylesheet, aber ohne StPageFlip (dessen Event-Handler brechen Gutenbergs Werkzeugleisten-Popover); geblättert wird dort über dieselben Knöpfe. Beide Bibliotheken sind lokal gebündelt – kein CDN, keine externen Requests.
Komponenten
blitz-donner-pdf.php– Bootstrap, registriert Block, Editor-Konfiguration, Aufräumen beim Attachment-Löschenincludes/rest-pages.php– REST-Routebdpdf/v1/pages/<id>(GET Status, POST Seitenbild; Upload-Recht + JPEG-Validierung)includes/class-bd-update-client.php– eingebetteter BD-Update-Client (kanonische Quelle: Repo bd-plugin-updater); registriert aufplugins_loadedreadme.txt– WordPress.org-Readme (Directory-tauglich)blocks/flipbook/block.json– Block-Metadaten (apiVersion 3, dynamisch, Titel «BD PDF», Stil-Supports)blocks/flipbook/render.php– Frontend-Markup mit Escaping, liefert vorgerenderte Seiten-URLsblocks/flipbook/flipbook-core.js– gemeinsamer Flipbook-Kern für Frontend und Editor (klassisches Skript)blocks/flipbook/editor.js– Editor-UI ohne Build-Step: Auswahl, Rendern+Upload, Live-Vorschaublocks/flipbook/view.mjs– Frontend-Logik als ES-Modul: Sofortanzeige, Hi-Res-Nachrendern, Fallbackblocks/flipbook/pdf.min.mjs,pdf.worker.min.mjs– PDF.js 4.8.69 (Apache 2.0)blocks/flipbook/page-flip.browser.js– StPageFlip 2.0.7 (MIT)Lizenz
GPL-3.0-or-later. Bewusst GPLv3 statt GPLv2: Die gebündelte Apache-2.0-Bibliothek PDF.js ist nur mit GPLv3 kompatibel. Beide Bibliotheken sind vom WordPress-Plugin-Directory akzeptierte Lizenzen; die unminifizierten Quellen sind in
readme.txtverlinkt.Darstellungsmodi (wie Blitz & Donner Forms)
Im Stil-Tab bietet der Block den «Farbmodus» mit vier Werten (Attribut
appearanceMode, Wrapper-Attributdata-bdpdf-appearance):- Theme: Das Plugin fügt kein Erscheinungs-CSS hinzu – nur strukturelle Layoutregeln. Buttons sind
wp-element-button, Farben und Typografie kommen vollständig aus theme.json. - Hell / Dunkel: isolierte Apple-Optik, Token-Werte 1:1 aus Blitz & Donner Forms (Karte #ffffff/#1c1c1e, Text #1d1d1f/#f5f5f7, Akzent #0071e3/#0a84ff, Radius 10/16 px, Buttons 0.7rem/1.5rem, Gewicht 600).
- Automatisch: Hell, bei
prefers-color-scheme: darkDunkel. Themes können die Hell/Dunkel-Palette ohne eigenes CSS übersteuern – viasettings.custom.bdpdf.*in theme.json (wird zu--wp--custom--bdpdf--…):light-card,light-text,light-label,light-border,light-accent,light-on-accentsowie dieselben Schlüssel mitdark-.Bedienung
- Block «PDF-Flipbook» einfügen (Kategorie Medien).
- PDF aus der Mediathek wählen oder hochladen.
- Optional in den Block-Einstellungen: «Erste Seite als Buchdeckel» abschalten.
Im Frontend: Blättern per Knopf, Pfeiltasten (bei fokussiertem Block) oder Ziehen an der Seitenecke. Ohne JavaScript erscheint ein Download-Link.
Auto-Updates
Das Plugin ist auf dem Update-Server (plugins.blitzdonner.ch) als freies Plugin markiert: Installationen erhalten Auto-Updates ohne Lizenz-Token. Der eingebettete Client fragt tokenlos an, der Server entscheidet. Ed25519-Pflichtsignatur und SHA-256-Prüfung gelten unverändert; ein hinterlegtes Token (
BDPDF_LICENSE_TOKEN) funktioniert weiterhin, ist aber nicht nötig. Achtung: Die KlasseBD_Update_Clientwird von allen B&D-Plugins geteilt (class_exists, erste Kopie gewinnt) – Änderungen an der kanonischen Quelle (Repo bd-plugin-updater) müssen in alle Plugins mit eingebetteter Kopie ausgerollt werden. Release:tools/release.sh "Changelog".
Beispiel-PDF (seit 0.6.0)
assets/demo/ bündelt ein vierseitiges Beispiel-PDF samt vorgerenderten Seitenbildern (898 px). Es füllt die Block-Vorschau (example in block.json → Auge im Inserter und Stilbuch) und den «Ausprobieren»-Modus: Attribut useDemo, Knopf im Platzhalter. Editor und Frontend zeigen das Demo-Buch ohne REST-Aufrufe; die Auswahl eines eigenen PDFs beendet den Modus. Konfiguration liefert bdpdf_demo_config().
Datei-Zeile (seit 0.8.0)
Attribut displayMode (book | file), als Blockvarianten im Inserter. Die Zeile (render.php, Partial book-scaffold.php fürs geteilte Buch-Gerüst) zeigt Symbol, Titel, Grösse (size_format), Datum (wp_date mit Site-Format; Override-Attribut dateOverride, YYYY-MM-DD) und die Knöpfe «Ansehen»/«Herunterladen» (showViewButton/showDownloadButton). Das Popover ist ein natives <dialog>; das Buch darin initialisiert view.mjs lazy beim ersten Öffnen. Formatierte Grösse/Datum liefert der Server (REST bdpdf/v1/pages bzw. bdpdf_demo_config()), damit Editor und Frontend zeichengenau übereinstimmen.
Seitenlayout (seit 0.5.0)
Einstellung im Zahnrad-Tab: Einzelseiten (Standard, jede PDF-Seite = eine Buchseite) oder Doppelseiten (jede PDF-Seite enthält eine Druck-Doppelseite und wird beim Vorab-Rendern am Bund geteilt). Schmale erste/letzte Seiten (< 75 % der Maximalbreite) gelten automatisch als einzelner Umschlag; die Buchdeckel-Logik folgt im Doppelseiten-Modus dieser Erkennung statt dem Schalter. Das Hi-Res-Nachrendern im Frontend rechnet Buchseiten auf PDF-Seite und Hälfte zurück (bookToPdf in view.mjs).
Anforderungen
WordPress 6.5+ (wegen viewScriptModule), PHP 7.4+.
Bekannte Grenzen
- Der Editor zeigt einen Platzhalter, keine Live-Vorschau des Flipbooks.
- Sehr grosse PDFs (über etwa 60 Seiten) brauchen spürbar Ladezeit, da alle Seiten vorgerendert werden.