-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtagIf.js
52 lines (43 loc) · 1.24 KB
/
tagIf.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
module.exports = function (parser, contents) {
var bits = contents.split(/\s+/) // ["for", "item", "in", "items"]
, contextTarget = bits[1]
, lookupContextVariable = parser.lookup(bits[3])
, forBody
, emptyBody
parser.parse({
'endif': endif
, 'empty': empty
})
return function (context) {
var target = lookupContextVariable(context)
, output = []
, loopContext
if (!target || !target.length) {
return emptyBody ? emptyBody(context) : ''
}
for (var i = 0, len = target.length; i < len; ++i) {
loopContext = Object.create(context)
loopContext[contextTarget] = target[i]
loopContext.forloop = {
parent: loopContext.forloop
, index: i
, isfirst: i === 0
, islast: i === len - 1
, length: len
}
output.push(forBody(loopContext))
}
return output.join('')
}
function empty(tpl) {
forBody = tpl
parser.parse({ 'endfor': endfor })
}
function endif(tpl) {
/*if (forBody) {
emptyBody = tpl
} else {
forBody = tpl
}*/
}
}