less 2.0.5 → 2.0.6

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.
@@ -1,6 +1,3 @@
1
- [submodule "deps/less.js"]
2
- path = deps/less.js
3
- url = http://github.com/cloudhead/less.js.git
4
1
  [submodule "lib/less/js"]
5
2
  path = lib/less/js
6
3
  url = https://github.com/cloudhead/less.js.git
data/bin/lessc CHANGED
@@ -1,5 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'less'
3
4
 
4
- puts "#{File.basename($0)}: command line invocation is not currently supported"
5
- puts " Pull requests welcome! https://github.com/cowboyd/less.rb"
5
+ # This file is inspired by / based off of http://ozmm.org/posts/argf.html
6
+
7
+ def help
8
+ puts <<-help
9
+ Usage:
10
+ $ lessc < style.less
11
+ $ lessc file1.less file2.less
12
+ help
13
+ end
14
+
15
+ # First off, let's show help some help if no arguments and tty
16
+ if ($stdin.tty? && ARGV.empty?) || ARGV.delete('-h') || ARGV.delete('--help')
17
+ help
18
+ else
19
+ # Well, lets read those files
20
+ doc = ARGF.read
21
+ parser = Less::Parser.new
22
+ tree = parser.parse(doc)
23
+ puts tree.to_css(:compress => true)
24
+ end
@@ -1,8 +1,8 @@
1
1
  //
2
- // LESS - Leaner CSS v1.0.44
2
+ // LESS - Leaner CSS v1.1.4
3
3
  // http://lesscss.org
4
4
  //
5
- // Copyright (c) 2010, Alexis Sellier
5
+ // Copyright (c) 2009-2011, Alexis Sellier
6
6
  // Licensed under the Apache 2.0 License.
7
7
  //
