less 2.0.7 → 2.0.8beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. data/.travis.yml +4 -1
  2. data/less.gemspec +2 -1
  3. data/lib/less/js/Makefile +13 -0
  4. data/lib/less/js/benchmark/less-benchmark.js +1 -3
  5. data/lib/less/js/bin/lessc +30 -7
  6. data/lib/less/js/build/require-rhino.js +7 -0
  7. data/lib/less/js/dist/less-1.1.5.js +2805 -0
  8. data/lib/less/js/dist/less-1.1.5.min.js +16 -0
  9. data/lib/less/js/dist/less-rhino-1.1.3.js +2460 -0
  10. data/lib/less/js/dist/less-rhino-1.1.5.js +2481 -0
  11. data/lib/less/js/lib/less/browser.js +8 -2
  12. data/lib/less/js/lib/less/functions.js +12 -1
  13. data/lib/less/js/lib/less/index.js +19 -18
  14. data/lib/less/js/lib/less/parser.js +41 -22
  15. data/lib/less/js/lib/less/rhino.js +60 -0
  16. data/lib/less/js/lib/less/tree/alpha.js +1 -1
  17. data/lib/less/js/lib/less/tree/anonymous.js +1 -1
  18. data/lib/less/js/lib/less/tree/assignment.js +17 -0
  19. data/lib/less/js/lib/less/tree/call.js +1 -1
  20. data/lib/less/js/lib/less/tree/color.js +9 -6
  21. data/lib/less/js/lib/less/tree/comment.js +1 -1
  22. data/lib/less/js/lib/less/tree/dimension.js +1 -1
  23. data/lib/less/js/lib/less/tree/directive.js +1 -1
  24. data/lib/less/js/lib/less/tree/element.js +3 -2
  25. data/lib/less/js/lib/less/tree/expression.js +1 -1
  26. data/lib/less/js/lib/less/tree/import.js +3 -3
  27. data/lib/less/js/lib/less/tree/javascript.js +1 -1
  28. data/lib/less/js/lib/less/tree/keyword.js +1 -1
  29. data/lib/less/js/lib/less/tree/mixin.js +1 -1
  30. data/lib/less/js/lib/less/tree/operation.js +1 -1
  31. data/lib/less/js/lib/less/tree/quoted.js +1 -1
  32. data/lib/less/js/lib/less/tree/rule.js +1 -1
  33. data/lib/less/js/lib/less/tree/ruleset.js +3 -3
  34. data/lib/less/js/lib/less/tree/selector.js +13 -4
  35. data/lib/less/js/lib/less/tree/url.js +2 -2
  36. data/lib/less/js/lib/less/tree/value.js +1 -1
  37. data/lib/less/js/lib/less/tree/variable.js +1 -1
  38. data/lib/less/js/lib/less/tree.js +2 -2
  39. data/lib/less/js/package.json +1 -1
  40. data/lib/less/js/test/css/colors.css +6 -0
  41. data/lib/less/js/test/css/css-3.css +14 -0
  42. data/lib/less/js/test/css/css.css +3 -0
  43. data/lib/less/js/test/css/ie-filters.css +5 -0
  44. data/lib/less/js/test/css/import.css +2 -0
  45. data/lib/less/js/test/css/mixins.css +20 -0
  46. data/lib/less/js/test/less/colors.less +6 -0
  47. data/lib/less/js/test/less/css-3.less +10 -0
  48. data/lib/less/js/test/less/css.less +4 -0
  49. data/lib/less/js/test/less/ie-filters.less +8 -0
  50. data/lib/less/js/test/less/import.less +1 -0
  51. data/lib/less/js/test/less/mixins.less +20 -0
  52. data/lib/less/js/test/less-test.js +2 -4
  53. data/lib/less/loader.rb +18 -30
  54. data/lib/less/version.rb +1 -1
  55. metadata +64 -55
