Wikipad: Etherpad-Lite mit DokuWiki synchronisieren

Vor einiger Zeit habe ich mir ein Etherpad-Lite installiert, um verteilt und auch unterwegs Texte verfassen zu können, die ich anschließend veröffentliche oder anderweitig nutze. Das ist soweit toll, doch die Veröffentlichung war in meinen Augen unpraktischer, als sie sein müsste, da ich den Text kopieren, irgendwo anders einfügen und neu formatieren musste.

Meine Idee war es, die Veröffentlichung direkt aus dem Etherpad-Lite heraus erledigen zu können - zum Beispiel bei kleineren Texten, die ich anderen zur Verfügung stellen möchte. Die Frage war nur, über welche Plattform die Veröffentlichung stattfinden sollte.

Anfang dachte ich daran, eine eigene Oberfläche zu entwickeln, allerdings wäre die nicht sonderlich hübsch geworden. Vor kurzem bin ich nun auf DokuWiki gestoßen, das perfekt zu sein schien. Das besondere an DokuWiki ist, dass keine Datenbank verwendet wird, sondern alle Inhalte in einfachen *.txt-Dateien abgelegt werden. Ich könnte also einfach Pads exportieren, als Textdatei ablegen und wäre fertig: Die Idee zu Wikipad war geboren.

Formatierung in Etherpad-Lite

Formatierung in Etherpad-Lite

Implementiert habe ich die Synchronisation in PHP. Das Vorgehen ist relativ einfach. Es gibt einen Pad-Präfix und einen Wiki-Präfix. Alle Pads, die den Pad-Präfix ("<Pad-Präfix>!<Name>") beinhalten, werden in einen Namespace des Wikis überführt ("<Wiki-Präfix>:<Name>"). Man kann die Präfixe auch weglassen, dann werden diese ignoriert und ohne Präfixe gearbeitet. In meinem Fall verwende ich z.B. den Pad-Präfix "wiki!" und einen leeren Wiki-Präfix.

Als erstes lasse ich aus der Etherpad-Lite Datenbank auslesen, welche Pads es mit dem Pad-Präfix gibt. Anschließend wird geprüft, wieviele Revisionen es von diesem Pad gibt. Hat sich seit der letzten Synchronisation die Anzahl der Revisionen geändert, so wird das Pad exportiert und in den data-Ordner des DokuWikis geschrieben.

Formatierung in DokuWiki

Formatierung in DokuWiki

Neben den Präfixen habe ich noch ein paar weitere Steuerungsmechanismen implementiert. So werden Pads nichts synchronisiert, wenn sie direkt nach dem Präfix einen Punkt im Namen haben (z.B. "wiki!.beispiel").

Zudem ist es möglich, inline (das heißt im Content des jeweiligen Pads) die Synchronisation eines Pads zu beeinflussen. Damit ein Pad aus dem Wiki gelöscht wird, muss der Padinhalt dazu mit dem Text [.remove] beginnen. Möchte man stattdessen ein Pad bearbeiten, ohne, dass die aktuell gültige Fassung im Wiki gleich mitbearbeitet wird, so muss der Padinhalt mit dem Text [.ignore] beginnen. In diesem Fall bleibt die aktuelle Seite im Wiki erhalten, wird jedoch nicht mit der neusten Revision des Pads überschrieben.

Den Quelltext von Wikipad findet ihr unter hg.nhg.name/wikipad. Dabei handelt es sich um ein Mercurial-Repository. Ihr könnt es also einfach mit folgendem Befehl auf euren Computer kopieren, wenn ihr Mercurial installiert habt:

1
2
hg clone https://hg.nhg.name/wikipad/
hg clone https://hg.nhg.name/unchroot/

Ich hoffe, Wikipad kann euch von Nutzen sein. 🙂

Update:
In Etherpad Lite Version 1.5.0 wurde der DokuWiki-Export entfernt. Wikipad wurde nun so angepasst, dass es trotzdem noch verwendet werden kann. Leider kann man nun nicht WYSIWYG-Formatierung von Etherpad Lite nutzen, sondern muss die DokuWiki-Stylingsyntax verwenden.

Update:
Da ich Etherpad und Dokuwiki derzeit nicht mehr nutze, habe ich die URLs zu meinen Instanzen von beidem aus dem Artikel entfernt. Der Quelltext von Dokuwiki ist natürlich weiterhin erhältlich.

Synchrone Grüße, Kenny

P.S.: Der umgekehrte Weg, Inhalte vom DokuWiki nach Etherpad-Lite zu synchronisieren, ist derzeit nicht implementiert.

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.