From 32d0588e14709ba3853736f2e98b01da5c6cd665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rasmus=20Fl=C3=B8e?= Date: Mon, 31 Mar 2014 02:41:28 +0200 Subject: [PATCH 1/4] Support for nested lists passed to and from javascript --- lib/less/tree.js | 2 +- lib/less/tree/javascript.js | 27 ++++++++++++++++++--------- test/less/javascript.less | 4 ++++ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/lib/less/tree.js b/lib/less/tree.js index cd1352f59..0a8eca3cd 100644 --- a/lib/less/tree.js +++ b/lib/less/tree.js @@ -43,7 +43,7 @@ tree.find = function (obj, fun) { tree.jsify = function (obj) { if (Array.isArray(obj.value) && (obj.value.length > 1)) { - return '[' + obj.value.map(function (v) { return v.toCSS(false); }).join(', ') + ']'; + return '[' + obj.value.map(tree.jsify).join(', ') + ']'; } else { return obj.toCSS(false); } diff --git a/lib/less/tree/javascript.js b/lib/less/tree/javascript.js index 30a8559d6..799c06a82 100644 --- a/lib/less/tree/javascript.js +++ b/lib/less/tree/javascript.js @@ -42,15 +42,24 @@ tree.JavaScript.prototype = { throw { message: "JavaScript evaluation error: '" + e.name + ': ' + e.message.replace(/["]/g, "'") + "'" , index: this.index }; } - if (typeof(result) === 'number') { - return new(tree.Dimension)(result); - } else if (typeof(result) === 'string') { - return new(tree.Quoted)('"' + result + '"', result, this.escaped, this.index); - } else if (Array.isArray(result)) { - return new(tree.Anonymous)(result.join(', ')); - } else { - return new(tree.Anonymous)(result); - } + return (function outputType (value, firstLevel) { + var type = typeof (value); + if (type === 'number') { + return new(tree.Dimension)(value); + } else if (type === 'string') { + return new(tree.Quoted)('"' + value + '"', value, that.escaped, that.index); + } else if (Array.isArray(value)) { + if (firstLevel) { + console.log("firstLevel", value); + return new(tree.Value)(value.map(outputType)); + } + else { + console.log("not firstLevel", value); + return new(tree.Expression)(value.map(outputType)) + } + } + return new(tree.Anonymous)(value); + }(result, true)); } }; diff --git a/test/less/javascript.less b/test/less/javascript.less index b826a7871..67051c93b 100644 --- a/test/less/javascript.less +++ b/test/less/javascript.less @@ -24,6 +24,10 @@ .arrays { @ary: 1, 2, 3; @ary2: 1 2 3; + @ary3: 1 2 3, 4 5, 6; + @ary4: 7 8, 9; ary: `@{ary}.join(', ')`; ary1: `@{ary2}.join(', ')`; + ary2: ~`@{ary3}`; + ary3: ~`[@{ary3}, @{ary4}]`; } From ce08362e7cc27c52662a94c9502ba8a347cfe2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rasmus=20Fl=C3=B8e?= Date: Mon, 31 Mar 2014 03:01:14 +0200 Subject: [PATCH 2/4] Output nested lists according to syntax limitations --- lib/less/tree/javascript.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/less/tree/javascript.js b/lib/less/tree/javascript.js index 799c06a82..956a309ca 100644 --- a/lib/less/tree/javascript.js +++ b/lib/less/tree/javascript.js @@ -42,24 +42,22 @@ tree.JavaScript.prototype = { throw { message: "JavaScript evaluation error: '" + e.name + ': ' + e.message.replace(/["]/g, "'") + "'" , index: this.index }; } - return (function outputType (value, firstLevel) { + return (function outputType (value, index) { var type = typeof (value); if (type === 'number') { return new(tree.Dimension)(value); } else if (type === 'string') { return new(tree.Quoted)('"' + value + '"', value, that.escaped, that.index); } else if (Array.isArray(value)) { - if (firstLevel) { - console.log("firstLevel", value); + if (typeof index == "undefined") { return new(tree.Value)(value.map(outputType)); } else { - console.log("not firstLevel", value); return new(tree.Expression)(value.map(outputType)) } } return new(tree.Anonymous)(value); - }(result, true)); + }(result)); } }; From 076f56235d5ed1d349727055a044abd8c47c2377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rasmus=20Fl=C3=B8e?= Date: Mon, 31 Mar 2014 03:04:24 +0200 Subject: [PATCH 3/4] added tests for nested lists --- test/css/javascript.css | 7 ++++++- test/less/javascript.less | 12 +++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/test/css/javascript.css b/test/css/javascript.css index 8268ab333..28b5449a6 100644 --- a/test/css/javascript.css +++ b/test/css/javascript.css @@ -19,5 +19,10 @@ } .arrays { ary: "1, 2, 3"; - ary1: "1, 2, 3"; + ary2: "1, 2, 3"; + ary3: 4 5 6, 7 8, 9; + ary3string: "[[4, 5, 6], [7, 8], 9]"; + ary3length: 3; + ary2-3: 1 2 3, 4 5 6 7 8 9; + ary2-3length: 2; } diff --git a/test/less/javascript.less b/test/less/javascript.less index 67051c93b..e2e310433 100644 --- a/test/less/javascript.less +++ b/test/less/javascript.less @@ -24,10 +24,12 @@ .arrays { @ary: 1, 2, 3; @ary2: 1 2 3; - @ary3: 1 2 3, 4 5, 6; - @ary4: 7 8, 9; + @ary3: 4 5 6, 7 8, 9; ary: `@{ary}.join(', ')`; - ary1: `@{ary2}.join(', ')`; - ary2: ~`@{ary3}`; - ary3: ~`[@{ary3}, @{ary4}]`; + ary2: `@{ary2}.join(', ')`; + ary3: `@{ary3}`; + ary3string: `"@{ary3}"`; + ary3length: length(`@{ary3}`); + ary2-3: `[@{ary2}, @{ary3}]`; + ary2-3length: length(`[@{ary2}, @{ary3}]`); } From dd95aebee72288ca8f46a5935f5d3f2fe855a264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rasmus=20Fl=C3=B8e?= Date: Mon, 31 Mar 2014 03:06:54 +0200 Subject: [PATCH 4/4] added missing semicolon... --- lib/less/tree/javascript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/less/tree/javascript.js b/lib/less/tree/javascript.js index 956a309ca..b29cf0173 100644 --- a/lib/less/tree/javascript.js +++ b/lib/less/tree/javascript.js @@ -53,7 +53,7 @@ tree.JavaScript.prototype = { return new(tree.Value)(value.map(outputType)); } else { - return new(tree.Expression)(value.map(outputType)) + return new(tree.Expression)(value.map(outputType)); } } return new(tree.Anonymous)(value);