@@ -101,8 +101,14 @@ function loadStyles() {
101
101
  for (var i = 0; i < styles.length; i++) {
102
102
  if (styles[i].type.match(typePattern)) {
103
103
  new(less.Parser)().parse(styles[i].innerHTML || '', function (e, tree) {
104
- styles[i].type = 'text/css';
105
- styles[i].innerHTML = tree.toCSS();
104
+ var css = tree.toCSS();
105
+ var style = styles[i];
106
+ try {
107
+ style.innerHTML = css;
108
+ } catch (_) {
109
+ style.styleSheets.cssText = css;
110
+ }
111
+ style.type = 'text/css';
106
112
  });
107
113
  }
108
114
  }
@@ -86,6 +86,13 @@ tree.functions = {
86
86
  hsl.a = clamp(hsl.a);
87
87
  return hsla(hsl);
88
88
  },
89
+ fade: function (color, amount) {
90
+ var hsl = color.toHSL();
91
+
92
+ hsl.a = amount.value / 100;
93
+ hsl.a = clamp(hsl.a);
94
+ return hsla(hsl);
95
+ },
89
96
  spin: function (color, amount) {
90
97
  var hsl = color.toHSL();
91
98
  var hue = (hsl.h + amount.value) % 360;
@@ -147,6 +154,10 @@ tree.functions = {
147
154
  message: "math functions take numbers as parameters"
148
155
  };
149
156
  }
157
+ },
158
+ argb: function (color) {
159
+ return new(tree.Anonymous)(color.toARGB());
160
+
150
161
  }
151
162
  };
152
163
 
@@ -171,4 +182,4 @@ function clamp(val) {
171
182
  return Math.min(1, Math.max(0, val));
172
183
  }
173
184
 
174
- })(require('less/tree'));
185
+ })(require('./tree'));
@@ -1,14 +1,12 @@
1
1
  var path = require('path'),
2
- sys = require('sys'),
2
+ sys = require('util'),
3
3
  fs = require('fs');
4
4
 
