- Wordgard ist eine Open-Source-JavaScript-Bibliothek zum Erstellen von Rich-Text-Editoren im Browser und basiert auf einer neuen Editor-Grundlage des ProseMirror-Entwicklers
- Der Fokus liegt stärker auf Kontrolle über die Dokumentstruktur als auf frei formulierbarer HTML-Bearbeitung; Entwickler können präzise festlegen, welche Arten von Inhalten und welche semantischen Strukturen erlaubt sind
- Für komplexe maßgeschneiderte Editoren bietet Wordgard ein schema-basiertes Modell und eine erweiterungsorientierte Struktur, sodass Funktionen je nach Bedarf ausgetauscht oder angepasst werden können
- Anforderungen wie Barrierefreiheit, Internationalisierung, RTL- und bidirektionale Dokumente, strukturierte Inhalte, funktionaler Stil und kollaboratives Bearbeiten werden auf Ebene der Editor-Grundlage adressiert
- Wordgard ist permissive Open Source unter der MIT-Lizenz, verfolgt aber ein Betriebsmodell, bei dem Bug-Reports willkommen sind und Pull Requests nicht angenommen werden
Editor-Grundlage zur Kontrolle der Dokumentstruktur
- Wordgard ist eine Open-Source-JavaScript-Bibliothek zur Implementierung von Rich-Text-Editoren im Browser
- Es ist kein frei formulierbarer HTML-Editor, sondern ein semantisches Rich-Text-Editor-System, mit dem Entwickler die Arten unterstützter Inhalte und die Dokumentstruktur genau steuern können
- Wordgard bietet einen schema-basierten Ansatz, um Dokumentstrukturen präzise zu definieren und eigene Dokumentelemente zu erstellen
- Die Programmierschnittstelle ist auf Allgemeingültigkeit und Flexibilität ausgelegt und kann als Grundlage für maßgeschneiderte Editoren mit hohen Anforderungen dienen
Erweiterbarkeit, Barrierefreiheit und Kollaboration
- Die meisten Editor-Funktionen sind als Erweiterungen (Extensions) implementiert und können ersetzt oder angepasst werden, wenn sie nicht zu den Anforderungen passen
- Barrierefreiheitsfunktionen berücksichtigen Nutzer von Screenreadern, Nutzer, die ausschließlich die Tastatur verwenden, sowie Umgebungen auf Mobilgeräten; auch UI-Internationalisierung wird unterstützt
- Für von rechts nach links geschriebene Umgebungen wird Richtungserkennung sowohl für Inhalte als auch für die Oberfläche unterstützt, sodass bidirektionale Inhalte und RTL-Dokumente verarbeitet werden können
- Der Dokumentbaum kann strukturierte Inhalte wie Tabellen, verschachtelte Listen, Figures mit Beschriftungen und eigene Strukturen enthalten
- Große Teile des Systems sind aus Gründen der Klarheit und Testbarkeit in funktionalem Stil geschrieben
- Wordgard unterstützt kollaboratives Bearbeiten, bei dem mehrere Nutzer dasselbe Dokument gleichzeitig bearbeiten und parallele Änderungen zusammengeführt werden
Lizenz und Projektbetrieb
- Die Lizenz ist MIT, die Entwicklung findet auf code.haverbeke.berlin statt
- Bug-Reports sind willkommen, aber Pull Requests werden nicht angenommen
- Für Projektdiskussionen und Fragen wird das Forum empfohlen; Bugs sollten im Issue Tracker gemeldet werden
1 Kommentare
Meinungen auf Hacker News
Die meisten dürften wissen wollen: „Warum?“ Dieses Dokument kam einer Antwort darauf am nächsten, weil es die Unterschiede zu ProseMirror behandelt: https://wordgard.net/docs/prosemirror/
Ein bemerkenswerter Punkt ist, dass es keinen Upgrade-Pfad gibt. Es teilt viele Konzepte mit ProseMirror, aber ein Umstieg scheint einiges an Arbeit zu erfordern. Obsidian basiert auf CodeMirror und wird daher vermutlich nicht wechseln, aber etwas wie tiptap.dev könnte betroffen sein.
@merijn, ich würde gern wissen, ob du erklären kannst, warum Wordgard den Umstiegsaufwand wert ist.
Edit: Ich habe gesehen, dass viele der Punkte in Marijns persönlichem Blog behandelt werden, und habe für besseren Kontext https://marijnhaverbeke.nl/blog/wordgard-0.1.html bei HN eingereicht.
Wie im Blogpost beschrieben, haben sich aber einige neue Design-Einsichten angesammelt, mit denen sich bestimmte Probleme vermeiden lassen, auf die ich bei ProseMirror gestoßen bin. Deshalb wollte ich eine neue Iteration bauen.
Ich werde im Dokumentationsbereich der Website einen Link zum Blogpost hinzufügen.
Und der Name ist marijn, nicht merijn.
Die Landingpage scheint mehr Informationen zum „Warum“ zu brauchen, nicht nur zum „Was“.
Unabhängig vom Editor ist die beauftragte Künstlerin wirklich beeindruckend. Sehr elegant und sofort ins Auge fallend: https://kamilastankiewicz.com/
Vor etwa 25 Jahren war es eine große Hürde, für die Schülerzeitung eine WYSIWYG-Editor-Komponente auf einer PHP-Nuke-Site zum Laufen zu bringen, und ich erinnere mich, dass wir es am Ende geschafft haben.
Es ist absurd, dass es für so eine Funktionalität keinen Webstandard gibt, dessen Implementierung schon vor 15 Jahren abgeschlossen war.
contenteditable, und Dinge wie Wordgard oder ProseMirror sind im Kern ebenfalls darauf aufgebaut. Der Rest ist eher Benutzeroberfläche und Interoperabilität mit Systemen, die keine beliebige HTML-Eingabe wollen.Das sieht erstaunlich gut aus.
Ich habe kürzlich nach etwas Ähnlichem gesucht und es am Ende selbst gebaut: blockbasierte Operational Transformation (OT) mit Synchronisierung zu einem lokalen Server und differenzbasierter Synchronisierung zu einem Remote-Server.
Beim Lesen des Systemleitfadens nicke ich ständig. Die Ähnlichkeiten und Unterschiede zu sehen, fühlt sich ziemlich bestätigend an.
Es gibt einen ganz grundlegenden Bereich, in dem alle Editoren gescheitert sind: Kann man auf dem iPhone innerhalb des Editors einen vollständigen Satz eingeben?
Wordgard besteht diesen Test nicht. Eingaben aus Autokorrektur oder Tastaturvorschlägen werden verschluckt, und teilweise eingegebene oder falsch geschriebene Wörter werden gelöscht.
Mobile Safari und Android Chrome verhalten sich im Gegensatz zu ihren Desktop-Geschwistern in sehr vielen Dingen merkwürdig und legen Standards ziemlich locker aus. Damit es richtig funktioniert, braucht man deshalb oft einen langen Rattenschwanz an Workaround-Code.
Wordgard wird sicher auch irgendwann dort ankommen, aber der Fokus vor dem ersten Release lag auf der Architektur.
Auswahl funktionierte nicht, Autokorrektur ging kaputt, Tippen auf Text bewegte den Cursor nicht, Eingaben blieben hängen, und die Tastatur verschwand nicht, wenn das Element den Fokus verlor.
In den letzten Jahrzehnten gab es mehrere Versuche, dem Web ein brauchbares Rich-Text-Element hinzuzufügen, aber ich weiß nicht, warum sie alle gescheitert sind. Vermutlich, weil es eine große, komplexe und wenig dankbare Aufgabe ist.
Vernünftige native Rich-Text-Unterstützung ist einer der großen blinden Flecken des Webs. Native Plattformen haben dieses Problem schon vor Jahrzehnten gelöst.
Vor etwa sechs Jahren habe ich mich sehr damit abgequält, Autovervollständigung für entfernte Ressourcen im @-Stil zu untersuchen und zu implementieren, also Funktionen zum Verweisen auf andere Benutzer oder Dokumente. Die Erweiterungsweise dieses Editors wirkt wie eine Weiterentwicklung von ProseMirror.
Es wäre wirklich schön, wenn das eine eingebaute Standardfunktion wäre und man es nicht selbst anhand des Dinosaurier-Beispiels bauen müsste. Jedes Mal, wenn ich eine solche Texteditor-Bibliothek verwende, ist das mein wichtigster Anwendungsfall, danach kommt WYSIWYG.
Mobile-Unterstützung erster Klasse braucht es genauso.
Was mir bei ProseMirror über TipTap schwergefallen ist: Sehr oft muss man die JSON-Repräsentation eines Dokuments programmatisch bearbeiten, um Daten zu extrahieren. Dafür braucht man eine statisch typisierte Darstellung oder bevorzugt sie zumindest stark.
ProseMirror hat dafür eigentlich nichts vorgesehen, sodass wir am Ende eines von zwei Dingen getan haben:
Ich habe Wordgard noch nicht ausprobiert und weiß daher nicht, ob es dieses Problem behandelt, aber ich wollte diesen Schmerzpunkt erwähnen, weil es gut wäre, ihn zu lösen.
Das Artwork der Website ist wunderschön. Diese Art, Aufmerksamkeit zu erzeugen, fühlt sich fast wie etwas an, das in Vergessenheit geraten ist.
Ich mag WYSIWYG im Web nicht. Man formatiert einen Forumsbeitrag lang und mühsam, schließt den Tab, und alles ist weg.
Ich bevorzuge es, einen lokalen Texteditor zu verwenden und dann mit Ctrl+V in das Webformular einzufügen. Mit Markdown geht das.
Als ich das zum ersten Mal erlebt habe, nachdem ich versehentlich einen Tab geschlossen hatte, war das eine wirklich angenehme Überraschung.
Der Punkt ist: Das ist kein technisches Problem, sondern ein Produktproblem.
Für meine Notizen-App habe ich mich für WYSIWYG entschieden, weil es keinen Platz für eine geteilte Ansicht gibt und ich auch nicht nur Markdown-Rohtext sehen wollte.
Mein größter Kritikpunkt an WYSIWYG ist, dass es im Weg stehen kann. Zum Beispiel erstellt man einen verbatim-Block und kommt dann nicht mehr aus diesem Block heraus. Ich schaue dich an, Teams. Vielleicht war das auch der Grund, warum ich LaTeX so mochte.
Ich freue mich wirklich, nach langer Zeit wieder echte Kunst zu sehen. Sieht gut aus.