WP Manifestindependent plugin directory
manifest / editor / blitz-donner-pdf

Blitz & Donner PDF

Gutenberg-Block «BD PDF»: zeigt PDFs aus der Mediathek als blätterbares Buch. PDF.js + StPageFlip, lokal gebündelt, GPL-3.0.

★ 0stars

Install

Download source zip No release zip yet

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.zip
Updates itself. It ships its own updater (Update URI header), so new versions appear under Dashboard → Updates.

WordPress-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öschen
  • includes/rest-pages.php – REST-Route bdpdf/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 auf plugins_loaded
  • readme.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-URLs
  • blocks/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-Vorschau
  • blocks/flipbook/view.mjs – Frontend-Logik als ES-Modul: Sofortanzeige, Hi-Res-Nachrendern, Fallback
  • blocks/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.txt verlinkt.

    Darstellungsmodi (wie Blitz & Donner Forms)

    Im Stil-Tab bietet der Block den «Farbmodus» mit vier Werten (Attribut appearanceMode, Wrapper-Attribut data-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: dark Dunkel. Themes können die Hell/Dunkel-Palette ohne eigenes CSS übersteuern – via settings.custom.bdpdf.* in theme.json (wird zu --wp--custom--bdpdf--…): light-card, light-text, light-label, light-border, light-accent, light-on-accent sowie dieselben Schlüssel mit dark-.

    Bedienung

  1. Block «PDF-Flipbook» einfügen (Kategorie Medien).
  2. PDF aus der Mediathek wählen oder hochladen.
  3. 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 Klasse BD_Update_Client wird 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.