5166 sujets

Le Bar du forum

Modérateur
Salut tout le monde,

Je suis en train de faire un petit projet perso. Je pensais le finir ce mois-ci, mais ce n'est pas encore ça. J'ai dû me créer un petit moteur de template en JS. Je sais, il y en a des tonnes. La plupart sont plus lourds. Je n'ai pas besoin d'un tank pour tuer la mouche. Pour la petite idée de résolution de cette lib, j'ai pensé à reprendre l'idée du pattern Interpreter.

Puis, pour ce projet perso, je n'ai pas besoin de node/npm. Tout est en python (Flask puisque c'est un petit projet) et pour le css, j'utilise Zurb que j'aime bien.

Bref, je vous partage le code. Vous pouvez le trouver dans mon bac à sable.
edit : bizarrement, codepen est dans les choux. En local, ça fonctionne bien !

Bonne soirée à vous

ps : Si vous aimez les accolades Smiley lol
Modifié par niuxe (03 Feb 2025 - 17:25)
Bonjour Niuxe,

Bonne initiative !

Par contre sur la démo il y a quelque chose de cassé, mais je ne sais pas où**. J'ai réussi à obtenir un rendu en neutralisant ce tag HTML :
<div id="target_b"></div>

Donc un problème avec la structure des données qui passe mal dans la boucle for ?

Une fois ce problème réglé il faudra aussi s'attaquer aux balises injectées qui ne sont pas interprétées :
<strong>Découvrez nos articles !</strong>


___
** Je ne peux rien tester, je bidouille à partir de mon smartphone car mon setup (totalement obsolète) est down depuis une semaine Smiley decu ... l'occasion de racheter une nouvelle unité centrale plus à jour Smiley smile .
Modifié par Olivier C (30 Jan 2025 - 04:45)
Pour les échappements j'ai trouvé : si l'on remplace les .textContent par des .innerHTML :
txtTplIndexPosts = tplIndexPosts.innerHTML,
txtTplUsersList = tplUsersList.innerHTML,

... et que l'on neutralise la regex permettant d'échapper les chevrons (intervention possible à deux endroits dans le code, ici on le fait au niveau de la fonction de rendu) :
return renderFunction(data, str => str.replace(/[&"']/g,

Alors le rendu sera correct (mais sans doute plus sécurisé pour tous les cas d'usage).

Il faudrait prévoir une option pour échapper ou non les chevrons, les moteurs de rendu font cela en général, au niveau de la variable elle-même à rendre dans le HTML. Exemple sous Pug.js : `=` vs `!=` (le point d'exclamation rend la variable sans échapper son contenu).

EDIT : ah mais tu l'avais fait ! C'est juste l'exemple où il y avait un oubli. Au final il m'a juste fallu remplacer ceci :
{%= description %}

Par cela :
{%- description %}

Modifié par Olivier C (30 Jan 2025 - 05:28)
Administrateur
Salut,

bien intéressant ton moteur !
C'est un besoin que j'ai pour des projets persos et aucune envie de sortir Handlebars pour ça, les plugins Rollup/Vite err je comprend pas ou ça me convient pas ou la doc... alors que j'ai besoin de faire un import template truc (nan j'arriverai pas à expliquer Smiley baille ) avec quelques variables/remplacements.
En ce moment je complète un "HTML Reporter" mais je garde ta réalisation sous le coude, merci ! Smiley lol

Pattern Interpreter, oki je note aussi Smiley program
Modérateur
bonjour Olivier Smiley smile

En effet, je viens de m'apercevoir de ce souci. Sur un serveur en local, je n'ai pas de problème. Je pense que ça vient de codepen.

Lors du développement de cette lib, j'ai eu quelques soucis avec l'élément <template>. J'ai eu des comportements douteux Smiley hum . Si j'utilise <table> dans <template>, l'objet à itérer n'est pas accessible. Avec <template>, il m'est arrivé régulièrement d'avoir des déboires avec. C'est la raison pour laquelle, j'utilise une meilleure alternative <script type="text/template>

Tu affiches la variable telle quelle :

{%- .... %}


Tu affiches la variable échappée :

{%= .... %}


C'est une expression JS :

{% .... %}


À noter que si par exemple, tu dois utiliser la méthode Array.join(), tu devras faire :


{%- ['a', 'b'].join(', ') %}


Ne pas oublier que ce moteur est une bicyclette.
Modifié par niuxe (30 Jan 2025 - 12:34)
Modérateur
Felipe a écrit :

bien intéressant ton moteur !


Bonjour Felipe, Smiley smile

Merci pour ton retour.

Felipe a écrit :

C'est un besoin que j'ai pour des projets persos et aucune envie de sortir Handlebars pour ça, les plugins Rollup/Vite err je comprend pas ou ça me convient pas ou la doc... alors que j'ai besoin de faire un import template truc (nan j'arriverai pas à expliquer Smiley baille ) avec quelques variables/remplacements.
En ce moment je complète un "HTML Reporter" mais je garde ta réalisation sous le coude, merci ! Smiley lol

Pattern Interpreter, oki je note aussi Smiley program


En effet et souvent, on n'a pas besoin de la lib sophistiquée et toute l'architecture qui va avec. Parfois, j'ai remarqué des projets avec des configurations énormes. À tel point que pour installer le projet, il faut un Bac + 10 et de longues heures devant nous. Ça en devient ridicule. Je suis même arrivé à la conclusion qu'une structure énorme amènera inévitablement à une dette technique conséquente.

Pour ce moteur de template, j'ai dû persévérer pour arriver à mes fins. Cependant, j'ai sous le coude un code que j'avais amélioré il y a quelque temps. Le portage de printf en JS. Si au cas où, tu en as besoin, fais-moi signe. Je te filerai celui-ci.
Modifié par niuxe (30 Jan 2025 - 13:13)
Administrateur
J'ai pris 5 minutes pour retrouver gulp-html-extend : import mais pas 100% statique et ça me suffisait bien, à de nombreuses reprises. "9 years ago" ué et un peu plus Smiley ravi

Je vois dans ta réponse à Olivier les possibilités : c'est flexible et répond aux besoins principaux.

3615 myproject Je ne connais pas encore exactement mon besoin, c'est probablement plus à base de <template> et... à voir. Des CSS injectées dans des pages, bookmarklets ou repris de bookmarklets, extension navigateur : c'est un bazar pour l'instant car je construis les morceaux avant de penser à comment les réunir ou harmoniser Smiley smile