Skip to content

Commit 2730940

Browse files
committed
revert back to use comma as exp splitter - wrap exp with () to escape
1 parent 33fb50f commit 2730940

File tree

3 files changed

+32
-15
lines changed

3 files changed

+32
-15
lines changed

examples/todomvc/index.html

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ <h1>todos</h1>
2929
class="todo"
3030
sd-repeat="todo:todos"
3131
sd-if="todoFilter(todo.completed)"
32-
sd-class="completed:todo.completed & editing:todo == editedTodo"
32+
sd-class="
33+
completed : todo.completed,
34+
editing : todo == editedTodo
35+
"
3336
>
3437
<div class="view">
3538
<input
@@ -44,9 +47,13 @@ <h1>todos</h1>
4447
<input
4548
class="edit"
4649
type="text"
47-
sd-on="blur:doneEdit & keyup:doneEdit | key enter & keyup:cancelEdit | key esc"
4850
sd-model="todo.title"
4951
sd-todo-focus="todo == editedTodo"
52+
sd-on="
53+
blur : doneEdit,
54+
keyup : doneEdit | key enter,
55+
keyup : cancelEdit | key esc
56+
"
5057
>
5158
</li>
5259
</ul>

src/directive.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,14 @@ var config = require('./config'),
44
filters = require('./filters'),
55

66
// Regexes!
7+
78
// regex to split multiple directive expressions
8-
SPLIT_RE = /(?:['"](?:\\.|[^'"])*['"]|\\.|[^&]|&&)+/g,
9+
// split by commas, but ignore commas within quotes, parens and escapes.
10+
SPLIT_RE = /(?:['"](?:\\.|[^'"])*['"]|\((?:\\.|[^\)])*\)|\\.|[^,])+/g,
11+
12+
// match up to the first single pipe, ignore those within quotes.
913
KEY_RE = /^(?:['"](?:\\.|[^'"])*['"]|\\.|[^\|]|\|\|)+/,
14+
1015
ARG_RE = /^([\w- ]+):(.+)$/,
1116
FILTERS_RE = /\|[^\|]+/g,
1217
FILTER_TOKEN_RE = /[^\s']+|'[^']+'/g,

test/unit/specs/directive.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ describe('UNIT: Directive', function () {
2121

2222
it('should return array with the string if it\'s a single clause', function () {
2323
var e,
24-
test1 = 'fsef',
25-
test2 = 'ffsef + "fse&fsef"',
24+
test1 = 'fsef(a, b, c)',
25+
test2 = 'ffsef + "fse,fsef"',
2626
test3 = 'fsef + \'fesfsfe\'',
27-
test4 = '\"fsefsf&fsef&fsef\"'
27+
test4 = '\"fsefsf,fsef,fsef\"',
28+
test5 = '(a, b)'
2829

2930
e = Directive.split(test1)
3031
assert.strictEqual(e.length, 1)
@@ -41,31 +42,35 @@ describe('UNIT: Directive', function () {
4142
e = Directive.split(test4)
4243
assert.strictEqual(e.length, 1)
4344
assert.strictEqual(e[0], test4)
45+
46+
e = Directive.split(test5)
47+
assert.strictEqual(e.length, 1)
48+
assert.strictEqual(e[0], test5)
4449
})
4550

4651
it('should return split multiple clauses correctly', function () {
4752
var e,
48-
test1 = ['fsef && ggg', 'fsf:fsefsef'],
49-
test2 = ['asf-fsef:fsf', '"efs&sefsf"'],
50-
test3 = ['\'fsef&sef\'', 'fse:fsf'],
51-
test4 = ['\"fsef&fsef\"', 'sefsef\'fesfsf']
53+
test1 = ['(fse,fggg)', 'fsf:({a:1,b:2}, [1,2,3])'],
54+
test2 = ['asf-fsef:fsf', '"efs,s(e,f)sf"'],
55+
test3 = ['\'fsef,sef\'', 'fse:fsf(a,b,c)'],
56+
test4 = ['\"fsef,fsef\"', 'sefsef\'fesfsf']
5257

53-
e = Directive.split(test1.join('&'))
54-
assert.strictEqual(e.length, 2, 'expression with &&')
58+
e = Directive.split(test1.join(','))
59+
assert.strictEqual(e.length, 2, 'expression with {}, [] inside ()')
5560
assert.strictEqual(e[0], test1[0])
5661
assert.strictEqual(e[1], test1[1])
5762

58-
e = Directive.split(test2.join('&'))
63+
e = Directive.split(test2.join(','))
5964
assert.strictEqual(e.length, 2, 'expression with double quotes')
6065
assert.strictEqual(e[0], test2[0])
6166
assert.strictEqual(e[1], test2[1])
6267

63-
e = Directive.split(test3.join('&'))
68+
e = Directive.split(test3.join(','))
6469
assert.strictEqual(e.length, 2, 'expression with single quotes')
6570
assert.strictEqual(e[0], test3[0])
6671
assert.strictEqual(e[1], test3[1])
6772

68-
e = Directive.split(test4.join('&'))
73+
e = Directive.split(test4.join(','))
6974
assert.strictEqual(e.length, 2, 'expression with escaped quotes')
7075
assert.strictEqual(e[0], test4[0])
7176
assert.strictEqual(e[1], test4[1])

0 commit comments

Comments
 (0)