Pour reprendre et compléter la discussion de Refaire un éditeur à base de CodeMirror + ajouts (#3720) · Tickets · spip / porte_plume · GitLab sur un éditeur WYSIWYG pour SPIP moderne et parce que le projet est lancé « pour de bon », je tente une synthèse pour essayer de faire une feuille de route accompagnée d’un certain nombre de points à discuter.
Pour les lecteurs pressés : « Help wanted » pour le comparatif des éditeurs
Cahier des charges :
En s’inspirant des éléments donnés dans ticket initial on pourrait le définir (grossièrement) par :
- Dans l’éditeur avoir une vue avec le « vrai » rendu HTML c’est à dire proche de la mise en forme finale (avec les images, modèles, etc)
- A minima, dans un premier temps, supporter en WYSIWYG tous les raccoucis typographiques de SPIP « de base » (= sans plugins autres que ceux du core) : soit les
-*
,{...}
,<doc123>
et autres tableaux ou notes de bas de page… - Supporter les variations de langue en
<multi>
- En parallèle, pouvoir intégrer sous leur forme « code » tous les modèles et raccourcis supplémentaires (= ceux amenés par les plugins)
- Pouvoir « switcher » entre la vue WYSIWYG et la vue « code typographique »
- Dans l’esprit de ce qui est fait avec Composer et les lib PHP : utiliser un éditeur ayant déja une communauté de développement conséquente, un « écosystème » de plugins, une API pour permettre « l’extensibilité »…
…et le tout bien sûr en open-source ! - Le code produit doit pouvoir se stocker correctement dans un champ TEXTE de la base de données
- Toujours dans une optique de ne « pas réinventer la roue », l’idée serait de passer le code typographique par défaut de SPIP au format Markdown, dans sa version « étendue » CommonMark et/ou GitHub Flavored Markdown (GFM) telle que définie sur Extended Syntax | Markdown Guide (afin d’avoir le support des tableaux et notes de bas de page en particulier)
Choix de l’éditeur :
Le tableur Framacalc - tableur collaboratif en ligne devrait permettre de comparer un peu plus précisément les multiples éditeurs listés dans le ticket initial. Pour l’instant incomplet toutes les bonnes volontés sont les bienvenues pour le compléter tant au niveau des infos techniques que des « retours utilisateurs » !
Mise en oeuvre :
A priori la « version cible » serait SPIP 5 pour un éventuel plugin-dist en remplacement du Porte-plume mais d’ici là c’est d’abord un plugin pour SPIP 4 avec le plugin Mardown pour SPIP en « necessite » (configuré dans le mode « Syntaxe par défaut: MarkDown »). Dans les 2 cas l’utilisation de l’éditeur WYSIWYG impliquerait que le code généré par défaut dans le SPIP soit du MD
Dans les « tâches annexes » il y a (entre autre) :
- la mise à jour de la lib PHP utilisée par le plugin « Markdown pour SPIP » en la remplaçant par celle de PHPLeague (https://commonmark.thephpleague.com/) comme signalé dans ce ticket Librairie MarkDown sous-jacente (#1) · Tickets · spip-contrib-extensions / markdown · GitLab
- l’évolution du plugin « Insérer modèles » pour qu’il puisse être compatible MD et, à terme, devenir l’outil permettant l’insertion « quasi WySIWYG » des modèles dans l’éditeur
- un « convertisseur » SPIP → MD pour permettre de passer l’intégralité d’un SPIP compatible avec l’éditeur. A noter qu’il ne s’agit pas de faire des « aller-retour » entre typo SPIP et typo MD mais uniquement de faire la conversion « une fois pour toute ». Dans l’idée un script cli pour permettre de traiter des volumes d’articles importants
Des points à discuter
- Etant donné le fonctionnement actuel des éditeurs, faut il privilégier / imposer un éditeur fonctionnant « par blocs » ? (= édition bloc par bloc par opposition aux éditeurs « à l’ancienn » cad traitant l’ensemble du texte en une seule entité)
- Quel « format pivot » ? Les éditeurs mis en test fonctionnent, dans leur majorité, en créant un contenu temporaire qui permet la génération de la vue WYSIWYG en HTML. Ce code sous-jacent constitue le « format pivot » (souvent du JSon). Au moment de l’enregistrement en BDD il sera transformé en « format de stockage » : en général soit du HTML soit du MD.
…et j’en oublie forcément mais l’intention n’est pas trop de tergiverser et couper les cheveux en 4 à l’infini mais plutôt de pouvoir trouver un consensus / base de développement opérationnel d’ici l’été !