Refaire un éditeur à base de CodeMirror + ajouts
Cahier des charges :
- Dans l'éditeur lui-même, avoir une vue plus sémantique de ce que l'on tape (WYSIWY Mean !)
- Pouvoir mettre en plein écran
- Pouvoir prévisualiser le vrai rendu HTML final (avec les images, modèles, etc)
- Pouvoir éditer côte à côte avec la prévisu
- Être pérenne et que le noyau puisse reconnaitre plusieurs syntaxes
Des gens ont fait ça pour Markdown mais malheureusement QUE pour Markdown. Mais en fait quasiment tout ce qui est important est géré en sous-main par CodeMirror ! https://simplemde.com/
Leur éditeur est en fait relativement simple : => c'est CodeMirror à 80%
- ils ajoutent une CSS qui ne change pas juste la couleur pour la syntaxe, mais aussi la taille, pour les titres, gras, italique, etc
- ils ajoutent une barre de boutons
- ils ajoutent un système de prévisu (seul ou côte à côte)
CodeMirror est entre l'autre l'éditeur de code de Chrome et Firefox, et de milles autres choses. Il est à priori (très) pérenne, modulaire, et sait gérer plusieurs syntaxes en les déclarant dans un module JS (un "mode"). En plus de la reconnaissance de syntaxe, il gère déjà plein de plugins comme raccourcis claviers, continuer une liste quand on fait Entrée, etc.
Pour SPIP je propose cela :
- faire un mode CodeMirror qui gère uniquement les modèles SPIP, et peut-être les liens (ce qui permettrait de l'utiliser avec d'autres syntaxes que SPIP, notamment dans Markdown)
- faire un mode CodeMirror pour tous les trucs SPIP autre que modèles
- faire une CSS qui rend plus sémantique la saisie SPIP (agrandir les intertitres, etc)
- récupérer la CSS pour la saisie Markdown de SimpleMDE
- trouver une barre de boutons se basant déjà sur CodeMirror : les boutons ne feraient qu'appeler des comportements CodeMirror
- re-implémenter notre système de prévisu + de fullscreen et côte à côte dans cette nouvelle barre (= comme SimpleMDE !), sachant que nous la prévisu ça appelle un truc serveur, alors que SimpleMDE il semble que c'est tout en JS client.
Je pense que le plus gros est de faire les deux modes de syntaxes SPIP pour CodeMirror. Mais une personne a fait un projet très cool qui apparemment fonctionne déjà : une déclaration de grammaire en JSON, beaucoup mieux que la programmation JS des modes de CodeMirror : https://github.com/foo123/codemirror-grammar Et ça marche !
Pour le reste, on doit pouvoir s'inspirer de SimpleMDE mais en généralisant :
- Ce serait bien d'avoir une barre de bouton pour SPIP et pour Markdown en même temps (en fait avoir deux déclarations, suivant le mode voulu)
- Avoir notre prévisu-serveur.
Comme on le remarque, je propose deux choses qui permettent de garder Markdown sous la main :
- séparer la déclaration des modèles (et peut-être des liens)
- avoir deux déclarations de boutons
Cela permettra d'office, avec le même éditeur, la même base commune, de savoir gérer à la fois SPIP et Markdown. Cela me semble important à prendre en compte dès le début.