Das wird ein dicker Brocken.
Sämtliche BBCode-WYSIWYG-Editoren sind weitestgehend mist und scheitern spätestens bei mobiler Anwendung. Die Nachfrage ist einfach zu gering.
Ziel dieser Story ist, es auf HTML-Editoren umzusteigen, ebenfalls mit WYSIWYG-Funktionalität. Gute Kandidaten wären
Redactor II oder
CKEditor 5, wobei Letzterer NPM erfordert, also eher etwas Overkill. Die bessere Mobilunterstützung gewinnt denke ich.
Anforderungen an die letztendliche Editor-Anwendung:
- BBCodes müssen weiterhin funktionieren
- Custom-Buttons/-Funktionen können eingebunden werden
Davor müssen aber grundlegend einige Dinge angepasst werden:
- Sämtliche bestehenden Texte in der Datenbank müssen von BBCode nach HTML konvertiert werden! Es sollen aber nur jene Codes konvertiert werden, die eine bijektive Abbildung nach HTML haben, bspw. b, i, u, list, font, size, ...
Potentiell dynamische Inhalte oder solche, die eine komplexere Implementierung im BBCodeParser haben, sollen weiterhin BBCodes bleiben
- Sämtliche Aufrufe der MessageParser Klasse müssen von den Parametern her auf "allowHTML" umgestellt werden - in Kombination mit BBCode. Dadurch sollten die <br />-Umbrüche weiterhin die einzigen Umbrüche sein, während \n (bisher nur für BBCode relevant) lediglich eine Code-Formatierung darstellt und damit nicht zu <br /> konvertiert wird
- Bestehende "dynmische" BBCodes müssen dem jeweiligen HTML-Editor in Form von Plugins beigebracht werden
- Beim Speichern von Texten auf dem Server sollen die statischen BBCodes direkt in HTML übersetzt werden (b, i, u, ...). Dadurch ermöglichen wir einen Parallelbetrieb von HTML- und BBCode-Editoren, warum auch immer.
Dynamische BBCodes bleiben BBCodes.
- Beim Speichern von Texten auf dem Server muss unbedingt ein HTML-Purifier durchlaufen werden. Durch HTML-Editoren schaffen wir natürlich große Einstiegslöscher für XSS-Angriffe - also sollten wir uns da gut absichern.
- Eine explizite Whitelist von validen HTMLTags muss aufgestellt werden
Boohja
In einem ersten Schritt wird es diesen Editor nur für das Wiki geben (Erstellen/Bearbeiten von Artikeln).Der Umbau an allen anderen Stellen kommt dann Schrittweise, da verdammt viel.