5
- require.paths.unshift(path.join(__dirname, '..'));
6
-
7
5
  var less = {
8
- version: [1, 1, 3],
9
- Parser: require('less/parser').Parser,
10
- importer: require('less/parser').importer,
11
- tree: require('less/tree'),
6
+ version: [1, 1, 5],
7
+ Parser: require('./parser').Parser,
8
+ importer: require('./parser').importer,
9
+ tree: require('./tree'),
12
10
  render: function (input, options, callback) {
13
11
  options = options || {};
14
12
 
@@ -16,7 +14,7 @@ var less = {
16
14
  callback = options, options = {};
17
15
  }
18
16
 
19
- var parser = new(this.Parser)(options),
17
+ var parser = new(less.Parser)(options),
20
18
  ee;
21
19
 
22
20
  if (callback) {
@@ -36,11 +34,12 @@ var less = {
36
34
  }
37
35
  },
38
36
  writeError: function (ctx, options) {
37
+ options = options || {};
38
+
39
39
  var message = "";
40
40
  var extract = ctx.extract;
41
41
  var error = [];
42
-
43
- options = options || {};
42
+ var stylize = options.color ? less.stylize : function (str) { return str };
44
43
 
45
44
  if (options.silent) { return }
46
45
 
@@ -74,13 +73,14 @@ var less = {
74
73
  }
75
74
  };
76
75
 
77
- ['color', 'directive', 'operation', 'dimension',
78
- 'keyword', 'variable', 'ruleset', 'element',
79
- 'selector', 'quoted', 'expression', 'rule',
80
- 'call', 'url', 'alpha', 'import',
81
- 'mixin', 'comment', 'anonymous', 'value', 'javascript'
76
+ ['color', 'directive', 'operation', 'dimension',
77
+ 'keyword', 'variable', 'ruleset', 'element',
78
+ 'selector', 'quoted', 'expression', 'rule',
79
+ 'call', 'url', 'alpha', 'import',
80
+ 'mixin', 'comment', 'anonymous', 'value',
81
+ 'javascript', 'assignment'
82
82
  ].forEach(function (n) {
83
- require(path.join('less', 'tree', n));
83
+ require('./tree/' + n);
84
84
  });
85
85
 
86
86
  less.Parser.importer = function (file, paths, callback) {
@@ -103,7 +103,7 @@ less.Parser.importer = function (file, paths, callback) {
103
103
  if (e) sys.error(e);
104
104
 
105
105
  new(less.Parser)({
106
- paths: [path.dirname(pathname)],
106
+ paths: [path.dirname(pathname)].concat(paths),
107
107
  filename: pathname
108
108
  }).parse(data, function (e, root) {
109
109
  if (e) less.writeError(e);
@@ -116,7 +116,7 @@ less.Parser.importer = function (file, paths, callback) {
116
116
  }
117
117
  }
118
118
 
119
- require('less/functions');
119
+ require('./functions');
120
120
 
121
121
  for (var k in less) { exports[k] = less[k] }
122
122
 
@@ -134,4 +134,5 @@ function stylize(str, style) {
134
134
  return '\033[' + styles[style][0] + 'm' + str +
135
135
  '\033[' + styles[style][1] + 'm';
136
136
  }
137
+ less.stylize = stylize;
137
138
 
@@ -1,12 +1,22 @@
1
1
  var less, tree;
2
2
 
3
- if (typeof(window) === 'undefined') {
3
+ if (typeof environment === "object" && ({}).toString.call(environment) === "[object Environment]") {
4
+ // Rhino
5
+ // Details on how to detect Rhino: https://github.com/ringo/ringojs/issues/88
6
+ less = {};
7
+ tree = less.tree = {};
8
+ less.mode = 'rhino';
9
+ } else if (typeof(window) === 'undefined') {
10
+ // Node.js
4
11
  less = exports,
5
- tree = require('less/tree');
12
+ tree = require('./tree');
13
+ less.mode = 'node';
6
14
  } else {
15
+ // Browser
7
16
  if (typeof(window.less) === 'undefined') { window.less = {} }
8
17
  less = window.less,
9
18
  tree = window.less.tree = {};
19
+ less.mode = 'browser';
10
20
  }
11
21
  //
12
22
  // less.js - parser
@@ -476,7 +486,7 @@ less.Parser = function Parser(env) {
476
486
  //
477
487
  keyword: function () {
478
488
  var k;
479
- if (k = $(/^[A-Za-z-]+/)) { return new(tree.Keyword)(k) }
489
+ if (k = $(/^[_A-Za-z-][_A-Za-z0-9-]*/)) { return new(tree.Keyword)(k) }
480
490
  },
481
491
 
482
492
  //
@@ -492,7 +502,7 @@ less.Parser = function Parser(env) {
492
502
  call: function () {
493
503
  var name, args, index = i;
494
504
 
495
- if (! (name = /^([\w-]+|%)\(/.exec(chunks[j]))) return;
505
+ if (! (name = /^([\w-]+|%|progid:[\w\.]+)\(/.exec(chunks[j]))) return;
496
506
 
497
507
  name = name[1].toLowerCase();
498
508
 
@@ -512,7 +522,7 @@ less.Parser = function Parser(env) {
512
522
  arguments: function () {
513
523
  var args = [], arg;
514
524
 
515
- while (arg = $(this.expression)) {
525
+ while (arg = $(this.entities.assignment) || $(this.expression)) {
516
526
  args.push(arg);
517
527
  if (! $(',')) { break }
518
528
  }
@@ -524,6 +534,19 @@ less.Parser = function Parser(env) {
524
534
  $(this.entities.quoted);
525
535
  },
526
536
 
537
+ // Assignments are argument entities for calls.
538
+ // They are present in ie filter properties as shown below.
539
+ //
540
+ // filter: progid:DXImageTransform.Microsoft.Alpha( *opacity=50* )
541
+ //
542
+
543
+ assignment: function () {
544
+ var key, value;
545
+ if ((key = $(/^\w+(?=\s?=)/i)) && $('=') && (value = $(this.entity))) {
546
+ return new(tree.Assignment)(key, value);
547
+ }
548
+ },
549
+
527
550
  //
528
551
  // Parse url() tokens
529
552
  //
@@ -670,7 +693,7 @@ less.Parser = function Parser(env) {
670
693
  if (s !== '.' && s !== '#') { return }
671
694
 
672
695
  while (e = $(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)) {
673
- elements.push(new(tree.Element)(c, e));
696
+ elements.push(new(tree.Element)(c, e, i));
674
697
  c = $('>');
675
698
  }
676
699
  $('(') && (args = $(this.entities.arguments)) && $(')');
@@ -787,12 +810,13 @@ less.Parser = function Parser(env) {
787
810
  var e, t, c;
788
811
 
789
812
  c = $(this.combinator);
790
- e = $(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/) || $('*') || $(this.attribute) || $(/^\([^)@]+\)/) || $(/^(?:\d*\.)?\d+%/);
813
+ e = $(/^(?:\d+\.\d+|\d+)%/) || $(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/) ||
814
+ $('*') || $(this.attribute) || $(/^\([^)@]+\)/);
791
815
 
792
- if (e) { return new(tree.Element)(c, e) }
816
+ if (e) { return new(tree.Element)(c, e, i) }
793
817
 
794
- if (c.value && c.value[0] === '&') {
795
- return new(tree.Element)(c, null);
818
+ if (c.value && c.value.charAt(0) === '&') {
819
+ return new(tree.Element)(c, null, i);
796
820
  }
797
821
  },
798
822
 
@@ -889,16 +913,11 @@ less.Parser = function Parser(env) {
889
913
  var selectors = [], s, rules, match;
890
914
  save();
891
915
 
892
- if (match = /^([.#:% \w-]+)[\s\n]*\{/.exec(chunks[j])) {
893
- i += match[0].length - 1;
894
- selectors = [new(tree.Selector)([new(tree.Element)(null, match[1])])];
895
- } else {
896
- while (s = $(this.selector)) {
897
- selectors.push(s);
898
- $(this.comment);
899
- if (! $(',')) { break }
900
- $(this.comment);
901
- }
916
+ while (s = $(this.selector)) {
917
+ selectors.push(s);
918
+ $(this.comment);
919
+ if (! $(',')) { break }
920
+ $(this.comment);
902
921
  }
903
922
 
904
923
  if (selectors.length > 0 && (rules = $(this.block))) {
@@ -966,7 +985,7 @@ less.Parser = function Parser(env) {
966
985
 
967
986
  if (value = $(this['import'])) {
968
987
  return value;
969
- } else if (name = $(/^@media|@page/) || $(/^@(?:-webkit-)?keyframes/)) {
988
+ } else if (name = $(/^@media|@page/) || $(/^@(?:-webkit-|-moz-|-o-)[a-z0-9-]+/) || $('keyframes')) {
970
989
  types = ($(/^[^{]+/) || '').trim();
971
990
  if (rules = $(this.block)) {
972
991
  return new(tree.Directive)(name + " " + types, rules);
@@ -1093,7 +1112,7 @@ less.Parser = function Parser(env) {
1093
1112
  };
1094
1113
  };
1095
1114
 
1096
- if (typeof(window) !== 'undefined') {
1115
+ if (less.mode === 'browser' || less.mode === 'rhino') {
1097
1116
  //
1098
1117
  // Used by `@import` directives
1099
1118
  //
@@ -0,0 +1,60 @@
1
+ var name;
2
+
3
+ function loadStyleSheet(sheet, callback, reload, remaining) {
4
+ var sheetName = name.slice(0, name.lastIndexOf('/') + 1) + sheet.href;
5
+ var input = readFile(sheetName);
6
+ var parser = new less.Parser();
7
+ parser.parse(input, function (e, root) {
8
+ if (e) {
9
+ print("Error: " + e);
10
+ quit(1);
11
+ }
12
+ callback(root, sheet, { local: false, lastModified: 0, remaining: remaining });
13
+ });
14
+
15
+ // callback({}, sheet, { local: true, remaining: remaining });
16
+ }
17
+
18
+ function writeFile(filename, content) {
19
+ var fstream = new java.io.FileWriter(filename);
20
+ var out = new java.io.BufferedWriter(fstream);
21
+ out.write(content);
22
+ out.close();
23
+ }
24
+
25
+ // Command line integration via Rhino
26
+ (function (args) {
27
+ name = args[0];
28
+ var output = args[1];
29
+
30
+ if (!name) {
31
+ print('No files present in the fileset; Check your pattern match in build.xml');
32
+ quit(1);
33
+ }
34
+ path = name.split("/");path.pop();path=path.join("/")
35
+
36
+ var input = readFile(name);
37
+
38
+ if (!input) {
39
+ print('lesscss: couldn\'t open file ' + name);
40
+ quit(1);
41
+ }
42
+
43
+ var result;
44
+ var parser = new less.Parser();
45
+ parser.parse(input, function (e, root) {
46
+ if (e) {
47
+ quit(1);
48
+ } else {
49
+ result = root.toCSS();
50
+ if (output) {
51
+ writeFile(output, result);
52
+ print("Written to " + output);
53
+ } else {
54
+ print(result);
55
+ }
56
+ quit(0);
57
+ }
58
+ });
59
+ print("done");
60
+ }(arguments));
@@ -14,4 +14,4 @@ tree.Alpha.prototype = {
14
14
  }
15
15
  };
16
16
 
17
- })(require('less/tree'));
17
+ })(require('../tree'));
@@ -10,4 +10,4 @@ tree.Anonymous.prototype = {
10
10
  eval: function () { return this }
11
11
  };
12
12
 
13
- })(require('less/tree'));
13
+ })(require('../tree'));
@@ -0,0 +1,17 @@
1
+ (function (tree) {
2
+
3
+ tree.Assignment = function (key, val) {
4
+ this.key = key;
5
+ this.value = val;
6
+ };
7
+ tree.Assignment.prototype = {
8
+ toCSS: function () {
9
+ return this.key + '=' + (this.value.toCSS ? this.value.toCSS() : this.value);
10
+ },
11
+ eval: function (env) {
12
+ if (this.value.eval) { this.value = this.value.eval(env) }
13
+ return this;
14
+ }
15
+ };
16
+
17
+ })(require('../tree'));
@@ -42,4 +42,4 @@ tree.Call.prototype = {
42
42
  }
43
43
  };
44
44
 
45
- })(require('less/tree'));
45
+ })(require('../tree'));
@@ -15,11 +15,6 @@ tree.Color = function (rgb, a) {
15
15
  this.rgb = rgb.match(/.{2}/g).map(function (c) {
16
16
  return parseInt(c, 16);
17
17
  });
18
- } else if (rgb.length == 8) {
19
- this.alpha = parseInt(rgb.substring(0,2), 16) / 255.0;
20
- this.rgb = rgb.substr(2).match(/.{2}/g).map(function (c) {
21
- return parseInt(c, 16);
22
- });
23
18
  } else {
24
19
  this.rgb = rgb.split('').map(function (c) {
25
20
  return parseInt(c + c, 16);
@@ -91,8 +86,16 @@ tree.Color.prototype = {
91
86
  h /= 6;
92
87
  }
93
88
  return { h: h * 360, s: s, l: l, a: a };
89
+ },
90
+ toARGB: function () {
91
+ var argb = [Math.round(this.alpha * 255)].concat(this.rgb);
92
+ return '#' + argb.map(function (i) {
93
+ i = Math.round(i);
94
+ i = (i > 255 ? 255 : (i < 0 ? 0 : i)).toString(16);
95
+ return i.length === 1 ? '0' + i : i;
96
+ }).join('');
94
97
  }
95
98
  };
96
99
 
97
100
 
98
- })(require('less/tree'));
101
+ })(require('../tree'));
@@ -11,4 +11,4 @@ tree.Comment.prototype = {
11
11
  eval: function () { return this }
12
12
  };
13
13
 
14
- })(require('less/tree'));
14
+ })(require('../tree'));
@@ -31,4 +31,4 @@ tree.Dimension.prototype = {
31
31
  }
32
32
  };
33
33
 
34
- })(require('less/tree'));
34
+ })(require('../tree'));
@@ -30,4 +30,4 @@ tree.Directive.prototype = {
30
30
  rulesets: function () { return tree.Ruleset.prototype.rulesets.apply(this.ruleset) }
31
31
  };
