Mustache (motor de plantillas)

Mustache es un motor de plantillas para web con implementaciones disponibles para ActionScript, C++, Clojure, CoffeeScript, ColdFusion, Common Lisp, D, Dart, Delphi, Erlang, Fantom, Go, Haskell, Io, Java, JavaScript, Julia, Lua, .NET, Objetive-C, OCaml, Perl, PHP, Pharo, Python, R, Racket, Ruby, Rust, Scala, Smalltalk, Swift, Tcl, CFEngine y XQuery.
Mustache está considerado como un sistema "sin lógica" ya que carece de sentencias explícitas de control de flujo, como las condicionales if y else o los bucles for. Sin embargo, es posible obtener estructuras repetitivas y evaluación condicional usando etiquetas de sección que procesan listas y lambdas.
Su nombre, "Mustache" (bigote en inglés), se debe a que hace un uso intensivo de las llaves , { }, que recuerdan a un bigote inclinado 90 grados.
Mustache se usa principalmente en aplicaciones web y de celulares.​​
Mustache-1 estaba inspirado en "ctemplate" y "et",​ y comenzó como un repositorio de Github a finales de 2009. La primera versión estaba implementada en Ruby, y hacía funcionar plantillas de texto YAML. Sus principios (que todavía preserva) eran:
Los datos de entrada pueden ser una clase, de modo que pueden ser considerados una vista MVC. La plantilla Mustache no hace otra cosa que llamadas a métodos de la vista (de los datos de entrada).​ Toda la lógica, decisiones y código están contenidos en esta vista, y todo el marcado (p. ej. la salida XML) está contenido en la plantilla. En un contexto MVP: los datos de entrada proceden del presentador MVP y la plantilla Mustache es la vista MVP.
La plantilla más simple posible:
Una plantilla con etiqueta de sección:
Aquí, si x es un valor booleano entonces la etiqueta de sección actúa como una sentencia condicional if, pero si x es un vector entonces actúa como un bucle foreach.
Una plantilla que no genera secuencias de escape:
Aquí, si cuerpo contiene HTML, no se usarán secuencias de escape.
Los editores Vim, Emacs, TextMate, Coda, Atom y Kate/KWrite/KDevelop disponen de coloreado de sintaxis.
Muchos marcos de trabajo para webs (p. ej. CakePHP) permiten el uso de plantillas Mustache. La disponibilidad en JavaScript incluye tanto a la programación en el lado del cliente (con muchas populares bibliotecas de JavaScript y marcos AJAX como jQuery, Dojo y YUI), como al JavaScript del lado del servidor, con Node.js y CommonJS.
Hay disponibles muchas implementaciones del motor Mustache, y todas ellas cumplen una especificación común (véanse los enlaces externos), lo que, para los usuarios finales, da lugar a una sintaxis común.
La última versión (a fecha de enero de 2017) es la 1.1.2, de marzo de 2011.​
Todos los motores Mustache de la arquitectura v1.X tienen un método render, una clase Mustache_Compiler y una clase Parser.
Mustache ha inspirado numerosas bibliotecas de plantillas para JavaScript que se basan en su simplicidad original, añadiendo ciertas funcionalidades o usos.
Handlebars.js se describe como:
Handlebars es uno de los motores de plantillas más populares en npm, superando incluso a Mustache (con más de 9 millones de descargas durante el mes de diciembre de 2017).
Algunas de las extensiones más importantes de Handlebars respecto de su predecesor son:
Usando el contexto:
En Mustache esto requeriría, o bien un nuevo bloque para el objeto anidado, o bien deshacer el anidamiento del contexto, lo que resultaría en:​
Además, añade otras funcionalidades principalmente para facilitar su uso.