Moustache (moteur de template)

Mustache est un moteur de création de modèles pour le web avec des implémentations disponibles pour ActionScript, C++, Clojure, CoffeeScript, ColdFusion, Common Lisp, D, Dart, Delphi, Erlang, Fantom, Go, Haskell, Io, Java, JavaScript, Julia, Lua, .NET, Objective-C, OCaml, Perl, PHP, Pharo, Python, R, Racket, Ruby, Rust, Scala, Smalltalk, Swift, Tcl, CFEngine et XQuery.

Mustache est considéré comme un système « sans logique », car il ne comporte pas d’instructions explicites sur le flux de contrôle, telles que les conditions « if » et « else » ou les boucles « for ». Cependant, il est possible d’obtenir des structures répétitives et une évaluation conditionnelle en utilisant des balises de section qui traitent les listes et les lambdas.

Son nom, « Moustache », est dû à sa forte utilisation des accolades , { }, qui ressemblent à une moustache inclinée à 90 degrés.

Mustache est principalement utilisé dans les applications web et mobiles.

Histoire et principes

Mustache-1 a été inspiré par « ctemplate » et « et », et a commencé comme un dépôt Github à la fin de 2009. La première version était implémentée en Ruby, et exécutait des modèles de texte YAML. Ses principes (qu’elle conserve toujours) étaient les suivants :
Les données d’entrée peuvent être une classe, de sorte que l’on peut considérer qu’il s’agit d’une vue MVC. Le modèle Mustache ne fait rien d’autre que des appels de méthode sur la vue (des données d’entrée). Toute la logique, les décisions et le code sont contenus dans cette vue, et tout le balisage (par exemple, la sortie XML) est contenu dans le modèle. Dans un contexte MVP : les données d’entrée proviennent du présentateur MVP et le modèle Mustache est la vue MVP.

Exemples de modèles

Le modèle le plus simple possible :

Un modèle avec une étiquette de section :

Ici, si x est une valeur booléenne, l’étiquette de section agit comme une instruction conditionnelle if, mais si x est un vecteur, elle agit comme une boucle foreach.

Un modèle qui ne génère pas de séquences d’échappement :

Ici, si le corps contient du HTML, aucune séquence d’échappement ne sera utilisée.



Détails techniques

Les éditeurs Vim, Emacs, TextMate, Coda, Atom et Kate/KWrite/KDevelop disposent d’une coloration syntaxique.

De nombreux frameworks web (par exemple CakePHP) prennent en charge l’utilisation des modèles Mustache. La disponibilité de JavaScript comprend à la fois la programmation côté client (avec de nombreuses bibliothèques JavaScript populaires et des cadres AJAX tels que jQuery, Dojo et YUI) et JavaScript côté serveur, avec Node.js et CommonJS.
De nombreuses implémentations du moteur Mustache sont disponibles, et toutes sont conformes à une spécification commune (voir liens externes), ce qui, pour les utilisateurs finaux, se traduit par une syntaxe commune.

La dernière version (en janvier 2017) est la 1.1.2, datée de mars 2011.

Tous les moteurs Mustache de l’architecture v1.X ont une méthode de rendu, une classe Mustache_Compiler et une classe Parser.



Variantes et dérivés

Mustache a inspiré de nombreuses bibliothèques de modèles pour JavaScript qui s’appuient sur sa simplicité d’origine en ajoutant certaines fonctionnalités ou utilisations.

Handlebars.js est décrit comme suit :

Handlebars.js est une extension du langage de gabarit Mustache créée par Chris Wanstrath. Handlebars.js et Mustache sont tous deux des langages de template non logiques qui séparent le code et la vue, ce qui, comme on le sait, est tout à fait normal.
Handlebars est l’un des moteurs de templating les plus populaires dans npm, dépassant même Mustache (avec plus de 9 millions de téléchargements au cours du mois de décembre 2017).

Certaines des extensions les plus importantes de Handlebars par rapport à son prédécesseur sont :

Utilisation du contexte :



Dans Mustache, cela nécessiterait soit un nouveau bloc pour l’objet imbriqué, soit l’annulation de l’imbrication du contexte, ce qui se traduirait par .
En outre, il ajoute d’autres fonctionnalités, principalement pour faciliter l’utilisation.

Similar Posts: