Skip to content

Commit

Permalink
Merge pull request #25 from devurandom/feature/explicit-conditionals
Browse files Browse the repository at this point in the history
Support explicit conditional blocks
  • Loading branch information
ajacksified authored Jan 15, 2021
2 parents e1a0a6f + 526cfe3 commit cc9ccbd
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions src/lustache/renderer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ local patterns = {
nonSpace = "%S",
eq = "%s*=",
curly = "%s*}",
tag = "[#\\^/>{&=!]"
tag = "[#\\^/>{&=!?]"
}

local html_escape_characters = {
Expand All @@ -24,6 +24,12 @@ local html_escape_characters = {
["/"] = "/"
}

local block_tags = {
["#"] = true,
["^"] = true,
["?"] = true,
}

local function is_array(array)
if type(array) ~= "table" then return false end
local max, n = 0, 0
Expand Down Expand Up @@ -58,6 +64,9 @@ local function compile_tokens(tokens, originalTemplate)
for i, token in ipairs(tokens) do
local t = token.type
buf[#buf+1] =
t == "?" and rnd:_conditional(
token, ctx, subrender(i, token.tokens)
) or
t == "#" and rnd:_section(
token, ctx, subrender(i, token.tokens), originalTemplate
) or
Expand Down Expand Up @@ -89,7 +98,7 @@ local function nest_tokens(tokens)
local token, section

for i,token in ipairs(tokens) do
if token.type == "#" or token.type == "^" then
if block_tags[token.type] then
token.tokens = {}
sections[#sections+1] = token
collector[#collector+1] = token
Expand Down Expand Up @@ -203,6 +212,16 @@ function renderer:render(template, view, partials)
return fn(view)
end

function renderer:_conditional(token, context, callback)
local value = context:lookup(token.value)

if value then
return callback(context, self)
end

return ""
end

function renderer:_section(token, context, callback, originalTemplate)
local value = context:lookup(token.value)

Expand Down

0 comments on commit cc9ccbd

Please sign in to comment.