8
8
  (function (window, undefined) {
@@ -592,11 +592,15 @@ less.Parser = function Parser(env) {
592
592
  // "milky way" 'he\'s the one!'
593
593
  //
594
594
  quoted: function () {
595
- var str;
596
- if (input.charAt(i) !== '"' && input.charAt(i) !== "'") return;
595
+ var str, j = i, e;
596
+
597
+ if (input.charAt(j) === '~') { j++, e = true } // Escaped strings
598
+ if (input.charAt(j) !== '"' && input.charAt(j) !== "'") return;
599
+
600
+ e && $('~');
597
601
 
598
602
  if (str = $(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/)) {
599
- return new(tree.Quoted)(str[0], str[1] || str[2]);
603
+ return new(tree.Quoted)(str[0], str[1] || str[2], e);
600
604
  }
601
605
  },
602
606
 
@@ -621,7 +625,7 @@ less.Parser = function Parser(env) {
621
625
  // The arguments are parsed with the `entities.arguments` parser.
622
626
  //
623
627
  call: function () {
624
- var name, args;
628
+ var name, args, index = i;
625
629
 
626
630
  if (! (name = /^([\w-]+|%)\(/.exec(chunks[j]))) return;
627
631
 
@@ -638,7 +642,7 @@ less.Parser = function Parser(env) {
638
642
 
639
643
  if (! $(')')) return;
640
644
 
641
- if (name) { return new(tree.Call)(name, args) }
645
+ if (name) { return new(tree.Call)(name, args, index) }
642
646
  },
643
647
  arguments: function () {
644
648
  var args = [], arg;
@@ -667,7 +671,7 @@ less.Parser = function Parser(env) {
667
671
 
668
672
  if (input.charAt(i) !== 'u' || !$(/^url\(/)) return;
669
673
  value = $(this.entities.quoted) || $(this.entities.variable) ||
670
- $(this.entities.dataURI) || $(/^[-\w%@$\/.&=:;#+?]+/) || "";
674
+ $(this.entities.dataURI) || $(/^[-\w%@$\/.&=:;#+?~]+/) || "";
671
675
  if (! $(')')) throw new(Error)("missing closing ) for url()");
672
676
 
673
677
  return new(tree.URL)((value.value || value.data || value instanceof tree.Variable)
@@ -699,7 +703,7 @@ less.Parser = function Parser(env) {
699
703
  variable: function () {
700
704
  var name, index = i;
701
705
 
702
- if (input.charAt(i) === '@' && (name = $(/^@[\w-]+/))) {
706
+ if (input.charAt(i) === '@' && (name = $(/^@@?[\w-]+/))) {
703
707
  return new(tree.Variable)(name, index);
704
708
  }
705
709
  },
@@ -739,12 +743,15 @@ less.Parser = function Parser(env) {
739
743
  // `window.location.href`
740
744
  //
741
745
  javascript: function () {
742
- var str;
746
+ var str, j = i, e;
743
747
 
744
- if (input.charAt(i) !== '`') { return }
748
+ if (input.charAt(j) === '~') { j++, e = true } // Escaped strings
749
+ if (input.charAt(j) !== '`') { return }
750
+
751
+ e && $('~');
745
752
 
746
753
  if (str = $(/^`([^`]*)`/)) {
747
- return new(tree.JavaScript)(str[1], i);
754
+ return new(tree.JavaScript)(str[1], i, e);
748
755
  }
749
756
  }
750
757
  },
@@ -892,7 +899,7 @@ less.Parser = function Parser(env) {
892
899
  alpha: function () {
893
900
  var value;
894
901
 
895
- if (! $(/^opacity=/i)) return;
902
+ if (! $(/^\(opacity=/i)) return;
896
903
  if (value = $(/^\d+/) || $(this.entities.variable)) {
897
904
  if (! $(')')) throw new(Error)("missing closing ) for alpha()");
898
905
  return new(tree.Alpha)(value);
@@ -915,9 +922,13 @@ less.Parser = function Parser(env) {
915
922
  var e, t, c;
916
923
 
917
924
  c = $(this.combinator);
918
- e = $(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/) || $('*') || $(this.attribute) || $(/^\([^)@]+\)/);
925
+ e = $(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/) || $('*') || $(this.attribute) || $(/^\([^)@]+\)/) || $(/^(?:\d*\.)?\d+%/);
919
926
 
920
927
  if (e) { return new(tree.Element)(c, e) }
928
+
929
+ if (c.value && c.value[0] === '&') {
930
+ return new(tree.Element)(c, null);
931
+ }
921
932
  },
922
933
 
923
934
  //
@@ -932,10 +943,18 @@ less.Parser = function Parser(env) {
932
943
  combinator: function () {
933
944
  var match, c = input.charAt(i);
934
945
 
935
- if (c === '>' || c === '&' || c === '+' || c === '~') {
946
+ if (c === '>' || c === '+' || c === '~') {
936
947
  i++;
937
948
  while (input.charAt(i) === ' ') { i++ }
938
949
  return new(tree.Combinator)(c);
950
+ } else if (c === '&') {
951
+ match = '&';
952
+ i++;
953
+ if(input.charAt(i) === ' ') {
954
+ match = '& ';
955
+ }
956
+ while (input.charAt(i) === ' ') { i++ }
957
+ return new(tree.Combinator)(match);
939
958
  } else if (c === ':' && input.charAt(i + 1) === ':') {
940
959
  i += 2;
941
960
  while (input.charAt(i) === ' ') { i++ }
@@ -1005,7 +1024,7 @@ less.Parser = function Parser(env) {
1005
1024
  var selectors = [], s, rules, match;
1006
1025
  save();
1007
1026
 
1008
- if (match = /^([.#: \w-]+)[\s\n]*\{/.exec(chunks[j])) {
1027
+ if (match = /^([.#:% \w-]+)[\s\n]*\{/.exec(chunks[j])) {
1009
1028
  i += match[0].length - 1;
1010
1029
  selectors = [new(tree.Selector)([new(tree.Element)(null, match[1])])];
1011
1030
  } else {
@@ -1082,7 +1101,7 @@ less.Parser = function Parser(env) {
1082
1101
 
1083
1102
  if (value = $(this['import'])) {
1084
1103
  return value;
1085
- } else if (name = $(/^@media|@page|@-[-a-z]+/)) {
1104
+ } else if (name = $(/^@media|@page/) || $(/^@(?:-webkit-)?keyframes/)) {
1086
1105
  types = ($(/^[^{]+/) || '').trim();
1087
1106
  if (rules = $(this.block)) {
1088
1107
  return new(tree.Directive)(name + " " + types, rules);
@@ -1408,7 +1427,10 @@ tree.Alpha.prototype = {
1408
1427
  return "alpha(opacity=" +
1409
1428
  (this.value.toCSS ? this.value.toCSS() : this.value) + ")";
1410
1429
  },
1411
- eval: function () { return this }
1430
+ eval: function (env) {
1431
+ if (this.value.eval) { this.value = this.value.eval(env) }
1432
+ return this;
1433
+ }
1412
1434
  };
1413
1435
 
1414
1436
  })(require('less/tree'));
@@ -1430,9 +1452,10 @@ tree.Anonymous.prototype = {
1430
1452
  //
1431
1453
  // A function call node.
1432
1454
  //
1433
- tree.Call = function (name, args) {
1455
+ tree.Call = function (name, args, index) {
1434
1456
  this.name = name;
1435
1457
  this.args = args;
1458
+ this.index = index;
1436
1459
  };
1437
1460
  tree.Call.prototype = {
1438
1461
  //
@@ -1451,7 +1474,12 @@ tree.Call.prototype = {
1451
1474
  var args = this.args.map(function (a) { return a.eval(env) });
1452
1475
 
1453
1476
  if (this.name in tree.functions) { // 1.
1454
- return tree.functions[this.name].apply(tree.functions, args);
1477
+ try {
1478
+ return tree.functions[this.name].apply(tree.functions, args);
1479
+ } catch (e) {
1480
+ throw { message: "error evaluating function `" + this.name + "`",
1481
+ index: this.index };
1482
+ }
1455
1483
  } else { // 2.
1456
1484
  return new(tree.Anonymous)(this.name +
1457
1485
  "(" + args.map(function (a) { return a.toCSS() }).join(', ') + ")");
@@ -1648,7 +1676,7 @@ tree.Directive.prototype = {
1648
1676
  tree.Element = function (combinator, value) {
1649
1677
  this.combinator = combinator instanceof tree.Combinator ?
1650
1678
  combinator : new(tree.Combinator)(combinator);
1651
- this.value = value.trim();
1679
+ this.value = value ? value.trim() : "";
1652
1680
  };
1653
1681
  tree.Element.prototype.toCSS = function (env) {
1654
1682
  return this.combinator.toCSS(env || {}) + this.value;
@@ -1657,6 +1685,8 @@ tree.Element.prototype.toCSS = function (env) {
1657
1685
  tree.Combinator = function (value) {
1658
1686
  if (value === ' ') {
1659
1687
  this.value = ' ';
1688
+ } else if (value === '& ') {
1689
+ this.value = '& ';
1660
1690
  } else {
1661
1691
  this.value = value ? value.trim() : "";
1662
1692
  }
@@ -1666,6 +1696,7 @@ tree.Combinator.prototype.toCSS = function (env) {
1666
1696
  '' : '',
1667
1697
  ' ' : ' ',
1668
1698
  '&' : '',
1699
+ '& ' : ' ',
1669
1700
  ':' : ' :',
1670
1701
  '::': '::',
1671
1702
  '+' : env.compress ? '+' : ' + ',
@@ -1684,8 +1715,10 @@ tree.Expression.prototype = {
1684
1715
  return new(tree.Expression)(this.value.map(function (e) {
1685
1716
  return e.eval(env);
1686
1717
  }));
1687
- } else {
1718
+ } else if (this.value.length === 1) {
1688
1719
  return this.value[0].eval(env);
1720
+ } else {
1721
+ return this;
1689
1722
  }
1690
1723
  },
1691
1724
  toCSS: function (env) {
@@ -1775,19 +1808,28 @@ tree.Import.prototype = {
1775
1808
  })(require('less/tree'));
1776
1809
  (function (tree) {
1777
1810
 
1778
- tree.JavaScript = function (string, index) {
1811
+ tree.JavaScript = function (string, index, escaped) {
1812
+ this.escaped = escaped;
1779
1813
  this.expression = string;
1780
1814
  this.index = index;
1781
1815
  };
1782
1816
  tree.JavaScript.prototype = {
1783
- toCSS: function () {
1784
- return JSON.stringify(this.evaluated);
1785
- },
1786
1817
  eval: function (env) {
1787
1818
  var result,
1788
- expression = new(Function)('return (' + this.expression + ')'),
1819
+ that = this,
1789
1820
  context = {};
1790
1821
 
1822
+ var expression = this.expression.replace(/@\{([\w-]+)\}/g, function (_, name) {
1823
+ return tree.jsify(new(tree.Variable)('@' + name, that.index).eval(env));
1824
+ });
1825
+
1826
+ try {
1827
+ expression = new(Function)('return (' + expression + ')');
1828
+ } catch (e) {
1829
+ throw { message: "JavaScript evaluation error: `" + expression + "`" ,
1830
+ index: this.index };
1831
+ }
1832
+
1791
1833
  for (var k in env.frames[0].variables()) {
1792
1834
  context[k.slice(1)] = {
1793
1835
  value: env.frames[0].variables()[k].value,
@@ -1798,12 +1840,18 @@ tree.JavaScript.prototype = {
1798
1840
  }
1799
1841
 
1800
1842
  try {
1801
- this.evaluated = expression.call(context);
1843
+ result = expression.call(context);
1802
1844
  } catch (e) {
1803
1845
  throw { message: "JavaScript evaluation error: '" + e.name + ': ' + e.message + "'" ,
1804
1846
  index: this.index };
1805
1847
  }
1806
- return this;
1848
+ if (typeof(result) === 'string') {
1849
+ return new(tree.Quoted)('"' + result + '"', result, this.escaped, this.index);
1850
+ } else if (Array.isArray(result)) {
1851
+ return new(tree.Anonymous)(result.join(', '));
1852
+ } else {
1853
+ return new(tree.Anonymous)(result);
1854
+ }
1807
1855
  }
1808
1856
  };
1809
1857
 
@@ -1828,12 +1876,13 @@ tree.mixin.Call = function (elements, args, index) {
1828
1876
  };
1829
1877
  tree.mixin.Call.prototype = {
1830
1878
  eval: function (env) {
1831
- var mixins, rules = [], match = false;
1879
+ var mixins, args, rules = [], match = false;
1832
1880
 
1833
1881
  for (var i = 0; i < env.frames.length; i++) {
1834
1882
  if ((mixins = env.frames[i].find(this.selector)).length > 0) {
1883
+ args = this.arguments && this.arguments.map(function (a) { return a.eval(env) });
1835
1884
  for (var m = 0; m < mixins.length; m++) {
1836
- if (mixins[m].match(this.arguments, env)) {
1885
+ if (mixins[m].match(args, env)) {
1837
1886
  try {
1838
1887
  Array.prototype.push.apply(
1839
1888
  rules, mixins[m].eval(env, this.arguments).rules);
@@ -1882,7 +1931,7 @@ tree.mixin.Definition.prototype = {
1882
1931
  rulesets: function () { return this.parent.rulesets.apply(this) },
1883
1932
 
1884
1933
  eval: function (env, args) {
1885
- var frame = new(tree.Ruleset)(null, []), context;
1934
+ var frame = new(tree.Ruleset)(null, []), context, _arguments = [];
1886
1935
 
1887
1936
  for (var i = 0, val; i < this.params.length; i++) {
1888
1937
  if (this.params[i].name) {
@@ -1894,7 +1943,10 @@ tree.mixin.Definition.prototype = {
1894
1943
  }
1895
1944
  }
1896
1945
  }
1897
- frame.rules.unshift(new(tree.Rule)('@arguments', new(tree.Expression)(args)));
1946
+ for (var i = 0; i < Math.max(this.params.length, args && args.length); i++) {
1947
+ _arguments.push(args[i] || this.params[i].value);
1948
+ }
1949
+ frame.rules.unshift(new(tree.Rule)('@arguments', new(tree.Expression)(_arguments).eval(env)));
1898
1950
 
1899
1951
  return new(tree.Ruleset)(null, this.rules.slice(0)).eval({
1900
1952
  frames: [this, frame].concat(this.frames, env.frames)
@@ -1954,16 +2006,29 @@ tree.operate = function (op, a, b) {
1954
2006
  })(require('less/tree'));
1955
2007
  (function (tree) {
1956
2008
 
1957
- tree.Quoted = function (str, content) {
2009
+ tree.Quoted = function (str, content, escaped, i) {
2010
+ this.escaped = escaped;
1958
2011
  this.value = content || '';
1959
2012
  this.quote = str.charAt(0);
2013
+ this.index = i;
1960
2014
  };
1961
2015
  tree.Quoted.prototype = {
1962
2016
  toCSS: function () {
1963
- return this.quote + this.value + this.quote;
2017
+ if (this.escaped) {
2018
+ return this.value;
2019
+ } else {
2020
+ return this.quote + this.value + this.quote;
2021
+ }
1964
2022
  },
1965
- eval: function () {
1966
- return this;
2023
+ eval: function (env) {
2024
+ var that = this;
2025
+ var value = this.value.replace(/`([^`]+)`/g, function (_, exp) {
2026
+ return new(tree.JavaScript)(exp, that.index, true).eval(env).value;
2027
+ }).replace(/@\{([\w-]+)\}/g, function (_, name) {
2028
+ var v = new(tree.Variable)('@' + name, that.index).eval(env);
2029
+ return v.value || v.toCSS();
2030
+ });
2031
+ return new(tree.Quoted)(this.quote + value + this.quote, value, this.escaped, this.index);
1967
2032
  }
1968
2033
  };
1969
2034
 
@@ -2128,11 +2193,7 @@ tree.Ruleset.prototype = {
2128
2193
  if (context.length === 0) {
2129
2194
  paths = this.selectors.map(function (s) { return [s] });
2130
2195
  } else {
2131
- for (var s = 0; s < this.selectors.length; s++) {
2132
- for (var c = 0; c < context.length; c++) {
2133
- paths.push(context[c].concat([this.selectors[s]]));
2134
- }
2135
- }
2196
+ this.joinSelectors( paths, context, this.selectors );
2136
2197
  }
2137
2198
  }
2138
2199
 
@@ -2182,6 +2243,43 @@ tree.Ruleset.prototype = {
2182
2243
  css.push(rulesets);
2183
2244
 
2184
2245
  return css.join('') + (env.compress ? '\n' : '');
2246
+ },
2247
+
2248
+ joinSelectors: function (paths, context, selectors) {
2249
+ for (var s = 0; s < selectors.length; s++) {
2250
+ this.joinSelector(paths, context, selectors[s]);
2251
+ }
2252
+ },
2253
+
2254
+ joinSelector: function (paths, context, selector) {
2255
+ var before = [], after = [], beforeElements = [],
2256
+ afterElements = [], hasParentSelector = false, el;
2257
+
2258
+ for (var i = 0; i < selector.elements.length; i++) {
2259
+ el = selector.elements[i];
2260
+ if (el.combinator.value[0] === '&') {
2261
+ hasParentSelector = true;
2262
+ }
2263
+ if (hasParentSelector) afterElements.push(el);
2264
+ else beforeElements.push(el);
2265
+ }
2266
+
2267
+ if (! hasParentSelector) {
2268
+ afterElements = beforeElements;
2269
+ beforeElements = [];
2270
+ }
2271
+
2272
+ if (beforeElements.length > 0) {
2273
+ before.push(new(tree.Selector)(beforeElements));
2274
+ }
2275
+
2276
+ if (afterElements.length > 0) {
2277
+ after.push(new(tree.Selector)(afterElements));
2278
+ }
2279
+
2280
+ for (var c = 0; c < context.length; c++) {
2281
+ paths.push(before.concat(context[c]).concat(after));
2282
+ }
2185
2283
  }
2186
2284
  };
2187
2285
  })(require('less/tree'));
@@ -2220,7 +2318,7 @@ tree.URL = function (val, paths) {
2220
2318
  this.attrs = val;
2221
2319
  } else {
2222
2320
  // Add the base path if the URL is relative and we are in the browser
2223
- if (!/^(?:https?:\/|file:\/)?\//.test(val.value) && paths.length > 0 && typeof(window) !== 'undefined') {
2321
+ if (!/^(?:https?:\/|file:\/|data:\/)?\//.test(val.value) && paths.length > 0 && typeof(window) !== 'undefined') {
2224
2322
  val.value = paths[0] + (val.value.charAt(0) === '/' ? val.value.slice(1) : val.value);
2225
2323
  }
2226
2324
  this.value = val;
@@ -2269,13 +2367,17 @@ tree.Variable.prototype = {
2269
2367
  eval: function (env) {
2270
2368
  var variable, v, name = this.name;
2271
2369
 
2370
+ if (name.indexOf('@@') == 0) {
2371
+ name = '@' + new(tree.Variable)(name.slice(1)).eval(env).value;
2372
+ }
2373
+
2272
2374
  if (variable = tree.find(env.frames, function (frame) {
2273
2375
  if (v = frame.variable(name)) {
2274
2376
  return v.value.eval(env);
2275
2377
  }
2276
2378
  })) { return variable }
2277
2379
  else {
2278
- throw { message: "variable " + this.name + " is undefined",
2380
+ throw { message: "variable " + name + " is undefined",
2279
2381
  index: this.index };
2280
2382
  }
2281
2383
  }
@@ -2288,12 +2390,20 @@ require('less/tree').find = function (obj, fun) {
2288
2390
  }
2289
2391
  return null;
2290
2392
  };
2393
+ require('less/tree').jsify = function (obj) {
2394
+ if (Array.isArray(obj.value) && (obj.value.length > 1)) {
2395
+ return '[' + obj.value.map(function (v) { return v.toCSS(false) }).join(', ') + ']';
2396
+ } else {
2397
+ return obj.toCSS(false);
2398
+ }
2399
+ };
2291
2400
  //
2292
2401
  // browser.js - client-side engine
2293
2402
  //
2294
2403
 
2295
2404
  var isFileProtocol = (location.protocol === 'file:' ||
2296
2405
  location.protocol === 'chrome:' ||
2406
+ location.protocol === 'chrome-extension:' ||
2297
2407
  location.protocol === 'resource:');
2298
2408
 
2299
2409
  less.env = less.env || (location.hostname == '127.0.0.1' ||
@@ -2412,7 +2522,11 @@ function loadStyleSheet(sheet, callback, reload, remaining) {
2412
2522
 
2413
2523
  // Stylesheets in IE don't always return the full path
2414
2524
  if (! /^(https?|file):/.test(href)) {
2415
- href = url.slice(0, url.lastIndexOf('/') + 1) + href;
2525
+ if (href.charAt(0) == "/") {
2526
+ href = window.location.protocol + "//" + window.location.host + href;
2527
+ } else {
2528
+ href = url.slice(0, url.lastIndexOf('/') + 1) + href;
2529
+ }
2416
2530
  }
2417
2531
 
2418
2532
  xhr(sheet.href, sheet.type, function (data, lastModified) {
@@ -0,0 +1,16 @@
1
+ //
2
+ // LESS - Leaner CSS v1.1.4
3
+ // http://lesscss.org
4
+ //
5
+ // Copyright (c) 2009-2011, Alexis Sellier
6
+ // Licensed under the Apache 2.0 License.
7
+ //
8
+ //
9
+ // LESS - Leaner CSS v1.1.4
10
+ // http://lesscss.org
11
+ //
12
+ // Copyright (c) 2009-2011, Alexis Sellier
13
+ // Licensed under the Apache 2.0 License.
14
+ //
15
+ (function(a,b){function u(a,b){var c="less-error-message:"+o(b),e=["<ul>",'<li><label>[-1]</label><pre class="ctx">{0}</pre></li>',"<li><label>[0]</label><pre>{current}</pre></li>",'<li><label>[1]</label><pre class="ctx">{2}</pre></li>',"</ul>"].join("\n"),f=document.createElement("div"),g,h;f.id=c,f.className="less-error-message",h="<h3>"+(a.message||"There is an error in your .less file")+"</h3>"+'<p><a href="'+b+'">'+b+"</a> ",a.extract&&(h+="on line "+a.line+", column "+(a.column+1)+":</p>"+e.replace(/\[(-?\d)\]/g,function(b,c){return parseInt(a.line)+parseInt(c)||""}).replace(/\{(\d)\}/g,function(b,c){return a.extract[parseInt(c)]||""}).replace(/\{current\}/,a.extract[1].slice(0,a.column)+'<span class="error">'+a.extract[1].slice(a.column)+"</span>")),f.innerHTML=h,p([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #ee4444;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.ctx {","color: #dd4444;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),f.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),d.env=="development"&&(g=setInterval(function(){document.body&&(document.getElementById(c)?document.body.replaceChild(f,document.getElementById(c)):document.body.insertBefore(f,document.body.firstChild),clearInterval(g))},10))}function t(a){d.env=="development"&&typeof console!="undefined"&&console.log("less: "+a)}function s(a){return a&&a.parentNode.removeChild(a)}function r(){if(a.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(b){t("browser doesn't support AJAX.");return null}}function q(a,b,c,e){function i(b,c,d){b.status>=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):typeof d=="function"&&d(b.status,a)}var g=r(),h=f?!1:d.async;typeof g.overrideMimeType=="function"&&g.overrideMimeType("text/css"),g.open("GET",a,h),g.setRequestHeader("Accept",b||"text/x-less, text/css; q=0.9, */*; q=0.5"),g.send(null),f?g.status===0?c(g.responseText):e(g.status,a):h?g.onreadystatechange=function(){g.readyState==4&&i(g,c,e)}:i(g,c,e)}function p(a,b,c){var d,e=b.href?b.href.replace(/\?.*$/,""):"",f="less:"+(b.title||o(e));(d=document.getElementById(f))===null&&(d=document.createElement("style"),d.type="text/css",d.media=b.media||"screen",d.id=f,document.getElementsByTagName("head")[0].appendChild(d));if(d.styleSheet)try{d.styleSheet.cssText=a}catch(h){throw new Error("Couldn't reassign styleSheet.cssText.")}else(function(a){d.childNodes.length>0?d.firstChild.nodeValue!==a.nodeValue&&d.replaceChild(a,d.firstChild):d.appendChild(a)})(document.createTextNode(a));c&&g&&(t("saving "+e+" to cache."),g.setItem(e,a),g.setItem(e+":timestamp",c))}function o(a){return a.replace(/^[a-z]+:\/\/?[^\/]+/,"").replace(/^\//,"").replace(/\?.*$/,"").replace(/\.[^\.\/]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function n(b,c,e,f){var h=a.location.href.replace(/[#?].*$/,""),i=b.href.replace(/\?.*$/,""),j=g&&g.getItem(i),k=g&&g.getItem(i+":timestamp"),l={css:j,timestamp:k};/^(https?|file):/.test(i)||(i.charAt(0)=="/"?i=a.location.protocol+"//"+a.location.host+i:i=h.slice(0,h.lastIndexOf("/")+1)+i),q(b.href,b.type,function(a,g){if(!e&&l&&g&&(new Date(g)).valueOf()===(new Date(l.timestamp)).valueOf())p(l.css,b),c(null,b,{local:!0,remaining:f});else try{(new d.Parser({optimization:d.optimization,paths:[i.replace(/[\w\.-]+$/,"")],mime:b.type})).parse(a,function(a,d){if(a)return u(a,i);try{c(d,b,{local:!1,lastModified:g,remaining:f}),s(document.getElementById("less-error-message:"+o(i)))}catch(a){u(a,i)}})}catch(h){u(h,i)}},function(a,b){throw new Error("Couldn't load "+b+" ("+a+")")})}function m(a,b){for(var c=0;c<d.sheets.length;c++)n(d.sheets[c],a,b,d.sheets.length-(c+1))}function l(){var a=document.getElementsByTagName("style");for(var b=0;b<a.length;b++)a[b].type.match(j)&&(new d.Parser).parse(a[b].innerHTML||"",function(c,d){a[b].type="text/css",a[b].innerHTML=d.toCSS()})}function c(b){return a.less[b.split("/")[1]]}Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"||a instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=this.length>>>0;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=this.length>>>0,c=Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=this.length>>>0,c=0;if(b===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length,c=arguments[1]||0;if(!b)return-1;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!Object.prototype.hasOwnProperty.call(this,c))continue;if(a===this[c])return c}return-1}),Object.keys||(Object.keys=function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b}),String.prototype.trim||(String.prototype.trim=function(){return String(this).replace(/^\s\s*/,"").replace(/\s\s*$/,"")});var d,e;typeof a=="undefined"?(d=exports,e=c("less/tree")):(typeof a.less=="undefined"&&(a.less={}),d=a.less,e=a.less.tree={}),d.Parser=function(a){function t(a){return typeof a=="string"?b.charAt(c)===a:a.test(j[f])?!0:!1}function s(a){var d,e,g,h,i,m,n,o;if(a instanceof Function)return a.call(l.parsers);if(typeof a=="string")d=b.charAt(c)===a?a:null,g=1,r();else{r();if(d=a.exec(j[f]))g=d[0].length;else return null}if(d){o=c+=g,m=c+j[f].length-g;while(c<m){h=b.charCodeAt(c);if(h!==32&&h!==10&&h!==9)break;c++}j[f]=j[f].slice(g+(c-o)),k=c,j[f].length===0&&f<j.length-1&&f++;return typeof d=="string"?d:d.length===1?d[0]:d}}function r(){c>k&&(j[f]=j[f].slice(c-k),k=c)}function q(){j[f]=g,c=h,k=c}function p(){g=j[f],h=c,k=c}var b,c,f,g,h,i,j,k,l,m=this,n=function(){},o=this.imports={paths:a&&a.paths||[],queue:[],files:{},mime:a&&a.mime,push:function(b,c){var e=this;this.queue.push(b),d.Parser.importer(b,this.paths,function(a){e.queue.splice(e.queue.indexOf(b),1),e.files[b]=a,c(a),e.queue.length===0&&n()},a)}};this.env=a=a||{},this.optimization="optimization"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null;return l={imports:o,parse:function(d,g){var h,l,m,o,p,q,r=[],t,u=null;c=f=k=i=0,j=[],b=d.replace(/\r\n/g,"\n"),j=function(c){var d=0,e=/[^"'`\{\}\/\(\)]+/g,f=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,g=0,h,i=c[0],j,k;for(var l=0,m,n;l<b.length;l++){e.lastIndex=l,(h=e.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0])),m=b.charAt(l),f.lastIndex=l,!k&&!j&&m==="/"&&(n=b.charAt(l+1),(n==="/"||n==="*")&&(h=f.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0]),m=b.charAt(l)));if(m==="{"&&!k&&!j)g++,i.push(m);else if(m==="}"&&!k&&!j)g--,i.push(m),c[++d]=i=[];else if(m==="("&&!k&&!j)i.push(m),j=!0;else if(m===")"&&!k&&j)i.push(m),j=!1;else{if(m==='"'||m==="'"||m==="`")k?k=k===m?!1:k:k=m;i.push(m)}}if(g>0)throw{type:"Syntax",message:"Missing closing `}`",filename:a.filename};return c.map(function(a){return a.join("")})}([[]]),h=new e.Ruleset([],s(this.parsers.primary)),h.root=!0,h.toCSS=function(c){var d,f,g;return function(g,h){function n(a){return a?(b.slice(0,a).match(/\n/g)||"").length:null}var i=[];g=g||{},typeof h=="object"&&!Array.isArray(h)&&(h=Object.keys(h).map(function(a){var b=h[a];b instanceof e.Value||(b instanceof e.Expression||(b=new e.Expression([b])),b=new e.Value([b]));return new e.Rule("@"+a,b,!1,0)}),i=[new e.Ruleset(null,h)]);try{var j=c.call(this,{frames:i}).toCSS([],{compress:g.compress||!1})}catch(k){f=b.split("\n"),d=n(k.index);for(var l=k.index,m=-1;l>=0&&b.charAt(l)!=="\n";l--)m++;throw{type:k.type,message:k.message,filename:a.filename,index:k.index,line:typeof d=="number"?d+1:null,callLine:k.call&&n(k.call)+1,callExtract:f[n(k.call)],stack:k.stack,column:m,extract:[f[d-1],f[d],f[d+1]]}}return g.compress?j.replace(/(\s)+/g,"$1"):j}}(h.eval);if(c<b.length-1){c=i,q=b.split("\n"),p=(b.slice(0,c).match(/\n/g)||"").length+1;for(var v=c,w=-1;v>=0&&b.charAt(v)!=="\n";v--)w++;u={name:"ParseError",message:"Syntax Error on line "+p,index:c,filename:a.filename,line:p,column:w,extract:[q[p-2],q[p-1],q[p]]}}this.imports.queue.length>0?n=function(){g(u,h)}:g(u,h)},parsers:{primary:function(){var a,b=[];while((a=s(this.mixin.definition)||s(this.rule)||s(this.ruleset)||s(this.mixin.call)||s(this.comment)||s(this.directive))||s(/^[\s\n]+/))a&&b.push(a);return b},comment:function(){var a;if(b.charAt(c)==="/"){if(b.charAt(c+1)==="/")return new e.Comment(s(/^\/\/.*/),!0);if(a=s(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/))return new e.Comment(a)}},entities:{quoted:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)==='"'||b.charAt(d)==="'"){f&&s("~");if(a=s(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/))return new e.Quoted(a[0],a[1]||a[2],f)}},keyword:function(){var a;if(a=s(/^[A-Za-z-]+/))return new e.Keyword(a)},call:function(){var a,b,d=c;if(!!(a=/^([\w-]+|%)\(/.exec(j[f]))){a=a[1].toLowerCase();if(a==="url")return null;c+=a.length;if(a==="alpha")return s(this.alpha);s("("),b=s(this.entities.arguments);if(!s(")"))return;if(a)return new e.Call(a,b,d)}},arguments:function(){var a=[],b;while(b=s(this.expression)){a.push(b);if(!s(","))break}return a},literal:function(){return s(this.entities.dimension)||s(this.entities.color)||s(this.entities.quoted)},url:function(){var a;if(b.charAt(c)==="u"&&!!s(/^url\(/)){a=s(this.entities.quoted)||s(this.entities.variable)||s(this.entities.dataURI)||s(/^[-\w%@$\/.&=:;#+?~]+/)||"";if(!s(")"))throw new Error("missing closing ) for url()");return new e.URL(a.value||a.data||a instanceof e.Variable?a:new e.Anonymous(a),o.paths)}},dataURI:function(){var a;if(s(/^data:/)){a={},a.mime=s(/^[^\/]+\/[^,;)]+/)||"",a.charset=s(/^;\s*charset=[^,;)]+/)||"",a.base64=s(/^;\s*base64/)||"",a.data=s(/^,\s*[^)]+/);if(a.data)return a}},variable:function(){var a,d=c;if(b.charAt(c)==="@"&&(a=s(/^@@?[\w-]+/)))return new e.Variable(a,d)},color:function(){var a;if(b.charAt(c)==="#"&&(a=s(/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/)))return new e.Color(a[1])},dimension:function(){var a,d=b.charCodeAt(c);if(!(d>57||d<45||d===47))if(a=s(/^(-?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn)?/))return new e.Dimension(a[1],a[2])},javascript:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)==="`"){f&&s("~");if(a=s(/^`([^`]*)`/))return new e.JavaScript(a[1],c,f)}}},variable:function(){var a;if(b.charAt(c)==="@"&&(a=s(/^(@[\w-]+)\s*:/)))return a[1]},shorthand:function(){var a,b;if(!!t(/^[@\w.%-]+\/[@\w.-]+/)&&(a=s(this.entity))&&s("/")&&(b=s(this.entity)))return new e.Shorthand(a,b)},mixin:{call:function(){var a=[],d,f,g,h=c,i=b.charAt(c);if(i==="."||i==="#"){while(d=s(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/))a.push(new e.Element(f,d)),f=s(">");s("(")&&(g=s(this.entities.arguments))&&s(")");if(a.length>0&&(s(";")||t("}")))return new e.mixin.Call(a,g,h)}},definition:function(){var a,d=[],f,g,h,i;if(!(b.charAt(c)!=="."&&b.charAt(c)!=="#"||t(/^[^{]*(;|})/)))if(f=s(/^([#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+)\s*\(/)){a=f[1];while(h=s(this.entities.variable)||s(this.entities.literal)||s(this.entities.keyword)){if(h instanceof e.Variable)if(s(":"))if(i=s(this.expression))d.push({name:h.name,value:i});else throw new Error("Expected value");else d.push({name:h.name});else d.push({value:h});if(!s(","))break}if(!s(")"))throw new Error("Expected )");g=s(this.block);if(g)return new e.mixin.Definition(a,d,g)}}},entity:function(){return s(this.entities.literal)||s(this.entities.variable)||s(this.entities.url)||s(this.entities.call)||s(this.entities.keyword)||s(this.entities.javascript)||s(this.comment)},end:function(){return s(";")||t("}")},alpha:function(){var a;if(!!s(/^\(opacity=/i))if(a=s(/^\d+/)||s(this.entities.variable)){if(!s(")"))throw new Error("missing closing ) for alpha()");return new e.Alpha(a)}},element:function(){var a,b,c;c=s(this.combinator),a=s(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)||s("*")||s(this.attribute)||s(/^\([^)@]+\)/)||s(/^(?:\d*\.)?\d+%/);if(a)return new e.Element(c,a);if(c.value&&c.value[0]==="&")return new e.Element(c,null)},combinator:function(){var a,d=b.charAt(c);if(d===">"||d==="+"||d==="~"){c++;while(b.charAt(c)===" ")c++;return new e.Combinator(d)}if(d==="&"){a="&",c++,b.charAt(c)===" "&&(a="& ");while(b.charAt(c)===" ")c++;return new e.Combinator(a)}if(d===":"&&b.charAt(c+1)===":"){c+=2;while(b.charAt(c)===" ")c++;return new e.Combinator("::")}return b.charAt(c-1)===" "?new e.Combinator(" "):new e.Combinator(null)},selector:function(){var a,d,f=[],g,h;while(d=s(this.element)){g=b.charAt(c),f.push(d);if(g==="{"||g==="}"||g===";"||g===",")break}if(f.length>0)return new e.Selector(f)},tag:function(){return s(/^[a-zA-Z][a-zA-Z-]*[0-9]?/)||s("*")},attribute:function(){var a="",b,c,d;if(!!s("[")){if(b=s(/^[a-zA-Z-]+/)||s(this.entities.quoted))(d=s(/^[|~*$^]?=/))&&(c=s(this.entities.quoted)||s(/^[\w-]+/))?a=[b,d,c.toCSS?c.toCSS():c].join(""):a=b;if(!s("]"))return;if(a)return"["+a+"]"}},block:function(){var a;if(s("{")&&(a=s(this.primary))&&s("}"))return a},ruleset:function(){var a=[],b,d,g;p();if(g=/^([.#:% \w-]+)[\s\n]*\{/.exec(j[f]))c+=g[0].length-1,a=[new e.Selector([new e.Element(null,g[1])])];else while(b=s(this.selector)){a.push(b),s(this.comment);if(!s(","))break;s(this.comment)}if(a.length>0&&(d=s(this.block)))return new e.Ruleset(a,d);i=c,q()},rule:function(){var a,d,g=b.charAt(c),k,l;p();if(g!=="."&&g!=="#"&&g!=="&")if(a=s(this.variable)||s(this.property)){a.charAt(0)!="@"&&(l=/^([^@+\/'"*`(;{}-]*);/.exec(j[f]))?(c+=l[0].length-1,d=new e.Anonymous(l[1])):a==="font"?d=s(this.font):d=s(this.value),k=s(this.important);if(d&&s(this.end))return new e.Rule(a,d,k,h);i=c,q()}},"import":function(){var a;if(s(/^@import\s+/)&&(a=s(this.entities.quoted)||s(this.entities.url))&&s(";"))return new e.Import(a,o)},directive:function(){var a,d,f,g;if(b.charAt(c)==="@"){if(d=s(this["import"]))return d;if(a=s(/^@media|@page/)||s(/^@(?:-webkit-)?keyframes/)){g=(s(/^[^{]+/)||"").trim();if(f=s(this.block))return new e.Directive(a+" "+g,f)}else if(a=s(/^@[-a-z]+/))if(a==="@font-face"){if(f=s(this.block))return new e.Directive(a,f)}else if((d=s(this.entity))&&s(";"))return new e.Directive(a,d)}},font:function(){var a=[],b=[],c,d,f,g;while(g=s(this.shorthand)||s(this.entity))b.push(g);a.push(new e.Expression(b));if(s(","))while(g=s(this.expression)){a.push(g);if(!s(","))break}return new e.Value(a)},value:function(){var a,b=[],c;while(a=s(this.expression)){b.push(a);if(!s(","))break}if(b.length>0)return new e.Value(b)},important:function(){if(b.charAt(c)==="!")return s(/^! *important/)},sub:function(){var a;if(s("(")&&(a=s(this.expression))&&s(")"))return a},multiplication:function(){var a,b,c,d;if(a=s(this.operand)){while((c=s("/")||s("*"))&&(b=s(this.operand)))d=new e.Operation(c,[d||a,b]);return d||a}},addition:function(){var a,d,f,g;if(a=s(this.multiplication)){while((f=s(/^[-+]\s+/)||b.charAt(c-1)!=" "&&(s("+")||s("-")))&&(d=s(this.multiplication)))g=new e.Operation(f,[g||a,d]);return g||a}},operand:function(){var a,d=b.charAt(c+1);b.charAt(c)==="-"&&(d==="@"||d==="(")&&(a=s("-"));var f=s(this.sub)||s(this.entities.dimension)||s(this.entities.color)||s(this.entities.variable)||s(this.entities.call);return a?new e.Operation("*",[new e.Dimension(-1),f]):f},expression:function(){var a,b,c=[],d;while(a=s(this.addition)||s(this.entity))c.push(a);if(c.length>0)return new e.Expression(c)},property:function(){var a;if(a=s(/^(\*?-?[-a-z_0-9]+)\s*:/))return a[1]}}}},typeof a!="undefined"&&(d.Parser.importer=function(a,b,c,d){a.charAt(0)!=="/"&&b.length>0&&(a=b[0]+a),n({href:a,title:a,type:d.mime},c,!0)}),function(a){function d(a){return Math.min(1,Math.max(0,a))}function c(b){if(b instanceof a.Dimension)return parseFloat(b.unit=="%"?b.value/100:b.value);if(typeof b=="number")return b;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function b(b){return a.functions.hsla(b.h,b.s,b.l,b.a)}a.functions={rgb:function(a,b,c){return this.rgba(a,b,c,1)},rgba:function(b,d,e,f){var g=[b,d,e].map(function(a){return c(a)}),f=c(f);return new a.Color(g,f)},hsl:function(a,b,c){return this.hsla(a,b,c,1)},hsla:function(a,b,d,e){function h(a){a=a<0?a+1:a>1?a-1:a;return a*6<1?g+(f-g)*a*6:a*2<1?f:a*3<2?g+(f-g)*(2/3-a)*6:g}a=c(a)%360/360,b=c(b),d=c(d),e=c(e);var f=d<=.5?d*(b+1):d+b-d*b,g=d*2-f;return this.rgba(h(a+1/3)*255,h(a)*255,h(a-1/3)*255,e)},hue:function(b){return new a.Dimension(Math.round(b.toHSL().h))},saturation:function(b){return new a.Dimension(Math.round(b.toHSL().s*100),"%")},lightness:function(b){return new a.Dimension(Math.round(b.toHSL().l*100),"%")},alpha:function(b){return new a.Dimension(b.toHSL().a)},saturate:function(a,c){var e=a.toHSL();e.s+=c.value/100,e.s=d(e.s);return b(e)},desaturate:function(a,c){var e=a.toHSL();e.s-=c.value/100,e.s=d(e.s);return b(e)},lighten:function(a,c){var e=a.toHSL();e.l+=c.value/100,e.l=d(e.l);return b(e)},darken:function(a,c){var e=a.toHSL();e.l-=c.value/100,e.l=d(e.l);return b(e)},fadein:function(a,c){var e=a.toHSL();e.a+=c.value/100,e.a=d(e.a);return b(e)},fadeout:function(a,c){var e=a.toHSL();e.a-=c.value/100,e.a=d(e.a);return b(e)},spin:function(a,c){var d=a.toHSL(),e=(d.h+c.value)%360;d.h=e<0?360+e:e;return b(d)},mix:function(b,c,d){var e=d.value/100,f=e*2-1,g=b.toHSL().a-c.toHSL().a,h=((f*g==-1?f:(f+g)/(1+f*g))+1)/2,i=1-h,j=[b.rgb[0]*h+c.rgb[0]*i,b.rgb[1]*h+c.rgb[1]*i,b.rgb[2]*h+c.rgb[2]*i],k=b.alpha*e+c.alpha*(1-e);return new a.Color(j,k)},greyscale:function(b){return this.desaturate(b,new a.Dimension(100))},e:function(b){return new a.Anonymous(b instanceof a.JavaScript?b.evaluated:b)},escape:function(b){return new a.Anonymous(encodeURI(b.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},"%":function(b){var c=Array.prototype.slice.call(arguments,1),d=b.value;for(var e=0;e<c.length;e++)d=d.replace(/%[sda]/i,function(a){var b=a.match(/s/i)?c[e].value:c[e].toCSS();return a.match(/[A-Z]$/)?encodeURIComponent(b):b});d=d.replace(/%%/g,"%");return new a.Quoted('"'+d+'"',d)},round:function(b){if(b instanceof a.Dimension)return new a.Dimension(Math.round(c(b)),b.unit);if(typeof b=="number")return Math.round(b);throw{error:"RuntimeError",message:"math functions take numbers as parameters"}}}}(c("less/tree")),function(a){a.Alpha=function(a){this.value=a},a.Alpha.prototype={toCSS:function(){return"alpha(opacity="+(this.value.toCSS?this.value.toCSS():this.value)+")"},eval:function(a){this.value.eval&&(this.value=this.value.eval(a));return this}}}(c("less/tree")),function(a){a.Anonymous=function(a){this.value=a.value||a},a.Anonymous.prototype={toCSS:function(){return this.value},eval:function(){return this}}}(c("less/tree")),function(a){a.Call=function(a,b,c){this.name=a,this.args=b,this.index=c},a.Call.prototype={eval:function(b){var c=this.args.map(function(a){return a.eval(b)});if(!(this.name in a.functions))return new a.Anonymous(this.name+"("+c.map(function(a){return a.toCSS()}).join(", ")+")");try{return a.functions[this.name].apply(a.functions,c)}catch(d){throw{message:"error evaluating function `"+this.name+"`",index:this.index}}},toCSS:function(a){return this.eval(a).toCSS()}}}(c("less/tree")),function(a){a.Color=function(a,b){Array.isArray(a)?this.rgb=a:a.length==6?this.rgb=a.match(/.{2}/g).map(function(a){return parseInt(a,16)}):a.length==8?(this.alpha=parseInt(a.substring(0,2),16)/255,this.rgb=a.substr(2).match(/.{2}/g).map(function(a){return parseInt(a,16)})):this.rgb=a.split("").map(function(a){return parseInt(a+a,16)}),this.alpha=typeof b=="number"?b:1},a.Color.prototype={eval:function(){return this},toCSS:function(){return this.alpha<1?"rgba("+this.rgb.map(function(a){return Math.round(a)}).concat(this.alpha).join(", ")+")":"#"+this.rgb.map(function(a){a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16);return a.length===1?"0"+a:a}).join("")},operate:function(b,c){var d=[];c instanceof a.Color||(c=c.toColor());for(var e=0;e<3;e++)d[e]=a.operate(b,this.rgb[e],c.rgb[e]);return new a.Color(d,this.alpha+c.alpha)},toHSL:function(){var a=this.rgb[0]/255,b=this.rgb[1]/255,c=this.rgb[2]/255,d=this.alpha,e=Math.max(a,b,c),f=Math.min(a,b,c),g,h,i=(e+f)/2,j=e-f;if(e===f)g=h=0;else{h=i>.5?j/(2-e-f):j/(e+f);switch(e){case a:g=(b-c)/j+(b<c?6:0);break;case b:g=(c-a)/j+2;break;case c:g=(a-b)/j+4}g/=6}return{h:g*360,s:h,l:i,a:d}}}}(c("less/tree")),function(a){a.Comment=function(a,b){this.value=a,this.silent=!!b},a.Comment.prototype={toCSS:function(a){return a.compress?"":this.value},eval:function(){return this}}}(c("less/tree")),function(a){a.Dimension=function(a,b){this.value=parseFloat(a),this.unit=b||null},a.Dimension.prototype={eval:function(){return this},toColor:function(){return new a.Color([this.value,this.value,this.value])},toCSS:function(){var a=this.value+this.unit;return a},operate:function(b,c){return new a.Dimension(a.operate(b,this.value,c.value),this.unit||c.unit)}}}(c("less/tree")),function(a){a.Directive=function(b,c){this.name=b,Array.isArray(c)?this.ruleset=new a.Ruleset([],c):this.value=c},a.Directive.prototype={toCSS:function(a,b){if(this.ruleset){this.ruleset.root=!0;return this.name+(b.compress?"{":" {\n ")+this.ruleset.toCSS(a,b).trim().replace(/\n/g,"\n ")+(b.compress?"}":"\n}\n")}return this.name+" "+this.value.toCSS()+";\n"},eval:function(a){a.frames.unshift(this),this.ruleset=this.ruleset&&this.ruleset.eval(a),a.frames.shift();return this},variable:function(b){return a.Ruleset.prototype.variable.call(this.ruleset,b)},find:function(){return a.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.ruleset)}}}(c("less/tree")),function(a){a.Element=function(b,c){this.combinator=b instanceof a.Combinator?b:new a.Combinator(b),this.value=c?c.trim():""},a.Element.prototype.toCSS=function(a){return this.combinator.toCSS(a||{})+this.value},a.Combinator=function(a){a===" "?this.value=" ":a==="& "?this.value="& ":this.value=a?a.trim():""},a.Combinator.prototype.toCSS=function(a){return{"":""," ":" ","&":"","& ":" ",":":" :","::":"::","+":a.compress?"+":" + ","~":a.compress?"~":" ~ ",">":a.compress?">":" > "}[this.value]}}(c("less/tree")),function(a){a.Expression=function(a){this.value=a},a.Expression.prototype={eval:function(b){return this.value.length>1?new a.Expression(this.value.map(function(a){return a.eval(b)})):this.value.length===1?this.value[0].eval(b):this},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(" ")}}}(c("less/tree")),function(a){a.Import=function(b,c){var d=this;this._path=b,b instanceof a.Quoted?this.path=/\.(le?|c)ss$/.test(b.value)?b.value:b.value+".less":this.path=b.value.value||b.value,this.css=/css$/.test(this.path),this.css||c.push(this.path,function(a){if(!a)throw new Error("Error parsing "+d.path);d.root=a})},a.Import.prototype={toCSS:function(){return this.css?"@import "+this._path.toCSS()+";\n":""},eval:function(b){var c;if(this.css)return this;c=new a.Ruleset(null,this.root.rules.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));return c.rules}}}(c("less/tree")),function(a){a.JavaScript=function(a,b,c){this.escaped=c,this.expression=a,this.index=b},a.JavaScript.prototype={eval:function(b){var c,d=this,e={},f=this.expression.replace(/@\{([\w-]+)\}/g,function(c,e){return a.jsify((new a.Variable("@"+e,d.index)).eval(b))});try{f=new Function("return ("+f+")")}catch(g){throw{message:"JavaScript evaluation error: `"+f+"`",index:this.index}}for(var h in b.frames[0].variables())e[h.slice(1)]={value:b.frames[0].variables()[h].value,toJS:function(){return this.value.eval(b).toCSS()}};try{c=f.call(e)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message+"'",index:this.index}}return typeof c=="string"?new a.Quoted('"'+c+'"',c,this.escaped,this.index):Array.isArray(c)?new a.Anonymous(c.join(", ")):new a.Anonymous(c)}}}(c("less/tree")),function(a){a.Keyword=function(a){this.value=a},a.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value}}}(c("less/tree")),function(a){a.mixin={},a.mixin.Call=function(b,c,d){this.selector=new a.Selector(b),this.arguments=c,this.index=d},a.mixin.Call.prototype={eval:function(a){var b,c,d=[],e=!1;for(var f=0;f<a.frames.length;f++)if((b=a.frames[f].find(this.selector)).length>0){c=this.arguments&&this.arguments.map(function(b){return b.eval(a)});for(var g=0;g<b.length;g++)if(b[g].match(c,a))try{Array.prototype.push.apply(d,b[g].eval(a,this.arguments).rules),e=!0}catch(h){throw{message:h.message,index:h.index,stack:h.stack,call:this.index}}if(e)return d;throw{message:"No matching definition was found for `"+this.selector.toCSS().trim()+"("+this.arguments.map(function(a){return a.toCSS()}).join(", ")+")`",index:this.index}}throw{message:this.selector.toCSS().trim()+" is undefined",index:this.index}}},a.mixin.Definition=function(b,c,d){this.name=b,this.selectors=[new a.Selector([new a.Element(null,b)])],this.params=c,this.arity=c.length,this.rules=d,this._lookups={},this.required=c.reduce(function(a,b){return!b.name||b.name&&!b.value?a+1:a},0),this.parent=a.Ruleset.prototype,this.frames=[]},a.mixin.Definition.prototype={toCSS:function(){return""},variable:function(a){return this.parent.variable.call(this,a)},variables:function(){return this.parent.variables.call(this)},find:function(){return this.parent.find.apply(this,arguments)},rulesets:function(){return this.parent.rulesets.apply(this)},eval:function(b,c){var d=new a.Ruleset(null,[]),e,f=[];for(var g=0,h;g<this.params.length;g++)if(this.params[g].name)if(h=c&&c[g]||this.params[g].value)d.rules.unshift(new a.Rule(this.params[g].name,h.eval(b)));else throw{message:"wrong number of arguments for "+this.name+" ("+c.length+" for "+this.arity+")"};for(var g=0;g<Math.max(this.params.length,c&&c.length);g++)f.push(c[g]||this.params[g].value);d.rules.unshift(new a.Rule("@arguments",(new a.Expression(f)).eval(b)));return(new a.Ruleset(null,this.rules.slice(0))).eval({frames:[this,d].concat(this.frames,b.frames)})},match:function(a,b){var c=a&&a.length||0,d;if(c<this.required)return!1;if(this.required>0&&c>this.params.length)return!1;d=Math.min(c,this.arity);for(var e=0;e<d;e++)if(!this.params[e].name&&a[e].eval(b).toCSS()!=this.params[e].value.eval(b).toCSS())return!1;return!0}}}(c("less/tree")),function(a){a.Operation=function(a,b){this.op=a.trim(),this.operands=b},a.Operation.prototype.eval=function(b){var c=this.operands[0].eval(b),d=this.operands[1].eval(b),e;if(c instanceof a.Dimension&&d instanceof a.Color)if(this.op==="*"||this.op==="+")e=d,d=c,c=e;else throw{name:"OperationError",message:"Can't substract or divide a color from a number"};return c.operate(this.op,d)},a.operate=function(a,b,c){switch(a){case"+":return b+c;case"-":return b-c;case"*":return b*c;case"/":return b/c}}}(c("less/tree")),function(a){a.Quoted=function(a,b,c,d){this.escaped=c,this.value=b||"",this.quote=a.charAt(0),this.index=d},a.Quoted.prototype={toCSS:function(){return this.escaped?this.value:this.quote+this.value+this.quote},eval:function(b){var c=this,d=this.value.replace(/`([^`]+)`/g,function(d,e){return(new a.JavaScript(e,c.index,!0)).eval(b).value}).replace(/@\{([\w-]+)\}/g,function(d,e){var f=(new a.Variable("@"+e,c.index)).eval(b);return f.value||f.toCSS()});return new a.Quoted(this.quote+d+this.quote,d,this.escaped,this.index)}}}(c("less/tree")),function(a){a.Rule=function(b,c,d,e){this.name=b,this.value=c instanceof a.Value?c:new a.Value([c]),this.important=d?" "+d.trim():"",this.index=e,b.charAt(0)==="@"?this.variable=!0:this.variable=!1},a.Rule.prototype.toCSS=function(a){return this.variable?"":this.name+(a.compress?":":": ")+this.value.toCSS(a)+this.important+";"},a.Rule.prototype.eval=function(b){return new a.Rule(this.name,this.value.eval(b),this.important,this.index)},a.Shorthand=function(a,b){this.a=a,this.b=b},a.Shorthand.prototype={toCSS:function(a){return this.a.toCSS(a)+"/"+this.b.toCSS(a)},eval:function(){return this}}}(c("less/tree")),function(a){a.Ruleset=function(a,b){this.selectors=a,this.rules=b,this._lookups={}},a.Ruleset.prototype={eval:function(b){var c=new a.Ruleset(this.selectors,this.rules.slice(0));c.root=this.root,b.frames.unshift(c);if(c.root)for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Definition&&(c.rules[d].frames=b.frames.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Call&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0,e;d<c.rules.length;d++)e=c.rules[d],e instanceof a.mixin.Definition||(c.rules[d]=e.eval?e.eval(b):e);b.frames.shift();return c},match:function(a){return!a||a.length===0},variables:function(){return this._variables?this._variables:this._variables=this.rules.reduce(function(b,c){c instanceof a.Rule&&c.variable===!0&&(b[c.name]=c);return b},{})},variable:function(a){return this.variables()[a]},rulesets:function(){return this._rulesets?this._rulesets:this._rulesets=this.rules.filter(function(b){return b instanceof a.Ruleset||b instanceof a.mixin.Definition})},find:function(b,c){c=c||this;var d=[],e,f,g=b.toCSS();if(g in this._lookups)return this._lookups[g];this.rulesets().forEach(function(e){if(e!==c)for(var g=0;g<e.selectors.length;g++)if(f=b.match(e.selectors[g])){b.elements.length>1?Array.prototype.push.apply(d,e.find(new a.Selector(b.elements.slice(1)),c)):d.push(e);break}});return this._lookups[g]=d},toCSS:function(b,c){var d=[],e=[],f=[],g=[],h,i;this.root||(b.length===0?g=this.selectors.map(function(a){return[a]}):this.joinSelectors(g,b,this.selectors));for(var j=0;j<this.rules.length;j++)i=this.rules[j],i.rules||i instanceof a.Directive?f.push(i.toCSS(g,c)):i instanceof a.Comment?i.silent||(this.root?f.push(i.toCSS(c)):e.push(i.toCSS(c))):i.toCSS&&!i.variable?e.push(i.toCSS(c)):i.value&&!i.variable&&e.push(i.value.toString());f=f.join(""),this.root?d.push(e.join(c.compress?"":"\n")):e.length>0&&(h=g.map(function(a){return a.map(function(a){return a.toCSS(c)}).join("").trim()}).join(c.compress?",":g.length>3?",\n":", "),d.push(h,(c.compress?"{":" {\n ")+e.join(c.compress?"":"\n ")+(c.compress?"}":"\n}\n"))),d.push(f);return d.join("")+(c.compress?"\n":"")},joinSelectors:function(a,b,c){for(var d=0;d<c.length;d++)this.joinSelector(a,b,c[d])},joinSelector:function(b,c,d){var e=[],f=[],g=[],h=[],i=!1,j;for(var k=0;k<d.elements.length;k++)j=d.elements[k],j.combinator.value[0]==="&"&&(i=!0),i?h.push(j):g.push(j);i||(h=g,g=[]),g.length>0&&e.push(new a.Selector(g)),h.length>0&&f.push(new a.Selector(h));for(var l=0;l<c.length;l++)b.push(e.concat(c[l]).concat(f))}}}(c("less/tree")),function(a){a.Selector=function(a){this.elements=a,this.elements[0].combinator.value===""&&(this.elements[0].combinator.value=" ")},a.Selector.prototype.match=function(a){return this.elements[0].value===a.elements[0].value?!0:!1},a.Selector.prototype.toCSS=function(a){return this._css?this._css:this._css=this.elements.map(function(b){return typeof b=="string"?" "+b.trim():b.toCSS(a)}).join("")}}(c("less/tree")),function(b){b.URL=function(b,c){b.data?this.attrs=b:(!/^(?:https?:\/|file:\/|data:\/)?\//.test(b.value)&&c.length>0&&typeof a!="undefined"&&(b.value=c[0]+(b.value.charAt(0)==="/"?b.value.slice(1):b.value)),this.value=b,this.paths=c)},b.URL.prototype={toCSS:function(){return"url("+(this.attrs?"data:"+this.attrs
16
+ .mime+this.attrs.charset+this.attrs.base64+this.attrs.data:this.value.toCSS())+")"},eval:function(a){return this.attrs?this:new b.URL(this.value.eval(a),this.paths)}}}(c("less/tree")),function(a){a.Value=function(a){this.value=a,this.is="value"},a.Value.prototype={eval:function(b){return this.value.length===1?this.value[0].eval(b):new a.Value(this.value.map(function(a){return a.eval(b)}))},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(a.compress?",":", ")}}}(c("less/tree")),function(a){a.Variable=function(a,b){this.name=a,this.index=b},a.Variable.prototype={eval:function(b){var c,d,e=this.name;e.indexOf("@@")==0&&(e="@"+(new a.Variable(e.slice(1))).eval(b).value);if(c=a.find(b.frames,function(a){if(d=a.variable(e))return d.value.eval(b)}))return c;throw{message:"variable "+e+" is undefined",index:this.index}}}}(c("less/tree")),c("less/tree").find=function(a,b){for(var c=0,d;c<a.length;c++)if(d=b.call(a,a[c]))return d;return null},c("less/tree").jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS(!1)}).join(", ")+"]":a.toCSS(!1)};var f=location.protocol==="file:"||location.protocol==="chrome:"||location.protocol==="chrome-extension:"||location.protocol==="resource:";d.env=d.env||(location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"||location.port.length>0||f?"development":"production"),d.async=!1,d.poll=d.poll||(f?1e3:1500),d.watch=function(){return this.watchMode=!0},d.unwatch=function(){return this.watchMode=!1},d.env==="development"?(d.optimization=0,/!watch/.test(location.hash)&&d.watch(),d.watchTimer=setInterval(function(){d.watchMode&&m(function(a,b,c){a&&p(a.toCSS(),b,c.lastModified)})},d.poll)):d.optimization=3;var g;try{g=typeof a.localStorage=="undefined"?null:a.localStorage}catch(h){g=null}var i=document.getElementsByTagName("link"),j=/^text\/(x-)?less$/;d.sheets=[];for(var k=0;k<i.length;k++)(i[k].rel==="stylesheet/less"||i[k].rel.match(/stylesheet/)&&i[k].type.match(j))&&d.sheets.push(i[k]);d.refresh=function(a){var b,c;b=c=new Date,m(function(a,d,e){e.local?t("loading "+d.href+" from cache."):(t("parsed "+d.href+" successfully."),p(a.toCSS(),d,e.lastModified)),t("css for "+d.href+" generated in "+(new Date-c)+"ms"),e.remaining===0&&t("css generated in "+(new Date-b)+"ms"),c=new Date},a),l()},d.refreshStyles=l,d.refresh(d.env==="development")})(window)
@@ -787,9 +787,13 @@ less.Parser = function Parser(env) {
787
787
  var e, t, c;
788
788
 
789
789
  c = $(this.combinator);
790
- e = $(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/) || $('*') || $(this.attribute) || $(/^\([^)@]+\)/);
790
+ e = $(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/) || $('*') || $(this.attribute) || $(/^\([^)@]+\)/) || $(/^(?:\d*\.)?\d+%/);
791
791
 
792
792
  if (e) { return new(tree.Element)(c, e) }
793
+
794
+ if (c.value && c.value[0] === '&') {
795
+ return new(tree.Element)(c, null);
796
+ }
793
797
  },
794
798
 
795
799
  //
@@ -804,10 +808,18 @@ less.Parser = function Parser(env) {
804
808
  combinator: function () {
805
809
  var match, c = input.charAt(i);
806
810
 
807
- if (c === '>' || c === '&' || c === '+' || c === '~') {
811
+ if (c === '>' || c === '+' || c === '~') {
808
812
  i++;
809
813
  while (input.charAt(i) === ' ') { i++ }
810
814
  return new(tree.Combinator)(c);
815
+ } else if (c === '&') {
816
+ match = '&';
817
+ i++;
818
+ if(input.charAt(i) === ' ') {
819
+ match = '& ';
820
+ }
821
+ while (input.charAt(i) === ' ') { i++ }
822
+ return new(tree.Combinator)(match);
811
823
  } else if (c === ':' && input.charAt(i + 1) === ':') {
812
824
  i += 2;
813
825
  while (input.charAt(i) === ' ') { i++ }
@@ -877,7 +889,7 @@ less.Parser = function Parser(env) {
877
889
  var selectors = [], s, rules, match;
878
890
  save();
879
891
 
880
- if (match = /^([.#: \w-]+)[\s\n]*\{/.exec(chunks[j])) {
892
+ if (match = /^([.#:% \w-]+)[\s\n]*\{/.exec(chunks[j])) {
881
893
  i += match[0].length - 1;
882
894
  selectors = [new(tree.Selector)([new(tree.Element)(null, match[1])])];
883
895
  } else {
@@ -954,7 +966,7 @@ less.Parser = function Parser(env) {
954
966
 
955
967
  if (value = $(this['import'])) {
956
968
  return value;
957
- } else if (name = $(/^@media|@page|@-[-a-z]+/)) {
969
+ } else if (name = $(/^@media|@page/) || $(/^@(?:-webkit-)?keyframes/)) {
958
970
  types = ($(/^[^{]+/) || '').trim();
959
971
  if (rules = $(this.block)) {
960
972
  return new(tree.Directive)(name + " " + types, rules);
@@ -3,7 +3,7 @@
3
3
  tree.Element = function (combinator, value) {
4
4
  this.combinator = combinator instanceof tree.Combinator ?
5
5
  combinator : new(tree.Combinator)(combinator);
6
- this.value = value.trim();
6
+ this.value = value ? value.trim() : "";
7
7
  };
8
8
  tree.Element.prototype.toCSS = function (env) {
9
9
  return this.combinator.toCSS(env || {}) + this.value;
@@ -12,6 +12,8 @@ tree.Element.prototype.toCSS = function (env) {
12
12
  tree.Combinator = function (value) {
13
13
  if (value === ' ') {
14
14
  this.value = ' ';
15
+ } else if (value === '& ') {
16
+ this.value = '& ';
15
17
  } else {
16
18
  this.value = value ? value.trim() : "";
17
19
  }
@@ -21,6 +23,7 @@ tree.Combinator.prototype.toCSS = function (env) {
21
23
  '' : '',
22
24
  ' ' : ' ',
23
25
  '&' : '',
26
+ '& ' : ' ',
24
27
  ':' : ' :',
25
28
  '::': '::',
26
29
  '+' : env.compress ? '+' : ' + ',
@@ -120,11 +120,7 @@ tree.Ruleset.prototype = {
120
120
  if (context.length === 0) {
121
121
  paths = this.selectors.map(function (s) { return [s] });
122
122
  } else {
123
- for (var s = 0; s < this.selectors.length; s++) {
124
- for (var c = 0; c < context.length; c++) {
125
- paths.push(context[c].concat([this.selectors[s]]));
126
- }
127
- }
123
+ this.joinSelectors( paths, context, this.selectors );
128
124
  }
129
125
  }
130
126
 
@@ -174,6 +170,43 @@ tree.Ruleset.prototype = {
174
170
  css.push(rulesets);
175
171
 
176
172
  return css.join('') + (env.compress ? '\n' : '');
173
+ },
174
+
175
+ joinSelectors: function (paths, context, selectors) {
176
+ for (var s = 0; s < selectors.length; s++) {
177
+ this.joinSelector(paths, context, selectors[s]);
178
+ }
179
+ },
180
+
181
+ joinSelector: function (paths, context, selector) {
182
+ var before = [], after = [], beforeElements = [],
183
+ afterElements = [], hasParentSelector = false, el;
184
+
185
+ for (var i = 0; i < selector.elements.length; i++) {
186
+ el = selector.elements[i];
187
+ if (el.combinator.value[0] === '&') {
188
+ hasParentSelector = true;
189
+ }
190
+ if (hasParentSelector) afterElements.push(el);
191
+ else beforeElements.push(el);
192
+ }
193
+
194
+ if (! hasParentSelector) {
195
+ afterElements = beforeElements;
196
+ beforeElements = [];
197
+ }
198
+
199
+ if (beforeElements.length > 0) {
200
+ before.push(new(tree.Selector)(beforeElements));
201
+ }
202
+
203
+ if (afterElements.length > 0) {
204
+ after.push(new(tree.Selector)(afterElements));
205
+ }
206
+
207
+ for (var c = 0; c < context.length; c++) {
208
+ paths.push(before.concat(context[c]).concat(after));
209
+ }
177
210
  }
178
211
  };
179
212
  })(require('less/tree'));
@@ -5,9 +5,9 @@
5
5
  "keywords" : ["css", "parser", "lesscss", "browser"],
6
6
  "author" : "Alexis Sellier <self@cloudhead.net>",
7
7
  "contributors" : [],
8
- "version" : "1.1.3",
8
+ "version" : "1.1.4",
9
9
  "bin" : { "lessc": "./bin/lessc" },
10
10
  "main" : "./lib/less/index",
11
11
  "directories" : { "test": "./test" },
12
- "engines" : { "node": ">=0.2.0" }
12
+ "engines" : { "node": ">=0.4.0" }
13
13
  }
@@ -30,3 +30,24 @@ td {
30
30
  td, input {
31
31
  line-height: 1em;
32
32
  }
33
+ a {
34
+ color: red;
35
+ }
36
+ a:hover {
37
+ color: blue;
38
+ }
39
+ div a {
40
+ color: green;
41
+ }
42
+ p a span {
43
+ color: yellow;
44
+ }
45
+ .foo .bar .qux, .foo .baz .qux {
46
+ display: block;
47
+ }
48
+ .qux .foo .bar, .qux .foo .baz {
49
+ display: inline;
50
+ }
51
+ .qux .foo .bar .biz, .qux .foo .baz .biz {
52
+ display: none;
53
+ }
@@ -22,3 +22,27 @@ td {
22
22
  td, input {
23
23
  line-height: 1em;
24
24
  }
25
+
26
+ a {
27
+ color: red;
28
+
29
+ &:hover { color: blue; }
30
+
31
+ div & { color: green; }
32
+
33
+ p & span { color: yellow; }
34
+ }
35
+
36
+ .foo {
37
+ .bar, .baz {
38
+ & .qux {
39
+ display: block;
40
+ }
41
+ .qux & {
42
+ display: inline;
43
+ }
44
+ .qux & .biz {
45
+ display: none;
46
+ }
47
+ }
48
+ }
@@ -1,3 +1,3 @@
1
1
  module Less
2
- VERSION = '2.0.5'
2
+ VERSION = '2.0.6'
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: less
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.0.5
5
+ version: 2.0.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Charles Lowell
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-24 00:00:00 -05:00
13
+ date: 2011-08-23 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -80,7 +80,6 @@ files:
80
80
  - lib/less/js/build/ecma-5.js
81
81
  - lib/less/js/build/header.js
82
82
  - lib/less/js/build/require.js
83
- - lib/less/js/dist/less-1.0.44.js
84
83
  - lib/less/js/dist/less-1.1.0.js
85
84
  - lib/less/js/dist/less-1.1.0.min.js
86
85
  - lib/less/js/dist/less-1.1.1.js
@@ -89,6 +88,8 @@ files:
89
88
  - lib/less/js/dist/less-1.1.2.min.js
90
89
  - lib/less/js/dist/less-1.1.3.js
91
90
  - lib/less/js/dist/less-1.1.3.min.js
91
+ - lib/less/js/dist/less-1.1.4.js
92
+ - lib/less/js/dist/less-1.1.4.min.js
92
93
  - lib/less/js/lib/less/browser.js
93
94
  - lib/less/js/lib/less/functions.js
94
95
  - lib/less/js/lib/less/index.js
@@ -181,7 +182,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
182
  requirements:
182
183
  - - ">="
183
184
  - !ruby/object:Gem::Version
184
- hash: 2860711812237804044
185
+ hash: 2053547067050762116
185
186
  segments:
186
187
  - 0
187
188
  version: "0"
@@ -190,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
191
  requirements:
191
192
  - - ">="
192
193
  - !ruby/object:Gem::Version
193
- hash: 2860711812237804044
194
+ hash: 2053547067050762116
194
195
  segments:
195
196
  - 0
196
197
  version: "0"