less 2.0.7 → 2.0.8beta1

Sign up to get free protection for your applications and to get access to all the features.
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
+ }