Skip to content

Latest commit

 

History

History
304 lines (225 loc) · 14 KB

File metadata and controls

304 lines (225 loc) · 14 KB

Online-Dokumenteneditor

CI Status License Version Live site

English | 简体中文 | 日本語 | 한국어 | Deutsch | Español | Português | فارسی

Word-, Excel- und PowerPoint-Dateien in einem Browser-Tab öffnen und bearbeiten. Ohne Server: Die OnlyOffice-Engine und ihr WASM-Konverter laufen auf dem Gerät der Besucherin selbst, Dokumente werden also nie hochgeladen, und ein Konto braucht es auch nicht.

Live-Website: edit.chaxus.com


KI-Dokumentassistent

Text auswählen und umformulieren, zusammenfassen oder übersetzen. Prüfen Sie das Ergebnis, bevor Sie es einfügen. Standardmäßig aus · Nur dieser Browser.

Nach dem Aktivieren die Nutzung wählen. Den ersten Download starten Sie selbst und können ihn abbrechen.

  • Auf diesem Computer nutzen: Der Text wird auf diesem Gerät verarbeitet. Die erste Einrichtung lädt Dateien und kann den Computer verlangsamen; Abbruch ist möglich.
  • Eigenen KI-Dienst nutzen: Gesendeter Text geht an den gewählten Dienst. Eigene Zugangsdaten sind erforderlich; es können Kosten entstehen.

Original und Ergebnis vergleichen und das Ersetzen bestätigen. Kopieren ist ebenfalls möglich. Bei Bedarf im Editor rückgängig machen. Eine geänderte Auswahl erfordert einen neuen Vorschlag.

Anleitung

✨ Funktionen

  • 🔒 Nichts wird hochgeladen — jede Umwandlung, jede Änderung, jeder Export passiert im Tab
  • 📝 Echtes Bearbeiten, keine Vorschau — DOCX, XLSX, PPTX und CSV, dazu ODF, RTF, TXT und die alten Binärformate; PDFs lassen sich öffnen und kommentieren
  • 🕓 Nichts geht verloren, wenn der Tab zugeht — Änderungen werden im eigenen Browser gesichert, 7 Tage aufbewahrt, jederzeit löschbar (Einzelheiten)
  • 📴 Funktioniert offline — als PWA installierbar; zwischengespeicherte Editor-Ressourcen sind offline nutzbar; nicht gespeicherte Ressourcen und entfernte Dateien benötigen Netz
  • 🌍 Mehrsprachig — 7 Oberflächensprachen für die Website, 45 für den Editor selbst
  • 🧩 Einbettbar — vollständige postMessage-API für die iframe-Integration
  • 🤖 Bereit für Agenten — stellt WebMCP-Werkzeuge bereit, mit denen ein KI-Agent im Browser Dokumente öffnen, umwandeln und lesen kann
  • 🚀 Überall betreibbar — ein statischer Build; ein Verzeichnis hinter irgendeinem Webserver

🚀 Schnellstart

Einfach nutzen: edit.chaxus.com — nichts zu installieren.

Selbst betreiben mit Docker:

docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest

Aus dem Quelltext starten:

git clone https://github.com/ranuts/document.git
cd document
pnpm install
pnpm run dev

📄 Formate

Art Bearbeiten Öffnet außerdem
Dokumente .docx .doc .odt .rtf .txt
Tabellen .xlsx .csv .xls .ods
Präsentationen .pptx .ppt .odp
PDF kommentieren, ausfüllen, exportieren .pdf

Alles davon lässt sich als PDF exportieren. CSV behält beim Export seine Kodierung (UTF-8, GB18030 und Latin-1 werden beim Öffnen erkannt).


🔗 Routen und URL-Parameter

Route Was es ist
/ Startseite. Der Editor wird erst geladen, wenn Sie etwas öffnen.
/editor Der Editor.
/history Dokumente, die dieser Browser aufbewahrt (siehe unten).
/help, /changelog Erzeugt aus dem Markdown unter content/.

Parameter für /editor:

