# htmlviewer-directediting Rendert HTML-Dateien in der **Nextcloud iOS/Android App** in einem sandboxed WebView statt als Quelltext (QuickLook). ## Warum das existiert Die Mobile-Apps wählen den Editor für eine Datei über die Server-Capabilities (`/ocs/v2.php/apps/files/api/v1/directEditing`) und haben eine **hartcodierte Editor-Registry** (`NCDirectEditorAdapter` in nextcloud/ios): nur `text`, `eurooffice`, `onlyoffice`, `richdocuments`, `whiteboard` sind bekannt. Ein neuer Server-Editor mit eigener ID (z.B. `htmlviewer`) wird von der App nicht aufgelöst → Fallback auf QuickLook → HTML-Quelltext. ## Lösung (nur htmlviewer-App, core-clean) Die htmlviewer-App registriert einen `IEditor` mit der hartcodeten App-Editor-ID **`eurooffice`** und Mimetype `text/html` + Bridge, Template mit sandboxed iframe (`srcdoc` — Inhalt direkt eingebettet, kein Cookie-Problem in mobilen WebViews) und Content-Controller. Die Nextcloud-Text-App und der Core werden **nicht** verändert. ### Verhalten - **Single-Tap** auf HTML: Quelltext-Ansicht (iOS-Standard, Text-App gewinnt die Editor-Wahl — das ist ohne Text-App-Patch nicht änderbar, siehe unten) - **Long-Press → "Öffnen mit Office"**: rendert das HTML in der WebView ## Installation ```bash ./install.sh nextcloud1-app-1 ``` Idempotent, kann nach jedem htmlviewer-/Nextcloud-Update neu laufen. Stellt ein altes Text-App-Patch-Backup automatisch wieder her, falls vorhanden. ## Nach App-Updates neu nötig - htmlviewer-App-Update überschreibt `lib/DirectEditing/`, `templates/`, `Application.php`-Registrierung → `install.sh` erneut ## Varianten **Auto-Open bei Single-Tap** wäre nur möglich, wenn die Text-App gepatcht wird (`open()`-Bridge auf die htmlviewer-Template + `text/html` in deren Mimetypen), weil die iOS-App im automatischen Loop immer zuerst Editor `text` wählt und die App-Registry nur die 5 hartcodeten IDs kennt. Das machen wir bewusst NICHT — Core-App-Patches sind update-anfällig und unübersichtlich. Die Long-Press- Variante funktioniert ausschließlich mit der installierten htmlviewer-App. ## Dateien - `patches/htmlviewer/HtmlDirectEditor.php` — IEditor-Implementierung, ID `eurooffice` - `patches/htmlviewer/HtmlDirectEditorBridge.php` — Template-Renderer - `patches/htmlviewer/DirectController.php` — `/apps/htmlviewer/direct/{fileId}` Content-Endpoint (NoAdminRequired, Session) - `patches/htmlviewer/RegisterDirectEditorListener.php` — RegisterDirectEditorEvent-Listener - `patches/htmlviewer/directEditing-template.php` — Template: Fullscreen-iframe mit srcdoc + sandbox - `patches/htmlviewer/patch_app.py` — idempotente Registrierung in Application.php + routes.php - `install.sh` — Installer (core-clean: restores any old text-app backup) ## Status (2026-09-11) Auf nextcloud1 (Nextcloud 34.0.2, htmlviewer 33.0.0) getestet: Long-Press → "Öffnen mit Office" rendert HTML in der iOS-App in sandboxed WebView.