From 24cb7bb5918a0a4c2f632dfe39bfa3cdcfc1ef1f Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Fri, 7 Aug 2015 10:00:44 +0300 Subject: [PATCH] Fixed #557 --- .../xml-declaration/xml-declaration-tests.ts | 24 +++++++++++++++++++ ui/builder/binding-builder.ts | 16 ++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/apps/tests/xml-declaration/xml-declaration-tests.ts b/apps/tests/xml-declaration/xml-declaration-tests.ts index 8a030799c..a10d08e38 100644 --- a/apps/tests/xml-declaration/xml-declaration-tests.ts +++ b/apps/tests/xml-declaration/xml-declaration-tests.ts @@ -312,6 +312,30 @@ export function test_parse_ShouldParseSubProperties() { TKUnit.assert(sw.visibility === "collapsed", "Expected result: collapsed; Actual result: " + sw.visibility + "; type: " + typeof (sw.visibility)); }; +export function test_parse_ShouldParseBindingsWithCommaInsideSingleQuote() { + var expected = "Hi,test" + var bindingString = "{{ 'Hi,' + myProp }}"; + var p = builder.parse(''); + var obj = new observable.Observable(); + obj.set("myProp", "test"); + p.bindingContext = obj; + var lbl = p.content; + + TKUnit.assert(lbl.text === expected, "Expected " + expected + "; Actual result: " + lbl.text + "; type: " + typeof (lbl.text)); +}; + +export function test_parse_ShouldParseBindingsWithCommaInsideDoubleQuote() { + var expected = "Hi,test" + var bindingString = '{{ "Hi," + myProp }}'; + var p = builder.parse(""); + var obj = new observable.Observable(); + obj.set("myProp", "test"); + p.bindingContext = obj; + var lbl = p.content; + + TKUnit.assert(lbl.text === expected, "Expected " + expected + "; Actual result: " + lbl.text + "; type: " + typeof (lbl.text)); +}; + export function test_parse_CanBindBackgroundImage() { var p = builder.parse(""); var expected = "~/logo.png" diff --git a/ui/builder/binding-builder.ts b/ui/builder/binding-builder.ts index 39ccbcf3e..ee1578d27 100644 --- a/ui/builder/binding-builder.ts +++ b/ui/builder/binding-builder.ts @@ -96,19 +96,33 @@ function getParamsArray(value: string) { var i; var skipComma = 0; var indexReached = 0; + var singleQuoteBlock, doubleQuoteBlock = false; + for (i = 0; i < value.length; i++) { + if (value[i] === '"') { + doubleQuoteBlock = !doubleQuoteBlock; + } + + if (value[i] === "'") { + singleQuoteBlock = !singleQuoteBlock; + } + if (value[i] === '(' || value[i] === '[') { skipComma++; } + if (value[i] === ')' || value[i] === ']') { skipComma--; } - if (value[i] === ',' && skipComma === 0) { + + if (value[i] === ',' && skipComma === 0 && !(singleQuoteBlock || doubleQuoteBlock)) { result.push(value.substr(indexReached, i - indexReached)); indexReached = i + 1; } } + result.push(value.substr(indexReached)); + return result; }