Parameter Beschreibung
src=<url> Ein Dokument von einer URL öffnen (die URL muss CORS erlauben)
file=<url> Dasselbe in alter Schreibweise; gewinnt, wenn beide gesetzt sind
new=docx Ein leeres Dokument anlegen (docx, xlsx, pptx)
doc=<id> Ein Dokument aus dem Verlauf dieses Browsers erneut öffnen — der Editor trägt hier seine eigene ID ein, ein Neuladen kehrt also zum selben Dokument zurück
readonly=1 Nur zum Ansehen öffnen: Bearbeiten und Exportieren sind deaktiviert
embed=1 Einbettmodus; die einbettende Seite steuert den Editor über postMessage
locale=de Sprache der Oberfläche

🔐 Lokale Bearbeitung und Datenverarbeitung

Bearbeitung und Konvertierung laufen lokal. Zwei Dinge bleiben lokal liegen, und beide können Sie selbst entfernen:

  • Kopien dessen, was Sie bearbeitet haben. Während Sie arbeiten, sichert der Editor das Dokument in diesem Browser (IndexedDB), damit ein Neuladen, ein geschlossener Tab oder ein Absturz die Arbeit nicht kostet. Beim nächsten Öffnen bietet er sie wieder an. Diese Kopien sind dazu da, dass Sie weitermachen können — sie sind keine Sicherung, exportieren Sie also weiterhin alles, was Sie behalten wollen.
  • Sieben Tage, dann weg. Jedes Dokument wird sieben Tage nach der letzten Bearbeitung oder Öffnung automatisch gelöscht, ob Sie zurückkommen oder nicht.

/history listet auf, was gespeichert ist, mit einem Löschen pro Zeile, einem Alles-Löschen und einem Schalter, der das automatische Speichern ganz abstellt. Löschen wirkt dort sofort. Auf einem gemeinsam genutzten Rechner ist das die Seite, die man aufsucht.

Standardmäßig aus · Nur dieser Browser. Die KI-Module im Repository sind experimentell und bedeuten nicht, dass der Assistent einsatzbereit ist. Entwicklungstests mit Cloud-Anbietern können Eingaben und Werkzeugergebnisse übertragen. Im eingebetteten Modus gehen Exporte an die übergeordnete Anwendung, die weitere Uploads kontrolliert.


🧩 Einbetten per iframe

Betten Sie den Editor ein und steuern Sie ihn über postMessage. Die übliche Aufteilung: Ihr System kümmert sich um Anmeldung und Speicherung, das iframe ums Bearbeiten.

<iframe
  id="documentEditor"
  src="https://your-deployment/editor?embed=1"
  style="width: 100%; height: 720px; border: 0"
></iframe>
// Ein Dokument öffnen
iframe.contentWindow.postMessage(
  { id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } },
  'https://your-deployment',
);

// Auf das Ergebnis hören
window.addEventListener('message', (e) => {
  if (e.data?.type === 'document:opened') console.log('Bereit zum Bearbeiten');
  if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file);
});

Eingebettete Editoren führen keinen lokalen Verlauf — das Dokument gehört der einbettenden Seite.

→ Vollständige API-Referenz — jeder Nachrichtentyp, die Origin-Freigabeliste, der Nur-Lesen-Modus und der Speicherablauf.

Auch als Komponente verfügbar: Dieses Projekt treibt die Dokumentvorschau in @ranui/preview an (Dokumentation).


🤖 KI-Agenten im Browser (WebMCP)

Wo der Browser es unterstützt, meldet die Seite Werkzeuge an, die ein Agent direkt aufrufen kann, statt die Oberfläche zu bedienen: open_document_url, open_document_buffer, create_document, save_document, get_document_text, set_readonly, get_document_state. Die Dokumente verlassen das Gerät auch dabei nicht — der Browser holt und wandelt sie selbst. Fehlt die API, passiert schlicht nichts.


🚀 Bereitstellung

Ein statischer Build — keine Laufzeitumgebung, keine Datenbank.

pnpm build   # landet in dist/

Statisches Hosting (Cloudflare Pages, Nginx, Vercel, Netlify …)

dist/ hochladen. In public/_headers steht die Caching-Vereinbarung, von der die Seite ausgeht (Assets mit Hash unveränderlich, Service Worker niemals im Cache); Hoster, die das ignorieren, funktionieren trotzdem — sie prüfen nur häufiger nach.

