Core-clean variant: editor id eurooffice, no text-app patch

- HtmlDirectEditor getId() now returns 'eurooffice' (hard-coded in the
  iOS/Android editor registry) -> 'Öffnen mit Office' long-press renders HTML
- install.sh restores the original TextDirectEditor if a previous
  install patched it; no core app patch anymore
- README rewritten: behavior, variant rationale, files
This commit is contained in:
Hermes
2026-09-11 12:28:13 +00:00
parent 84d455d19c
commit 818c793ce6
4 changed files with 55 additions and 224 deletions
+31 -21
View File
@@ -1,6 +1,7 @@
# htmlviewer-directediting
Rendert HTML-Dateien in der **Nextcloud iOS/Android App** statt Quelltext (QuickLook) anzuzeigen.
Rendert HTML-Dateien in der **Nextcloud iOS/Android App** in einem sandboxed
WebView statt als Quelltext (QuickLook).
## Warum das existiert
@@ -11,19 +12,20 @@ Editor-Registry** (`NCDirectEditorAdapter` in nextcloud/ios): nur `text`,
Server-Editor mit eigener ID (z.B. `htmlviewer`) wird von der App nicht aufgelöst
→ Fallback auf QuickLook → HTML-Quelltext.
## Lösung (2 Patches)
## Lösung (nur htmlviewer-App, core-clean)
1. **htmlviewer** (custom_apps): registriert einen `IEditor` (`HtmlDirectEditor`)
mit Mimetype `text/html` + Bridge-Klasse, Template mit sandboxed iframe
(`srcdoc` — Inhalt direkt eingebettet, kein Cookie-Problem in mobilen
WebViews) und Content-Controller.
2. **text** (Core-App, gepatcht):
- `open()` leitet `text/html` an die htmlviewer-Bridge um
(`HtmlDirectEditorBridge::openHtml`) — die iOS-App wählt Editor `text`
(registry-bekannt), der Server liefert aber das HTML-Template.
- `text/html` bleibt in der Mimetypeliste der Text-App (wichtig!).
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.
Bei Nextcloud-Core selbst (lib/, config) wurde **nichts** geändert.
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
@@ -32,25 +34,33 @@ Bei Nextcloud-Core selbst (lib/, config) wurde **nichts** geändert.
```
Idempotent, kann nach jedem htmlviewer-/Nextcloud-Update neu laufen.
Backup des Original-TextDirectEditor landet unter `/tmp/TextDirectEditor.php.bak-htmlproject` im Container.
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
- Nextcloud-Update überschreibt `apps/text/.../TextDirectEditor.php``install.sh` erneut
- 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 (DirectEditing-Registrierung, für Web-Client/Wiederverwendung)
- `patches/htmlviewer/HtmlDirectEditorBridge.php`statische Bridge, von TextDirectEditor aufgerufen
- `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
- `patches/text/TextDirectEditor.php` — gepatchte Text-App (open()-Bridge)
- `install.sh` — Installer
- `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) deployed und iPhone-getestet:
HTML rendert in der iOS-App in sandboxed WebView.
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.