- 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
66 lines
2.9 KiB
Markdown
66 lines
2.9 KiB
Markdown
# 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. |