├── .babelrc ├── .gitignore ├── .jshintrc ├── LICENSE ├── Makefile ├── README.md ├── engines ├── dot.js ├── dust.js ├── es6.js ├── handlebars.js ├── jade.js ├── lodash.js ├── marko.js ├── nunjucks.js ├── plates.js ├── pug.js ├── react.js ├── swig.js └── vue.js ├── helpers └── util.js ├── injector.js ├── output ├── compiled.min │ ├── friends │ │ ├── dust.min.js │ │ └── marko.min.js │ ├── if-expression │ │ ├── dust.min.js │ │ ├── jade.min.js │ │ ├── marko.min.js │ │ └── pug.min.js │ ├── projects-escaped │ │ ├── dust.min.js │ │ ├── handlebars.min.js │ │ ├── marko.min.js │ │ └── marko.native-for.min.js │ ├── projects-unescaped │ │ ├── dust.min.js │ │ ├── handlebars.min.js │ │ ├── marko.min.js │ │ └── marko.native-for.min.js │ ├── reverse-helper │ │ ├── dust.min.js │ │ └── marko.min.js │ ├── search-results │ │ ├── dust.min.js │ │ ├── marko.min.js │ │ └── marko.native-for.min.js │ ├── simple-0 │ │ ├── dust.min.js │ │ └── marko.min.js │ ├── simple-1 │ │ ├── dot.min.js │ │ ├── dust.min.js │ │ ├── handlebars.min.js │ │ ├── jade.min.js │ │ ├── marko.min.js │ │ ├── marko.native-for.min.js │ │ ├── nunjucks.min.js │ │ ├── pug.min.js │ │ ├── react.min.js │ │ ├── swig.min.js │ │ └── vue.min.js │ ├── simple-2 │ │ ├── dust.min.js │ │ └── marko.min.js │ └── ui-components │ │ ├── marko.min.js │ │ └── react.min.js ├── compiled │ ├── friends │ │ ├── dust.js │ │ └── marko.js │ ├── if-expression │ │ ├── dust.js │ │ ├── jade.js │ │ ├── marko.js │ │ └── pug.js │ ├── projects-escaped │ │ ├── dust.js │ │ ├── handlebars.js │ │ ├── marko.js │ │ └── marko.native-for.js │ ├── projects-unescaped │ │ ├── dust.js │ │ ├── handlebars.js │ │ ├── marko.js │ │ └── marko.native-for.js │ ├── reverse-helper │ │ ├── dust.js │ │ └── marko.js │ ├── search-results │ │ ├── dust.js │ │ ├── marko.js │ │ └── marko.native-for.js │ ├── simple-0 │ │ ├── dust.js │ │ └── marko.js │ ├── simple-1 │ │ ├── dot.js │ │ ├── dust.js │ │ ├── handlebars.js │ │ ├── jade.js │ │ ├── marko.js │ │ ├── marko.native-for.js │ │ ├── nunjucks.js │ │ ├── pug.js │ │ ├── react.js │ │ ├── swig.js │ │ └── vue.js │ ├── simple-2 │ │ ├── dust.js │ │ └── marko.js │ └── ui-components │ │ ├── marko.js │ │ └── react.js ├── html │ ├── friends │ │ ├── dust.html │ │ └── marko.html │ ├── if-expression │ │ ├── dust.html │ │ ├── jade.html │ │ ├── marko.html │ │ └── pug.html │ ├── projects-escaped │ │ ├── dust.html │ │ ├── handlebars.html │ │ ├── marko.html │ │ └── marko.native-for.html │ ├── projects-unescaped │ │ ├── dust.html │ │ ├── handlebars.html │ │ ├── marko.html │ │ └── marko.native-for.html │ ├── reverse-helper │ │ ├── dust.html │ │ └── marko.html │ ├── search-results │ │ ├── dust.html │ │ ├── marko.html │ │ └── marko.native-for.html │ ├── simple-0 │ │ ├── dust.html │ │ ├── es6.html │ │ ├── lodash.html │ │ └── marko.html │ ├── simple-1 │ │ ├── dot.html │ │ ├── dust.html │ │ ├── handlebars.html │ │ ├── jade.html │ │ ├── marko.html │ │ ├── nunjucks.html │ │ ├── pug.html │ │ ├── react.html │ │ ├── run.js │ │ ├── swig.html │ │ └── vue.html │ ├── simple-2 │ │ ├── dust.html │ │ └── marko.html │ └── ui-components │ │ ├── 0.marko.html │ │ ├── 0.react.html │ │ ├── 1.marko.html │ │ ├── 1.react.html │ │ └── marko.html └── sizes.json ├── package.json ├── reporter.js ├── templates ├── friends │ ├── data.js │ ├── template.dust │ └── template.marko ├── if-expression │ ├── data.json │ ├── template.jade │ ├── template.marko │ └── template.pug ├── projects-escaped │ ├── data.js │ ├── template.dust │ ├── template.hbs │ ├── template.marko │ └── template.native-for.marko ├── projects-unescaped │ ├── data.js │ ├── template.dust │ ├── template.hbs │ ├── template.marko │ └── template.native-for.marko ├── reverse-helper │ ├── data.json │ ├── template.dust │ └── template.marko ├── search-results │ ├── data.json │ ├── template.dust │ └── template.marko ├── simple-0 │ ├── data.json │ ├── template.dust │ ├── template.es6.js │ ├── template.lodash │ └── template.marko ├── simple-1 │ ├── data.json │ ├── template.dot │ ├── template.dust │ ├── template.hbs │ ├── template.jade │ ├── template.jsx │ ├── template.marko │ ├── template.nunjucks │ ├── template.pug │ ├── template.swig │ └── template.vue.js ├── simple-2 │ ├── data.json │ ├── template.dust │ └── template.marko └── ui-components │ ├── components │ ├── ReactColors.jsx │ └── marko-colors │ │ └── index.marko │ ├── data.json │ ├── marko.json │ ├── template.jsx │ └── template.marko └── templating-benchmarks.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["react", "es2015"] 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /work 2 | /build 3 | /.idea/ 4 | /npm-debug.log 5 | /node_modules 6 | /*.sublime-workspace 7 | *.orig 8 | .DS_Store 9 | coverage 10 | *.marko.js -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "predef": [ 3 | "suite", 4 | "bench", 5 | "set", 6 | "it", 7 | "xit", 8 | "console", 9 | "describe", 10 | "xdescribe", 11 | "beforeEach", 12 | "before", 13 | "after", 14 | "waits", 15 | "waitsFor", 16 | "runs", 17 | "raptor", 18 | "$rset", 19 | "$radd", 20 | "$rget", 21 | "$renv", 22 | "$rwidgets", 23 | "$", 24 | "__rhinoHelpers", 25 | "Packages", 26 | "JavaAdapter", 27 | "unescape" 28 | ], 29 | 30 | "globals": { 31 | "define": true, 32 | "require": true 33 | }, 34 | 35 | "node" : true, 36 | "esnext" : true, 37 | "browser" : true, 38 | "boss" : false, 39 | "curly": false, 40 | "debug": false, 41 | "devel": false, 42 | "eqeqeq": true, 43 | "evil": true, 44 | "forin": false, 45 | "immed": true, 46 | "laxbreak": false, 47 | "newcap": true, 48 | "noarg": true, 49 | "noempty": false, 50 | "nonew": true, 51 | "nomen": false, 52 | "onevar": false, 53 | "plusplus": false, 54 | "regexp": false, 55 | "undef": true, 56 | "sub": false, 57 | "white": false, 58 | "eqeqeq": false, 59 | "latedef": true, 60 | "unused": "vars", 61 | 62 | /* Relaxing options: */ 63 | "eqnull": true 64 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 JS Foundation and contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | BIN = ./node_modules/.bin 2 | 3 | .PHONY: main 4 | main: benchmarks 5 | 6 | .PHONY: benchmarks 7 | benchmarks: 8 | $(BIN)/matcha templating-benchmarks.js -R ./reporter.js --expose-gc 9 | 10 | .PHONY: clean 11 | clean: 12 | $(BIN)/markoc . --clean 13 | rm -rf output 14 | -------------------------------------------------------------------------------- /engines/dot.js: -------------------------------------------------------------------------------- 1 | var dot = require('dot'); 2 | 3 | module.exports = { 4 | name: 'dot', 5 | ext: 'dot', 6 | render: function(template, data, callback) { 7 | callback(null, template(data)); 8 | }, 9 | compile: function(src, templatePath, templateName, callback) { 10 | var compiled = 'module.exports=' + dot.template(src).toString(); 11 | callback(null, compiled); 12 | }, 13 | load: function(src, templatePath, templateName, callback) { 14 | callback(null, dot.template(src)); 15 | } 16 | }; -------------------------------------------------------------------------------- /engines/dust.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var dust = require('dustjs-linkedin'); 3 | require('dustjs-helpers'); 4 | dust.onLoad = function(path, callback){ 5 | fs.readFile(path, 'UTF-8', callback); 6 | }; 7 | 8 | 9 | dust.helpers.reverse = require('../helpers/util').reverseDust; 10 | 11 | module.exports = { 12 | name: 'dust', 13 | ext: 'dust', 14 | render: function(template, data, callback) { 15 | template(data, callback); 16 | }, 17 | load: function(src, templatePath, templateName, callback) { 18 | var templateFn = dust.compileFn(src, templateName); 19 | callback(null, templateFn); 20 | }, 21 | compile: function(src, templatePath, templateName, callback) { 22 | var compiled = dust.compile(src, templateName); 23 | callback(null, compiled); 24 | } 25 | }; -------------------------------------------------------------------------------- /engines/es6.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'es6', 3 | ext: 'es6.js', 4 | load: function(src, templatePath, templateName, callback) { 5 | var template = require(templatePath); 6 | callback(null, template); 7 | }, 8 | render: function(template, data, callback) { 9 | callback(null, template(data)); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /engines/handlebars.js: -------------------------------------------------------------------------------- 1 | var handlebars = require('handlebars'); 2 | 3 | var pre = '(function() { var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; templates[%NAME%] = template('; 4 | var post = ');})();'; 5 | 6 | module.exports = { 7 | name: 'handlebars', 8 | ext: 'hbs', 9 | cache: {}, 10 | render: function(template, data, callback) { 11 | callback(null, template(data)); 12 | }, 13 | compile: function(src, templatePath, templateName, callback) { 14 | var compiled = handlebars.precompile(src); 15 | compiled = pre.replace(/%NAME%/, JSON.stringify(templateName)) + compiled + post; 16 | callback(null, compiled); 17 | }, 18 | load: function(src, templatePath, templateName, callback) { 19 | callback(null, handlebars.compile(src)); 20 | } 21 | }; -------------------------------------------------------------------------------- /engines/jade.js: -------------------------------------------------------------------------------- 1 | var jade = require('jade'); 2 | 3 | module.exports = { 4 | name: 'jade', 5 | ext: 'jade', 6 | render: function(template, data, callback) { 7 | callback(null, template(data)); 8 | }, 9 | compile: function(src, templatePath, templateName, callback) { 10 | var compiled = jade.compileClient(src); 11 | callback(null, compiled); 12 | }, 13 | load: function(src, templatePath, templateName, callback) { 14 | callback(null, jade.compile(src)); 15 | } 16 | }; -------------------------------------------------------------------------------- /engines/lodash.js: -------------------------------------------------------------------------------- 1 | var template = require('lodash.template'); 2 | 3 | module.exports = { 4 | name: 'lodash', 5 | ext: 'lodash', 6 | render: function(template, data, callback) { 7 | callback(null, template(data)); 8 | }, 9 | load: function(src, templatePath, templateName, callback) { 10 | callback(null, template(src, { interpolate: /{([\s\S\.\-\_]+?)}/g })); 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /engines/marko.js: -------------------------------------------------------------------------------- 1 | var marko = require('marko'); 2 | 3 | require('marko/compiler').defaultOptions.checkUpToDate = false; 4 | 5 | module.exports = { 6 | name: 'marko', 7 | ext: 'marko', 8 | render: function(template, data, callback) { 9 | callback(null, template.renderToString(data)); 10 | }, 11 | load: function(src, templatePath, templateName, callback) { 12 | var template = marko.load(templatePath); 13 | callback(null, template); 14 | }, 15 | compile: function(src, templatePath, templateName, callback) { 16 | var compiled = require('marko/compiler').compile(src, templatePath); 17 | callback(null, compiled); 18 | } 19 | }; 20 | -------------------------------------------------------------------------------- /engines/nunjucks.js: -------------------------------------------------------------------------------- 1 | var nunjucks = require('nunjucks'); 2 | 3 | nunjucks.configure({ 4 | watch: false 5 | }); 6 | 7 | module.exports = { 8 | name: 'nunjucks', 9 | ext: 'nunjucks', 10 | render: function(template, data, callback) { 11 | template.render(data, callback); 12 | }, 13 | load: function(src, templatePath, templateName, callback) { 14 | 15 | var template = nunjucks.compile(src); 16 | callback(null, template); 17 | }, 18 | compile: function(src, templatePath, templateName, callback) { 19 | var compiled = nunjucks.precompile(templatePath, { 20 | name: templateName 21 | }); 22 | callback(null, compiled); 23 | } 24 | }; -------------------------------------------------------------------------------- /engines/plates.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'plates', 3 | ext: 'plates', 4 | cache: {}, 5 | render: function(template, data, callback) { 6 | var inputHtml = template.html; 7 | var controller = template.controller; 8 | 9 | var outputHtml = controller(inputHtml, data); 10 | callback(null, outputHtml); 11 | }, 12 | load: function(src, templatePath, templateName, callback) { 13 | var controllerPath = templatePath + '.controller.js'; 14 | callback(null, { 15 | controller: require(controllerPath), 16 | html: src 17 | }); 18 | } 19 | }; -------------------------------------------------------------------------------- /engines/pug.js: -------------------------------------------------------------------------------- 1 | var pug = require('pug'); 2 | 3 | module.exports = { 4 | name: 'pug', 5 | ext: 'pug', 6 | render: function(template, data, callback) { 7 | callback(null, template(data)); 8 | }, 9 | compile: function(src, templatePath, templateName, callback) { 10 | var compiled = pug.compileClient(src, { compileDebug: false }); 11 | callback(null, compiled); 12 | }, 13 | load: function(src, templatePath, templateName, callback) { 14 | callback(null, pug.compile(src, { compileDebug: false })); 15 | } 16 | }; -------------------------------------------------------------------------------- /engines/react.js: -------------------------------------------------------------------------------- 1 | var React = require('react'); 2 | var ReactDOMServer = require('react-dom/server'); 3 | 4 | var babel = require('babel-core'); 5 | var babelConfig = { 6 | presets: ["react", "es2015"] 7 | }; 8 | 9 | module.exports = { 10 | name: 'react', 11 | ext: 'jsx', 12 | render: function(Component, data, callback) { 13 | var html = ReactDOMServer.renderToString(React.createElement(Component, data)); 14 | callback(null, html); 15 | }, 16 | load: function(src, templatePath, templateName, callback) { 17 | var Component = require(templatePath); 18 | callback(null, Component); 19 | }, 20 | compile: function(src, templatePath, templateName, callback) { 21 | var transformed = babel.transform(src, babelConfig); 22 | callback(null, transformed.code); 23 | } 24 | }; 25 | 26 | -------------------------------------------------------------------------------- /engines/swig.js: -------------------------------------------------------------------------------- 1 | var swig = require('swig'); 2 | 3 | module.exports = { 4 | name: 'swig', 5 | ext: 'swig', 6 | render: function(template, data, callback) { 7 | var output = template(data); 8 | callback(null, output); 9 | }, 10 | load: function(src, templatePath, templateName, callback) { 11 | var template = swig.compileFile(templatePath); 12 | callback(null, template); 13 | }, 14 | compile: function(src, templatePath, templateName, callback) { 15 | var precompiled = swig.precompile(src, { 16 | filename: templatePath, 17 | locals: {} 18 | }); 19 | 20 | var compiled = 'module.exports=' + precompiled.tpl.toString().replace('anonymous', ''); 21 | callback(null, compiled); 22 | } 23 | }; -------------------------------------------------------------------------------- /engines/vue.js: -------------------------------------------------------------------------------- 1 | var renderer = require('vue-server-renderer').createRenderer(); 2 | 3 | module.exports = { 4 | name: 'vue', 5 | ext: 'vue.js', 6 | render: function(App, data, callback) { 7 | const vm = new App({ 8 | data: data 9 | }); 10 | 11 | 12 | renderer.renderToString(vm, function(err, html) { 13 | if (err) { 14 | throw err; 15 | } 16 | 17 | return callback(null, html); 18 | }); 19 | }, 20 | load: function(src, templatePath, templateName, callback) { 21 | var App = require(templatePath); 22 | callback(null, App); 23 | }, 24 | compile: function(src, templatePath, templateName, callback) { 25 | callback(null, ''); 26 | } 27 | }; 28 | 29 | -------------------------------------------------------------------------------- /helpers/util.js: -------------------------------------------------------------------------------- 1 | function reverse(str) { 2 | var out = ""; 3 | for (var i=str.length-1; i>=0; i--) { 4 | out += str.charAt(i); 5 | } 6 | return out; 7 | } 8 | 9 | exports.reverseDust = function(chunk, context, bodies, params) { 10 | var string = params.str; 11 | return chunk.write(reverse(string)); 12 | }; 13 | 14 | exports.reverse = reverse; -------------------------------------------------------------------------------- /injector.js: -------------------------------------------------------------------------------- 1 | var startRegExp = //gi; 2 | var endRegExp = //g; 3 | 4 | function Injector(pageHtml, keepMarkers) { 5 | this.keepMarkers = keepMarkers === true; 6 | this.parts = []; 7 | this.injectIndexes = {}; 8 | this.findSlots(pageHtml); 9 | } 10 | 11 | Injector.prototype = { 12 | findSlots: function(pageHtml) { 13 | var injectIndexes = this.injectIndexes, 14 | parts = this.parts, 15 | startMatches, 16 | endMatch, 17 | begin = 0; 18 | 19 | startRegExp.lastIndex = 0; 20 | 21 | 22 | while ((startMatches = startRegExp.exec(pageHtml))) { 23 | var slotName = startMatches[1]; 24 | 25 | slotName = slotName.toLowerCase(); 26 | 27 | parts.push(pageHtml.substring(begin, startMatches.index)); 28 | 29 | injectIndexes[slotName] = parts.length; 30 | parts.push(''); 31 | 32 | endRegExp.lastIndex = startRegExp.lastIndex; 33 | endMatch = endRegExp.exec(pageHtml); 34 | if (endMatch) { 35 | begin = endRegExp.lastIndex; 36 | startRegExp.lastIndex = endRegExp.lastIndex; 37 | } 38 | else { 39 | begin = startRegExp.lastIndex; 40 | } 41 | } 42 | 43 | if (begin < pageHtml.length) { 44 | parts.push(pageHtml.substring(begin)); 45 | } 46 | }, 47 | 48 | inject: function(slot, injectText) { 49 | slot = slot.toLowerCase(); 50 | var injectIndex = this.injectIndexes[slot]; 51 | 52 | var finalMarkup = this.keepMarkers ? ('\n```\n' + injectText.replace(/\s\s*$/,'') + '\n```\n') : injectText; 53 | 54 | if (injectIndex === undefined) { 55 | this.parts.push(finalMarkup); 56 | } else { 57 | this.parts[injectIndex] = finalMarkup; 58 | } 59 | 60 | 61 | }, 62 | 63 | getMarkup: function() { 64 | return this.parts.join(''); 65 | } 66 | }; 67 | 68 | exports.inject = function(target, values, options) { 69 | options = options || {}; 70 | var keepMarkers = options.keepMarkers !== false; 71 | var injector = new Injector(target, keepMarkers); 72 | 73 | for (var slotName in values) { 74 | if (values.hasOwnProperty(slotName)) { 75 | injector.inject(slotName, values[slotName]); 76 | } 77 | } 78 | return injector.getMarkup(); 79 | }; -------------------------------------------------------------------------------- /output/compiled.min/friends/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(t){function e(t,e){return t.w('Friends
').s(e.get(["friends"],!1),e,{block:i},{}).w("
")}function i(t,e){return t.w('
")}function l(t,e){return t.w("
  • Tags:
  • ")}function d(t,e){return t.w("
  • ").f(e.getPath(!0,[]),e,"h").w("
  • ")}function n(t,e){return t.w("
  • Friends:
  • ")}function s(t,e){return t.w("
  • ").f(e.get(["name"],!1),e,"h").w(" (").f(e.get(["id"],!1),e,"h").w(")
  • ")}t.register("friends",e),e.__dustBody=!0,i.__dustBody=!0,l.__dustBody=!0,d.__dustBody=!0,n.__dustBody=!0,s.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/friends/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(a,e){e.w('Friends'),component_globals_tag({},e),e.w('
    '),marko_forEach(a.friends,function(r){e.w('
    ")}),e.w("
    "),init_components_tag({},e),await_reorderer_tag({},e),e.w("")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_loadTag=marko_helpers.t,component_globals_tag=marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")),marko_forEach=marko_helpers.f,marko_escapeXml=marko_helpers.x,marko_attr=marko_helpers.a,marko_escapeXmlAttr=marko_helpers.xa,init_components_tag=marko_loadTag(require("marko/dist/components/taglib/init-components-tag")),await_reorderer_tag=marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag"));marko_template._=render,marko_template.meta={tags:["marko/dist/components/taglib/component-globals-tag","marko/dist/components/taglib/init-components-tag","marko/dist/taglibs/async/await-reorderer-tag"]}; -------------------------------------------------------------------------------- /output/compiled.min/if-expression/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(t){function n(t,n){return t.s(n.get(["accounts"],!1),n,{block:e},{})}function e(t,n){return t.w("
    ").h("select",n,{block:u},{key:a},"h").w("
    ")}function u(t,n){return t.h("eq",n,{block:o},{value:"closed"},"h").h("eq",n,{block:d},{value:"suspended"},"h").h("default",n,{block:c},{},"h")}function o(t,n){return t.w("
    Your account has been closed!
    ")}function d(t,n){return t.w("
    Your account has been temporarily suspended
    ")}function c(t,n){return t.w('
    Bank balance:').f(n.get(["formattedBalance"],!1),n,"h").w("
    ")}function s(t,n){return t.w("postive")}function r(t,n){return t.w("negative")}function i(t,n){return t.f(n.get(["balance"],!1),n,"h").w(" < 0")}function a(t,n){return t.f(n.get(["accountStatus"],!1),n,"h")}return t.register("if-expression",n),n.__dustBody=!0,e.__dustBody=!0,u.__dustBody=!0,o.__dustBody=!0,d.__dustBody=!0,c.__dustBody=!0,s.__dustBody=!0,r.__dustBody=!0,i.__dustBody=!0,a.__dustBody=!0,n}(dust); -------------------------------------------------------------------------------- /output/compiled.min/if-expression/jade.min.js: -------------------------------------------------------------------------------- 1 | function template(e){var a,n=[],s=e||{};return function(e,s){(function(){var s=e;if("number"==typeof s.length)for(var u=0,c=s.length;u"),"closed"===d.accountStatus?n.push("
    Your account has been closed!
    "):"suspended"===d.accountStatus?n.push("
    Your account has been temporarily suspended
    "):n.push("
    Bank balance:"+jade.escape(null==(a=d.formattedBalance)?"":a)+"
    "),n.push("")}else{c=0;for(var u in s){c++;var d=s[u];n.push("
    "),"closed"===d.accountStatus?n.push("
    Your account has been closed!
    "):"suspended"===d.accountStatus?n.push("
    Your account has been temporarily suspended
    "):n.push("
    Bank balance:"+jade.escape(null==(a=d.formattedBalance)?"":a)+"
    "),n.push("
    ")}}}).call(this)}.call(this,"accounts"in s?s.accounts:"undefined"!=typeof accounts?accounts:void 0,"undefined"in s?s.undefined:void 0),n.join("")} -------------------------------------------------------------------------------- /output/compiled.min/if-expression/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(e,a){marko_forEach(e.accounts,function(e){a.w("
    "),"closed"===e.accountStatus?a.w("
    Your account has been closed!
    "):"suspended"===e.accountStatus?a.w("
    Your account has been temporarily suspended
    "):a.w("
    Bank balance: "+marko_escapeXml(e.formattedBalance)+"
    "),a.w("
    ")})}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_forEach=marko_helpers.f,marko_escapeXml=marko_helpers.x,marko_classAttr=marko_helpers.ca;marko_template._=render,marko_template.meta={}; -------------------------------------------------------------------------------- /output/compiled.min/if-expression/pug.min.js: -------------------------------------------------------------------------------- 1 | function pug_attr(a,e,t,s){return!1!==e&&null!=e&&(e||"class"!==a&&"style"!==a)?!0===e?" "+(s?a:a+'="'+a+'"'):("function"==typeof e.toJSON&&(e=e.toJSON()),"string"==typeof e||(e=JSON.stringify(e),t||-1===e.indexOf('"'))?(t&&(e=pug_escape(e))," "+a+'="'+e+'"'):" "+a+"='"+e.replace(/'/g,"'")+"'"):""}function pug_classes(a,e){return Array.isArray(a)?pug_classes_array(a,e):a&&"object"==typeof a?pug_classes_object(a):a||""}function pug_classes_array(a,e){for(var t,s="",n="",c=Array.isArray(e),r=0;r","closed"===r.accountStatus?t+="
    Your account has been closed!
    ":"suspended"===r.accountStatus?t+="
    Your account has been temporarily suspended
    ":t=t+"
    Bank balance:"+pug_escape(null==(e=r.formattedBalance)?"":e)+"
    ",t+=""}else{c=0;for(var n in s){c++;var r=s[n];t+="
    ","closed"===r.accountStatus?t+="
    Your account has been closed!
    ":"suspended"===r.accountStatus?t+="
    Your account has been temporarily suspended
    ":t=t+"
    Bank balance:"+pug_escape(null==(e=r.formattedBalance)?"":e)+"
    ",t+="
    "}}}).call(this)}.call(this,"accounts"in s?s.accounts:"undefined"!=typeof accounts?accounts:void 0),t}var pug_has_own_property=Object.prototype.hasOwnProperty,pug_match_html=/["&<>]/; -------------------------------------------------------------------------------- /output/compiled.min/projects-escaped/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(t){function e(t,e){return t.w("").f(e.get(["title"],!1),e,"h").w("

    ").f(e.get(["text"],!1),e,"h").w("

    ").s(e.get(["projects"],!1),e,{block:o},{}).nx(e.get(["projects"],!1),e,{block:r},{}).w("")}function o(t,e){return t.w('').f(e.get(["name"],!1),e,"h").w("

    ").f(e.get(["description"],!1),e,"h").w("

    ")}function r(t,e){return t.w("No projects")}t.register("projects-escaped",e),e.__dustBody=!0,o.__dustBody=!0,r.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/projects-escaped/handlebars.min.js: -------------------------------------------------------------------------------- 1 | !function(){var n=Handlebars.template;(Handlebars.templates=Handlebars.templates||{})["projects-escaped"]=n({1:function(n,l,e,t,a){var o,r=null!=l?l:n.nullContext||{},s=e.helperMissing,p=n.escapeExpression;return' '+p("function"==typeof(o=null!=(o=e.name||(null!=l?l.name:l))?o:s)?o.call(r,{name:"name",hash:{},data:a}):o)+"\n

    "+p("function"==typeof(o=null!=(o=e.description||(null!=l?l.description:l))?o:s)?o.call(r,{name:"description",hash:{},data:a}):o)+"

    \n"},3:function(n,l,e,t,a){return" No projects\n"},compiler:[7,">= 4.0.0"],main:function(n,l,e,t,a){var o,r,s,p=null!=l?l:n.nullContext||{},c=e.helperMissing,u=n.escapeExpression,i=e.blockHelperMissing,f="\n \n "+u("function"==typeof(r=null!=(r=e.title||(null!=l?l.title:l))?r:c)?r.call(p,{name:"title",hash:{},data:a}):r)+"\n \n \n

    "+u("function"==typeof(r=null!=(r=e.text||(null!=l?l.text:l))?r:c)?r.call(p,{name:"text",hash:{},data:a}):r)+"

    \n";return r=null!=(r=e.projects||(null!=l?l.projects:l))?r:c,s={name:"projects",hash:{},fn:n.program(1,a,0),inverse:n.noop,data:a},o="function"==typeof r?r.call(p,s):r,e.projects||(o=i.call(l,o,s)),null!=o&&(f+=o),r=null!=(r=e.projects||(null!=l?l.projects:l))?r:c,s={name:"projects",hash:{},fn:n.noop,inverse:n.program(3,a,0),data:a},o="function"==typeof r?r.call(p,s):r,e.projects||(o=i.call(l,o,s)),null!=o&&(f+=o),f+" \n"},useData:!0})}(); -------------------------------------------------------------------------------- /output/compiled.min/projects-escaped/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(a,e){e.w(""+marko_escapeXml(a.title)+""),component_globals_tag({},e),e.w("

    "+marko_escapeXml(a.text)+"

    "),marko_forEach(a.projects,function(a){e.w(""+marko_escapeXml(a.name)+"

    "+marko_escapeXml(a.description)+"

    ")}),a.projects.length||e.w("No projects"),init_components_tag({},e),await_reorderer_tag({},e),e.w("")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_escapeXml=marko_helpers.x,marko_loadTag=marko_helpers.t,component_globals_tag=marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")),marko_forEach=marko_helpers.f,marko_attr=marko_helpers.a,init_components_tag=marko_loadTag(require("marko/dist/components/taglib/init-components-tag")),await_reorderer_tag=marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag"));marko_template._=render,marko_template.meta={tags:["marko/dist/components/taglib/component-globals-tag","marko/dist/components/taglib/init-components-tag","marko/dist/taglibs/async/await-reorderer-tag"]}; -------------------------------------------------------------------------------- /output/compiled.min/projects-escaped/marko.native-for.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(a,e){var t=a;e.w(""+marko_escapeXml(t.title)+""),component_globals_tag({},e),e.w("

    "+marko_escapeXml(t.text)+"

    ");for(var r=0,o=t.projects.length;r"+marko_escapeXml(m.name)+"

    "+marko_escapeXml(m.description)+"

    ")}t.projects.length||e.w("No projects"),init_components_tag({},e),await_reorderer_tag({},e),e.w("")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_escapeXml=marko_helpers.x,marko_loadTag=marko_helpers.t,component_globals_tag=marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")),marko_attr=marko_helpers.a,init_components_tag=marko_loadTag(require("marko/dist/components/taglib/init-components-tag")),await_reorderer_tag=marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag"));marko_template._=render,marko_template.meta={tags:["marko/dist/components/taglib/component-globals-tag","marko/dist/components/taglib/init-components-tag","marko/dist/taglibs/async/await-reorderer-tag"]}; -------------------------------------------------------------------------------- /output/compiled.min/projects-unescaped/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(t){function e(t,e){return t.w("").f(e.get(["title"],!1),e,"h",["s"]).w("

    ").f(e.get(["text"],!1),e,"h",["s"]).w("

    ").s(e.get(["projects"],!1),e,{block:o},{}).nx(e.get(["projects"],!1),e,{block:s},{}).w("")}function o(t,e){return t.w('').f(e.get(["name"],!1),e,"h",["s"]).w("

    ").f(e.get(["description"],!1),e,"h",["s"]).w("

    ")}function s(t,e){return t.w("No projects")}t.register("projects-unescaped",e),e.__dustBody=!0,o.__dustBody=!0,s.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/projects-unescaped/handlebars.min.js: -------------------------------------------------------------------------------- 1 | !function(){var l=Handlebars.template;(Handlebars.templates=Handlebars.templates||{})["projects-unescaped"]=l({1:function(l,n,t,e,a){var o,u,r=null!=n?n:l.nullContext||{},c=t.helperMissing;return' '+(null!=(o="function"==typeof(u=null!=(u=t.name||(null!=n?n.name:n))?u:c)?u.call(r,{name:"name",hash:{},data:a}):u)?o:"")+"\n

    "+(null!=(o="function"==typeof(u=null!=(u=t.description||(null!=n?n.description:n))?u:c)?u.call(r,{name:"description",hash:{},data:a}):u)?o:"")+"

    \n"},3:function(l,n,t,e,a){return" No projects\n"},compiler:[7,">= 4.0.0"],main:function(l,n,t,e,a){var o,u,r,c=null!=n?n:l.nullContext||{},p=t.helperMissing,s=t.blockHelperMissing,i="\n \n "+(null!=(o="function"==typeof(u=null!=(u=t.title||(null!=n?n.title:n))?u:p)?u.call(c,{name:"title",hash:{},data:a}):u)?o:"")+"\n \n \n

    "+(null!=(o="function"==typeof(u=null!=(u=t.text||(null!=n?n.text:n))?u:p)?u.call(c,{name:"text",hash:{},data:a}):u)?o:"")+"

    \n";return u=null!=(u=t.projects||(null!=n?n.projects:n))?u:p,r={name:"projects",hash:{},fn:l.program(1,a,0),inverse:l.noop,data:a},o="function"==typeof u?u.call(c,r):u,t.projects||(o=s.call(n,o,r)),null!=o&&(i+=o),u=null!=(u=t.projects||(null!=n?n.projects:n))?u:p,r={name:"projects",hash:{},fn:l.noop,inverse:l.program(3,a,0),data:a},o="function"==typeof u?u.call(c,r):u,t.projects||(o=s.call(n,o,r)),null!=o&&(i+=o),i+" \n"},useData:!0})}(); -------------------------------------------------------------------------------- /output/compiled.min/projects-unescaped/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(t,a){a.w(""+marko_str(t.title)+""),component_globals_tag({},a),a.w("

    "+marko_str(t.text)+"

    "),marko_forEach(t.projects,function(t){a.w(''+marko_str(t.name)+"

    "+marko_str(t.description)+"

    ")}),t.projects.length||a.w("No projects"),init_components_tag({},a),await_reorderer_tag({},a),a.w("")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_str=marko_helpers.s,marko_loadTag=marko_helpers.t,component_globals_tag=marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")),marko_forEach=marko_helpers.f,init_components_tag=marko_loadTag(require("marko/dist/components/taglib/init-components-tag")),await_reorderer_tag=marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag"));marko_template._=render,marko_template.meta={tags:["marko/dist/components/taglib/component-globals-tag","marko/dist/components/taglib/init-components-tag","marko/dist/taglibs/async/await-reorderer-tag"]}; -------------------------------------------------------------------------------- /output/compiled.min/projects-unescaped/marko.native-for.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(t,a){var r=t;a.w(""+marko_str(r.title)+""),component_globals_tag({},a),a.w("

    "+marko_str(r.text)+"

    ");for(var e=0,o=r.projects.length;e'+marko_str(m.name)+"

    "+marko_str(m.description)+"

    ")}r.projects.length||a.w("No projects"),init_components_tag({},a),await_reorderer_tag({},a),a.w("")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_str=marko_helpers.s,marko_loadTag=marko_helpers.t,component_globals_tag=marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")),init_components_tag=marko_loadTag(require("marko/dist/components/taglib/init-components-tag")),await_reorderer_tag=marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag"));marko_template._=render,marko_template.meta={tags:["marko/dist/components/taglib/component-globals-tag","marko/dist/components/taglib/init-components-tag","marko/dist/taglibs/async/await-reorderer-tag"]}; -------------------------------------------------------------------------------- /output/compiled.min/reverse-helper/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(e,r){return e.h("reverse",r,{},{str:r.get(["A"],!1)},"h").h("reverse",r,{},{str:r.get(["B"],!1)},"h").h("reverse",r,{},{str:r.get(["C"],!1)},"h").h("reverse",r,{},{str:r.get(["D"],!1)},"h").h("reverse",r,{},{str:r.get(["E"],!1)},"h")}e.register("reverse-helper",r),r.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/reverse-helper/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(e,r){r.w("
    "+marko_str(reverse(e.A))+marko_str(reverse(e.B))+marko_str(reverse(e.C))+marko_str(reverse(e.D))+marko_str(reverse(e.E))+"
    ")}var marko_template=module.exports=require("marko/dist/html").t(__filename),module_util_module=require("../../helpers/util"),util_module=module_util_module.default||module_util_module,reverse=module_util_module.reverse,marko_helpers=require("marko/dist/runtime/html/helpers"),marko_str=marko_helpers.s;marko_template._=render,marko_template.meta={}; -------------------------------------------------------------------------------- /output/compiled.min/search-results/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(i){function s(i,s){return i.w('
    Searching...
    ').f(s.get(["totalCount"],!1),s,"h").w(' results
    View:
    ').s(s.get(["searchRecords"],!1),s,{block:e},{}).w("
    ")}function e(i,s){return i.w('

    ').f(s.get(["title"],!1),s,"h").w("

    ").f(s.get(["description"],!1),s,"h").x(s.get(["featured"],!1),s,{block:t},{}).x(s.get(["sizes"],!1),s,{block:d},{}).w("
    ")}function t(i,s){return i.w("
    Featured!
    ")}function d(i,s){return i.w("
    Sizes available:
      ").s(s.get(["sizes"],!1),s,{block:c},{}).w("
    ")}function c(i,s){return i.w("
  • ").f(s.getPath(!0,[]),s,"h").w("
  • ")}i.register("search-results",s),s.__dustBody=!0,e.__dustBody=!0,t.__dustBody=!0,d.__dustBody=!0,c.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/search-results/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(e,i){i.w('
    Searching...
    '+marko_escapeXml(e.totalCount)+' results
    View:
    '),marko_forEach(e.searchRecords,function(e){i.w('

    '+marko_escapeXml(e.title)+"

    "+marko_escapeXml(e.description)),e.featured&&i.w("
    Featured!
    "),e.sizes&&e.sizes.length&&(i.w("
    Sizes available:
      "),marko_forEach(e.sizes,function(e){i.w("
    • "+marko_escapeXml(e)+"
    • ")}),i.w("
    ")),i.w("
    ")}),i.w("
    ")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_escapeXml=marko_helpers.x,marko_forEach=marko_helpers.f,marko_escapeXmlAttr=marko_helpers.xa;marko_template._=render,marko_template.meta={}; -------------------------------------------------------------------------------- /output/compiled.min/search-results/marko.native-for.min.js: -------------------------------------------------------------------------------- 1 | function create(i){var s=(i.s,i.e,i.ne),e=i.x,a=i.xa,c=i.fl,d=i.a;return function(i,v){v.w('
    Searching...
    '+e(i.totalCount)+' results
    View:
    '),c(i.searchRecords,function(i,a,r,t){for(;r>a;a++)t=i[a],v.w('

    "+e(t.title)+"

    "+e(t.description)),t.featured&&v.w("
    Featured!
    "),s(t.sizes)&&(v.w("
    Sizes available:
      "),c(t.sizes,function(i,s,a,c){for(;a>s;s++)c=i[s],v.w("
    • "+e(c)+"
    • ")}),v.w("
    ")),v.w("
    ")}),v.w("
    ")}}(module.exports=require("marko").c(__filename)).c(create); -------------------------------------------------------------------------------- /output/compiled.min/simple-0/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(e){function s(e,s){return e.w("Hello ").f(s.get(["name"],!1),s,"h").w("! You have ").f(s.get(["messageCount"],!1),s,"h").w(" messages! ").f(s.get(["colors"],!1),s,"h")}e.register("simple-0",s),s.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/simple-0/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(e,r){r.w("Hello "+marko_str(e.name)+"! You have "+marko_str(e.messageCount)+" messages! "+marko_str(e.colors))}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_str=marko_helpers.s;marko_template._=render,marko_template.meta={}; -------------------------------------------------------------------------------- /output/compiled.min/simple-1/dot.min.js: -------------------------------------------------------------------------------- 1 | module.exports=function(o){var e="undefined"!=typeof _encodeHTML?_encodeHTML:function(o){var e={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},r=/&(?!#?\w+;)|<|>|"|'|\//g;return function(o){return o?o.toString().replace(r,function(o){return e[o]||o}):""}}(),r='
    Hello '+e(o.name)+"! You have "+e(o.messageCount)+" messages! ";if(o.colors&&o.colors.length){r+="
      ";var l=o.colors;if(l)for(var n=-1,s=l.length-1;n'+e(l[n+=1])+" ";r+="
    "}else r+="
    No colors!
    ";return r+='
    ')}function t(o,s){return o.w("
    No colors!
    ")}function e(o,s){return o.w("
      ").s(s.get(["colors"],!1),s,{block:l},{}).w("
    ")}function l(o,s){return o.w('
  • ').f(s.getPath(!0,[]),s,"h").w("
  • ")}function n(o,s){return o.w("secondary")}function r(o,s){return o.w("primary")}o.register("simple-1",s),s.__dustBody=!0,t.__dustBody=!0,e.__dustBody=!0,l.__dustBody=!0,n.__dustBody=!0,r.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/simple-1/handlebars.min.js: -------------------------------------------------------------------------------- 1 | !function(){var n=Handlebars.template;(Handlebars.templates=Handlebars.templates||{})["simple-1"]=n({1:function(n,l,a,e,s){var o;return"
      \n"+(null!=(o=a.each.call(null!=l?l:n.nullContext||{},null!=l?l.colors:l,{name:"each",hash:{},fn:n.program(2,s,0),inverse:n.noop,data:s}))?o:"")+"
    \n"},2:function(n,l,a,e,s){return'
  • '+n.escapeExpression(n.lambda(l,l))+"
  • \n"},4:function(n,l,a,e,s){return"
    \n No colors!\n
    \n"},6:function(n,l,a,e,s){return"primary"},8:function(n,l,a,e,s){return"secondary"},compiler:[7,">= 4.0.0"],main:function(n,l,a,e,s){var o,r,t=null!=l?l:n.nullContext||{},u=a.helperMissing,i=n.escapeExpression;return'
    \n
    \n Hello '+i("function"==typeof(r=null!=(r=a.name||(null!=l?l.name:l))?r:u)?r.call(t,{name:"name",hash:{},data:s}):r)+"! You have "+i("function"==typeof(r=null!=(r=a.messageCount||(null!=l?l.messageCount:l))?r:u)?r.call(t,{name:"messageCount",hash:{},data:s}):r)+" messages!\n\n"+(null!=(o=a.if.call(t,null!=l?l.colors:l,{name:"if",hash:{},fn:n.program(1,s,0),inverse:n.program(4,s,0),data:s}))?o:"")+'
    \n \n
    '},useData:!0})}(); -------------------------------------------------------------------------------- /output/compiled.min/simple-1/jade.min.js: -------------------------------------------------------------------------------- 1 | function template(e){var n,o=[],s=e||{};return function(e,s,l,a,i){o.push('
    Hello '+jade.escape(null==(n=l)?"":n)+"! You have "+jade.escape(null==(n=s)?"":n)+" messages!"),e&&e.length&&(o.push("
      "),function(){var s=e;if("number"==typeof s.length)for(var l=0,a=s.length;l'+jade.escape(null==(n=i)?"":n)+"")}else{a=0;for(var l in s){a++;var i=s[l];o.push('
    • '+jade.escape(null==(n=i)?"":n)+"
    • ")}}}.call(this),o.push("
    ")),e&&e.length||o.push("
    No colors!
    "),o.push('
    ")}.call(this,"colors"in s?s.colors:"undefined"!=typeof colors?colors:void 0,"messageCount"in s?s.messageCount:"undefined"!=typeof messageCount?messageCount:void 0,"name"in s?s.name:"undefined"!=typeof name?name:void 0,"primary"in s?s.primary:"undefined"!=typeof primary?primary:void 0,"undefined"in s?s.undefined:void 0),o.join("")} -------------------------------------------------------------------------------- /output/compiled.min/simple-1/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(e,r){var a,o,s,l;if(r.w('
    Hello '+marko_escapeXml(e.name)+"! You have "+marko_str(e.messageCount)+" messages!"),e.colors.length){for(r.w("
      "),o=0,l=(s=e.colors)&&s.length;o'+marko_escapeXml(a)+"");r.w("
    ")}else r.w("
    No colors!
    ");r.w('
    ")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_escapeXml=marko_helpers.x,marko_str=marko_helpers.s,marko_escapeXmlAttr=marko_helpers.xa,marko_classAttr=marko_helpers.ca;marko_template._=render,marko_template.meta={}; -------------------------------------------------------------------------------- /output/compiled.min/simple-1/marko.native-for.min.js: -------------------------------------------------------------------------------- 1 | function create(o){var e=(o.s,o.e,o.ne),l=o.x,r=o.fl;return function(o,c){c.w("Hello "+l(o.name)+"! "),e(o.colors)?(c.w("
      "),r(o.colors,function(o,e,r,n){for(;r>e;e++)n=o[e],c.w('
    • '+l(n)+"
    • ")}),c.w("
    ")):c.w("
    No colors!
    ")}}(module.exports=require("marko").c(__filename)).c(create); -------------------------------------------------------------------------------- /output/compiled.min/simple-1/nunjucks.min.js: -------------------------------------------------------------------------------- 1 | (window.nunjucksPrecompiled=window.nunjucksPrecompiled||{})["simple-1"]=function(){return{root:function(o,e,s,n,l){var r="";try{if(r+='
    \n
    \n Hello ',r+=n.suppressValue(n.contextOrFrameLookup(e,s,"name"),o.opts.autoescape),r+="! You have ",r+=n.suppressValue(n.contextOrFrameLookup(e,s,"messageCount"),o.opts.autoescape),r+=" messages!\n\n ",n.contextOrFrameLookup(e,s,"colors")&&n.memberLookup(n.contextOrFrameLookup(e,s,"colors"),"length")){r+="\n
      \n ",s=s.push();var t=n.contextOrFrameLookup(e,s,"colors");if(t)for(var p=t.length,a=0;a',r+=n.suppressValue(u,o.opts.autoescape),r+="\n "}s=s.pop(),r+="\n
    \n "}else r+="\n
    \n No colors!\n
    \n ";r+='\n
    \n
    "}.call(this,"buttonLabel"in t?t.buttonLabel:"undefined"!=typeof buttonLabel?buttonLabel:void 0,"colors"in t?t.colors:"undefined"!=typeof colors?colors:void 0,"messageCount"in t?t.messageCount:"undefined"!=typeof messageCount?messageCount:void 0,"name"in t?t.name:"undefined"!=typeof name?name:void 0,"primary"in t?t.primary:"undefined"!=typeof primary?primary:void 0),s}var pug_has_own_property=Object.prototype.hasOwnProperty,pug_match_html=/["&<>]/; -------------------------------------------------------------------------------- /output/compiled.min/simple-1/react.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function renderColor(e){var r={backgroundColor:e};return React.createElement("li",{className:"color",style:r},e)}function renderColors(e){return e.length?React.createElement("ul",null,e.map(renderColor)):React.createElement("div",null,"No colors!")}var React=require("react");module.exports=React.createClass({displayName:"exports",render:function(){var e={backgroundColor:"blue",border:"1px solid black"};return React.createElement("div",{className:"simple-1",style:e},React.createElement("div",{className:"colors"},React.createElement("span",{className:"hello"},"Hello ",this.props.name,"! ",React.createElement("strong",null,"You have ",this.props.messageCount," messages!")),renderColors(this.props.colors)),",",React.createElement("button",{type:"button",className:"{this.props.primary ? 'primary' : 'secondary'}"},"Click me!"))}}); -------------------------------------------------------------------------------- /output/compiled.min/simple-1/swig.min.js: -------------------------------------------------------------------------------- 1 | module.exports=function(o,l,n,e,r){o.extensions;var s="";return s+='
    \n
    \n Hello ',s+=n.e(null!==(void 0!==l.name&&null!==l.name?void 0!==l.name&&null!==l.name?l.name:"":"undefined"!=typeof name&&null!==name?name:"")?void 0!==l.name&&null!==l.name?void 0!==l.name&&null!==l.name?l.name:"":"undefined"!=typeof name&&null!==name?name:"":""),s+="! You have ",s+=n.e(null!==(void 0!==l.messageCount&&null!==l.messageCount?void 0!==l.messageCount&&null!==l.messageCount?l.messageCount:"":"undefined"!=typeof messageCount&&null!==messageCount?messageCount:"")?void 0!==l.messageCount&&null!==l.messageCount?void 0!==l.messageCount&&null!==l.messageCount?l.messageCount:"":"undefined"!=typeof messageCount&&null!==messageCount?messageCount:"":""),s+=" messages!\n\n ",(null!==(void 0!==l.colors&&null!==l.colors?void 0!==l.colors&&null!==l.colors?l.colors:"":"undefined"!=typeof colors&&null!==colors?colors:"")?void 0!==l.colors&&null!==l.colors?void 0!==l.colors&&null!==l.colors?l.colors:"":"undefined"!=typeof colors&&null!==colors?colors:"":"")&&(null!==(void 0!==l.colors&&null!==l.colors&&void 0!==l.colors.length&&null!==l.colors.length?void 0!==l.colors&&null!==l.colors&&void 0!==l.colors.length&&null!==l.colors.length?l.colors.length:"":"undefined"!=typeof colors&&null!==colors&&void 0!==colors.length&&null!==colors.length?colors.length:"")?void 0!==l.colors&&null!==l.colors&&void 0!==l.colors.length&&null!==l.colors.length?void 0!==l.colors&&null!==l.colors&&void 0!==l.colors.length&&null!==l.colors.length?l.colors.length:"":"undefined"!=typeof colors&&null!==colors&&void 0!==colors.length&&null!==colors.length?colors.length:"":"")?(s+="\n
      \n ",function(){var o=null!==(void 0!==l.colors&&null!==l.colors?void 0!==l.colors&&null!==l.colors?l.colors:"":"undefined"!=typeof colors&&null!==colors?colors:"")?void 0!==l.colors&&null!==l.colors?void 0!==l.colors&&null!==l.colors?l.colors:"":"undefined"!=typeof colors&&null!==colors?colors:"":"",r=e.isArray(o)||"string"==typeof o?o.length:e.keys(o).length;if(o){var i={loop:l.loop,color:l.color,__k:l.__k};l.loop={first:!1,index:1,index0:0,revindex:r,revindex0:r-1,length:r,last:!1},e.each(o,function(o,e){l.color=o,l.__k=e,l.loop.key=e,l.loop.first=0===l.loop.index0,l.loop.last=0===l.loop.revindex0,s+='\n
    • ',s+=n.e(null!==(void 0!==l.color&&null!==l.color?void 0!==l.color&&null!==l.color?l.color:"":void 0!==o&&null!==o?o:"")?void 0!==l.color&&null!==l.color?void 0!==l.color&&null!==l.color?l.color:"":void 0!==o&&null!==o?o:"":""),s+="
    • \n ",l.loop.index+=1,l.loop.index0+=1,l.loop.revindex-=1,l.loop.revindex0-=1}),l.loop=i.loop,l.color=i.color,l.__k=i.__k,i=void 0}}(),s+="\n
    \n "):s+="\n
    \n No colors!\n
    \n ",s+='\n
    \n \n
    '}; -------------------------------------------------------------------------------- /output/compiled.min/simple-1/vue.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marko-js/templating-benchmarks/11e4da429728403753009ab1e4b571f710f36a69/output/compiled.min/simple-1/vue.min.js -------------------------------------------------------------------------------- /output/compiled.min/simple-2/dust.min.js: -------------------------------------------------------------------------------- 1 | !function(e){function h(e,h){return e.w("

    ").f(h.get(["header"],!1),h,"h").w("

    ").f(h.get(["header2"],!1),h,"h").w("

    ").f(h.get(["header3"],!1),h,"h").w("

    ").f(h.get(["header4"],!1),h,"h").w("

    ").f(h.get(["header5"],!1),h,"h").w("
    ").f(h.get(["header6"],!1),h,"h").w("
      ").s(h.get(["list"],!1),h,{block:s},{}).w("
    ")}function s(e,h){return e.w("
  • ").f(h.getPath(!0,[]),h,"h").w("
  • ")}e.register("simple-2",h),h.__dustBody=!0,s.__dustBody=!0}(dust); -------------------------------------------------------------------------------- /output/compiled.min/simple-2/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(e,a){a.w('

    '+marko_escapeXml(e.header)+'

    '+marko_escapeXml(e.header2)+'

    '+marko_escapeXml(e.header3)+'

    '+marko_escapeXml(e.header4)+'

    '+marko_escapeXml(e.header5)+'
    '+marko_escapeXml(e.header6)+'
      '),marko_forEach(e.list,function(e){a.w('
    • '+marko_escapeXml(e)+"
    • ")}),a.w("
    ")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_escapeXml=marko_helpers.x,marko_forEach=marko_helpers.f;marko_template._=render,marko_template.meta={}; -------------------------------------------------------------------------------- /output/compiled.min/ui-components/marko.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function render(e,r){var o=e;r.w('
    '),marko_colors_tag(o,r),r.w("
    ")}var marko_template=module.exports=require("marko/dist/html").t(__filename),marko_loadTemplate=require("marko/dist/runtime/helper-loadTemplate"),marko_colors_template=marko_loadTemplate(require.resolve("./components/marko-colors")),marko_helpers=require("marko/dist/runtime/html/helpers"),marko_loadTag=marko_helpers.t,marko_colors_tag=marko_loadTag(marko_colors_template);marko_template._=render,marko_template.meta={tags:["./components/marko-colors"]}; -------------------------------------------------------------------------------- /output/compiled.min/ui-components/react.min.js: -------------------------------------------------------------------------------- 1 | "use strict";var React=require("react"),Colors=require("./components/ReactColors.jsx");module.exports=module.exports=React.createClass({displayName:"exports",render:function(){return React.createElement("div",{className:"my-app"},React.createElement(Colors,{colors:this.props.colors,name:this.props.name}))}}); -------------------------------------------------------------------------------- /output/compiled/friends/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("friends",body_0);function body_0(chk,ctx){return chk.w("Friends
    ").s(ctx.get(["friends"], false),ctx,{"block":body_1},{}).w("
    ");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("
    • Name: ").f(ctx.get(["getFullNameDust"], false),ctx,"h").w("
    • Balance: ").f(ctx.get(["balance"], false),ctx,"h").w("
    • Age: ").f(ctx.get(["age"], false),ctx,"h").w("
    • Address: ").f(ctx.get(["address"], false),ctx,"h").w("
    • Image:
    • Company: ").f(ctx.get(["company"], false),ctx,"h").w("
    • Email: ").f(ctx.get(["email"], false),ctx,"h").w("
    • About: ").f(ctx.get(["about"], false),ctx,"h").w("
    • ").x(ctx.get(["tags"], false),ctx,{"block":body_2},{}).x(ctx.get(["friends"], false),ctx,{"block":body_4},{}).w("
    ");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.w("
  • Tags:
      ").s(ctx.get(["tags"], false),ctx,{"block":body_3},{}).w("
  • ");}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w("
  • ").f(ctx.getPath(true, []),ctx,"h").w("
  • ");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w("
  • Friends:
      ").s(ctx.get(["friends"], false),ctx,{"block":body_5},{}).w("
  • ");}body_4.__dustBody=!0;function body_5(chk,ctx){return chk.w("
  • ").f(ctx.get(["name"], false),ctx,"h").w(" (").f(ctx.get(["id"], false),ctx,"h").w(")
  • ");}body_5.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/friends/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_loadTag = marko_helpers.t, 7 | component_globals_tag = marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")), 8 | marko_forEach = marko_helpers.f, 9 | marko_escapeXml = marko_helpers.x, 10 | marko_attr = marko_helpers.a, 11 | marko_escapeXmlAttr = marko_helpers.xa, 12 | init_components_tag = marko_loadTag(require("marko/dist/components/taglib/init-components-tag")), 13 | await_reorderer_tag = marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag")); 14 | 15 | function render(input, out) { 16 | var data = input; 17 | 18 | out.w("Friends"); 19 | 20 | component_globals_tag({}, out); 21 | 22 | out.w("
    "); 23 | 24 | marko_forEach(input.friends, function(friend) { 25 | out.w("
    • Name: " + 26 | marko_escapeXml(input.getFullNameRaptor(friend)) + 27 | "
    • Balance: " + 28 | marko_escapeXml(friend.balance) + 29 | "
    • Age: " + 30 | marko_escapeXml(friend.age) + 31 | "
    • Address: " + 32 | marko_escapeXml(friend.address) + 33 | "
    • Image:
    • Company: " + 36 | marko_escapeXml(friend.company) + 37 | "
    • Email: " + 40 | marko_escapeXml(friend.email) + 41 | "
    • About: " + 42 | marko_escapeXml(friend.about) + 43 | "
    • "); 44 | 45 | if (friend.tags.length) { 46 | out.w("
    • Tags:
        "); 47 | 48 | marko_forEach(friend.tags, function(tag) { 49 | out.w("
      • " + 50 | marko_escapeXml(tag) + 51 | "
      • "); 52 | }); 53 | 54 | out.w("
    • "); 55 | } 56 | 57 | if (friend.friends.length) { 58 | out.w("
    • Friends:
        "); 59 | 60 | marko_forEach(friend.friends, function(friend) { 61 | out.w("
      • " + 62 | marko_escapeXml(friend.name) + 63 | " (" + 64 | marko_escapeXml(friend.id) + 65 | ")
      • "); 66 | }); 67 | 68 | out.w("
    • "); 69 | } 70 | 71 | out.w("
    "); 72 | }); 73 | 74 | out.w("
    "); 75 | 76 | init_components_tag({}, out); 77 | 78 | await_reorderer_tag({}, out); 79 | 80 | out.w(""); 81 | } 82 | 83 | marko_template._ = render; 84 | 85 | marko_template.meta = { 86 | tags: [ 87 | "marko/dist/components/taglib/component-globals-tag", 88 | "marko/dist/components/taglib/init-components-tag", 89 | "marko/dist/taglibs/async/await-reorderer-tag" 90 | ] 91 | }; 92 | -------------------------------------------------------------------------------- /output/compiled/if-expression/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("if-expression",body_0);function body_0(chk,ctx){return chk.s(ctx.get(["accounts"], false),ctx,{"block":body_1},{});}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("
    ").h("select",ctx,{"block":body_2},{"key":body_9},"h").w("
    ");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.h("eq",ctx,{"block":body_3},{"value":"closed"},"h").h("eq",ctx,{"block":body_4},{"value":"suspended"},"h").h("default",ctx,{"block":body_5},{},"h");}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w("
    Your account has been closed!
    ");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w("
    Your account has been temporarily suspended
    ");}body_4.__dustBody=!0;function body_5(chk,ctx){return chk.w("
    Bank balance:").f(ctx.get(["formattedBalance"], false),ctx,"h").w("
    ");}body_5.__dustBody=!0;function body_6(chk,ctx){return chk.w("postive");}body_6.__dustBody=!0;function body_7(chk,ctx){return chk.w("negative");}body_7.__dustBody=!0;function body_8(chk,ctx){return chk.f(ctx.get(["balance"], false),ctx,"h").w(" < 0");}body_8.__dustBody=!0;function body_9(chk,ctx){return chk.f(ctx.get(["accountStatus"], false),ctx,"h");}body_9.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/if-expression/jade.js: -------------------------------------------------------------------------------- 1 | function template(locals) { 2 | var buf = []; 3 | var jade_mixins = {}; 4 | var jade_interp; 5 | ;var locals_for_with = (locals || {});(function (accounts, undefined) { 6 | // iterate accounts 7 | ;(function(){ 8 | var $$obj = accounts; 9 | if ('number' == typeof $$obj.length) { 10 | 11 | for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) { 12 | var account = $$obj[$index]; 13 | 14 | buf.push("
    "); 15 | if ( account.accountStatus === 'closed') 16 | { 17 | buf.push("
    Your account has been closed!
    "); 18 | } 19 | else if ( account.accountStatus === 'suspended') 20 | { 21 | buf.push("
    Your account has been temporarily suspended
    "); 22 | } 23 | else 24 | { 25 | buf.push("
    Bank balance:" + (jade.escape(null == (jade_interp = account.formattedBalance) ? "" : jade_interp)) + "
    "); 26 | } 27 | buf.push("
    "); 28 | } 29 | 30 | } else { 31 | var $$l = 0; 32 | for (var $index in $$obj) { 33 | $$l++; var account = $$obj[$index]; 34 | 35 | buf.push("
    "); 36 | if ( account.accountStatus === 'closed') 37 | { 38 | buf.push("
    Your account has been closed!
    "); 39 | } 40 | else if ( account.accountStatus === 'suspended') 41 | { 42 | buf.push("
    Your account has been temporarily suspended
    "); 43 | } 44 | else 45 | { 46 | buf.push("
    Bank balance:" + (jade.escape(null == (jade_interp = account.formattedBalance) ? "" : jade_interp)) + "
    "); 47 | } 48 | buf.push("
    "); 49 | } 50 | 51 | } 52 | }).call(this); 53 | }.call(this,"accounts" in locals_for_with?locals_for_with.accounts:typeof accounts!=="undefined"?accounts:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return buf.join(""); 54 | } -------------------------------------------------------------------------------- /output/compiled/if-expression/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_forEach = marko_helpers.f, 7 | marko_escapeXml = marko_helpers.x, 8 | marko_classAttr = marko_helpers.ca; 9 | 10 | function render(input, out) { 11 | var data = input; 12 | 13 | marko_forEach(input.accounts, function(account) { 14 | out.w("
    "); 15 | 16 | if (account.accountStatus === "closed") { 17 | out.w("
    Your account has been closed!
    "); 18 | } else if (account.accountStatus === "suspended") { 19 | out.w("
    Your account has been temporarily suspended
    "); 20 | } else { 21 | out.w("
    Bank balance: " + 24 | marko_escapeXml(account.formattedBalance) + 25 | "
    "); 26 | } 27 | 28 | out.w("
    "); 29 | }); 30 | } 31 | 32 | marko_template._ = render; 33 | 34 | marko_template.meta = {}; 35 | -------------------------------------------------------------------------------- /output/compiled/if-expression/pug.js: -------------------------------------------------------------------------------- 1 | function pug_attr(t,e,n,f){return e!==!1&&null!=e&&(e||"class"!==t&&"style"!==t)?e===!0?" "+(f?t:t+'="'+t+'"'):("function"==typeof e.toJSON&&(e=e.toJSON()),"string"==typeof e||(e=JSON.stringify(e),n||e.indexOf('"')===-1)?(n&&(e=pug_escape(e))," "+t+'="'+e+'"'):" "+t+"='"+e.replace(/'/g,"'")+"'"):""} 2 | function pug_classes(s,r){return Array.isArray(s)?pug_classes_array(s,r):s&&"object"==typeof s?pug_classes_object(s):s||""} 3 | function pug_classes_array(r,a){for(var s,e="",u="",c=Array.isArray(a),g=0;g]/;function template(locals) {var pug_html = "", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (accounts) {// iterate accounts 8 | ;(function(){ 9 | var $$obj = accounts; 10 | if ('number' == typeof $$obj.length) { 11 | for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) { 12 | var account = $$obj[pug_index0]; 13 | pug_html = pug_html + "\u003Cdiv\u003E"; 14 | if (account.accountStatus === 'closed') { 15 | pug_html = pug_html + "\u003Cdiv\u003EYour account has been closed!\u003C\u002Fdiv\u003E"; 16 | } 17 | else 18 | if (account.accountStatus === 'suspended') { 19 | pug_html = pug_html + "\u003Cdiv\u003EYour account has been temporarily suspended\u003C\u002Fdiv\u003E"; 20 | } 21 | else { 22 | pug_html = pug_html + "\u003Cdiv\u003EBank balance:\u003Cspan" + (pug_attr("class", pug_classes([account.balance<0 ? 'negative' : 'positive'], [true]), false, false)) + "\u003E" + (pug_escape(null == (pug_interp = account.formattedBalance) ? "" : pug_interp)) + "\u003C\u002Fspan\u003E\u003C\u002Fdiv\u003E"; 23 | } 24 | pug_html = pug_html + "\u003C\u002Fdiv\u003E"; 25 | } 26 | } else { 27 | var $$l = 0; 28 | for (var pug_index0 in $$obj) { 29 | $$l++; 30 | var account = $$obj[pug_index0]; 31 | pug_html = pug_html + "\u003Cdiv\u003E"; 32 | if (account.accountStatus === 'closed') { 33 | pug_html = pug_html + "\u003Cdiv\u003EYour account has been closed!\u003C\u002Fdiv\u003E"; 34 | } 35 | else 36 | if (account.accountStatus === 'suspended') { 37 | pug_html = pug_html + "\u003Cdiv\u003EYour account has been temporarily suspended\u003C\u002Fdiv\u003E"; 38 | } 39 | else { 40 | pug_html = pug_html + "\u003Cdiv\u003EBank balance:\u003Cspan" + (pug_attr("class", pug_classes([account.balance<0 ? 'negative' : 'positive'], [true]), false, false)) + "\u003E" + (pug_escape(null == (pug_interp = account.formattedBalance) ? "" : pug_interp)) + "\u003C\u002Fspan\u003E\u003C\u002Fdiv\u003E"; 41 | } 42 | pug_html = pug_html + "\u003C\u002Fdiv\u003E"; 43 | } 44 | } 45 | }).call(this); 46 | }.call(this,"accounts" in locals_for_with?locals_for_with.accounts:typeof accounts!=="undefined"?accounts:undefined));;return pug_html;} -------------------------------------------------------------------------------- /output/compiled/projects-escaped/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("projects-escaped",body_0);function body_0(chk,ctx){return chk.w("").f(ctx.get(["title"], false),ctx,"h").w("

    ").f(ctx.get(["text"], false),ctx,"h").w("

    ").s(ctx.get(["projects"], false),ctx,{"block":body_1},{}).nx(ctx.get(["projects"], false),ctx,{"block":body_2},{}).w("");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("").f(ctx.get(["name"], false),ctx,"h").w("

    ").f(ctx.get(["description"], false),ctx,"h").w("

    ");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.w("No projects");}body_2.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/projects-escaped/handlebars.js: -------------------------------------------------------------------------------- 1 | (function() { var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; templates["projects-escaped"] = template({"1":function(container,depth0,helpers,partials,data) { 2 | var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; 3 | 4 | return " " 7 | + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) 8 | + "\n

    " 9 | + alias4(((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"description","hash":{},"data":data}) : helper))) 10 | + "

    \n"; 11 | },"3":function(container,depth0,helpers,partials,data) { 12 | return " No projects\n"; 13 | },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { 14 | var stack1, helper, options, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression, alias5=helpers.blockHelperMissing, buffer = 15 | "\n \n " 16 | + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) 17 | + "\n \n \n

    " 18 | + alias4(((helper = (helper = helpers.text || (depth0 != null ? depth0.text : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"text","hash":{},"data":data}) : helper))) 19 | + "

    \n"; 20 | stack1 = ((helper = (helper = helpers.projects || (depth0 != null ? depth0.projects : depth0)) != null ? helper : alias2),(options={"name":"projects","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data}),(typeof helper === alias3 ? helper.call(alias1,options) : helper)); 21 | if (!helpers.projects) { stack1 = alias5.call(depth0,stack1,options)} 22 | if (stack1 != null) { buffer += stack1; } 23 | stack1 = ((helper = (helper = helpers.projects || (depth0 != null ? depth0.projects : depth0)) != null ? helper : alias2),(options={"name":"projects","hash":{},"fn":container.noop,"inverse":container.program(3, data, 0),"data":data}),(typeof helper === alias3 ? helper.call(alias1,options) : helper)); 24 | if (!helpers.projects) { stack1 = alias5.call(depth0,stack1,options)} 25 | if (stack1 != null) { buffer += stack1; } 26 | return buffer + " \n"; 27 | },"useData":true});})(); -------------------------------------------------------------------------------- /output/compiled/projects-escaped/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_escapeXml = marko_helpers.x, 7 | marko_loadTag = marko_helpers.t, 8 | component_globals_tag = marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")), 9 | marko_forEach = marko_helpers.f, 10 | marko_attr = marko_helpers.a, 11 | init_components_tag = marko_loadTag(require("marko/dist/components/taglib/init-components-tag")), 12 | await_reorderer_tag = marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag")); 13 | 14 | function render(input, out) { 15 | var data = input; 16 | 17 | out.w("" + 18 | marko_escapeXml(input.title) + 19 | ""); 20 | 21 | component_globals_tag({}, out); 22 | 23 | out.w("

    " + 24 | marko_escapeXml(input.text) + 25 | "

    "); 26 | 27 | marko_forEach(input.projects, function(project) { 28 | out.w("" + 31 | marko_escapeXml(project.name) + 32 | "

    " + 33 | marko_escapeXml(project.description) + 34 | "

    "); 35 | }); 36 | 37 | if (!input.projects.length) { 38 | out.w("No projects"); 39 | } 40 | 41 | init_components_tag({}, out); 42 | 43 | await_reorderer_tag({}, out); 44 | 45 | out.w(""); 46 | } 47 | 48 | marko_template._ = render; 49 | 50 | marko_template.meta = { 51 | tags: [ 52 | "marko/dist/components/taglib/component-globals-tag", 53 | "marko/dist/components/taglib/init-components-tag", 54 | "marko/dist/taglibs/async/await-reorderer-tag" 55 | ] 56 | }; 57 | -------------------------------------------------------------------------------- /output/compiled/projects-escaped/marko.native-for.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_escapeXml = marko_helpers.x, 7 | marko_loadTag = marko_helpers.t, 8 | component_globals_tag = marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")), 9 | marko_attr = marko_helpers.a, 10 | init_components_tag = marko_loadTag(require("marko/dist/components/taglib/init-components-tag")), 11 | await_reorderer_tag = marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag")); 12 | 13 | function render(input, out) { 14 | var data = input; 15 | 16 | out.w("" + 17 | marko_escapeXml(data.title) + 18 | ""); 19 | 20 | component_globals_tag({}, out); 21 | 22 | out.w("

    " + 23 | marko_escapeXml(data.text) + 24 | "

    "); 25 | 26 | for (var i = 0, 27 | len = data.projects.length; i < len; i++) { 28 | var project = data.projects[i]; 29 | 30 | out.w("" + 33 | marko_escapeXml(project.name) + 34 | "

    " + 35 | marko_escapeXml(project.description) + 36 | "

    "); 37 | } 38 | 39 | if (!data.projects.length) { 40 | out.w("No projects"); 41 | } 42 | 43 | init_components_tag({}, out); 44 | 45 | await_reorderer_tag({}, out); 46 | 47 | out.w(""); 48 | } 49 | 50 | marko_template._ = render; 51 | 52 | marko_template.meta = { 53 | tags: [ 54 | "marko/dist/components/taglib/component-globals-tag", 55 | "marko/dist/components/taglib/init-components-tag", 56 | "marko/dist/taglibs/async/await-reorderer-tag" 57 | ] 58 | }; 59 | -------------------------------------------------------------------------------- /output/compiled/projects-unescaped/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("projects-unescaped",body_0);function body_0(chk,ctx){return chk.w("").f(ctx.get(["title"], false),ctx,"h",["s"]).w("

    ").f(ctx.get(["text"], false),ctx,"h",["s"]).w("

    ").s(ctx.get(["projects"], false),ctx,{"block":body_1},{}).nx(ctx.get(["projects"], false),ctx,{"block":body_2},{}).w("");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("").f(ctx.get(["name"], false),ctx,"h",["s"]).w("

    ").f(ctx.get(["description"], false),ctx,"h",["s"]).w("

    ");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.w("No projects");}body_2.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/projects-unescaped/handlebars.js: -------------------------------------------------------------------------------- 1 | (function() { var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; templates["projects-unescaped"] = template({"1":function(container,depth0,helpers,partials,data) { 2 | var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function"; 3 | 4 | return " " 7 | + ((stack1 = ((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) != null ? stack1 : "") 8 | + "\n

    " 9 | + ((stack1 = ((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"description","hash":{},"data":data}) : helper))) != null ? stack1 : "") 10 | + "

    \n"; 11 | },"3":function(container,depth0,helpers,partials,data) { 12 | return " No projects\n"; 13 | },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { 14 | var stack1, helper, options, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=helpers.blockHelperMissing, buffer = 15 | "\n \n " 16 | + ((stack1 = ((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) != null ? stack1 : "") 17 | + "\n \n \n

    " 18 | + ((stack1 = ((helper = (helper = helpers.text || (depth0 != null ? depth0.text : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"text","hash":{},"data":data}) : helper))) != null ? stack1 : "") 19 | + "

    \n"; 20 | stack1 = ((helper = (helper = helpers.projects || (depth0 != null ? depth0.projects : depth0)) != null ? helper : alias2),(options={"name":"projects","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data}),(typeof helper === alias3 ? helper.call(alias1,options) : helper)); 21 | if (!helpers.projects) { stack1 = alias4.call(depth0,stack1,options)} 22 | if (stack1 != null) { buffer += stack1; } 23 | stack1 = ((helper = (helper = helpers.projects || (depth0 != null ? depth0.projects : depth0)) != null ? helper : alias2),(options={"name":"projects","hash":{},"fn":container.noop,"inverse":container.program(3, data, 0),"data":data}),(typeof helper === alias3 ? helper.call(alias1,options) : helper)); 24 | if (!helpers.projects) { stack1 = alias4.call(depth0,stack1,options)} 25 | if (stack1 != null) { buffer += stack1; } 26 | return buffer + " \n"; 27 | },"useData":true});})(); -------------------------------------------------------------------------------- /output/compiled/projects-unescaped/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_str = marko_helpers.s, 7 | marko_loadTag = marko_helpers.t, 8 | component_globals_tag = marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")), 9 | marko_forEach = marko_helpers.f, 10 | init_components_tag = marko_loadTag(require("marko/dist/components/taglib/init-components-tag")), 11 | await_reorderer_tag = marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag")); 12 | 13 | function render(input, out) { 14 | var data = input; 15 | 16 | out.w("" + 17 | marko_str(input.title) + 18 | ""); 19 | 20 | component_globals_tag({}, out); 21 | 22 | out.w("

    " + 23 | marko_str(input.text) + 24 | "

    "); 25 | 26 | marko_forEach(input.projects, function(project) { 27 | out.w("" + 30 | marko_str(project.name) + 31 | "

    " + 32 | marko_str(project.description) + 33 | "

    "); 34 | }); 35 | 36 | if (!input.projects.length) { 37 | out.w("No projects"); 38 | } 39 | 40 | init_components_tag({}, out); 41 | 42 | await_reorderer_tag({}, out); 43 | 44 | out.w(""); 45 | } 46 | 47 | marko_template._ = render; 48 | 49 | marko_template.meta = { 50 | tags: [ 51 | "marko/dist/components/taglib/component-globals-tag", 52 | "marko/dist/components/taglib/init-components-tag", 53 | "marko/dist/taglibs/async/await-reorderer-tag" 54 | ] 55 | }; 56 | -------------------------------------------------------------------------------- /output/compiled/projects-unescaped/marko.native-for.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_str = marko_helpers.s, 7 | marko_loadTag = marko_helpers.t, 8 | component_globals_tag = marko_loadTag(require("marko/dist/components/taglib/component-globals-tag")), 9 | init_components_tag = marko_loadTag(require("marko/dist/components/taglib/init-components-tag")), 10 | await_reorderer_tag = marko_loadTag(require("marko/dist/taglibs/async/await-reorderer-tag")); 11 | 12 | function render(input, out) { 13 | var data = input; 14 | 15 | out.w("" + 16 | marko_str(data.title) + 17 | ""); 18 | 19 | component_globals_tag({}, out); 20 | 21 | out.w("

    " + 22 | marko_str(data.text) + 23 | "

    "); 24 | 25 | for (var i = 0, 26 | len = data.projects.length; i < len; i++) { 27 | var project = data.projects[i]; 28 | 29 | out.w("" + 32 | marko_str(project.name) + 33 | "

    " + 34 | marko_str(project.description) + 35 | "

    "); 36 | } 37 | 38 | if (!data.projects.length) { 39 | out.w("No projects"); 40 | } 41 | 42 | init_components_tag({}, out); 43 | 44 | await_reorderer_tag({}, out); 45 | 46 | out.w(""); 47 | } 48 | 49 | marko_template._ = render; 50 | 51 | marko_template.meta = { 52 | tags: [ 53 | "marko/dist/components/taglib/component-globals-tag", 54 | "marko/dist/components/taglib/init-components-tag", 55 | "marko/dist/taglibs/async/await-reorderer-tag" 56 | ] 57 | }; 58 | -------------------------------------------------------------------------------- /output/compiled/reverse-helper/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("reverse-helper",body_0);function body_0(chk,ctx){return chk.h("reverse",ctx,{},{"str":ctx.get(["A"], false)},"h").h("reverse",ctx,{},{"str":ctx.get(["B"], false)},"h").h("reverse",ctx,{},{"str":ctx.get(["C"], false)},"h").h("reverse",ctx,{},{"str":ctx.get(["D"], false)},"h").h("reverse",ctx,{},{"str":ctx.get(["E"], false)},"h");}body_0.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/reverse-helper/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | module_util_module = require("../../helpers/util"), 6 | util_module = module_util_module.default || module_util_module, 7 | reverse = module_util_module.reverse, 8 | marko_helpers = require("marko/dist/runtime/html/helpers"), 9 | marko_str = marko_helpers.s; 10 | 11 | function render(input, out) { 12 | var data = input; 13 | 14 | out.w("
    " + 15 | marko_str(reverse(input.A)) + 16 | marko_str(reverse(input.B)) + 17 | marko_str(reverse(input.C)) + 18 | marko_str(reverse(input.D)) + 19 | marko_str(reverse(input.E)) + 20 | "
    "); 21 | } 22 | 23 | marko_template._ = render; 24 | 25 | marko_template.meta = {}; 26 | -------------------------------------------------------------------------------- /output/compiled/search-results/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("search-results",body_0);function body_0(chk,ctx){return chk.w("
    Searching...
    ").f(ctx.get(["totalCount"], false),ctx,"h").w(" results
    View:
    ").s(ctx.get(["searchRecords"], false),ctx,{"block":body_1},{}).w("
    ");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("

    ").f(ctx.get(["title"], false),ctx,"h").w("

    ").f(ctx.get(["description"], false),ctx,"h").x(ctx.get(["featured"], false),ctx,{"block":body_2},{}).x(ctx.get(["sizes"], false),ctx,{"block":body_3},{}).w("
    ");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.w("
    Featured!
    ");}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w("
    Sizes available:
      ").s(ctx.get(["sizes"], false),ctx,{"block":body_4},{}).w("
    ");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w("
  • ").f(ctx.getPath(true, []),ctx,"h").w("
  • ");}body_4.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/search-results/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_escapeXml = marko_helpers.x, 7 | marko_forEach = marko_helpers.f, 8 | marko_escapeXmlAttr = marko_helpers.xa; 9 | 10 | function render(input, out) { 11 | var data = input; 12 | 13 | out.w("
    Searching...
    " + 14 | marko_escapeXml(input.totalCount) + 15 | " results
    View:
    "); 18 | 19 | marko_forEach(input.searchRecords, function(searchRecord) { 20 | out.w("

    " + 25 | marko_escapeXml(searchRecord.title) + 26 | "

    " + 27 | marko_escapeXml(searchRecord.description)); 28 | 29 | if (searchRecord.featured) { 30 | out.w("
    Featured!
    "); 31 | } 32 | 33 | if (searchRecord.sizes && searchRecord.sizes.length) { 34 | out.w("
    Sizes available:
      "); 35 | 36 | marko_forEach(searchRecord.sizes, function(size) { 37 | out.w("
    • " + 38 | marko_escapeXml(size) + 39 | "
    • "); 40 | }); 41 | 42 | out.w("
    "); 43 | } 44 | 45 | out.w("
    "); 46 | }); 47 | 48 | out.w("
    "); 49 | } 50 | 51 | marko_template._ = render; 52 | 53 | marko_template.meta = {}; 54 | -------------------------------------------------------------------------------- /output/compiled/search-results/marko.native-for.js: -------------------------------------------------------------------------------- 1 | function create(__helpers) { 2 | var str = __helpers.s, 3 | empty = __helpers.e, 4 | notEmpty = __helpers.ne, 5 | escapeXml = __helpers.x, 6 | escapeXmlAttr = __helpers.xa, 7 | forLoop = __helpers.fl, 8 | attr = __helpers.a; 9 | 10 | return function render(data, out) { 11 | out.w('
    Searching...
    ' + 12 | escapeXml(data.totalCount) + 13 | ' results
    View:
    '); 16 | 17 | forLoop(data.searchRecords, function(__array,__index,__length,searchRecord) { 18 | for (;__index<__length;__index++) { 19 | searchRecord=__array[__index]; 20 | 21 | out.w('

    ' + 26 | escapeXml(searchRecord.title) + 27 | '

    ' + 28 | escapeXml(searchRecord.description)); 29 | 30 | if (searchRecord.featured) { 31 | out.w('
    Featured!
    '); 32 | } 33 | 34 | if (notEmpty(searchRecord.sizes)) { 35 | out.w('
    Sizes available:
      '); 36 | 37 | forLoop(searchRecord.sizes, function(__array,__index,__length,size) { 38 | for (;__index<__length;__index++) { 39 | size=__array[__index]; 40 | 41 | out.w('
    • ' + 42 | escapeXml(size) + 43 | '
    • '); 44 | } 45 | }); 46 | 47 | out.w('
    '); 48 | } 49 | 50 | out.w('
    '); 51 | } 52 | }); 53 | 54 | out.w('
    '); 55 | }; 56 | } 57 | (module.exports = require("marko").c(__filename)).c(create); -------------------------------------------------------------------------------- /output/compiled/simple-0/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("simple-0",body_0);function body_0(chk,ctx){return chk.w("Hello ").f(ctx.get(["name"], false),ctx,"h").w("! You have ").f(ctx.get(["messageCount"], false),ctx,"h").w(" messages! ").f(ctx.get(["colors"], false),ctx,"h");}body_0.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/simple-0/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_str = marko_helpers.s; 7 | 8 | function render(input, out) { 9 | var data = input; 10 | 11 | out.w("Hello " + 12 | marko_str(input.name) + 13 | "! You have " + 14 | marko_str(input.messageCount) + 15 | " messages! " + 16 | marko_str(input.colors)); 17 | } 18 | 19 | marko_template._ = render; 20 | 21 | marko_template.meta = {}; 22 | -------------------------------------------------------------------------------- /output/compiled/simple-1/dot.js: -------------------------------------------------------------------------------- 1 | module.exports=function anonymous(it 2 | /*``*/) { 3 | var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function (doNotSkipEncoded) { 4 | var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/" }, 5 | matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; 6 | return function(code) { 7 | return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : ""; 8 | }; 9 | }());var out='
    Hello '+encodeHTML(it.name)+'! You have '+encodeHTML(it.messageCount)+' messages! ';if(it.colors && it.colors.length){out+='
      ';var arr1=it.colors;if(arr1){var color,i1=-1,l1=arr1.length-1;while(i1'+encodeHTML(color)+' ';} } out+='
    ';}else{out+='
    No colors!
    ';}out+='
    ';return out; 10 | } -------------------------------------------------------------------------------- /output/compiled/simple-1/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("simple-1",body_0);function body_0(chk,ctx){return chk.w("
    Hello ").f(ctx.get(["name"], false),ctx,"h").w("! You have ").f(ctx.get(["messageCount"], false),ctx,"h").w(" messages!").x(ctx.get(["colors"], false),ctx,{"else":body_1,"block":body_2},{}).w("
    ");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("
    No colors!
    ");}body_1.__dustBody=!0;function body_2(chk,ctx){return chk.w("
      ").s(ctx.get(["colors"], false),ctx,{"block":body_3},{}).w("
    ");}body_2.__dustBody=!0;function body_3(chk,ctx){return chk.w("
  • ").f(ctx.getPath(true, []),ctx,"h").w("
  • ");}body_3.__dustBody=!0;function body_4(chk,ctx){return chk.w("secondary");}body_4.__dustBody=!0;function body_5(chk,ctx){return chk.w("primary");}body_5.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/simple-1/handlebars.js: -------------------------------------------------------------------------------- 1 | (function() { var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; templates["simple-1"] = template({"1":function(container,depth0,helpers,partials,data) { 2 | var stack1; 3 | 4 | return "
      \n" 5 | + ((stack1 = helpers.each.call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? depth0.colors : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") 6 | + "
    \n"; 7 | },"2":function(container,depth0,helpers,partials,data) { 8 | return "
  • " 9 | + container.escapeExpression(container.lambda(depth0, depth0)) 10 | + "
  • \n"; 11 | },"4":function(container,depth0,helpers,partials,data) { 12 | return "
    \n No colors!\n
    \n"; 13 | },"6":function(container,depth0,helpers,partials,data) { 14 | return "primary"; 15 | },"8":function(container,depth0,helpers,partials,data) { 16 | return "secondary"; 17 | },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { 18 | var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; 19 | 20 | return "
    \n
    \n Hello " 21 | + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) 22 | + "! You have " 23 | + alias4(((helper = (helper = helpers.messageCount || (depth0 != null ? depth0.messageCount : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"messageCount","hash":{},"data":data}) : helper))) 24 | + " messages!\n\n" 25 | + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.colors : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "") 26 | + "
    \n \n
    "; 29 | },"useData":true});})(); -------------------------------------------------------------------------------- /output/compiled/simple-1/jade.js: -------------------------------------------------------------------------------- 1 | function template(locals) { 2 | var buf = []; 3 | var jade_mixins = {}; 4 | var jade_interp; 5 | ;var locals_for_with = (locals || {});(function (colors, messageCount, name, primary, undefined) { 6 | buf.push("
    Hello " + (jade.escape((jade_interp = name) == null ? '' : jade_interp)) + "! You have " + (jade.escape((jade_interp = messageCount) == null ? '' : jade_interp)) + " messages!"); 7 | if ( colors && colors.length) 8 | { 9 | buf.push("
      "); 10 | // iterate colors 11 | ;(function(){ 12 | var $$obj = colors; 13 | if ('number' == typeof $$obj.length) { 14 | 15 | for (var $index = 0, $$l = $$obj.length; $index < $$l; $index++) { 16 | var color = $$obj[$index]; 17 | 18 | buf.push("
    • " + (jade.escape(null == (jade_interp = color) ? "" : jade_interp)) + "
    • "); 19 | } 20 | 21 | } else { 22 | var $$l = 0; 23 | for (var $index in $$obj) { 24 | $$l++; var color = $$obj[$index]; 25 | 26 | buf.push("
    • " + (jade.escape(null == (jade_interp = color) ? "" : jade_interp)) + "
    • "); 27 | } 28 | 29 | } 30 | }).call(this); 31 | 32 | buf.push("
    "); 33 | } 34 | if ( !colors || !colors.length) 35 | { 36 | buf.push("
    No colors!
    "); 37 | } 38 | buf.push("
    ");}.call(this,"colors" in locals_for_with?locals_for_with.colors:typeof colors!=="undefined"?colors:undefined,"messageCount" in locals_for_with?locals_for_with.messageCount:typeof messageCount!=="undefined"?messageCount:undefined,"name" in locals_for_with?locals_for_with.name:typeof name!=="undefined"?name:undefined,"primary" in locals_for_with?locals_for_with.primary:typeof primary!=="undefined"?primary:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return buf.join(""); 39 | } -------------------------------------------------------------------------------- /output/compiled/simple-1/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_escapeXml = marko_helpers.x, 7 | marko_str = marko_helpers.s, 8 | marko_escapeXmlAttr = marko_helpers.xa, 9 | marko_classAttr = marko_helpers.ca; 10 | 11 | function render(input, out) { 12 | var data = input; 13 | 14 | var color, 15 | color__i, 16 | color__array, 17 | color__len; 18 | 19 | out.w("
    Hello " + 20 | marko_escapeXml(input.name) + 21 | "! You have " + 22 | marko_str(input.messageCount) + 23 | " messages!"); 24 | 25 | if (input.colors.length) { 26 | out.w("
      "); 27 | 28 | for (color__i = 0, color__array = input.colors, color__len = color__array && color__array.length; color__i < color__len; color__i++) { 29 | color = color__array[color__i]; 30 | 31 | out.w("
    • " + 34 | marko_escapeXml(color) + 35 | "
    • "); 36 | } 37 | 38 | out.w("
    "); 39 | } else { 40 | out.w("
    No colors!
    "); 41 | } 42 | 43 | out.w("
    "); 48 | } 49 | 50 | marko_template._ = render; 51 | 52 | marko_template.meta = {}; 53 | -------------------------------------------------------------------------------- /output/compiled/simple-1/marko.native-for.js: -------------------------------------------------------------------------------- 1 | function create(__helpers) { 2 | var str = __helpers.s, 3 | empty = __helpers.e, 4 | notEmpty = __helpers.ne, 5 | escapeXml = __helpers.x, 6 | forLoop = __helpers.fl; 7 | 8 | return function render(data, out) { 9 | out.w('Hello ' + 10 | escapeXml(data.name) + 11 | '! '); 12 | 13 | if (notEmpty(data.colors)) { 14 | out.w('
      '); 15 | 16 | forLoop(data.colors, function(__array,__index,__length,color) { 17 | for (;__index<__length;__index++) { 18 | color=__array[__index]; 19 | 20 | out.w('
    • ' + 21 | escapeXml(color) + 22 | '
    • '); 23 | } 24 | }); 25 | 26 | out.w('
    '); 27 | } 28 | else { 29 | out.w('
    No colors!
    '); 30 | } 31 | }; 32 | } 33 | (module.exports = require("marko").c(__filename)).c(create); -------------------------------------------------------------------------------- /output/compiled/simple-1/nunjucks.js: -------------------------------------------------------------------------------- 1 | (function() {(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})["simple-1"] = (function() { 2 | function root(env, context, frame, runtime, cb) { 3 | var lineno = null; 4 | var colno = null; 5 | var output = ""; 6 | try { 7 | var parentTemplate = null; 8 | output += "
    \n
    \n Hello "; 9 | output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, "name"), env.opts.autoescape); 10 | output += "! You have "; 11 | output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, "messageCount"), env.opts.autoescape); 12 | output += " messages!\n\n "; 13 | if(runtime.contextOrFrameLookup(context, frame, "colors") && runtime.memberLookup((runtime.contextOrFrameLookup(context, frame, "colors")),"length")) { 14 | output += "\n
      \n "; 15 | frame = frame.push(); 16 | var t_3 = runtime.contextOrFrameLookup(context, frame, "colors"); 17 | if(t_3) {var t_2 = t_3.length; 18 | for(var t_1=0; t_1 < t_3.length; t_1++) { 19 | var t_4 = t_3[t_1]; 20 | frame.set("color", t_4); 21 | frame.set("loop.index", t_1 + 1); 22 | frame.set("loop.index0", t_1); 23 | frame.set("loop.revindex", t_2 - t_1); 24 | frame.set("loop.revindex0", t_2 - t_1 - 1); 25 | frame.set("loop.first", t_1 === 0); 26 | frame.set("loop.last", t_1 === t_2 - 1); 27 | frame.set("loop.length", t_2); 28 | output += "\n
    • "; 29 | output += runtime.suppressValue(t_4, env.opts.autoescape); 30 | output += "
    • \n "; 31 | ; 32 | } 33 | } 34 | frame = frame.pop(); 35 | output += "\n
    \n "; 36 | ; 37 | } 38 | else { 39 | output += "\n
    \n No colors!\n
    \n "; 40 | ; 41 | } 42 | output += "\n
    \n \n
    "; 52 | if(parentTemplate) { 53 | parentTemplate.rootRenderFunc(env, context, frame, runtime, cb); 54 | } else { 55 | cb(null, output); 56 | } 57 | ; 58 | } catch (e) { 59 | cb(runtime.handleError(e, lineno, colno)); 60 | } 61 | } 62 | return { 63 | root: root 64 | }; 65 | 66 | })(); 67 | })(); 68 | -------------------------------------------------------------------------------- /output/compiled/simple-1/pug.js: -------------------------------------------------------------------------------- 1 | function pug_attr(t,e,n,f){return e!==!1&&null!=e&&(e||"class"!==t&&"style"!==t)?e===!0?" "+(f?t:t+'="'+t+'"'):("function"==typeof e.toJSON&&(e=e.toJSON()),"string"==typeof e||(e=JSON.stringify(e),n||e.indexOf('"')===-1)?(n&&(e=pug_escape(e))," "+t+'="'+e+'"'):" "+t+"='"+e.replace(/'/g,"'")+"'"):""} 2 | function pug_classes(s,r){return Array.isArray(s)?pug_classes_array(s,r):s&&"object"==typeof s?pug_classes_object(s):s||""} 3 | function pug_classes_array(r,a){for(var s,e="",u="",c=Array.isArray(a),g=0;g]/;function template(locals) {var pug_html = "", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (buttonLabel, colors, messageCount, name, primary) {pug_html = pug_html + "\u003Cdiv class=\"simple-1\" style=\"background-color: blue; border: 1px solid black;\"\u003E\u003Cdiv class=\"colors\"\u003E\u003Cspan class=\"hello\"\u003EHello " + (pug_escape(null == (pug_interp = name) ? "" : pug_interp)) + "! \u003Cstrong\u003EYou have " + (pug_escape(null == (pug_interp = messageCount) ? "" : pug_interp)) + " messages!\u003C\u002Fstrong\u003E\u003C\u002Fspan\u003E"; 8 | if (colors && colors.length) { 9 | pug_html = pug_html + "\u003Cul\u003E"; 10 | // iterate colors 11 | ;(function(){ 12 | var $$obj = colors; 13 | if ('number' == typeof $$obj.length) { 14 | for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) { 15 | var color = $$obj[pug_index0]; 16 | pug_html = pug_html + "\u003Cli class=\"color\"\u003E" + (pug_escape(null == (pug_interp = color) ? "" : pug_interp)) + "\u003C\u002Fli\u003E"; 17 | } 18 | } else { 19 | var $$l = 0; 20 | for (var pug_index0 in $$obj) { 21 | $$l++; 22 | var color = $$obj[pug_index0]; 23 | pug_html = pug_html + "\u003Cli class=\"color\"\u003E" + (pug_escape(null == (pug_interp = color) ? "" : pug_interp)) + "\u003C\u002Fli\u003E"; 24 | } 25 | } 26 | }).call(this); 27 | 28 | pug_html = pug_html + "\u003C\u002Ful\u003E"; 29 | } 30 | if (!colors || !colors.length) { 31 | pug_html = pug_html + "\u003Cdiv\u003ENo colors!\u003C\u002Fdiv\u003E"; 32 | } 33 | pug_html = pug_html + "\u003C\u002Fdiv\u003E\u003Cbutton" + (pug_attr("class", pug_classes([primary ? 'primary' : 'secondary'], [true]), false, false)+" type=\"button\"") + "\u003E" + (pug_escape(null == (pug_interp = buttonLabel) ? "" : pug_interp)) + "\u003C\u002Fbutton\u003E\u003C\u002Fdiv\u003E";}.call(this,"buttonLabel" in locals_for_with?locals_for_with.buttonLabel:typeof buttonLabel!=="undefined"?buttonLabel:undefined,"colors" in locals_for_with?locals_for_with.colors:typeof colors!=="undefined"?colors:undefined,"messageCount" in locals_for_with?locals_for_with.messageCount:typeof messageCount!=="undefined"?messageCount:undefined,"name" in locals_for_with?locals_for_with.name:typeof name!=="undefined"?name:undefined,"primary" in locals_for_with?locals_for_with.primary:typeof primary!=="undefined"?primary:undefined));;return pug_html;} -------------------------------------------------------------------------------- /output/compiled/simple-1/react.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react'); 4 | 5 | function renderColor(color) { 6 | var style = { 7 | backgroundColor: color 8 | }; 9 | 10 | return React.createElement( 11 | 'li', 12 | { className: 'color', style: style }, 13 | color 14 | ); 15 | } 16 | 17 | function renderColors(colors) { 18 | if (colors.length) { 19 | return React.createElement( 20 | 'ul', 21 | null, 22 | colors.map(renderColor) 23 | ); 24 | } else { 25 | return React.createElement( 26 | 'div', 27 | null, 28 | 'No colors!' 29 | ); 30 | } 31 | } 32 | 33 | module.exports = React.createClass({ 34 | displayName: 'exports', 35 | render: function render() { 36 | var style = { backgroundColor: 'blue', border: '1px solid black' }; 37 | 38 | return React.createElement( 39 | 'div', 40 | { className: 'simple-1', style: style }, 41 | React.createElement( 42 | 'div', 43 | { className: 'colors' }, 44 | React.createElement( 45 | 'span', 46 | { className: 'hello' }, 47 | 'Hello ', 48 | this.props.name, 49 | '! ', 50 | React.createElement( 51 | 'strong', 52 | null, 53 | 'You have ', 54 | this.props.messageCount, 55 | ' messages!' 56 | ) 57 | ), 58 | renderColors(this.props.colors) 59 | ), 60 | ',', 61 | React.createElement( 62 | 'button', 63 | { type: 'button', className: '{this.props.primary ? \'primary\' : \'secondary\'}' }, 64 | 'Click me!' 65 | ) 66 | ); 67 | } 68 | }); -------------------------------------------------------------------------------- /output/compiled/simple-1/swig.js: -------------------------------------------------------------------------------- 1 | module.exports=function (_swig,_ctx,_filters,_utils,_fn 2 | /*``*/) { 3 | var _ext = _swig.extensions, 4 | _output = ""; 5 | _output += "
    \n
    \n Hello "; 6 | _output += _filters["e"]((((typeof _ctx.name !== "undefined" && _ctx.name !== null) ? ((typeof _ctx.name !== "undefined" && _ctx.name !== null) ? _ctx.name : "") : ((typeof name !== "undefined" && name !== null) ? name : "")) !== null ? ((typeof _ctx.name !== "undefined" && _ctx.name !== null) ? ((typeof _ctx.name !== "undefined" && _ctx.name !== null) ? _ctx.name : "") : ((typeof name !== "undefined" && name !== null) ? name : "")) : "" )); 7 | _output += "! You have "; 8 | _output += _filters["e"]((((typeof _ctx.messageCount !== "undefined" && _ctx.messageCount !== null) ? ((typeof _ctx.messageCount !== "undefined" && _ctx.messageCount !== null) ? _ctx.messageCount : "") : ((typeof messageCount !== "undefined" && messageCount !== null) ? messageCount : "")) !== null ? ((typeof _ctx.messageCount !== "undefined" && _ctx.messageCount !== null) ? ((typeof _ctx.messageCount !== "undefined" && _ctx.messageCount !== null) ? _ctx.messageCount : "") : ((typeof messageCount !== "undefined" && messageCount !== null) ? messageCount : "")) : "" )); 9 | _output += " messages!\n\n "; 10 | if ((((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? _ctx.colors : "") : ((typeof colors !== "undefined" && colors !== null) ? colors : "")) !== null ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? _ctx.colors : "") : ((typeof colors !== "undefined" && colors !== null) ? colors : "")) : "" ) && (((typeof _ctx.colors !== "undefined" && _ctx.colors !== null && _ctx.colors.length !== undefined && _ctx.colors.length !== null) ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null && _ctx.colors.length !== undefined && _ctx.colors.length !== null) ? _ctx.colors.length : "") : ((typeof colors !== "undefined" && colors !== null && colors.length !== undefined && colors.length !== null) ? colors.length : "")) !== null ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null && _ctx.colors.length !== undefined && _ctx.colors.length !== null) ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null && _ctx.colors.length !== undefined && _ctx.colors.length !== null) ? _ctx.colors.length : "") : ((typeof colors !== "undefined" && colors !== null && colors.length !== undefined && colors.length !== null) ? colors.length : "")) : "" )) { 11 | _output += "\n
      \n "; 12 | (function () { 13 | var __l = (((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? _ctx.colors : "") : ((typeof colors !== "undefined" && colors !== null) ? colors : "")) !== null ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? ((typeof _ctx.colors !== "undefined" && _ctx.colors !== null) ? _ctx.colors : "") : ((typeof colors !== "undefined" && colors !== null) ? colors : "")) : "" ), __len = (_utils.isArray(__l) || typeof __l === "string") ? __l.length : _utils.keys(__l).length; 14 | if (!__l) { return; } 15 | var _ctx__loopcache07287772253884792 = { loop: _ctx.loop, color: _ctx.color, __k: _ctx.__k }; 16 | _ctx.loop = { first: false, index: 1, index0: 0, revindex: __len, revindex0: __len - 1, length: __len, last: false }; 17 | _utils.each(__l, function (color, __k) { 18 | _ctx.color = color; 19 | _ctx.__k = __k; 20 | _ctx.loop.key = __k; 21 | _ctx.loop.first = (_ctx.loop.index0 === 0); 22 | _ctx.loop.last = (_ctx.loop.revindex0 === 0); 23 | _output += "\n
    • "; 24 | _output += _filters["e"]((((typeof _ctx.color !== "undefined" && _ctx.color !== null) ? ((typeof _ctx.color !== "undefined" && _ctx.color !== null) ? _ctx.color : "") : ((typeof color !== "undefined" && color !== null) ? color : "")) !== null ? ((typeof _ctx.color !== "undefined" && _ctx.color !== null) ? ((typeof _ctx.color !== "undefined" && _ctx.color !== null) ? _ctx.color : "") : ((typeof color !== "undefined" && color !== null) ? color : "")) : "" )); 25 | _output += "
    • \n "; 26 | _ctx.loop.index += 1; _ctx.loop.index0 += 1; _ctx.loop.revindex -= 1; _ctx.loop.revindex0 -= 1; 27 | }); 28 | _ctx.loop = _ctx__loopcache07287772253884792.loop; 29 | _ctx.color = _ctx__loopcache07287772253884792.color; 30 | _ctx.__k = _ctx__loopcache07287772253884792.__k; 31 | _ctx__loopcache07287772253884792 = undefined; 32 | })(); 33 | _output += "\n
    \n "; 34 | } else { 35 | _output += "\n
    \n No colors!\n
    \n "; 36 | 37 | }_output += "\n
    \n \n
    "; 44 | 45 | return _output; 46 | 47 | } -------------------------------------------------------------------------------- /output/compiled/simple-1/vue.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marko-js/templating-benchmarks/11e4da429728403753009ab1e4b571f710f36a69/output/compiled/simple-1/vue.js -------------------------------------------------------------------------------- /output/compiled/simple-2/dust.js: -------------------------------------------------------------------------------- 1 | (function(dust){dust.register("simple-2",body_0);function body_0(chk,ctx){return chk.w("

    ").f(ctx.get(["header"], false),ctx,"h").w("

    ").f(ctx.get(["header2"], false),ctx,"h").w("

    ").f(ctx.get(["header3"], false),ctx,"h").w("

    ").f(ctx.get(["header4"], false),ctx,"h").w("

    ").f(ctx.get(["header5"], false),ctx,"h").w("
    ").f(ctx.get(["header6"], false),ctx,"h").w("
      ").s(ctx.get(["list"], false),ctx,{"block":body_1},{}).w("
    ");}body_0.__dustBody=!0;function body_1(chk,ctx){return chk.w("
  • ").f(ctx.getPath(true, []),ctx,"h").w("
  • ");}body_1.__dustBody=!0;return body_0}(dust)); -------------------------------------------------------------------------------- /output/compiled/simple-2/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_helpers = require("marko/dist/runtime/html/helpers"), 6 | marko_escapeXml = marko_helpers.x, 7 | marko_forEach = marko_helpers.f; 8 | 9 | function render(input, out) { 10 | var data = input; 11 | 12 | out.w("

    " + 13 | marko_escapeXml(input.header) + 14 | "

    " + 15 | marko_escapeXml(input.header2) + 16 | "

    " + 17 | marko_escapeXml(input.header3) + 18 | "

    " + 19 | marko_escapeXml(input.header4) + 20 | "

    " + 21 | marko_escapeXml(input.header5) + 22 | "
    " + 23 | marko_escapeXml(input.header6) + 24 | "
      "); 25 | 26 | marko_forEach(input.list, function(item) { 27 | out.w("
    • " + 28 | marko_escapeXml(item) + 29 | "
    • "); 30 | }); 31 | 32 | out.w("
    "); 33 | } 34 | 35 | marko_template._ = render; 36 | 37 | marko_template.meta = {}; 38 | -------------------------------------------------------------------------------- /output/compiled/ui-components/marko.js: -------------------------------------------------------------------------------- 1 | // Compiled using marko@4.4.28 - DO NOT EDIT 2 | "use strict"; 3 | 4 | var marko_template = module.exports = require("marko/dist/html").t(__filename), 5 | marko_loadTemplate = require("marko/dist/runtime/helper-loadTemplate"), 6 | marko_colors_template = marko_loadTemplate(require.resolve("./components/marko-colors")), 7 | marko_helpers = require("marko/dist/runtime/html/helpers"), 8 | marko_loadTag = marko_helpers.t, 9 | marko_colors_tag = marko_loadTag(marko_colors_template); 10 | 11 | function render(input, out) { 12 | var data = input; 13 | 14 | out.w("
    "); 15 | 16 | marko_colors_tag(data, out); 17 | 18 | out.w("
    "); 19 | } 20 | 21 | marko_template._ = render; 22 | 23 | marko_template.meta = { 24 | tags: [ 25 | "./components/marko-colors" 26 | ] 27 | }; 28 | -------------------------------------------------------------------------------- /output/compiled/ui-components/react.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react'); 4 | var Colors = require('./components/ReactColors.jsx'); 5 | 6 | module.exports = module.exports = React.createClass({ 7 | displayName: 'exports', 8 | render: function render() { 9 | return React.createElement( 10 | 'div', 11 | { className: 'my-app' }, 12 | React.createElement(Colors, { colors: this.props.colors, name: this.props.name }) 13 | ); 14 | } 15 | }); -------------------------------------------------------------------------------- /output/html/if-expression/dust.html: -------------------------------------------------------------------------------- 1 |
    -------------------------------------------------------------------------------- /output/html/if-expression/jade.html: -------------------------------------------------------------------------------- 1 |
    Bank balance:
    Bank balance:
    Bank balance:
    Bank balance:
    -------------------------------------------------------------------------------- /output/html/if-expression/marko.html: -------------------------------------------------------------------------------- 1 |
    Bank balance:
    Bank balance:
    Bank balance:
    Bank balance:
    -------------------------------------------------------------------------------- /output/html/if-expression/pug.html: -------------------------------------------------------------------------------- 1 |
    Bank balance:
    Bank balance:
    Bank balance:
    Bank balance:
    -------------------------------------------------------------------------------- /output/html/projects-escaped/marko.html: -------------------------------------------------------------------------------- 1 | Projects

    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.</p><p>Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.</p><p>Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.</p><p>Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.</p><p>Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.</p><p>In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.</p><p>Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.</p><p>Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.</p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.</p><p>Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.</p><p>Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.</p><p>Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.</p><p>Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.</p><p>In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.</p><p>Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.</p><p>Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.</p>

    <strong>Facebook</strong>

    Social network

    <strong>Google</strong>

    Search engine

    <strong>Twitter</strong>

    Microblogging service

    <strong>Amazon</strong>

    Online retailer

    <strong>eBay</strong>

    Online auction

    <strong>Wikipedia</strong>

    A free encyclopedia

    <strong>LiveJournal</strong>

    Blogging platform

    -------------------------------------------------------------------------------- /output/html/projects-unescaped/dust.html: -------------------------------------------------------------------------------- 1 | Projects

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.

    Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.

    Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.

    Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.

    Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.

    In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.

    Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.

    Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.

    Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.

    Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.

    Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.

    Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.

    In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.

    Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.

    Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.

    Facebook

    Social network

    Google

    Search engine

    Twitter

    Microblogging service

    Amazon

    Online retailer

    eBay

    Online auction

    Wikipedia

    A free encyclopedia

    LiveJournal

    Blogging platform

    -------------------------------------------------------------------------------- /output/html/projects-unescaped/marko.html: -------------------------------------------------------------------------------- 1 | Projects

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.

    Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.

    Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.

    Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.

    Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.

    In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.

    Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.

    Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.

    Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.

    Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.

    Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.

    Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.

    In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.

    Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.

    Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.

    Facebook

    Social network

    Google

    Search engine

    Twitter

    Microblogging service

    Amazon

    Online retailer

    eBay

    Online auction

    Wikipedia

    A free encyclopedia

    LiveJournal

    Blogging platform

    -------------------------------------------------------------------------------- /output/html/projects-unescaped/marko.native-for.html: -------------------------------------------------------------------------------- 1 | Projects

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.

    Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.

    Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.

    Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.

    Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.

    In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.

    Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.

    Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam et vulputate lacus. Proin a lorem eget metus posuere tristique blandit eu magna. Mauris quis odio id augue sodales dictum. Fusce lectus eros, fermentum vitae semper vel, euismod egestas dui. Etiam vel diam quis tellus ultrices accumsan vitae at felis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas eu nisl tortor, sed placerat mi. In hac habitasse platea dictumst. Praesent hendrerit commodo ligula, sit amet porttitor metus dictum sit amet. Curabitur pellentesque cursus lectus, sit amet mollis diam dictum ac. Sed eleifend, massa ut egestas viverra, ante ante interdum ligula, sed ultricies turpis arcu vel dolor. Aenean rutrum dolor ut nunc adipiscing sollicitudin. Mauris ac est metus. Suspendisse vel augue odio.

    Morbi orci nulla, condimentum eu aliquam consectetur, tempus sit amet felis. Quisque quis ligula turpis. Fusce facilisis arcu massa, a tempor neque. Maecenas sodales quam eu mi interdum sit amet tincidunt turpis feugiat. Nulla quis neque non metus lacinia tempus. Fusce in neque vestibulum quam venenatis tempus vel id ipsum. Cras eget condimentum risus. Nunc pellentesque faucibus sem nec commodo. Nam eleifend lorem sit amet nulla luctus congue. Pellentesque fringilla ante turpis, non varius tellus. Nullam eget nisi odio. Mauris at dui purus, ac interdum eros.

    Phasellus rhoncus massa sit amet elit molestie nec dictum risus sodales. Vivamus blandit eros id dolor euismod lacinia. Integer massa orci, tincidunt sed pulvinar et, volutpat eu felis. Aliquam placerat erat in arcu elementum ut congue dolor tempor. Nunc a nulla et metus placerat consequat. Maecenas in rhoncus urna. Vestibulum quis elit lorem, ac facilisis dui. Etiam a commodo nunc. Nam viverra dictum est eu condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vitae augue neque. In fermentum, elit vel rhoncus feugiat, felis ipsum suscipit augue, in suscipit enim elit ac lacus. Donec felis sapien, ultricies eget condimentum blandit, lobortis gravida sapien. Vestibulum pharetra, mi at varius cursus, elit est malesuada odio, sit amet sollicitudin tortor sem eget nisi.

    Praesent nec massa ut quam commodo euismod ac sollicitudin lorem. Aliquam tempus molestie orci, ac egestas urna imperdiet ut. Morbi rhoncus lacus in risus mattis et elementum elit placerat. Cras eget ante sit amet turpis tincidunt interdum. Suspendisse fermentum sollicitudin hendrerit. Sed in lectus id augue vestibulum suscipit. Nulla vulputate faucibus molestie. Pellentesque et leo aliquet nisl dignissim faucibus ac a leo. Quisque aliquet egestas tellus, nec euismod urna lacinia ac. Nunc risus velit, auctor eget interdum a, rhoncus commodo leo. Praesent nec congue lectus. Donec lacinia dictum tellus quis molestie. Vestibulum nec urna risus, at pellentesque ante. Sed eget magna lectus. Praesent in tortor elit.

    Aenean vulputate erat ut ligula commodo fermentum tincidunt augue rutrum. Curabitur volutpat, justo in tincidunt porttitor, enim massa bibendum mi, nec lacinia tortor ipsum non ligula. In commodo diam et ligula pharetra placerat. Donec hendrerit, nisi non fermentum pretium, leo mi elementum quam, non dictum erat ante in tortor. Fusce sagittis egestas metus a vulputate. Proin ac nisi a lacus egestas scelerisque. Morbi enim nulla, tristique vel placerat in, iaculis in turpis. Etiam lobortis, arcu et porttitor rhoncus, lorem nisl vestibulum ipsum, sed molestie felis augue ut tellus. Aenean rutrum leo vel ante tempus ultricies. Suspendisse nec eros eget lectus posuere consectetur tincidunt at tortor.

    In commodo placerat dapibus. Donec nunc nisi, pharetra ultrices tincidunt et, mollis a nisl. Phasellus sed lectus et massa eleifend adipiscing id sit amet augue. Nullam semper elementum feugiat. Phasellus leo nulla, tristique nec scelerisque vel, placerat ac nunc. Etiam sit amet neque eu erat suscipit tristique vel eu libero. Cras ullamcorper ultrices tempor. Nam tellus nulla, venenatis vel semper eu, varius ut ipsum. Vestibulum varius fermentum sem non porttitor.

    Nunc a risus non velit pretium faucibus. Fusce non nisi nec eros porta pharetra sed bibendum tellus. Nunc malesuada porta dolor ac dictum. Vestibulum tincidunt sodales rutrum. Quisque vel odio quam. Cras sit amet urna sed felis dictum volutpat. Sed est lectus, faucibus tempus pharetra at, mattis eu lorem. Sed vestibulum massa et nulla ultrices a cursus velit aliquam. Cras nulla libero, commodo eu faucibus vestibulum, pharetra eget lacus. Duis vehicula massa id felis ultricies eu ultrices ligula aliquet.

    Curabitur congue fermentum eros non iaculis. Aliquam erat volutpat. Phasellus scelerisque, nibh vitae aliquam gravida, dolor est tristique dui, mattis iaculis ligula nibh non nisi. Quisque vel arcu metus. Aliquam at elit non lorem cursus rhoncus. Quisque quam justo, feugiat hendrerit condimentum sed, tempus a nisl. Cras ultrices placerat rhoncus. Nam convallis posuere.

    Facebook

    Social network

    Google

    Search engine

    Twitter

    Microblogging service

    Amazon

    Online retailer

    eBay

    Online auction

    Wikipedia

    A free encyclopedia

    LiveJournal

    Blogging platform

    -------------------------------------------------------------------------------- /output/html/reverse-helper/dust.html: -------------------------------------------------------------------------------- 1 | knarFeoJmoTenaJrefinneJ -------------------------------------------------------------------------------- /output/html/reverse-helper/marko.html: -------------------------------------------------------------------------------- 1 |
    knarFeoJmoTenaJrefinneJ
    -------------------------------------------------------------------------------- /output/html/simple-0/dust.html: -------------------------------------------------------------------------------- 1 | Hello George Washington! You have 999 messages! red,green,blue,yellow,orange,pink,black,white,beige,brown,cyan,magenta -------------------------------------------------------------------------------- /output/html/simple-0/es6.html: -------------------------------------------------------------------------------- 1 | Hello George Washington! You have 999 messages! red,green,blue,yellow,orange,pink,black,white,beige,brown,cyan,magenta -------------------------------------------------------------------------------- /output/html/simple-0/lodash.html: -------------------------------------------------------------------------------- 1 | Hello George Washington! You have 999 messages! red,green,blue,yellow,orange,pink,black,white,beige,brown,cyan,magenta 2 | -------------------------------------------------------------------------------- /output/html/simple-0/marko.html: -------------------------------------------------------------------------------- 1 | Hello George Washington! You have 999 messages! red,green,blue,yellow,orange,pink,black,white,beige,brown,cyan,magenta -------------------------------------------------------------------------------- /output/html/simple-1/dot.html: -------------------------------------------------------------------------------- 1 |
    Hello George Washington! You have 999 messages!
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    -------------------------------------------------------------------------------- /output/html/simple-1/dust.html: -------------------------------------------------------------------------------- 1 |
    Hello George Washington! You have 999 messages!
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    -------------------------------------------------------------------------------- /output/html/simple-1/handlebars.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello George Washington! You have 999 messages! 4 | 5 |
      6 |
    • red
    • 7 |
    • green
    • 8 |
    • blue
    • 9 |
    • yellow
    • 10 |
    • orange
    • 11 |
    • pink
    • 12 |
    • black
    • 13 |
    • white
    • 14 |
    • beige
    • 15 |
    • brown
    • 16 |
    • cyan
    • 17 |
    • magenta
    • 18 |
    19 |
    20 | 21 |
    -------------------------------------------------------------------------------- /output/html/simple-1/jade.html: -------------------------------------------------------------------------------- 1 |
    Hello George Washington! You have 999 messages!
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    -------------------------------------------------------------------------------- /output/html/simple-1/marko.html: -------------------------------------------------------------------------------- 1 |
    Hello George Washington! You have 999 messages!
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    -------------------------------------------------------------------------------- /output/html/simple-1/nunjucks.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello George Washington! You have 999 messages! 4 | 5 | 6 |
      7 | 8 |
    • red
    • 9 | 10 |
    • green
    • 11 | 12 |
    • blue
    • 13 | 14 |
    • yellow
    • 15 | 16 |
    • orange
    • 17 | 18 |
    • pink
    • 19 | 20 |
    • black
    • 21 | 22 |
    • white
    • 23 | 24 |
    • beige
    • 25 | 26 |
    • brown
    • 27 | 28 |
    • cyan
    • 29 | 30 |
    • magenta
    • 31 | 32 |
    33 | 34 |
    35 | 36 |
    -------------------------------------------------------------------------------- /output/html/simple-1/pug.html: -------------------------------------------------------------------------------- 1 |
    Hello George Washington! You have 999 messages!
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    -------------------------------------------------------------------------------- /output/html/simple-1/react.html: -------------------------------------------------------------------------------- 1 |
    Hello George Washington! You have 999 messages!
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    ,
    -------------------------------------------------------------------------------- /output/html/simple-1/run.js: -------------------------------------------------------------------------------- 1 | require('marko') 2 | .load('hello.marko') 3 | .stream({ name: 'Frank' }) 4 | .pipe(process.stdout); -------------------------------------------------------------------------------- /output/html/simple-1/swig.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello George Washington! You have 999 messages! 4 | 5 | 6 |
      7 | 8 |
    • red
    • 9 | 10 |
    • green
    • 11 | 12 |
    • blue
    • 13 | 14 |
    • yellow
    • 15 | 16 |
    • orange
    • 17 | 18 |
    • pink
    • 19 | 20 |
    • black
    • 21 | 22 |
    • white
    • 23 | 24 |
    • beige
    • 25 | 26 |
    • brown
    • 27 | 28 |
    • cyan
    • 29 | 30 |
    • magenta
    • 31 | 32 |
    33 | 34 |
    35 | 36 |
    -------------------------------------------------------------------------------- /output/html/simple-1/vue.html: -------------------------------------------------------------------------------- 1 |
    2 | Hello George Washington! You have 999 messages!
    • 3 | red 4 |
    • 5 | green 6 |
    • 7 | blue 8 |
    • 9 | yellow 10 |
    • 11 | orange 12 |
    • 13 | pink 14 |
    • 15 | black 16 |
    • 17 | white 18 |
    • 19 | beige 20 |
    • 21 | brown 22 |
    • 23 | cyan 24 |
    • 25 | magenta 26 |
    -------------------------------------------------------------------------------- /output/html/simple-2/dust.html: -------------------------------------------------------------------------------- 1 |

    Header

    Header2

    Header3

    Header4

    Header5
    Header6
    • 1000000000
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    -------------------------------------------------------------------------------- /output/html/simple-2/marko.html: -------------------------------------------------------------------------------- 1 |

    Header

    Header2

    Header3

    Header4

    Header5
    Header6
    • 1000000000
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    -------------------------------------------------------------------------------- /output/html/ui-components/0.marko.html: -------------------------------------------------------------------------------- 1 |
    Hello John Doe!
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    -------------------------------------------------------------------------------- /output/html/ui-components/0.react.html: -------------------------------------------------------------------------------- 1 |
    Hello John Doe
    • red
    • green
    • blue
    • yellow
    • orange
    • pink
    • black
    • white
    • beige
    • brown
    • cyan
    • magenta
    -------------------------------------------------------------------------------- /output/html/ui-components/1.marko.html: -------------------------------------------------------------------------------- 1 |
    Hello Jane Doe!
    No colors!
    -------------------------------------------------------------------------------- /output/html/ui-components/1.react.html: -------------------------------------------------------------------------------- 1 |
    Hello Jane Doe
    No colors!
    -------------------------------------------------------------------------------- /output/html/ui-components/marko.html: -------------------------------------------------------------------------------- 1 |
    Hello $data.name!
    No colors!
    -------------------------------------------------------------------------------- /output/sizes.json: -------------------------------------------------------------------------------- 1 | { 2 | "friends": { 3 | "gzipped": { 4 | "dust": 489, 5 | "marko": 667 6 | }, 7 | "uncompressed": { 8 | "dust": 1378, 9 | "marko": 1887 10 | } 11 | }, 12 | "if-expression": { 13 | "gzipped": { 14 | "jade": 388, 15 | "marko": 344, 16 | "pug": 905 17 | }, 18 | "uncompressed": { 19 | "jade": 1049, 20 | "marko": 680, 21 | "pug": 2138 22 | } 23 | }, 24 | "projects-escaped": { 25 | "gzipped": { 26 | "dust": 262, 27 | "handlebars": 558, 28 | "marko": 432, 29 | "marko (native-for)": 445 30 | }, 31 | "uncompressed": { 32 | "dust": 554, 33 | "handlebars": 1594, 34 | "marko": 1182, 35 | "marko (native-for)": 1182 36 | } 37 | }, 38 | "projects-unescaped": { 39 | "gzipped": { 40 | "dust": 268, 41 | "handlebars": 535, 42 | "marko": 419, 43 | "marko (native-for)": 433 44 | }, 45 | "uncompressed": { 46 | "dust": 586, 47 | "handlebars": 1626, 48 | "marko": 1125, 49 | "marko (native-for)": 1125 50 | } 51 | }, 52 | "reverse-helper": { 53 | "gzipped": { 54 | "dust": 147, 55 | "marko": 246 56 | }, 57 | "uncompressed": { 58 | "dust": 312, 59 | "marko": 524 60 | } 61 | }, 62 | "search-results": { 63 | "gzipped": { 64 | "dust": 544, 65 | "marko": 597 66 | }, 67 | "uncompressed": { 68 | "dust": 1514, 69 | "marko": 1505 70 | } 71 | }, 72 | "simple-0": { 73 | "gzipped": { 74 | "dust": 173, 75 | "marko": 213 76 | }, 77 | "uncompressed": { 78 | "dust": 234, 79 | "marko": 345 80 | } 81 | }, 82 | "simple-1": { 83 | "gzipped": { 84 | "dot": 491, 85 | "dust": 413, 86 | "handlebars": 617, 87 | "jade": 524, 88 | "react": 395, 89 | "marko": 485, 90 | "nunjucks": 599, 91 | "pug": 1047, 92 | "swig": 756 93 | }, 94 | "uncompressed": { 95 | "dot": 803, 96 | "dust": 884, 97 | "handlebars": 1492, 98 | "jade": 1116, 99 | "react": 850, 100 | "marko": 956, 101 | "nunjucks": 1367, 102 | "pug": 2304, 103 | "swig": 3378 104 | } 105 | }, 106 | "simple-2": { 107 | "gzipped": { 108 | "dust": 267, 109 | "marko": 311 110 | }, 111 | "uncompressed": { 112 | "dust": 639, 113 | "marko": 739 114 | } 115 | }, 116 | "ui-components": { 117 | "gzipped": { 118 | "react": 204, 119 | "marko": 274 120 | }, 121 | "uncompressed": { 122 | "react": 310, 123 | "marko": 559 124 | } 125 | } 126 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "templating-benchmarks", 3 | "version": "0.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "markoc . --clean && cross-env NODE_ENV=production node_modules/.bin/matcha templating-benchmarks.js --reporter ./reporter.js --expose-gc" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/marko-js/templating-benchmarks.git" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "ansi": "^0.3.0", 17 | "babel-core": "^6.5.2", 18 | "babel-preset-es2015": "^6.5.0", 19 | "babel-preset-react": "^6.5.0", 20 | "babel-register": "^6.5.2", 21 | "cross-env": "^3.1.4", 22 | "dot": "^1.0.3", 23 | "dustjs-helpers": "^1.7.2", 24 | "dustjs-linkedin": "^2.7.2", 25 | "handlebars": "^4.0.5", 26 | "jade": "^1.11.0", 27 | "lodash.template": "^4.4.0", 28 | "marko": "^4.4.28", 29 | "matcha": "^0.7.0", 30 | "nunjucks": "^3.0.0", 31 | "plates": "^0.4.11", 32 | "pug": "^2.0.0-alpha6", 33 | "raptor-async": "^1.1.2", 34 | "raptor-polyfill": "^1.0.2", 35 | "react": "^15.4.2", 36 | "react-dom": "^15.4.2", 37 | "swig": "^1.4.2", 38 | "uglify-js": "^3.0.0", 39 | "vue": "^2.0.1", 40 | "vue-server-renderer": "^2.0.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /reporter.js: -------------------------------------------------------------------------------- 1 | 2 | var ansi = require('ansi'); 3 | var cursor = ansi(process.stdout); 4 | var fs = require('fs'); 5 | 6 | module.exports = function(runner, utils) { 7 | /*jshint loopfunc:true */ 8 | 9 | var color = utils.color; 10 | var humanize = utils.humanize; 11 | 12 | 13 | 14 | function removeColors(str) { 15 | return str.replace(/\033\[[0-9;]*m/g, ''); 16 | } 17 | 18 | function padBefore(str, padding) { 19 | var withoutColors = removeColors(str); 20 | if (withoutColors.length < padding) { 21 | str = new Array(padding - withoutColors.length).join(' ') + str; 22 | } 23 | 24 | return str; 25 | } 26 | 27 | function resultLine(label, value, options) { 28 | options = options || {}; 29 | 30 | var withoutColors = removeColors(label); 31 | var padding; 32 | 33 | var padSize = 27; 34 | 35 | var winner = options && options.winner; 36 | 37 | var actualLen = withoutColors.length; 38 | 39 | if (actualLen < padSize) { 40 | 41 | 42 | if (winner != null) { 43 | actualLen += 2; // space and symbol 44 | } 45 | padding = new Array(padSize - actualLen).join(' '); 46 | } 47 | 48 | 49 | 50 | var symbol = ''; 51 | if (winner === true) { 52 | symbol = color('✓ ', 'green'); 53 | } else if (winner === false) { 54 | symbol = color('✗ ', 'red'); 55 | } 56 | 57 | return padding + symbol + label + (options.separator === false ? ' ' : ' » ') + value; 58 | } 59 | 60 | var resultsMarkdown = { 61 | performance: '', 62 | size: '' 63 | }; 64 | 65 | function outLine(prop, str) { 66 | str = str || ''; 67 | cursor.write(str + '\n'); 68 | resultsMarkdown[prop] += removeColors(str) + '\n'; 69 | } 70 | 71 | function performanceLine(str) { 72 | outLine('performance', str); 73 | } 74 | 75 | function sizeLine(str) { 76 | outLine('size', str); 77 | } 78 | 79 | function reportSizes() { 80 | cursor.write('\n'); 81 | sizeLine(padBefore('', 23) + 'COMPILED SIZE (gzipped/uncompressed)'); 82 | sizeLine(padBefore('', 23) + '===================================='); 83 | var sizes = require('./templating-benchmarks').sizes; 84 | Object.keys(sizes).forEach(function(groupName) { 85 | sizeLine(padBefore('', 23) + groupName); 86 | var gzippedSizes = sizes[groupName].gzipped; 87 | var uncompressedSizes = sizes[groupName].uncompressed; 88 | 89 | var sortedSizes = []; 90 | var smallestUncompressed = null; 91 | 92 | Object.keys(gzippedSizes).forEach(function(template) { 93 | var uncompressedSize = uncompressedSizes[template]; 94 | 95 | var templateSizeInfo = { 96 | template: template, 97 | size: gzippedSizes[template], 98 | uncompressedSize: uncompressedSize 99 | }; 100 | 101 | if (smallestUncompressed == null || uncompressedSize < smallestUncompressed.uncompressedSize) { 102 | smallestUncompressed = templateSizeInfo; 103 | } 104 | 105 | sortedSizes.push(templateSizeInfo); 106 | }); 107 | 108 | sortedSizes.sort(function (a, b) { 109 | a = a.size; 110 | b = b.size; 111 | return a - b; 112 | }); 113 | 114 | var smallest = sortedSizes[0]; 115 | var smallestSize = smallest.size; 116 | var smallestUncompressedSize = smallestUncompressed.uncompressedSize; 117 | 118 | for (var i=0; i 2 | 3 | 4 | 5 | Friends 6 | 7 | 8 |
    9 | {#friends} 10 |
    11 |
      12 |
    • Name: {getFullNameDust}
    • 13 |
    • 14 | Balance: {balance} 15 |
    • 16 |
    • 17 | Age: {age} 18 |
    • 19 |
    • 20 | Address: {address} 21 |
    • 22 |
    • 23 | Image: 24 |
    • 25 |
    • 26 | Company: {company} 27 |
    • 28 |
    • 29 | Email: {email} 30 |
    • 31 |
    • 32 | About: {about} 33 |
    • 34 | {?tags} 35 |
    • 36 | Tags: 37 |
        38 | {#tags} 39 |
      • 40 | {.} 41 |
      • 42 | {/tags} 43 |
      44 |
    • 45 | {/tags} 46 | {?friends} 47 |
    • 48 | Friends: 49 |
        50 | {#friends} 51 |
      • 52 | {name} ({id}) 53 |
      • 54 | {/friends} 55 |
      56 |
    • 57 | {/friends} 58 |
    59 |
    60 | {/friends} 61 |
    62 | 63 | -------------------------------------------------------------------------------- /templates/friends/template.marko: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Friends 6 | 7 | 8 |
    9 |
    10 |
      11 |
    • Name: ${input.getFullNameRaptor(friend)}
    • 12 |
    • 13 | Balance: ${friend.balance} 14 |
    • 15 |
    • 16 | Age: ${friend.age} 17 |
    • 18 |
    • 19 | Address: ${friend.address} 20 |
    • 21 |
    • 22 | Image: 23 |
    • 24 |
    • 25 | Company: ${friend.company} 26 |
    • 27 |
    • 28 | Email: ${friend.email} 29 |
    • 30 |
    • 31 | About: ${friend.about} 32 |
    • 33 |
    • 34 | Tags: 35 |
        36 |
      • 37 | ${tag} 38 |
      • 39 |
      40 |
    • 41 |
    • 42 | Friends: 43 |
        44 |
      • 45 | ${friend.name} (${friend.id}) 46 |
      • 47 |
      48 |
    • 49 |
    50 |
    51 |
    52 | 53 | -------------------------------------------------------------------------------- /templates/if-expression/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "accounts": [ 3 | { 4 | "balance": 0, 5 | "balanceFormatted": "$0.00", 6 | "status": "open" 7 | }, 8 | { 9 | "balance": 10, 10 | "balanceFormatted": "$10.00", 11 | "status": "closed" 12 | }, 13 | { 14 | "balance": -100, 15 | "balanceFormatted": "$-100.00", 16 | "status": "suspended" 17 | }, 18 | { 19 | "balance": 999, 20 | "balanceFormatted": "$999.00", 21 | "status": "open" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /templates/if-expression/template.jade: -------------------------------------------------------------------------------- 1 | each account in accounts 2 | div 3 | if account.accountStatus === 'closed' 4 | div Your account has been closed! 5 | else if account.accountStatus === 'suspended' 6 | div Your account has been temporarily suspended 7 | else 8 | div 9 | | Bank balance: 10 | span(class=account.balance<0 ? 'negative' : 'positive') 11 | = account.formattedBalance -------------------------------------------------------------------------------- /templates/if-expression/template.marko: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Your account has been closed! 4 |
    5 |
    6 | Your account has been temporarily suspended 7 |
    8 |
    9 | Bank balance: 10 | ${account.formattedBalance} 11 |
    12 |
    -------------------------------------------------------------------------------- /templates/if-expression/template.pug: -------------------------------------------------------------------------------- 1 | each account in accounts 2 | div 3 | if account.accountStatus === 'closed' 4 | div Your account has been closed! 5 | else if account.accountStatus === 'suspended' 6 | div Your account has been temporarily suspended 7 | else 8 | div 9 | | Bank balance: 10 | span(class=account.balance<0 ? 'negative' : 'positive') 11 | = account.formattedBalance -------------------------------------------------------------------------------- /templates/projects-escaped/template.dust: -------------------------------------------------------------------------------- 1 | 2 | 3 | {title} 4 | 5 | 6 |

    {text}

    7 | {#projects} 8 | {name} 9 |

    {description}

    10 | {/projects} 11 | {^projects} 12 | No projects 13 | {/projects} 14 | 15 | -------------------------------------------------------------------------------- /templates/projects-escaped/template.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{title}} 4 | 5 | 6 |

    {{text}}

    7 | {{#projects}} 8 | {{name}} 9 |

    {{description}}

    10 | {{/projects}} 11 | {{^projects}} 12 | No projects 13 | {{/projects}} 14 | 15 | -------------------------------------------------------------------------------- /templates/projects-escaped/template.marko: -------------------------------------------------------------------------------- 1 | 2 | 3 | ${input.title} 4 | 5 | 6 |

    ${input.text}

    7 | 8 | ${project.name} 9 |

    ${project.description}

    10 | 11 | 12 | No projects 13 | 14 | 15 | -------------------------------------------------------------------------------- /templates/projects-escaped/template.native-for.marko: -------------------------------------------------------------------------------- 1 | 2 | 3 | ${data.title} 4 | 5 | 6 |

    ${data.text}

    7 | 8 | 9 | ${project.name} 10 |

    ${project.description}

    11 | 12 | 13 | No projects 14 | 15 | 16 | -------------------------------------------------------------------------------- /templates/projects-unescaped/template.dust: -------------------------------------------------------------------------------- 1 | 2 | 3 | {title|s} 4 | 5 | 6 |

    {text|s}

    7 | {#projects} 8 | {name|s} 9 |

    {description|s}

    10 | {/projects} 11 | {^projects} 12 | No projects 13 | {/projects} 14 | 15 | -------------------------------------------------------------------------------- /templates/projects-unescaped/template.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{{title}}} 4 | 5 | 6 |

    {{{text}}}

    7 | {{#projects}} 8 | {{{name}}} 9 |

    {{{description}}}

    10 | {{/projects}} 11 | {{^projects}} 12 | No projects 13 | {{/projects}} 14 | 15 | -------------------------------------------------------------------------------- /templates/projects-unescaped/template.marko: -------------------------------------------------------------------------------- 1 | 2 | 3 | $!{input.title} 4 | 5 | 6 |

    $!{input.text}

    7 | 8 | $!{project.name} 9 |

    $!{project.description}

    10 | 11 | 12 | No projects 13 | 14 | 15 | -------------------------------------------------------------------------------- /templates/projects-unescaped/template.native-for.marko: -------------------------------------------------------------------------------- 1 | 2 | 3 | $!{data.title} 4 | 5 | 6 |

    $!{data.text}

    7 | 8 | 9 | $!{project.name} 10 |

    $!{project.description}

    11 | 12 | 13 | No projects 14 | 15 | 16 | -------------------------------------------------------------------------------- /templates/reverse-helper/data.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "A": "Frank", 4 | "B": "Joe", 5 | "C": "Tom", 6 | "D": "Jane", 7 | "E": "Jennifer" 8 | } -------------------------------------------------------------------------------- /templates/reverse-helper/template.dust: -------------------------------------------------------------------------------- 1 | {@reverse str=A /} 2 | {@reverse str=B /} 3 | {@reverse str=C /} 4 | {@reverse str=D /} 5 | {@reverse str=E /} -------------------------------------------------------------------------------- /templates/reverse-helper/template.marko: -------------------------------------------------------------------------------- 1 | import {reverse} from '../../helpers/util'; 2 | 3 |
    4 | $!{reverse(input.A)} 5 | $!{reverse(input.B)} 6 | $!{reverse(input.C)} 7 | $!{reverse(input.D)} 8 | $!{reverse(input.E)} 9 |
    10 | -------------------------------------------------------------------------------- /templates/search-results/template.dust: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 |
    Searching... 5 |
    6 | 7 |
    8 |
    9 | {totalCount} results 10 |
    11 |
    12 | View: 13 |
    14 | 15 |
    16 |
    17 | 18 |
    19 |
    20 |
    21 |
    22 | 23 |
    24 |
    25 | {#searchRecords} 26 |
    27 |
    28 |
    29 | 30 |
    31 |

    32 | {title} 33 |

    34 | 35 | {description} 36 | 37 | {?featured} 38 |
    39 | Featured! 40 |
    41 | {/featured} 42 | {?sizes} 43 |
    44 | Sizes available: 45 |
      46 | {#sizes} 47 |
    • {.}
    • 48 | {/sizes} 49 |
    50 |
    51 | {/sizes} 52 |
    53 |
    54 | {/searchRecords} 55 |
    56 |
    57 |
    58 |
    -------------------------------------------------------------------------------- /templates/search-results/template.marko: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    4 |
    Searching... 5 |
    6 | 7 |
    8 |
    9 | ${input.totalCount} results 10 |
    11 |
    12 | View: 13 |
    14 | 15 |
    16 |
    17 | 18 |
    19 |
    20 |
    21 |
    22 | 23 |
    24 |
    25 |
    26 |
    27 |
    28 | 29 |
    30 |

    31 | ${searchRecord.title} 32 |

    33 | 34 | ${searchRecord.description} 35 | 36 |
    37 | Featured! 38 |
    39 | 40 |
    41 | Sizes available:
      42 |
    • ${size}
    • 43 |
    44 |
    45 |
    46 |
    47 |
    48 |
    49 |
    50 |
    -------------------------------------------------------------------------------- /templates/simple-0/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "George Washington", 3 | "messageCount": 999, 4 | "colors": ["red", "green", "blue", "yellow", "orange", "pink", "black", "white", "beige", "brown", "cyan", "magenta"], 5 | "primary": true, 6 | "buttonLabel": "Welcome to the wonderful world of templating engines!" 7 | } 8 | -------------------------------------------------------------------------------- /templates/simple-0/template.dust: -------------------------------------------------------------------------------- 1 | Hello {name}! You have {messageCount} messages! {colors} 2 | -------------------------------------------------------------------------------- /templates/simple-0/template.es6.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = (data) => { 3 | return `Hello ${data.name}! You have ${data.messageCount} messages! ${data.colors}`; 4 | }; 5 | -------------------------------------------------------------------------------- /templates/simple-0/template.lodash: -------------------------------------------------------------------------------- 1 | Hello {name}! You have {messageCount} messages! {colors} 2 | -------------------------------------------------------------------------------- /templates/simple-0/template.marko: -------------------------------------------------------------------------------- 1 | -- Hello $!{input.name}! You have $!{input.messageCount} messages! $!{input.colors} 2 | -------------------------------------------------------------------------------- /templates/simple-1/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "George Washington", 3 | "messageCount": 999, 4 | "colors": ["red", "green", "blue", "yellow", "orange", "pink", "black", "white", "beige", "brown", "cyan", "magenta"], 5 | "primary": true, 6 | "buttonLabel": "Welcome to the wonderful world of templating engines!" 7 | } -------------------------------------------------------------------------------- /templates/simple-1/template.dot: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello {{!it.name}}! You have {{!it.messageCount}} messages! 4 | 5 | {{? it.colors && it.colors.length }} 6 |
      7 | {{~it.colors :color}} 8 |
    • {{!color}}
    • 9 | {{~}} 10 |
    11 | {{??}} 12 |
    13 | No colors! 14 |
    15 | {{?}} 16 |
    17 | 18 |
    -------------------------------------------------------------------------------- /templates/simple-1/template.dust: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello {name}! You have {messageCount} messages! 4 | 5 | {?colors} 6 |
      7 | {#colors} 8 |
    • {.}
    • 9 | {/colors} 10 |
    11 | {:else} 12 |
    13 | No colors! 14 |
    15 | {/colors} 16 |
    17 | 18 |
    -------------------------------------------------------------------------------- /templates/simple-1/template.hbs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello {{name}}! You have {{messageCount}} messages! 4 | 5 | {{#if colors}} 6 |
      7 | {{#each colors}} 8 |
    • {{this}}
    • 9 | {{/each}} 10 |
    11 | {{else}} 12 |
    13 | No colors! 14 |
    15 | {{/if}} 16 |
    17 | 18 |
    -------------------------------------------------------------------------------- /templates/simple-1/template.jade: -------------------------------------------------------------------------------- 1 | div(class="simple-1", style="background-color: blue; border: 1px solid black") 2 | div.colors 3 | span.hello. 4 | Hello #{name}! You have #{messageCount} messages! 5 | if colors && colors.length 6 | ul 7 | each color in colors 8 | li.color= color 9 | if !colors || !colors.length 10 | div No colors! 11 | button(type="button", class=primary ? 'primary' : 'secondary') Click me! -------------------------------------------------------------------------------- /templates/simple-1/template.jsx: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var React = require('react'); 3 | 4 | function renderColor(color) { 5 | var style = { 6 | backgroundColor: color 7 | }; 8 | 9 | return
  • 10 | {color} 11 |
  • 12 | } 13 | 14 | function renderColors(colors) { 15 | if (colors.length) { 16 | return (
      {colors.map(renderColor)}
    ); 17 | } else { 18 | return
    No colors!
    19 | } 20 | } 21 | 22 | module.exports = React.createClass({ 23 | render() { 24 | var style = {backgroundColor: 'blue', border: '1px solid black'}; 25 | 26 | return
    27 |
    28 | Hello {this.props.name}! You have {this.props.messageCount} messages! 29 | {renderColors(this.props.colors)} 30 |
    , 31 | 32 |
    ; 33 | } 34 | }); -------------------------------------------------------------------------------- /templates/simple-1/template.marko: -------------------------------------------------------------------------------- 1 | div class="simple-1" style="background-color: blue; border: 1px solid black" 2 | div.colors 3 | span.hello 4 | -- Hello ${input.name}! You have $!{input.messageCount} messages! 5 | ul if(input.colors.length) 6 | li.color style="background-color: ${color}" for(color in input.colors | array) 7 | -- ${color} 8 | div else 9 | -- No colors! 10 | button type="button" class=(input.primary ? 'primary' : 'secondary') -- ${input.buttonLabel} -------------------------------------------------------------------------------- /templates/simple-1/template.nunjucks: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello {{ name }}! You have {{ messageCount }} messages! 4 | 5 | {% if colors and colors.length %} 6 |
      7 | {% for color in colors %} 8 |
    • {{ color }}
    • 9 | {% endfor %} 10 |
    11 | {% else %} 12 |
    13 | No colors! 14 |
    15 | {% endif %} 16 |
    17 | 18 |
    -------------------------------------------------------------------------------- /templates/simple-1/template.pug: -------------------------------------------------------------------------------- 1 | div(class="simple-1", style="background-color: blue; border: 1px solid black") 2 | div.colors 3 | span.hello. 4 | Hello #{name}! You have #{messageCount} messages! 5 | if colors && colors.length 6 | ul 7 | each color in colors 8 | li.color= color 9 | if !colors || !colors.length 10 | div No colors! 11 | button(type="button", class=primary ? 'primary' : 'secondary')= buttonLabel -------------------------------------------------------------------------------- /templates/simple-1/template.swig: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Hello {{ name }}! You have {{ messageCount }} messages! 4 | 5 | {% if colors && colors.length %} 6 |
      7 | {% for color in colors %} 8 |
    • {{ color }}
    • 9 | {% endfor %} 10 |
    11 | {% else %} 12 |
    13 | No colors! 14 |
    15 | {% endif %} 16 |
    17 | 18 |
    -------------------------------------------------------------------------------- /templates/simple-1/template.vue.js: -------------------------------------------------------------------------------- 1 | const Vue = require('vue'); 2 | 3 | const App = Vue.component('my-app', { 4 | template: ` 5 |
    6 |
    7 | 8 | Hello {{name}}! You have {{messageCount}} messages! 9 | 10 | 11 |
      12 |
    • 13 | {{color}} 14 |
    • 15 |
    16 |
    17 | No colors! 18 |
    19 |
    20 | 23 |
    ` 24 | }); 25 | 26 | module.exports = App; -------------------------------------------------------------------------------- /templates/simple-2/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "header": "Header", 3 | "header2": "Header2", 4 | "header3": "Header3", 5 | "header4": "Header4", 6 | "header5": "Header5", 7 | "header6": "Header6", 8 | "list": ["1000000000", "2", "3", "4", "5", "6", "7", "8", "9", "10"] 9 | } -------------------------------------------------------------------------------- /templates/simple-2/template.dust: -------------------------------------------------------------------------------- 1 |
    2 |

    {header}

    3 |

    {header2}

    4 |

    {header3}

    5 |

    {header4}

    6 |
    {header5}
    7 |
    {header6}
    8 |
      9 | {#list} 10 |
    • {.}
    • 11 | {/list} 12 |
    13 |
    -------------------------------------------------------------------------------- /templates/simple-2/template.marko: -------------------------------------------------------------------------------- 1 |
    2 |

    ${input.header}

    3 |

    ${input.header2}

    4 |

    ${input.header3}

    5 |

    ${input.header4}

    6 |
    ${input.header5}
    7 |
    ${input.header6}
    8 |
      9 |
    • ${item}
    • 10 |
    11 |
    -------------------------------------------------------------------------------- /templates/ui-components/components/ReactColors.jsx: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var React = require('react'); 3 | 4 | function renderColor(color) { 5 | var style = { 6 | backgroundColor: color 7 | }; 8 | 9 | return
  • 10 | {color} 11 |
  • 12 | } 13 | 14 | function renderColors(colors) { 15 | if (colors.length) { 16 | return (
      {colors.map(renderColor)}
    ); 17 | } else { 18 | return
    No colors!
    19 | } 20 | } 21 | 22 | module.exports = class extends React.Component { 23 | componentDidMount() { 24 | console.log('Mounted!') 25 | } 26 | 27 | render() { 28 | return
    29 | Hello {this.props.name} 30 | {renderColors(this.props.colors)} 31 |
    ; 32 | } 33 | }; -------------------------------------------------------------------------------- /templates/ui-components/components/marko-colors/index.marko: -------------------------------------------------------------------------------- 1 | class { 2 | onMount() { 3 | console.log('Mounted!'); 4 | } 5 | } 6 | div.colors 7 | -- Hello ${data.name}! 8 | ul if(data.colors.length) 9 | li.color style="background-color: ${color}" for(color in data.colors) 10 | -- ${color} 11 | div else 12 | -- No colors! -------------------------------------------------------------------------------- /templates/ui-components/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "John Doe", 4 | "colors": ["red", "green", "blue", "yellow", "orange", "pink", "black", "white", "beige", "brown", "cyan", "magenta"] 5 | }, 6 | { 7 | "name": "Jane Doe", 8 | "colors": [] 9 | } 10 | ] -------------------------------------------------------------------------------- /templates/ui-components/marko.json: -------------------------------------------------------------------------------- 1 | { 2 | "tags-dir": "./components" 3 | } -------------------------------------------------------------------------------- /templates/ui-components/template.jsx: -------------------------------------------------------------------------------- 1 | var React = require('react'); 2 | var Colors = require('./components/ReactColors.jsx'); 3 | 4 | module.exports = module.exports = React.createClass({ 5 | render() { 6 | return
    7 | 8 |
    ; 9 | } 10 | }); -------------------------------------------------------------------------------- /templates/ui-components/template.marko: -------------------------------------------------------------------------------- 1 |
    2 | 3 |
    --------------------------------------------------------------------------------