function Context(view, parentContext) { this.view = view; this.cache = { '.': this.view }; this.parent = parentContext; }
n/a
function Scanner(string) { this.string = string; this.tail = string; this.pos = 0; }
n/a
function Writer() { this.cache = {}; }
n/a
function clearCache() { return defaultWriter.clearCache(); }
n/a
function escapeHtml(string) { return String(string).replace(/[&<>"'`=\/]/g, function fromEntityMap (s) { return entityMap[s]; }); }
n/a
function parse(template, tags) { return defaultWriter.parse(template, tags); }
...
```js
Mustache.render(
template : String,
view : Object,
partials? : Object,
) => String
Mustache.parse(
template : String,
tags = ['{{', '}}'] : Tags,
) => String
interface Tags [String, String]
```
...
function render(template, view, partials) { if (typeof template !== 'string') { throw new TypeError('Invalid template! Template should be a "string" ' + 'but "' + typeStr(template) + '" was given as the first ' + 'argument for mustache#render(template, view, partials)'); } return defaultWriter.render(template, view, partials); }
...
var view = {
title: "Joe",
calc: function () {
return 2 + 4;
}
};
var output = Mustache.render("{{title}} spends {{calc}}", view);
```
In this example, the `Mustache.render` function takes two parameters: 1) the [mustache](http://mustache.github.com/) template and
2) a `view` object that contains the data and code needed to render the template.
## API
Following is an [rtype](https://git.io/rtype) signature of the most commonly used functions.
...
function to_html(template, view, partials, send) {
/*eslint-enable*/
var result = mustache.render(template, view, partials);
if (isFunction(send)) {
send(result);
} else {
return result;
}
}
n/a
function Context(view, parentContext) { this.view = view; this.cache = { '.': this.view }; this.parent = parentContext; }
n/a
function lookup(name) {
var cache = this.cache;
var value;
if (cache.hasOwnProperty(name)) {
value = cache[name];
} else {
var context = this, names, index, lookupHit = false;
while (context) {
if (name.indexOf('.') > 0) {
value = context.view;
names = name.split('.');
index = 0;
/**
* Using the dot notion path in `name`, we descend through the
* nested objects.
*
* To be certain that the lookup has been successful, we have to
* check if the last object in the path actually has the property
* we are looking for. We store the result in `lookupHit`.
*
* This is specially necessary for when the value has been set to
* `undefined` and we want to avoid looking up parent contexts.
**/
while (value != null && index < names.length) {
if (index === names.length - 1)
lookupHit = hasProperty(value, names[index]);
value = value[names[index++]];
}
} else {
value = context.view[name];
lookupHit = hasProperty(context.view, name);
}
if (lookupHit)
break;
context = context.parent;
}
cache[name] = value;
}
if (isFunction(value))
value = value.call(this.view);
return value;
}
n/a
function push(view) { return new Context(view, this); }
n/a
function Scanner(string) { this.string = string; this.tail = string; this.pos = 0; }
n/a
function eos() { return this.tail === ''; }
n/a
function scan(re) { var match = this.tail.match(re); if (!match || match.index !== 0) return ''; var string = match[0]; this.tail = this.tail.substring(string.length); this.pos += string.length; return string; }
n/a
function scanUntil(re) { var index = this.tail.search(re), match; switch (index) { case -1: match = this.tail; this.tail = ''; break; case 0: match = ''; break; default: match = this.tail.substring(0, index); this.tail = this.tail.substring(index); } this.pos += match.length; return match; }
n/a
function Writer() { this.cache = {}; }
n/a
function clearCache() { this.cache = {}; }
n/a
function escapedValue(token, context) { var value = context.lookup(token[1]); if (value != null) return mustache.escape(value); }
n/a
function parse(template, tags) { var cache = this.cache; var tokens = cache[template]; if (tokens == null) tokens = cache[template] = parseTemplate(template, tags); return tokens; }
...
```js
Mustache.render(
template : String,
view : Object,
partials? : Object,
) => String
Mustache.parse(
template : String,
tags = ['{{', '}}'] : Tags,
) => String
interface Tags [String, String]
```
...
function rawValue(token) { return token[1]; }
n/a
function render(template, view, partials) { var tokens = this.parse(template); var context = (view instanceof Context) ? view : new Context(view); return this.renderTokens(tokens, context, partials, template); }
...
var view = {
title: "Joe",
calc: function () {
return 2 + 4;
}
};
var output = Mustache.render("{{title}} spends {{calc}}", view);
```
In this example, the `Mustache.render` function takes two parameters: 1) the [mustache](http://mustache.github.com/) template and
2) a `view` object that contains the data and code needed to render the template.
## API
Following is an [rtype](https://git.io/rtype) signature of the most commonly used functions.
...
function renderInverted(token, context, partials, originalTemplate) { var value = context.lookup(token[1]); // Use JavaScript's definition of falsy. Include empty arrays. // See https://github.com/janl/mustache.js/issues/186 if (!value || (isArray(value) && value.length === 0)) return this.renderTokens(token[4], context, partials, originalTemplate); }
n/a
function renderPartial(token, context, partials) { if (!partials) return; var value = isFunction(partials) ? partials(token[1]) : partials[token[1]]; if (value != null) return this.renderTokens(this.parse(value), context, partials, value); }
n/a
function renderSection(token, context, partials, originalTemplate) { var self = this; var buffer = ''; var value = context.lookup(token[1]); // This function is used to render an arbitrary template // in the current context by higher-order sections. function subRender (template) { return self.render(template, context, partials); } if (!value) return; if (isArray(value)) { for (var j = 0, valueLength = value.length; j < valueLength; ++j) { buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate); } } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') { buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate); } else if (isFunction(value)) { if (typeof originalTemplate !== 'string') throw new Error('Cannot use higher-order sections without the original template'); // Extract the portion of the original template that the section contains. value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender); if (value != null) buffer += value; } else { buffer += this.renderTokens(token[4], context, partials, originalTemplate); } return buffer; }
n/a
function renderTokens(tokens, context, partials, originalTemplate) { var buffer = ''; var token, symbol, value; for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { value = undefined; token = tokens[i]; symbol = token[0]; if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate); else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate); else if (symbol === '>') value = this.renderPartial(token, context, partials, originalTemplate); else if (symbol === '&') value = this.unescapedValue(token, context); else if (symbol === 'name') value = this.escapedValue(token, context); else if (symbol === 'text') value = this.rawValue(token); if (value !== undefined) buffer += value; } return buffer; }
n/a
function unescapedValue(token, context) { var value = context.lookup(token[1]); if (value != null) return value; }
n/a