mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-17 05:10:40 -07:00
fix: break/continue stops whole template, #783
This commit is contained in:
@@ -74,6 +74,7 @@ export default class extends Tag {
|
|||||||
if (ctx.breakCalled) break
|
if (ctx.breakCalled) break
|
||||||
scope.forloop.next()
|
scope.forloop.next()
|
||||||
}
|
}
|
||||||
|
ctx.continueCalled = ctx.breakCalled = false
|
||||||
ctx.pop()
|
ctx.pop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -178,6 +178,19 @@ describe('tags/for', function () {
|
|||||||
const html = await liquid.parseAndRender(src, scope)
|
const html = await liquid.parseAndRender(src, scope)
|
||||||
return expect(html).toBe(' before before')
|
return expect(html).toBe(' before before')
|
||||||
})
|
})
|
||||||
|
it('should continue current forloop only', async () => {
|
||||||
|
const src = `
|
||||||
|
{%- for i in (1..2) -%}
|
||||||
|
i:{{ i }},
|
||||||
|
{%- for j in (1..2) -%}
|
||||||
|
j:{{ j }},
|
||||||
|
{%- continue -%}
|
||||||
|
after
|
||||||
|
{%- endfor -%}
|
||||||
|
{%- endfor -%}`
|
||||||
|
const html = await liquid.parseAndRender(src, scope)
|
||||||
|
return expect(html).toBe('i:1,j:1,j:2,i:2,j:1,j:2,')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
describe('break', function () {
|
describe('break', function () {
|
||||||
it('should support break', async function () {
|
it('should support break', async function () {
|
||||||
@@ -196,6 +209,27 @@ describe('tags/for', function () {
|
|||||||
const html = await liquid.parseAndRender(src, scope)
|
const html = await liquid.parseAndRender(src, scope)
|
||||||
return expect(html).toBe('123breaking')
|
return expect(html).toBe('123breaking')
|
||||||
})
|
})
|
||||||
|
it('should not break template outside of forloop', async () => {
|
||||||
|
const src = '{% for i in (1..5) %}' +
|
||||||
|
'{{ i }}' +
|
||||||
|
'{% break %}' +
|
||||||
|
'{% endfor %}' +
|
||||||
|
' after'
|
||||||
|
const html = await liquid.parseAndRender(src, scope)
|
||||||
|
return expect(html).toBe('1 after')
|
||||||
|
})
|
||||||
|
it('should not break parent forloop', async function () {
|
||||||
|
const src = `
|
||||||
|
{%- for i in (1..3) -%}
|
||||||
|
i:{{ i }},
|
||||||
|
{%- for j in (1..3) -%}
|
||||||
|
j:{{ j }},
|
||||||
|
{%- break -%}
|
||||||
|
{%- endfor -%}
|
||||||
|
{%- endfor -%}`
|
||||||
|
const html = await liquid.parseAndRender(src, scope)
|
||||||
|
return expect(html).toBe('i:1,j:1,i:2,j:1,i:3,j:1,')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('limit', function () {
|
describe('limit', function () {
|
||||||
|
|||||||
Reference in New Issue
Block a user