Journal Meikik, un nouveau Dialect pour Thymeleaf pour l'affichage de texte saisi par les utilisateurs

Posté par  . Licence CC By‑SA.
Étiquettes :
4
10
fév.
2022

Bonjour Nal.

Je voudrais te présenter mon dernier projet, dans l'espoir de recevoir des moules plus expérimentées que moi des commentaires constructifs et instructifs ! Après tout, j'ai presque 24h avant qu'on soit Vendredi.

Dans le cadre de mon travail, et aussi celui de mes loisirs (développement du site d'un festival de cinéma qu'il est bien !), je me suis retrouvé souvent devant le même problème : je souhaitais proposer à des utilisateurs pas forcement calé en informatique de remplir le champ d'un formulaire avec un texte devant s'afficher sur le site. Hors, lorsqu'on remplace simplement le contenu d'une balise html avec le texte saisi, les retours chariot passent naturellement à la trappe. Pas terrible d'avoir toute la description d'un film condensée sur une seul longue ligne !
Thymeleaf ne propose pas de solution standard pour éviter cela. Certes, on peut utiliser les fonctions de traitement de chaînes de caractères et remplacer un simple <p th:text="&{monTexte}"> par un long et barbare <p th:utext="${#strings.replace(#strings.escapeXml(monTexte),T(java.lang.System).getProperty('line.separator'),'&lt;br /&gt;')}" >. Mais c'est moche, pas lisible, et surtout cela ne marche plus avec les versions les plus récentes de Thymeleaf (apparemment depuis la version 3.0.12).
Je me suis donc motivé pour écrire un dialect qui permettra d'écrire simplement un <p text:basic="${monTexte}"> bien plus lisible. Et tant qu'à faire, mes programmateurs préférés m'ayant demandé s'il était possible de mettre en gras et d'ajouter des liens, de leur offrir tout ça en ajoutant <p text:bbcode="&{monTexte}">.

C'est ainsi qu'est né Meikik.

https://github.com/oxayotl/meikik-project

J'ai appris pas mal de choses en travaillant sur ce projet. Notamment, il me semblait important d'offrir la possibilité aux projets qui s'appuient sur Meikik d'ajouter le plus facilement possible leurs propres tag BBCode. En effet, si certains tags BBCode peuvent fonctionner de la même façon sur tous les sites (par exemple [b] qui met juste en gras), d'autres auront besoin d'être modifiés pour s'accorder aux spécificités de chaque projet, comme la balise de citation [quote].
Comme je ne souhaitais pas lier Meikik à l'utilisation de Spring, je ne pouvais pas utiliser le mécanisme de Bean de Spring. Après avoir pas mal tâtonné j'ai fini par m'appuyer sur la bibliothèque Reflections (et une bidouille qui marche, mais dont je ne suis pas très sûr) pour rechercher toutes les classes qui étendent ma classe BBCodeTag. Cela fonctionne bien pour rendre facile la tâche d'ajouter le support de plus de balise BBCode personalisée, mais je ne suis pas très satisfait de cette solution. D'abord parce qu'elle me demande d'ajouter une dépendance qui est 6 fois plus lourde que ma propre bibliothèque, et ensuite (surtout) parce que je ne suis pas du tout sûr de ce que cela pourrait entraîner au niveau des performances, sur un gros projet qui défini énormément de classes.

Dans le futur, j'envisage d'ajouter le support de Markdown en plus de BBCode.

P.S. : Oui, le nom du projet vient évidemment de ce à quoi vous pensez !

  • # avec le décodeur ?

    Posté par  (site web personnel, Mastodon) . Évalué à 3.

    P.S. : Oui, le nom du projet vient évidemment de ce à quoi vous pensez !

    Euhhhh à quoi suis-je sensé penser ?
    Au passage, qui est Thymeleaf ?

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # Thymeleaf c'est du java

    Posté par  . Évalué à 8.

    Pour les moules qui ne sont pas de bornéo … dont je fais partie je vous économise une recherche rapide en vous offrant un extrait de Wikipédia à propos de Thymeleaf

    Thymeleaf est un moteur de template, sous licence Apache 2.0, écrit en Java pouvant générer du XML/XHTML/HTML5

    Source : https://fr.wikipedia.org/wiki/Thymeleaf

    eric.linuxfr@sud-ouest.org

  • # CSS ?

    Posté par  (site web personnel, Mastodon) . Évalué à 7.

    Salut,

    Hors, lorsqu'on remplace simplement le contenu d'une balise html avec le texte saisi, les retours chariot passent naturellement à la trappe. Pas terrible d'avoir toute la description d'un film condensée sur une seul longue ligne !

    j'ai peut-être mal compris le problème mais les retours à la ligne peuvent être gardés avec la propriété CSS white-space (cf. https://developer.mozilla.org/fr/docs/Web/CSS/white-space), en utilisant la valeur pre-line par exemple.

    Bon après ton projet semble gérer des langages de balisage, donc c'est plus poussé que ça.

    • [^] # Re: CSS ?

      Posté par  . Évalué à 5.

      Ah oui je me sens un peu con du coup ! En plus c'est pas récent et c'est supporté même par des navigateurs très anciens d'après caniuse.com.
      Merci pour l'info !

      LinuxFr, parfois c'est bien de la MERDE : https://linuxfr.org/users/c2462250/journaux/ecriture-inclusive-feministes-et-wikipedia#comment-1793140

      • [^] # Re: CSS ?

        Posté par  (site web personnel, Mastodon) . Évalué à 5.

        Ah oui je me sens un peu con du coup !

        Faut pas, l'informatique c'est très large et personne n'est omniscient.

        Content d'avoir aidé.

      • [^] # Re: CSS ?

        Posté par  (site web personnel, Mastodon) . Évalué à 3. Dernière modification le 10 février 2022 à 18:27.

        Ça t'a fait apprendre des trucs au passage, donc c'est pas con. Et puis il y a toujours la gestion de BBCode et de MarkDown qui ne sont pas intégrés dans les navigateurs. ;-)

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # Suspens ...

    Posté par  (site web personnel) . Évalué à 2.

    P.S. : Oui, le nom du projet vient évidemment de ce à quoi vous pensez !

    Mais qui que c'est, alors ?

    Adhérer à l'April, ça vous tente ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.