Skip to content

Commit 5ae2e9c

Browse files
committed
eval code nodes in attributes
1 parent c4947fd commit 5ae2e9c

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

lib/index.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,25 @@ const parse = require('reshape-parser')
55
module.exports = (_locals = {}) => {
66
return function (tree, opts) {
77
const locals = Object.assign({}, opts.locals || {}, _locals)
8-
return util.modifyNodes(tree, (node) => node.type === 'code', (node) => {
9-
const newNode = parse(gen.call({ runtime: opts.runtime }, node, opts)(locals))
10-
newNode.location = node.location
11-
return newNode
8+
return util.modifyNodes(tree, (node) => {
9+
return node.type === 'code' || node.type === 'tag'
10+
}, (node) => {
11+
if (node.type === 'tag') {
12+
if (!node.attrs) return node
13+
for (let k in node.attrs) {
14+
node.attrs[k].map((n) => {
15+
if (n.type === 'code') { node.attrs[k] = evalNode(n, locals, opts) }
16+
})
17+
}
18+
return node
19+
}
20+
if (node.type === 'code') return evalNode(node, locals, opts)
1221
})
1322
}
1423
}
24+
25+
function evalNode (node, locals, opts) {
26+
const newNode = parse(gen.call({ runtime: opts.runtime }, node, opts)(locals))
27+
if (node.location) { newNode.location = node.location }
28+
return newNode
29+
}

test/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ test('loops', (t) => {
1515
.then((res) => { t.is(res.output(), '<p>one</p><p>two</p>') })
1616
})
1717

18+
test('evals attribute code nodes', (t) => {
19+
return reshape({ plugins: [expressions(), evalCode({ foo: 'bar' })] })
20+
.process('<p class="{{ foo }}">content</p>')
21+
.then((res) => { t.is(res.output(), '<p class="bar">content</p>') })
22+
})
23+
1824
test('merges from reshape options locals', (t) => {
1925
return reshape({ plugins: [expressions(), evalCode()], locals: { foo: 'bar' } })
2026
.process('<p>{{ foo }}</p>')

0 commit comments

Comments
 (0)