Skip to content

Commit

Permalink
filter division expression with parentheses (fix #4838) (#4844)
Browse files Browse the repository at this point in the history
* filter division expression with parentheses (fix #4838)

* verify also dot and square brackets

* missed a link check sorry for the useless commit

* added + - and _ support
  • Loading branch information
rixlabs authored and yyx990803 committed Feb 14, 2017
1 parent ebe2729 commit 7259aef
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/compiler/parser/filter-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export function parseFilters (exp: string): string {
p = exp.charAt(j)
if (p !== ' ') break
}
if (!p || !/[\w$]/.test(p)) {
if (!p || !/[\w).\]\+\-\_$]/.test(p)) {
inRegex = true
}
}
Expand Down
62 changes: 62 additions & 0 deletions test/unit/features/filter/filter.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,68 @@ describe('Filters', () => {
expect(vm.$el.textContent).toBe(String(1 / 4))
})

it('handle division with parenthesis', () => {
const vm = new Vue({
data: { a: 20 },
template: `<div>{{ (a*2) / 5 | double }}</div>`,
filters: { double: v => v * 2 }
}).$mount()
expect(vm.$el.textContent).toBe(String(16))
})

it('handle division with dot', () => {
const vm = new Vue({
template: `<div>{{ 20. / 5 | double }}</div>`,
filters: { double: v => v * 2 }
}).$mount()
expect(vm.$el.textContent).toBe(String(8))
})

it('handle division with array values', () => {
const vm = new Vue({
data: { a: [20] },
template: `<div>{{ a[0] / 5 | double }}</div>`,
filters: { double: v => v * 2 }
}).$mount()
expect(vm.$el.textContent).toBe(String(8))
})

it('handle division with hash values', () => {
const vm = new Vue({
data: { a: { n: 20 }},
template: `<div>{{ a['n'] / 5 | double }}</div>`,
filters: { double: v => v * 2 }
}).$mount()
expect(vm.$el.textContent).toBe(String(8))
})

it('handle division with variable++', () => {
const vm = new Vue({
data: { a: 7 },
template: `<div>{{ a++ / 2 | double }}</div>`,
filters: { double: v => v * 2 }
}).$mount()
expect(vm.$el.textContent).toBe(String(7))
})

it('handle division with variable--', () => {
const vm = new Vue({
data: { a: 7 },
template: `<div>{{ a++ / 2 | double }}</div>`,
filters: { double: v => v * 2 }
}).$mount()
expect(vm.$el.textContent).toBe(String(7))
})

it('handle division with variable_', () => {
const vm = new Vue({
data: { a_: 8 },
template: `<div>{{ a_ / 2 | double }}</div>`,
filters: { double: v => v * 2 }
}).$mount()
expect(vm.$el.textContent).toBe(String(8))
})

it('arguments', () => {
const vm = new Vue({
template: `<div>{{ msg | add(a, 3) }}</div>`,
Expand Down

0 comments on commit 7259aef

Please sign in to comment.