mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-29 07:05:13 -07:00
fix: {%assign%} now adds a shading scope
This commit is contained in:
@@ -30,7 +30,6 @@ var Scope = {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
push: function (ctx) {
|
push: function (ctx) {
|
||||||
assert(ctx, `trying to push ${ctx} into scopes`)
|
|
||||||
this.scopes.push(ctx)
|
this.scopes.push(ctx)
|
||||||
},
|
},
|
||||||
pop: function (ctx) {
|
pop: function (ctx) {
|
||||||
|
|||||||
+5
-2
@@ -1,3 +1,4 @@
|
|||||||
|
'use strict'
|
||||||
const Liquid = require('..')
|
const Liquid = require('..')
|
||||||
const lexical = Liquid.lexical
|
const lexical = Liquid.lexical
|
||||||
const re = new RegExp(`(${lexical.identifier.source})\\s*=(.*)`)
|
const re = new RegExp(`(${lexical.identifier.source})\\s*=(.*)`)
|
||||||
@@ -6,13 +7,15 @@ const assert = require('../src/util/assert.js')
|
|||||||
module.exports = function (liquid) {
|
module.exports = function (liquid) {
|
||||||
liquid.registerTag('assign', {
|
liquid.registerTag('assign', {
|
||||||
parse: function (token) {
|
parse: function (token) {
|
||||||
var match = token.args.match(re)
|
let match = token.args.match(re)
|
||||||
assert(match, `illegal token ${token.raw}`)
|
assert(match, `illegal token ${token.raw}`)
|
||||||
this.key = match[1]
|
this.key = match[1]
|
||||||
this.value = match[2]
|
this.value = match[2]
|
||||||
},
|
},
|
||||||
render: function (scope) {
|
render: function (scope) {
|
||||||
scope.set(this.key, liquid.evalValue(this.value, scope))
|
let ctx = Object.create(null)
|
||||||
|
ctx[this.key] = liquid.evalValue(this.value, scope)
|
||||||
|
scope.push(ctx)
|
||||||
return Promise.resolve('')
|
return Promise.resolve('')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
+3
-5
@@ -54,8 +54,7 @@ describe('filters', function () {
|
|||||||
|
|
||||||
{%- for item in everything -%}
|
{%- for item in everything -%}
|
||||||
- {{ item }}
|
- {{ item }}
|
||||||
{% endfor -%}`,
|
{% endfor -%}`, `- apples
|
||||||
`- apples
|
|
||||||
- oranges
|
- oranges
|
||||||
- peaches
|
- peaches
|
||||||
- carrots
|
- carrots
|
||||||
@@ -70,8 +69,7 @@ describe('filters', function () {
|
|||||||
|
|
||||||
{%- for item in everything -%}
|
{%- for item in everything -%}
|
||||||
- {{ item }}
|
- {{ item }}
|
||||||
{% endfor -%}`,
|
{% endfor -%}`, `- apples
|
||||||
`- apples
|
|
||||||
- oranges
|
- oranges
|
||||||
- peaches
|
- peaches
|
||||||
- carrots
|
- carrots
|
||||||
@@ -156,7 +154,7 @@ describe('filters', function () {
|
|||||||
|
|
||||||
it('should support join', function () {
|
it('should support join', function () {
|
||||||
var src = '{% assign beatles = "John, Paul, George, Ringo" | split: ", " %}' +
|
var src = '{% assign beatles = "John, Paul, George, Ringo" | split: ", " %}' +
|
||||||
'{{ beatles | join: " and " }}'
|
'{{ beatles | join: " and " }}'
|
||||||
return test(src, 'John and Paul and George and Ringo')
|
return test(src, 'John and Paul and George and Ringo')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -187,11 +187,6 @@ describe('scope', function () {
|
|||||||
})
|
})
|
||||||
|
|
||||||
describe('.push()', function () {
|
describe('.push()', function () {
|
||||||
it('should throw when trying to push non-object', function () {
|
|
||||||
expect(function () {
|
|
||||||
scope.push(false)
|
|
||||||
}).to.throw()
|
|
||||||
})
|
|
||||||
it('should push scope', function () {
|
it('should push scope', function () {
|
||||||
scope.set('bar', 'bar')
|
scope.set('bar', 'bar')
|
||||||
scope.push({
|
scope.push({
|
||||||
|
|||||||
+28
-14
@@ -1,53 +1,67 @@
|
|||||||
|
'use strict'
|
||||||
const Liquid = require('../..')
|
const Liquid = require('../..')
|
||||||
const chai = require('chai')
|
const chai = require('chai')
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
chai.use(require('chai-as-promised'))
|
chai.use(require('chai-as-promised'))
|
||||||
|
|
||||||
describe('tags/assign', function () {
|
describe('tags/assign', function () {
|
||||||
var liquid = Liquid()
|
let liquid = Liquid()
|
||||||
it('should throw when variable expression illegal', function () {
|
it('should throw when variable expression illegal', function () {
|
||||||
var src = '{% assign / %}'
|
let src = '{% assign / %}'
|
||||||
var ctx = {}
|
let ctx = {}
|
||||||
return expect(liquid.parseAndRender(src, ctx)).to.be.rejectedWith(/illegal/)
|
return expect(liquid.parseAndRender(src, ctx)).to.be.rejectedWith(/illegal/)
|
||||||
})
|
})
|
||||||
|
it('should support assign to a string', function () {
|
||||||
it('should assign as string', function () {
|
let src = '{% assign foo="bar" %}{{foo}}'
|
||||||
var src = '{% assign foo="bar" %}{{foo}}'
|
|
||||||
return expect(liquid.parseAndRender(src))
|
return expect(liquid.parseAndRender(src))
|
||||||
.to.eventually.equal('bar')
|
.to.eventually.equal('bar')
|
||||||
})
|
})
|
||||||
|
it('should support assign to a number', function () {
|
||||||
|
let src = '{% assign foo=10086 %}{{foo}}'
|
||||||
|
return expect(liquid.parseAndRender(src))
|
||||||
|
.to.eventually.equal('10086')
|
||||||
|
})
|
||||||
|
it('should shading rather than overwriting', function () {
|
||||||
|
let ctx = {foo: 'foo'}
|
||||||
|
let src = '{% assign foo="FOO" %}{{foo}}'
|
||||||
|
return liquid.parseAndRender(src, ctx)
|
||||||
|
.then(x => {
|
||||||
|
expect(x).to.equal('FOO')
|
||||||
|
expect(ctx.foo).to.equal('foo')
|
||||||
|
})
|
||||||
|
})
|
||||||
it('should assign as array', function () {
|
it('should assign as array', function () {
|
||||||
var src = '{% assign foo=(1..3) %}{{foo}}'
|
let src = '{% assign foo=(1..3) %}{{foo}}'
|
||||||
return expect(liquid.parseAndRender(src))
|
return expect(liquid.parseAndRender(src))
|
||||||
.to.eventually.equal('[1,2,3]')
|
.to.eventually.equal('[1,2,3]')
|
||||||
})
|
})
|
||||||
it('should assign as filter result', function () {
|
it('should assign as filter result', function () {
|
||||||
var src = '{% assign foo="a b" | capitalize | split: " " | first %}{{foo}}'
|
let src = '{% assign foo="a b" | capitalize | split: " " | first %}{{foo}}'
|
||||||
return expect(liquid.parseAndRender(src))
|
return expect(liquid.parseAndRender(src))
|
||||||
.to.eventually.equal('A')
|
.to.eventually.equal('A')
|
||||||
})
|
})
|
||||||
it('should assign var-1', function () {
|
it('should assign var-1', function () {
|
||||||
var src = '{% assign var-1 = 5 %}{{ var-1 }}'
|
let src = '{% assign var-1 = 5 %}{{ var-1 }}'
|
||||||
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
||||||
})
|
})
|
||||||
it('should assign var-', function () {
|
it('should assign var-', function () {
|
||||||
var src = '{% assign var- = 5 %}{{ var- }}'
|
let src = '{% assign var- = 5 %}{{ var- }}'
|
||||||
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
||||||
})
|
})
|
||||||
it('should assign -var', function () {
|
it('should assign -var', function () {
|
||||||
var src = '{% assign -var = 5 %}{{ -var }}'
|
let src = '{% assign -let = 5 %}{{ -let }}'
|
||||||
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
||||||
})
|
})
|
||||||
it('should assign -5-5', function () {
|
it('should assign -5-5', function () {
|
||||||
var src = '{% assign -5-5 = 5 %}{{ -5-5 }}'
|
let src = '{% assign -5-5 = 5 %}{{ -5-5 }}'
|
||||||
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
||||||
})
|
})
|
||||||
it('should assign 4-3', function () {
|
it('should assign 4-3', function () {
|
||||||
var src = '{% assign 4-3 = 5 %}{{ 4-3 }}'
|
let src = '{% assign 4-3 = 5 %}{{ 4-3 }}'
|
||||||
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
return expect(liquid.parseAndRender(src)).to.eventually.equal('5')
|
||||||
})
|
})
|
||||||
it('should not assign -6', function () {
|
it('should not assign -6', function () {
|
||||||
var src = '{% assign -6 = 5 %}{{ -6 }}'
|
let src = '{% assign -6 = 5 %}{{ -6 }}'
|
||||||
return expect(liquid.parseAndRender(src)).to.eventually.equal('-6')
|
return expect(liquid.parseAndRender(src)).to.eventually.equal('-6')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user