[for block] Handle empty nodes

Closes #35
This commit is contained in:
Kyle Fuller
2015-10-24 17:34:37 -07:00
parent 9b26b7d71a
commit 507cc5c661
3 changed files with 33 additions and 16 deletions

View File

@@ -119,6 +119,7 @@ public class ForNode : NodeType {
let variable:Variable
let loopVariable:String
let nodes:[NodeType]
let emptyNodes: [NodeType]
public class func parse(parser:TokenParser, token:Token) throws -> NodeType {
let components = token.components()
@@ -150,22 +151,23 @@ public class ForNode : NodeType {
self.variable = Variable(variable)
self.loopVariable = loopVariable
self.nodes = nodes
// TODO: Handle emptyNodes
self.emptyNodes = emptyNodes
}
public func render(context: Context) throws -> String {
let values = try variable.resolve(context)
if let values = values as? NSArray {
if let values = values as? NSArray where values.count > 0 {
return try values.map { item in
context.push()
context[loopVariable] = item
let result = try renderNodes(nodes, context)
context.pop()
return result
try context.push([loopVariable: item]) {
try renderNodes(nodes, context)
}
}.joinWithSeparator("")
}
return ""
return try context.push {
try renderNodes(emptyNodes, context)
}
}
}