Bei Nginx index.html als Rückfallebene für unbekannte Routen ausliefern:

location / {
  root /var/www/document;
  try_files $uri $uri/ /index.html;
}

GitHub Pages

.github/workflows/pages-build-site.yml baut und veröffentlicht bei jedem Push auf main. Aktivieren Sie Pages in den Repository-Einstellungen mit GitHub Actions als Quelle.

Docker

# Einfach
docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest

# Mit HTTPS und Basic Auth
docker run -d --name document -p 443:443 \
  -v /path/to/certs:/ssl \
  -e SERVER_BASIC_AUTH='user:$2y$...' \
  -e SERVER_HTTP2_TLS=true \
  -e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \
  -e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \
  ghcr.io/ranuts/document:latest

SERVER_BASIC_AUTH erwartet einen BCrypt-Hash; die $-Zeichen fürs Shell-Escaping verdoppeln. Das Caching des Images wird in sws.toml festgelegt.


🔤 Schriften

Der mitgelieferte OnlyOffice-Build bringt seine Schriftbibliothek in public/fonts/ mit, indiziert über public/sdkjs/common/AllFonts.js. Schriften werden bei Bedarf geholt — ein Dokument lädt nur die, die es tatsächlich verwendet.

→ Leitfaden zur Schriftverwaltung — das Format des indizierten Katalogs, die Registries und das Hinzufügen von Schriften mit bin/font-catalog.mjs.


🛠 Entwicklung

pnpm install --frozen-lockfile
pnpm run dev            # Entwicklungsserver
pnpm run build          # Produktions-Build (bin/build.sh)
pnpm run lint           # oxlint + tsc + Docker-Konfiguration
pnpm run test           # Unit-Tests (Vitest)
pnpm run test:e2e       # End-to-End-Tests (Playwright, echter Editor + echtes WASM)

Die End-to-End-Suite fährt den echten Editor und den echten Konverter statt Mocks, samt Dokument-Rundläufen, dem Einbettprotokoll und dem Wiederherstellungsablauf. docs/explorations/ hält fest, warum jede nicht offensichtliche Stelle so ist, wie sie ist — ein Blick lohnt sich, bevor Sie die Editor-Integration anfassen.


📚 Aufgebaut auf

🤝 Mitwirken

Issues und Pull Requests sind willkommen. main ist geschützt: Arbeiten Sie auf einem Branch und öffnen Sie einen PR, der Lint, Unit-Tests und drei End-to-End-Suites ausführt (Entwicklungsserver, Cloudflare-Pages-Verhalten und das Produktions-Docker-Image).

📄 Lizenz

AGPL-3.0.

Dieses Projekt ist eine veränderte Version der ONLYOFFICE-Editoren (sdkjs und web-apps, Copyright Ascensio System SIA). Die Oberfläche verwendet neutrale Funktionsbezeichnungen ohne Produktlogos oder Markenwerbung. Urheberrechts- und Lizenzhinweise, Änderungen und Quellcode-Links bleiben im Infofenster des Editors und in NOTICE verfügbar. GUI-Materialien und Schriftarten Dritter behalten ihre jeweiligen Lizenzen.

Der Verzicht auf Produktlogos orientiert sich an der veröffentlichten Auslegung des AGPLv3-Abschnitts 7 durch die FSF. Diese ist kein Gerichtsurteil und keine Garantie vollständiger Rechtskonformität. Die Position des ursprünglichen Projekts und die Begründung sind in NOTICE dokumentiert.

ONLYOFFICE ist eine Marke von Ascensio System SIA. Dieses Projekt ist kein offizielles ONLYOFFICE-Produkt und wird von Ascensio System SIA weder unterstützt noch gesponsert; es besteht keine Verbindung. Namen in rechtlichen Hinweisen und Quellverweisen kennzeichnen die zugrunde liegende Technik, nicht unsere Marke.

PWA-Installation und Browser-Tabs verwenden ein unabhängig gezeichnetes, neutrales Dokumentsymbol ohne Upstream-Logo, Markenzeichen oder Projektinitialen.