32
32
 
33
- })(require('less/tree'));
33
+ })(require('../tree'));
@@ -1,9 +1,10 @@
1
1
  (function (tree) {
2
2
 
3
- tree.Element = function (combinator, value) {
3
+ tree.Element = function (combinator, value, index) {
4
4
  this.combinator = combinator instanceof tree.Combinator ?
5
5
  combinator : new(tree.Combinator)(combinator);
6
6
  this.value = value ? value.trim() : "";
7
+ this.index = index;
7
8
  };
8
9
  tree.Element.prototype.toCSS = function (env) {
9
10
  return this.combinator.toCSS(env || {}) + this.value;
@@ -32,4 +33,4 @@ tree.Combinator.prototype.toCSS = function (env) {
32
33
  }[this.value];
33
34
  };
34
35
 
35
- })(require('less/tree'));
36
+ })(require('../tree'));
@@ -20,4 +20,4 @@ tree.Expression.prototype = {
20
20
  }
21
21
  };
22
22
 
23
- })(require('less/tree'));
23
+ })(require('../tree'));
@@ -18,12 +18,12 @@ tree.Import = function (path, imports) {
18
18
 
19
19
  // The '.less' extension is optional
20
20
  if (path instanceof tree.Quoted) {
21
- this.path = /\.(le?|c)ss$/.test(path.value) ? path.value : path.value + '.less';
21
+ this.path = /\.(le?|c)ss(\?.*)?$/.test(path.value) ? path.value : path.value + '.less';
22
22
  } else {
23
23
  this.path = path.value.value || path.value;
24
24
  }
25
25
 
26
- this.css = /css$/.test(this.path);
26
+ this.css = /css(\?.*)?$/.test(this.path);
27
27
 
28
28
  // Only pre-compile .less files
29
29
  if (! this.css) {
@@ -74,4 +74,4 @@ tree.Import.prototype = {
74
74
  }
75
75
  };
76
76
 
77
- })(require('less/tree'));
77
+ })(require('../tree'));
@@ -47,5 +47,5 @@ tree.JavaScript.prototype = {
47
47
  }
