From 354844e802688e65da1d1f6bf82392736dee1ecb Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sat, 12 Nov 2011 23:55:40 -0800 Subject: [PATCH 1/4] add assignment entities --- lib/less/parser.js | 18 ++++++++++++++++-- lib/less/tree/assignment.js | 17 +++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 lib/less/tree/assignment.js diff --git a/lib/less/parser.js b/lib/less/parser.js index 9657eb4e..72c54d1f 100644 --- a/lib/less/parser.js +++ b/lib/less/parser.js @@ -502,7 +502,7 @@ less.Parser = function Parser(env) { call: function () { var name, args, index = i; - if (! (name = /^([\w-]+|%)\(/.exec(chunks[j]))) return; + if (! (name = /^([\w-]+|%|progid:[\w\.]+)\(/.exec(chunks[j]))) return; name = name[1].toLowerCase(); @@ -522,7 +522,7 @@ less.Parser = function Parser(env) { arguments: function () { var args = [], arg; - while (arg = $(this.expression)) { + while (arg = $(this.entities.assignment) || $(this.expression)) { args.push(arg); if (! $(',')) { break } } @@ -534,6 +534,20 @@ less.Parser = function Parser(env) { $(this.entities.quoted); }, + // Assignments are call argument entities. + // They are present in ie filter properties. + // + // filter: progid:DXImageTransform.Microsoft.Alpha( *opacity=50* ) + // + + assignment: function () { + var key, value; + if (! (key = $(/^\w+\s?=/i))) return; + if (value = $(this.entity)) { + return new(tree.assignment)(key, value); + } + }, + // // Parse url() tokens // diff --git a/lib/less/tree/assignment.js b/lib/less/tree/assignment.js new file mode 100644 index 00000000..f51460eb --- /dev/null +++ b/lib/less/tree/assignment.js @@ -0,0 +1,17 @@ +(function (tree) { + +tree.assignment = function (key, val) { + this.key = key; + this.value = val; +}; +tree.assignment.prototype = { + toCSS: function () { + return this.key + (this.value.toCSS ? this.value.toCSS() : this.value); + }, + eval: function (env) { + if (this.value.eval) { this.value = this.value.eval(env) } + return this; + } +}; + +})(require('less/tree')); \ No newline at end of file From 56fc8fe510661037ef5f25c7f6d02b38748f3189 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sun, 13 Nov 2011 00:21:03 -0800 Subject: [PATCH 2/4] clean up + add test --- lib/less/index.js | 11 ++++++----- lib/less/parser.js | 5 ++--- lib/less/tree/assignment.js | 8 ++++---- test/less/ie-filters.less | 7 +++++++ 4 files changed, 19 insertions(+), 12 deletions(-) create mode 100644 test/less/ie-filters.less diff --git a/lib/less/index.js b/lib/less/index.js index 079f8202..37510fc1 100644 --- a/lib/less/index.js +++ b/lib/less/index.js @@ -73,11 +73,12 @@ var less = { } }; -['color', 'directive', 'operation', 'dimension', - 'keyword', 'variable', 'ruleset', 'element', - 'selector', 'quoted', 'expression', 'rule', - 'call', 'url', 'alpha', 'import', - 'mixin', 'comment', 'anonymous', 'value', 'javascript' +['color', 'directive', 'operation', 'dimension', + 'keyword', 'variable', 'ruleset', 'element', + 'selector', 'quoted', 'expression', 'rule', + 'call', 'url', 'alpha', 'import', + 'mixin', 'comment', 'anonymous', 'value', + 'javascript', 'assignment' ].forEach(function (n) { require('./tree/' + n); }); diff --git a/lib/less/parser.js b/lib/less/parser.js index aae24beb..fda15ed1 100644 --- a/lib/less/parser.js +++ b/lib/less/parser.js @@ -542,9 +542,8 @@ less.Parser = function Parser(env) { assignment: function () { var key, value; - if (! (key = $(/^\w+\s?=/i))) return; - if (value = $(this.entity)) { - return new(tree.assignment)(key, value); + if ((key = $(/^\w+(?=\s?=)/i)) && $('=') && (value = $(this.entity))) { + return new(tree.Assignment)(key, value); } }, diff --git a/lib/less/tree/assignment.js b/lib/less/tree/assignment.js index f51460eb..70ce6e2f 100644 --- a/lib/less/tree/assignment.js +++ b/lib/less/tree/assignment.js @@ -1,12 +1,12 @@ (function (tree) { -tree.assignment = function (key, val) { +tree.Assignment = function (key, val) { this.key = key; this.value = val; }; -tree.assignment.prototype = { +tree.Assignment.prototype = { toCSS: function () { - return this.key + (this.value.toCSS ? this.value.toCSS() : this.value); + return this.key + '=' + (this.value.toCSS ? this.value.toCSS() : this.value); }, eval: function (env) { if (this.value.eval) { this.value = this.value.eval(env) } @@ -14,4 +14,4 @@ tree.assignment.prototype = { } }; -})(require('less/tree')); \ No newline at end of file +})(require('../tree')); \ No newline at end of file diff --git a/test/less/ie-filters.less b/test/less/ie-filters.less new file mode 100644 index 00000000..095e575f --- /dev/null +++ b/test/less/ie-filters.less @@ -0,0 +1,7 @@ +@fat: 0; +@cloudhead: #000000; + +.nav .dropdown-menu li a:hover { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@fat); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#333333\', endColorstr=@cloudhead, GradientType=@fat); +} \ No newline at end of file From 7c2ac614cb0f4b41018d699cf89e88ed143d4a30 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sun, 13 Nov 2011 00:31:40 -0800 Subject: [PATCH 3/4] get spec passing --- test/css/ie-filters.css | 5 +++++ test/less/ie-filters.less | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 test/css/ie-filters.css diff --git a/test/css/ie-filters.css b/test/css/ie-filters.css new file mode 100644 index 00000000..933318ab --- /dev/null +++ b/test/css/ie-filters.css @@ -0,0 +1,5 @@ +.nav { + filter: progid:dximagetransform.microsoft.alpha(opacity=20); + filter: progid:dximagetransform.microsoft.alpha(opacity=0); + filter: progid:dximagetransform.microsoft.gradient(startColorstr="#333333", endColorstr="#000000", GradientType=0); +} diff --git a/test/less/ie-filters.less b/test/less/ie-filters.less index 095e575f..bea85b82 100644 --- a/test/less/ie-filters.less +++ b/test/less/ie-filters.less @@ -1,7 +1,8 @@ @fat: 0; -@cloudhead: #000000; +@cloudhead: "#000000"; -.nav .dropdown-menu li a:hover { +.nav { + filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 20); filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@fat); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=\'#333333\', endColorstr=@cloudhead, GradientType=@fat); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr=@cloudhead, GradientType=@fat); } \ No newline at end of file From 416efd3b607acd9aa192c925a579ca7de7dc05b9 Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Sun, 13 Nov 2011 00:34:39 -0800 Subject: [PATCH 4/4] clean up comment which read confusing --- lib/less/parser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/less/parser.js b/lib/less/parser.js index fda15ed1..32b9a155 100644 --- a/lib/less/parser.js +++ b/lib/less/parser.js @@ -534,8 +534,8 @@ less.Parser = function Parser(env) { $(this.entities.quoted); }, - // Assignments are call argument entities. - // They are present in ie filter properties. + // Assignments are argument entities for calls. + // They are present in ie filter properties as shown below. // // filter: progid:DXImageTransform.Microsoft.Alpha( *opacity=50* ) //