mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-16 12:50:38 -07:00
fix: incorrect scope when using assign with for, fixes #115
* remove AssignScope, CaptureScope, IncrementScope, DecrementScope concepts * introduce Scope.environments for decrement/increment * assign to scopes[0] for assign/capture
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import assert from '../../util/assert'
|
||||
import { identifier } from '../../parser/lexical'
|
||||
import { AssignScope } from '../../scope/scopes'
|
||||
import TagToken from '../../parser/tag-token'
|
||||
import Scope from '../../scope/scope'
|
||||
import ITagImplOptions from '../../template/tag/itag-impl-options'
|
||||
@@ -15,8 +14,6 @@ export default {
|
||||
this.value = match[2]
|
||||
},
|
||||
render: async function (scope: Scope) {
|
||||
const ctx = new AssignScope()
|
||||
ctx[this.key] = await this.liquid.evalValue(this.value, scope)
|
||||
scope.push(ctx)
|
||||
scope.contexts[0][this.key] = await this.liquid.evalValue(this.value, scope)
|
||||
}
|
||||
} as ITagImplOptions
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import assert from '../../util/assert'
|
||||
import { identifier } from '../../parser/lexical'
|
||||
import { CaptureScope } from '../../scope/scopes'
|
||||
import TagToken from '../../parser/tag-token'
|
||||
import Token from '../../parser/token'
|
||||
import Scope from '../../scope/scope'
|
||||
@@ -26,8 +25,6 @@ export default {
|
||||
},
|
||||
render: async function (scope: Scope) {
|
||||
const html = await this.liquid.renderer.renderTemplates(this.templates, scope)
|
||||
const ctx = new CaptureScope()
|
||||
ctx[this.variable] = html
|
||||
scope.push(ctx)
|
||||
scope.contexts[0][this.variable] = html
|
||||
}
|
||||
} as ITagImplOptions
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import assert from '../../util/assert'
|
||||
import { identifier } from '../../parser/lexical'
|
||||
import { CaptureScope, AssignScope, DecrementScope } from '../../scope/scopes'
|
||||
import TagToken from '../../parser/tag-token'
|
||||
import Scope from '../../scope/scope'
|
||||
import ITagImplOptions from '../../template/tag/itag-impl-options'
|
||||
@@ -11,20 +10,11 @@ export default {
|
||||
assert(match, `illegal identifier ${token.args}`)
|
||||
this.variable = match[0]
|
||||
},
|
||||
render: function (scope: Scope) {
|
||||
let context = scope.findContextFor(
|
||||
this.variable,
|
||||
ctx => {
|
||||
return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)
|
||||
}
|
||||
)
|
||||
if (!context) {
|
||||
context = new DecrementScope()
|
||||
scope.unshift(context)
|
||||
render: function (context: Scope) {
|
||||
const scope = context.environments
|
||||
if (typeof scope[this.variable] !== 'number') {
|
||||
scope[this.variable] = 0
|
||||
}
|
||||
if (typeof context[this.variable] !== 'number') {
|
||||
context[this.variable] = 0
|
||||
}
|
||||
return --context[this.variable]
|
||||
return --scope[this.variable]
|
||||
}
|
||||
} as ITagImplOptions
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import assert from '../../util/assert'
|
||||
import { identifier } from '../../parser/lexical'
|
||||
import { CaptureScope, AssignScope, IncrementScope } from '../../scope/scopes'
|
||||
import ITagImplOptions from '../../template/tag/itag-impl-options'
|
||||
|
||||
export default {
|
||||
@@ -9,22 +8,13 @@ export default {
|
||||
assert(match, `illegal identifier ${token.args}`)
|
||||
this.variable = match![0]
|
||||
},
|
||||
render: function (scope) {
|
||||
let context = scope.findContextFor(
|
||||
this.variable,
|
||||
ctx => {
|
||||
return !(ctx instanceof CaptureScope) && !(ctx instanceof AssignScope)
|
||||
}
|
||||
)
|
||||
if (!context) {
|
||||
context = new IncrementScope()
|
||||
scope.unshift(context)
|
||||
render: function (context) {
|
||||
const scope = context.environments
|
||||
if (typeof scope[this.variable] !== 'number') {
|
||||
scope[this.variable] = 0
|
||||
}
|
||||
if (typeof context[this.variable] !== 'number') {
|
||||
context[this.variable] = 0
|
||||
}
|
||||
const val = context[this.variable]
|
||||
context[this.variable]++
|
||||
const val = scope[this.variable]
|
||||
scope[this.variable]++
|
||||
return val
|
||||
}
|
||||
} as ITagImplOptions
|
||||
|
||||
Reference in New Issue
Block a user