48
48
  };
49
49
 
50
- })(require('less/tree'));
50
+ })(require('../tree'));
51
51
 
@@ -6,4 +6,4 @@ tree.Keyword.prototype = {
6
6
  toCSS: function () { return this.value }
7
7
  };
8
8
 
9
- })(require('less/tree'));
9
+ })(require('../tree'));
@@ -103,4 +103,4 @@ tree.mixin.Definition.prototype = {
103
103
  }
104
104
  };
105
105
 
106
- })(require('less/tree'));
106
+ })(require('../tree'));
@@ -29,4 +29,4 @@ tree.operate = function (op, a, b) {
29
29
  }
30
30
  };
31
31
 
32
- })(require('less/tree'));
32
+ })(require('../tree'));
@@ -26,4 +26,4 @@ tree.Quoted.prototype = {
26
26
  }
27
27
  };
28
28
 
29
- })(require('less/tree'));
29
+ })(require('../tree'));
@@ -35,4 +35,4 @@ tree.Shorthand.prototype = {
35
35
  eval: function () { return this }
36
36
  };
37
37
 
38
- })(require('less/tree'));
38
+ })(require('../tree'));
@@ -90,7 +90,7 @@ tree.Ruleset.prototype = {
90
90
  if (rule !== self) {
91
91
  for (var j = 0; j < rule.selectors.length; j++) {
92
92
  if (match = selector.match(rule.selectors[j])) {
93
- if (selector.elements.length > 1) {
93
+ if (selector.elements.length > rule.selectors[j].elements.length) {
94
94
  Array.prototype.push.apply(rules, rule.find(
95
95
  new(tree.Selector)(selector.elements.slice(1)), self));
96
96
  } else {
@@ -184,7 +184,7 @@ tree.Ruleset.prototype = {
184
184
 
185
185
  for (var i = 0; i < selector.elements.length; i++) {
186
186
  el = selector.elements[i];
187
- if (el.combinator.value[0] === '&') {
187
+ if (el.combinator.value.charAt(0) === '&') {
188
188
  hasParentSelector = true;
189
189
  }
190
190
  if (hasParentSelector) afterElements.push(el);
@@ -209,4 +209,4 @@ tree.Ruleset.prototype = {
209
209
  }
210
210
  }
211
211
  };
212
- })(require('less/tree'));
212
+ })(require('../tree'));
@@ -7,11 +7,20 @@ tree.Selector = function (elements) {
7
7
  }
8
8
  };
9
9
  tree.Selector.prototype.match = function (other) {
10
- if (this.elements[0].value === other.elements[0].value) {
11
- return true;
12
- } else {
10
+ var len = this.elements.length,
11
+ olen = other.elements.length,
12
+ max = Math.min(len, olen);
13
+
14
+ if (len < olen) {
13
15
  return false;
16
+ } else {
17
+ for (var i = 0; i < max; i++) {
18
+ if (this.elements[i].value !== other.elements[i].value) {
19
+ return false;
20
+ }
21
+ }
14
22
  }
23
+ return true;
15
24
  };
16
25
  tree.Selector.prototype.toCSS = function (env) {
17
26
  if (this._css) { return this._css }
@@ -25,4 +34,4 @@ tree.Selector.prototype.toCSS = function (env) {
25
34
  }).join('');
26
35
  };
27
36
 
28
- })(require('less/tree'));
37
+ })(require('../tree'));
@@ -5,7 +5,7 @@ tree.URL = function (val, paths) {
5
5
  this.attrs = val;
6
6
  } else {
7
7
  // Add the base path if the URL is relative and we are in the browser
8
- if (!/^(?:https?:\/|file:\/|data:\/)?\//.test(val.value) && paths.length > 0 && typeof(window) !== 'undefined') {
8
+ if (typeof(window) !== 'undefined' && !/^(?:https?:\/\/|file:\/\/|data:|\/)/.test(val.value) && paths.length > 0) {
9
9
  val.value = paths[0] + (val.value.charAt(0) === '/' ? val.value.slice(1) : val.value);
10
10
  }
11
11
  this.value = val;
@@ -22,4 +22,4 @@ tree.URL.prototype = {
22
22
  }
23
23
  };
24
24
 
25
- })(require('less/tree'));
25
+ })(require('../tree'));
@@ -21,4 +21,4 @@ tree.Value.prototype = {
21
21
  }
