Wrapped template descender in a recursion check. Fixed global leak in valid_block_type() check. Updated Readme to document if/when differences.
This commit is contained in:
parent
8d949ce6f0
commit
578150e389
17
README.md
17
README.md
|
@ -36,10 +36,13 @@ a string or a number.
|
|||
### If
|
||||
|
||||
An "if:<name>" section can contain other objects, but the entirety of
|
||||
the section is only rendered if the current context scope contains the
|
||||
current name, and the value associated with that name is "true" in a
|
||||
boolean context. You might use to show someone's name, if the name
|
||||
field is populated, and show nothing if it isn't.
|
||||
the section is only rendered if the current context scope, and *only*
|
||||
the current context scope, contains the current name, and the value
|
||||
associated with that name is "true" in a boolean context. You might
|
||||
use to show someone's name, if the name field is populated, and show
|
||||
nothing if it isn't. This is useful for detecting if the current
|
||||
context has a field, but you don't want previous contexts' synonyms
|
||||
showing up.
|
||||
|
||||
If your datasource returns:
|
||||
|
||||
|
@ -49,6 +52,12 @@ Then your template would use:
|
|||
|
||||
{if:name}Hello {name}!{/if:name}
|
||||
|
||||
### When
|
||||
|
||||
A "when:<name>" section is the same as the "if", but it will render if
|
||||
the current context scope, and any previous context scope on the
|
||||
stack, contains the current name.
|
||||
|
||||
### Block
|
||||
|
||||
A "block:<name>" section can contain other objects, but the entirety
|
||||
|
|
|
@ -816,7 +816,7 @@ module.exports = (function() {
|
|||
var _VBT_LENGTH = _VALID_BLOCK_TYPES.length;
|
||||
|
||||
function is_valid_block_type(b) {
|
||||
for(i = 0; i < _VBT_LENGTH; i++) {
|
||||
for(var i = 0; i < _VBT_LENGTH; i++) {
|
||||
if (_VALID_BLOCK_TYPES[i] == b) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -110,8 +110,15 @@
|
|||
};
|
||||
|
||||
Contexter.prototype.render = function(name) {
|
||||
var ret;
|
||||
if ((this.templates[name] != null) && _.isFunction(this.templates[name])) {
|
||||
return this.templates[name](this);
|
||||
this.depth++;
|
||||
if (this.depth > 10) {
|
||||
throw new Error('recursion-error');
|
||||
}
|
||||
ret = this.templates[name](this);
|
||||
this.depth--;
|
||||
return ret;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
var _VBT_LENGTH = _VALID_BLOCK_TYPES.length;
|
||||
|
||||
function is_valid_block_type(b) {
|
||||
for(i = 0; i < _VBT_LENGTH; i++) {
|
||||
for(var i = 0; i < _VBT_LENGTH; i++) {
|
||||
if (_VALID_BLOCK_TYPES[i] == b) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -71,7 +71,14 @@ class Contexter
|
|||
return ""
|
||||
|
||||
render: (name) ->
|
||||
if @templates[name]? and _.isFunction(@templates[name]) then @templates[name](@) else ""
|
||||
if @templates[name]? and _.isFunction(@templates[name])
|
||||
@depth++
|
||||
throw new Error('recursion-error') if @depth > 10
|
||||
ret = @templates[name](@)
|
||||
@depth--
|
||||
ret
|
||||
else
|
||||
""
|
||||
|
||||
|
||||
module.exports = (ast, data) ->
|
||||
|
|
Loading…
Reference in New Issue