22
22
  };
23
23
 
24
- })(require('less/tree'));
24
+ })(require('../tree'));
@@ -21,4 +21,4 @@ tree.Variable.prototype = {
21
21
  }
22
22
  };
23
23
 
24
- })(require('less/tree'));
24
+ })(require('../tree'));
@@ -1,10 +1,10 @@
1
- require('less/tree').find = function (obj, fun) {
1
+ require('./tree').find = function (obj, fun) {
2
2
  for (var i = 0, r; i < obj.length; i++) {
3
3
  if (r = fun.call(obj, obj[i])) { return r }
4
4
  }
5
5
  return null;
6
6
  };
7
- require('less/tree').jsify = function (obj) {
7
+ require('./tree').jsify = function (obj) {
8
8
  if (Array.isArray(obj.value) && (obj.value.length > 1)) {
9
9
  return '[' + obj.value.map(function (v) { return v.toCSS(false) }).join(', ') + ']';
10
10
  } else {
@@ -5,7 +5,7 @@
5
5
  "keywords" : ["css", "parser", "lesscss", "browser"],
6
6
  "author" : "Alexis Sellier <self@cloudhead.net>",
7
7
  "contributors" : [],
8
- "version" : "1.1.4",
8
+ "version" : "1.1.5",
9
9
  "bin" : { "lessc": "./bin/lessc" },
10
10
  "main" : "./lib/less/index",
11
11
  "directories" : { "test": "./test" },
@@ -7,6 +7,9 @@
7
7
  #yelow #rgba {
8
8
  color: rgba(255, 238, 170, 0.1);
9
9
  }
10
+ #yelow #argb {
11
+ color: #1affeeaa;
12
+ }
10
13
  #blue #short {
11
14
  color: #00f;
12
15
  }
@@ -16,6 +19,9 @@
16
19
  #blue #rgba {
17
20
  color: rgba(0, 0, 255, 0.1);
18
21
  }
22
+ #blue #argb {
23
+ color: #1a0000ff;
24
+ }
19
25
  #alpha #hsla {
20
26
  color: rgba(61, 45, 41, 0.6);
21
27
  }
@@ -40,3 +40,17 @@ form[data-disabled] {
40
40
  p::before {
41
41
  color: black;
42
42
  }
43
+ #issue322 {
44
+ -webkit-animation: anim2 7s infinite ease-in-out;
45
+ }
46
+ @-webkit-keyframes frames {
47
+ 0% {
48
+ border: 1px;
49
+ }
50
+ 5.5% {
51
+ border: 2px;
52
+ }
53
+ 100% {
54
+ border: 3px;
55
+ }
56
+ }