less 2.3.3 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +5 -0
  3. data/less.gemspec +1 -1
  4. data/lib/less/js/.gitattributes +9 -0
  5. data/lib/less/js/.gitignore +1 -0
  6. data/lib/less/js/.npmignore +1 -1
  7. data/lib/less/js/CHANGELOG.md +68 -0
  8. data/lib/less/js/CONTRIBUTING.md +33 -34
  9. data/lib/less/js/Makefile +24 -9
  10. data/lib/less/js/README.md +2 -2
  11. data/lib/less/js/bin/lessc +102 -25
  12. data/lib/less/js/build/amd.js +1 -1
  13. data/lib/less/js/build/header.js +9 -7
  14. data/lib/less/js/dist/less-1.3.3.js +2 -2
  15. data/lib/less/js/dist/less-1.3.3.min.js +2 -2
  16. data/lib/less/js/dist/less-1.4.0-beta.js +5830 -0
  17. data/lib/less/js/dist/less-1.4.0-beta.min.js +11 -0
  18. data/lib/less/js/dist/less-1.4.0.js +5830 -0
  19. data/lib/less/js/dist/less-1.4.0.min.js +11 -0
  20. data/lib/less/js/dist/less-1.4.1.js +5837 -0
  21. data/lib/less/js/dist/less-1.4.1.min.js +11 -0
  22. data/lib/less/js/dist/less-1.4.2.js +5837 -0
  23. data/lib/less/js/dist/less-1.4.2.min.js +11 -0
  24. data/lib/less/js/dist/less-rhino-1.4.0.js +4273 -0
  25. data/lib/less/js/lib/less/browser.js +131 -101
  26. data/lib/less/js/lib/less/env.js +105 -0
  27. data/lib/less/js/lib/less/extend-visitor.js +391 -0
  28. data/lib/less/js/lib/less/functions.js +174 -19
  29. data/lib/less/js/lib/less/import-visitor.js +107 -0
  30. data/lib/less/js/lib/less/index.js +70 -63
  31. data/lib/less/js/lib/less/join-selector-visitor.js +37 -0
  32. data/lib/less/js/lib/less/lessc_helper.js +13 -4
  33. data/lib/less/js/lib/less/parser.js +353 -264
  34. data/lib/less/js/lib/less/rhino.js +5 -2
  35. data/lib/less/js/lib/less/tree.js +1 -1
  36. data/lib/less/js/lib/less/tree/alpha.js +7 -3
  37. data/lib/less/js/lib/less/tree/anonymous.js +1 -0
  38. data/lib/less/js/lib/less/tree/assignment.js +4 -0
  39. data/lib/less/js/lib/less/tree/call.js +14 -8
  40. data/lib/less/js/lib/less/tree/color.js +50 -5
  41. data/lib/less/js/lib/less/tree/comment.js +1 -0
  42. data/lib/less/js/lib/less/tree/condition.js +35 -28
  43. data/lib/less/js/lib/less/tree/dimension.js +270 -16
  44. data/lib/less/js/lib/less/tree/directive.js +7 -2
  45. data/lib/less/js/lib/less/tree/element.js +57 -21
  46. data/lib/less/js/lib/less/tree/expression.js +29 -4
  47. data/lib/less/js/lib/less/tree/extend.js +43 -0
  48. data/lib/less/js/lib/less/tree/import.js +49 -28
  49. data/lib/less/js/lib/less/tree/javascript.js +1 -0
  50. data/lib/less/js/lib/less/tree/keyword.js +3 -2
  51. data/lib/less/js/lib/less/tree/media.js +20 -4
  52. data/lib/less/js/lib/less/tree/mixin.js +38 -18
  53. data/lib/less/js/lib/less/tree/negative.js +22 -0
  54. data/lib/less/js/lib/less/tree/operation.js +32 -17
  55. data/lib/less/js/lib/less/tree/paren.js +5 -1
  56. data/lib/less/js/lib/less/tree/quoted.js +5 -3
  57. data/lib/less/js/lib/less/tree/rule.js +44 -31
  58. data/lib/less/js/lib/less/tree/ruleset.js +50 -23
  59. data/lib/less/js/lib/less/tree/selector.js +49 -39
  60. data/lib/less/js/lib/less/tree/unicode-descriptor.js +1 -0
  61. data/lib/less/js/lib/less/tree/url.js +9 -5
  62. data/lib/less/js/lib/less/tree/value.js +4 -1
  63. data/lib/less/js/lib/less/tree/variable.js +4 -3
  64. data/lib/less/js/lib/less/visitor.js +54 -0
  65. data/lib/less/js/package.json +69 -19
  66. data/lib/less/js/test/browser-test-prepare.js +23 -6
  67. data/lib/less/js/test/browser/common.js +55 -3
  68. data/lib/less/js/test/browser/css/urls.css +13 -0
  69. data/lib/less/js/test/browser/less/relative-urls/urls.less +1 -1
  70. data/lib/less/js/test/browser/less/urls.less +16 -0
  71. data/lib/less/js/test/browser/phantom-runner.js +7 -5
  72. data/lib/less/js/test/browser/runner-browser.js +5 -1
  73. data/lib/less/js/test/browser/runner-errors.js +5 -0
  74. data/lib/less/js/test/browser/runner-legacy.js +6 -0
  75. data/lib/less/js/test/browser/runner-production.js +7 -0
  76. data/lib/less/js/test/browser/template.htm +6 -6
  77. data/lib/less/js/test/css/comments.css +1 -0
  78. data/lib/less/js/test/css/compression/compression.css +2 -0
  79. data/lib/less/js/test/css/css-3.css +4 -0
  80. data/lib/less/js/test/css/css.css +9 -3
  81. data/lib/less/js/test/css/extend-chaining.css +72 -0
  82. data/lib/less/js/test/css/extend-clearfix.css +19 -0
  83. data/lib/less/js/test/css/extend-exact.css +37 -0
  84. data/lib/less/js/test/css/extend-media.css +24 -0
  85. data/lib/less/js/test/css/extend-nest.css +57 -0
  86. data/lib/less/js/test/css/extend-selector.css +72 -0
  87. data/lib/less/js/test/css/extend.css +76 -0
  88. data/lib/less/js/test/css/functions.css +28 -0
  89. data/lib/less/js/test/css/import-interpolation.css +6 -0
  90. data/lib/less/js/test/css/import.css +18 -1
  91. data/lib/less/js/test/css/legacy/legacy.css +7 -0
  92. data/lib/less/js/test/css/media.css +9 -1
  93. data/lib/less/js/test/css/mixins-args.css +18 -0
  94. data/lib/less/js/test/css/mixins-guards.css +5 -0
  95. data/lib/less/js/test/css/parens.css +18 -5
  96. data/lib/less/js/test/css/selectors.css +14 -6
  97. data/lib/less/js/test/css/urls.css +17 -0
  98. data/lib/less/js/test/css/variables.css +22 -3
  99. data/lib/less/js/test/data/data-uri-fail.png +0 -0
  100. data/lib/less/js/test/data/image.jpg +0 -0
  101. data/lib/less/js/test/data/page.html +1 -0
  102. data/lib/less/js/test/less-test.js +41 -9
  103. data/lib/less/js/test/less/colors.less +4 -4
  104. data/lib/less/js/test/less/comments.less +2 -2
  105. data/lib/less/js/test/less/compression/compression.less +16 -0
  106. data/lib/less/js/test/less/css-3.less +5 -1
  107. data/lib/less/js/test/less/css.less +9 -3
  108. data/lib/less/js/test/less/errors/add-mixed-units.less +3 -0
  109. data/lib/less/js/test/less/errors/add-mixed-units.txt +2 -0
  110. data/lib/less/js/test/less/errors/add-mixed-units2.less +3 -0
  111. data/lib/less/js/test/less/errors/add-mixed-units2.txt +2 -0
  112. data/lib/less/js/test/less/errors/bad-variable-declaration1.txt +1 -1
  113. data/lib/less/js/test/less/errors/color-operation-error.less +3 -0
  114. data/lib/less/js/test/less/errors/color-operation-error.txt +2 -0
  115. data/lib/less/js/test/less/errors/comment-in-selector.txt +1 -1
  116. data/lib/less/js/test/less/errors/divide-mixed-units.less +3 -0
  117. data/lib/less/js/test/less/errors/divide-mixed-units.txt +4 -0
  118. data/lib/less/js/test/less/errors/extend-no-selector.less +3 -0
  119. data/lib/less/js/test/less/errors/extend-no-selector.txt +3 -0
  120. data/lib/less/js/test/less/errors/extend-not-at-end.less +3 -0
  121. data/lib/less/js/test/less/errors/extend-not-at-end.txt +3 -0
  122. data/lib/less/js/test/less/errors/import-missing.less +5 -0
  123. data/lib/less/js/test/less/errors/import-missing.txt +3 -3
  124. data/lib/less/js/test/less/errors/import-no-semi.txt +1 -1
  125. data/lib/less/js/test/less/errors/import-subfolder1.txt +1 -1
  126. data/lib/less/js/test/less/errors/import-subfolder2.txt +1 -1
  127. data/lib/less/js/test/less/errors/javascript-error.txt +1 -1
  128. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-1.txt +1 -1
  129. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-2.txt +1 -1
  130. data/lib/less/js/test/less/errors/mixin-not-defined.txt +1 -1
  131. data/lib/less/js/test/less/errors/mixin-not-matched.txt +1 -1
  132. data/lib/less/js/test/less/errors/mixin-not-matched2.txt +1 -1
  133. data/lib/less/js/test/less/errors/multiply-mixed-units.less +7 -0
  134. data/lib/less/js/test/less/errors/multiply-mixed-units.txt +4 -0
  135. data/lib/less/js/test/less/errors/parens-error-1.less +3 -0
  136. data/lib/less/js/test/less/errors/parens-error-1.txt +4 -0
  137. data/lib/less/js/test/less/errors/parens-error-2.less +3 -0
  138. data/lib/less/js/test/less/errors/parens-error-2.txt +4 -0
  139. data/lib/less/js/test/less/errors/parens-error-3.less +3 -0
  140. data/lib/less/js/test/less/errors/parens-error-3.txt +4 -0
  141. data/lib/less/js/test/less/errors/parse-error-curly-bracket.txt +1 -1
  142. data/lib/less/js/test/less/errors/parse-error-missing-bracket.txt +2 -1
  143. data/lib/less/js/test/less/errors/parse-error-with-import.txt +1 -1
  144. data/lib/less/js/test/less/errors/property-ie5-hack.txt +1 -1
  145. data/lib/less/js/test/less/errors/property-in-root.less +4 -0
  146. data/lib/less/js/test/less/errors/property-in-root.txt +4 -0
  147. data/lib/less/js/test/less/errors/property-in-root2.less +1 -0
  148. data/lib/less/js/test/less/errors/property-in-root2.txt +4 -0
  149. data/lib/less/js/test/less/errors/property-in-root3.less +4 -0
  150. data/lib/less/js/test/less/errors/property-in-root3.txt +3 -0
  151. data/lib/less/js/test/less/errors/recursive-variable.txt +1 -1
  152. data/lib/less/js/test/less/extend-chaining.less +79 -0
  153. data/lib/less/js/test/less/extend-clearfix.less +19 -0
  154. data/lib/less/js/test/less/extend-exact.less +46 -0
  155. data/lib/less/js/test/less/extend-media.less +24 -0
  156. data/lib/less/js/test/less/extend-nest.less +65 -0
  157. data/lib/less/js/test/less/extend-selector.less +84 -0
  158. data/lib/less/js/test/less/extend.less +81 -0
  159. data/lib/less/js/test/less/functions.less +37 -6
  160. data/lib/less/js/test/less/import-interpolation.less +8 -0
  161. data/lib/less/js/test/less/import-once.less +4 -4
  162. data/lib/less/js/test/less/import.less +11 -2
  163. data/lib/less/js/test/less/import/deeper/import-once-test-a.less +1 -1
  164. data/lib/less/js/test/less/import/import-interpolation.less +1 -0
  165. data/lib/less/js/test/less/import/import-interpolation2.less +5 -0
  166. data/lib/less/js/test/less/javascript.less +1 -1
  167. data/lib/less/js/test/less/legacy/legacy.less +7 -0
  168. data/lib/less/js/test/less/media.less +14 -3
  169. data/lib/less/js/test/less/mixins-args.less +43 -5
  170. data/lib/less/js/test/less/mixins-guards.less +13 -0
  171. data/lib/less/js/test/less/mixins-named-args.less +5 -5
  172. data/lib/less/js/test/less/mixins-nested.less +2 -2
  173. data/lib/less/js/test/less/mixins-pattern.less +1 -1
  174. data/lib/less/js/test/less/mixins.less +1 -1
  175. data/lib/less/js/test/less/operations.less +27 -27
  176. data/lib/less/js/test/less/parens.less +20 -5
  177. data/lib/less/js/test/less/selectors.less +14 -7
  178. data/lib/less/js/test/less/urls.less +24 -0
  179. data/lib/less/js/test/less/variables.less +42 -12
  180. data/lib/less/loader.rb +33 -0
  181. data/lib/less/version.rb +1 -1
  182. data/spec/less/parser_spec.rb +5 -5
  183. metadata +76 -6
  184. data/lib/less/js/build/ecma-5.js +0 -120
  185. data/lib/less/js/lib/less/tree/ratio.js +0 -13
@@ -0,0 +1,24 @@
1
+ .ext1 .ext2 {
2
+ background: black;
3
+ }
4
+
5
+ @media tv {
6
+ .ext1 .ext3 {
7
+ color: white;
8
+ }
9
+ .tv-lowres :extend(.ext1 all) {
10
+ background: blue;
11
+ }
12
+ @media hires {
13
+ .ext1 .ext4 {
14
+ color: green;
15
+ }
16
+ .tv-hires :extend(.ext1 all) {
17
+ background: red;
18
+ }
19
+ }
20
+ }
21
+
22
+ .all:extend(.ext1 all) {
23
+
24
+ }
@@ -0,0 +1,65 @@
1
+ .sidebar {
2
+ width: 300px;
3
+ background: red;
4
+
5
+ .box {
6
+ background: #FFF;
7
+ border: 1px solid #000;
8
+ margin: 10px 0;
9
+ }
10
+ }
11
+
12
+ .sidebar2 {
13
+ &:extend(.sidebar all);
14
+ background: blue;
15
+ }
16
+
17
+ .type1 {
18
+ .sidebar3 {
19
+ &:extend(.sidebar all);
20
+ background: green;
21
+ }
22
+ }
23
+
24
+ .type2 {
25
+ &.sidebar4 {
26
+ &:extend(.sidebar all);
27
+ background: red;
28
+ }
29
+ }
30
+
31
+ .button {
32
+ color: black;
33
+ &:hover {
34
+ color: white;
35
+ }
36
+ }
37
+ .submit {
38
+ &:extend(.button);
39
+ &:hover:extend(.button:hover) {}
40
+ }
41
+
42
+ .nomatch {
43
+ &:hover:extend(.button :hover) {}
44
+ }
45
+
46
+ .button2 {
47
+ :hover {
48
+ nested: white;
49
+ }
50
+ }
51
+ .button2 :hover {
52
+ notnested: black;
53
+ }
54
+
55
+ .nomatch :extend(.button2:hover) {}
56
+
57
+ .amp-test-a,
58
+ .amp-test-b {
59
+ .amp-test-c &.amp-test-d&.amp-test-e {
60
+ .amp-test-f&+&.amp-test-g:extend(.amp-test-h) {}
61
+ }
62
+ }
63
+ .amp-test-h {
64
+ test: extended by masses of selectors;
65
+ }
@@ -0,0 +1,84 @@
1
+ .error {
2
+ border: 1px #f00;
3
+ background: #fdd;
4
+ }
5
+ .error.intrusion {
6
+ font-size: 1.3em;
7
+ font-weight: bold;
8
+ }
9
+ .intrusion .error {
10
+ display: none;
11
+ }
12
+ .badError:extend(.error all) {
13
+ border-width: 3px;
14
+ }
15
+
16
+ .foo .bar, .foo .baz {
17
+ display: none;
18
+ }
19
+
20
+ .ext1 .ext2
21
+ :extend(.foo all) {
22
+ }
23
+
24
+ .ext3:extend(.foo all),
25
+ .ext4:extend(.foo all) {
26
+ }
27
+
28
+ div.ext5,
29
+ .ext6 > .ext5 {
30
+ width: 100px;
31
+ }
32
+
33
+ .should-not-exist-in-output,
34
+ .ext7:extend(.ext5 all) {
35
+ }
36
+
37
+ .ext {
38
+ test: 1;
39
+ }
40
+ // same as
41
+ // .a .c:extend(.ext all)
42
+ // .b .c:extend(.ext all)
43
+ // .a .c .d
44
+ // .b .c .d
45
+ .a, .b {
46
+ test: 2;
47
+ .c:extend(.ext all) {
48
+ test: 3;
49
+ .d {
50
+ test: 4;
51
+ }
52
+ }
53
+ }
54
+
55
+ .replace.replace,
56
+ .c.replace + .replace {
57
+ .replace,
58
+ .c {
59
+ prop: copy-paste-replace;
60
+ }
61
+ }
62
+ .rep_ace:extend(.replace all) {}
63
+
64
+ .attributes {
65
+ [data="test"] {
66
+ extend: attributes;
67
+ }
68
+ .attribute-test {
69
+ &:extend([data="test"] all);
70
+ }
71
+ [data] {
72
+ extend: attributes2;
73
+ }
74
+ .attribute-test2 {
75
+ &:extend([data] all); //you could argue it should match [data="test"]... not for now though...
76
+ }
77
+ @attr-data: "test3";
78
+ [data=@{attr-data}] {
79
+ extend: attributes2;
80
+ }
81
+ .attribute-test {
82
+ &:extend([data="test3"] all);
83
+ }
84
+ }
@@ -0,0 +1,81 @@
1
+ .error {
2
+ border: 1px #f00;
3
+ background: #fdd;
4
+ }
5
+ .error.intrusion {
6
+ font-size: 1.3em;
7
+ font-weight: bold;
8
+ }
9
+ .intrusion .error {
10
+ display: none;
11
+ }
12
+ .badError {
13
+ &:extend(.error all);
14
+ border-width: 3px;
15
+ }
16
+
17
+ .foo .bar, .foo .baz {
18
+ display: none;
19
+ }
20
+
21
+ .ext1 .ext2 {
22
+ &:extend(.foo all);
23
+ }
24
+
25
+ .ext3,
26
+ .ext4 {
27
+ &:extend(.foo all);
28
+ &:extend(.bar all);
29
+ }
30
+
31
+ div.ext5,
32
+ .ext6 > .ext5 {
33
+ width: 100px;
34
+ }
35
+
36
+ .ext7 {
37
+ &:extend(.ext5 all);
38
+ }
39
+
40
+ .ext8.ext9 {
41
+ result: add-foo;
42
+ }
43
+ .ext8 .ext9,
44
+ .ext8 + .ext9,
45
+ .ext8 > .ext9 {
46
+ result: bar-matched;
47
+ }
48
+ .ext8.nomatch {
49
+ result: none;
50
+ }
51
+ .ext8 {
52
+ .ext9 {
53
+ result: match-nested-bar;
54
+ }
55
+ }
56
+ .ext8 {
57
+ &.ext9 {
58
+ result: match-nested-foo;
59
+ }
60
+ }
61
+
62
+ .fuu:extend(.ext8.ext9 all) {}
63
+ .buu:extend(.ext8 .ext9 all) {}
64
+ .zap:extend(.ext8 + .ext9 all) {}
65
+ .zoo:extend(.ext8 > .ext9 all) {}
66
+
67
+ .aa {
68
+ color: black;
69
+ .dd {
70
+ background: red;
71
+ }
72
+ }
73
+ .bb {
74
+ background: red;
75
+ .bb {
76
+ color: black;
77
+ }
78
+ }
79
+ .cc:extend(.aa,.bb) {}
80
+ .ee:extend(.dd all,.bb) {}
81
+ .ff:extend(.dd,.bb all) {}
@@ -17,6 +17,7 @@
17
17
  saturate: saturate(#29332f, 20%);
18
18
  desaturate: desaturate(#203c31, 20%);
19
19
  greyscale: greyscale(#203c31);
20
+ hsl-clamp: hsl(380, 150%, 150%);
20
21
  spin-p: spin(hsl(340, 50%, 50%), 40);
21
22
  spin-n: spin(hsl(30, 50%, 50%), -40);
22
23
  luma-white: luma(#fff);
@@ -38,10 +39,15 @@
38
39
  contrast-cyan: contrast(#00ffff);
39
40
  contrast-light: contrast(#fff, #111111, #eeeeee);
40
41
  contrast-dark: contrast(#000, #111111, #eeeeee);
42
+ contrast-wrongorder: contrast(#fff, #eeeeee, #111111, 0.5);
41
43
  contrast-light-thresh: contrast(#fff, #111111, #eeeeee, 0.5);
42
44
  contrast-dark-thresh: contrast(#000, #111111, #eeeeee, 0.5);
43
45
  contrast-high-thresh: contrast(#555, #111111, #eeeeee, 0.6);
44
46
  contrast-low-thresh: contrast(#555, #111111, #eeeeee, 0.1);
47
+ contrast-light-thresh-per: contrast(#fff, #111111, #eeeeee, 50%);
48
+ contrast-dark-thresh-per: contrast(#000, #111111, #eeeeee, 50%);
49
+ contrast-high-thresh-per: contrast(#555, #111111, #eeeeee, 60%);
50
+ contrast-low-thresh-per: contrast(#555, #111111, #eeeeee, 10%);
45
51
  format: %("rgb(%d, %d, %d)", @r, 128, 64);
46
52
  format-string: %("hello %s", "world");
47
53
  format-multiple: %("hello %s %d", "earth", 2);
@@ -49,22 +55,38 @@
49
55
  eformat: e(%("rgb(%d, %d, %d)", @r, 128, 64));
50
56
 
51
57
  unitless: unit(12px);
52
- unit: unit(13px + 1px, em);
58
+ unit: unit((13px + 1px), em);
53
59
 
54
60
  hue: hue(hsl(98, 12%, 95%));
55
61
  saturation: saturation(hsl(98, 12%, 95%));
56
62
  lightness: lightness(hsl(98, 12%, 95%));
63
+ hsvhue: hsvhue(hsv(98, 12%, 95%));
64
+ hsvsaturation: hsvsaturation(hsv(98, 12%, 95%));
65
+ hsvvalue: hsvvalue(hsv(98, 12%, 95%));
57
66
  red: red(#f00);
58
67
  green: green(#0f0);
59
68
  blue: blue(#00f);
60
- rounded: round(@r/3);
61
- rounded-two: round(@r/3, 2);
62
- roundedpx: round(10px / 3);
63
- roundedpx-three: round(10px / 3, 3);
69
+ rounded: round((@r/3));
70
+ rounded-two: round((@r/3), 2);
71
+ roundedpx: round((10px / 3));
72
+ roundedpx-three: round((10px / 3), 3);
64
73
  rounded-percentage: round(10.2%);
65
74
  ceil: ceil(10.1px);
66
75
  floor: floor(12.9px);
67
- percentage: percentage(10px / 50);
76
+ sqrt: sqrt(25px);
77
+ pi: pi();
78
+ mod: mod(13m, 11cm); // could take into account units, doesn't at the moment
79
+ abs: abs(-4%);
80
+ tan: tan(42deg);
81
+ sin: sin(10deg);
82
+ cos: cos(12);
83
+ atan: atan(tan(0.1rad));
84
+ atan: convert(acos(cos(34deg)), deg);
85
+ atan: convert(acos(cos(50grad)), deg);
86
+ pow: pow(8px, 2);
87
+ pow: pow(4, 3);
88
+ pow: pow(3, 3em);
89
+ percentage: percentage((10px / 50));
68
90
  color: color("#ff0011");
69
91
  tint: tint(#777777, 13);
70
92
  tint-full: tint(#777777, 100);
@@ -72,6 +94,9 @@
72
94
  shade: shade(#777777, 13);
73
95
  shade-full: shade(#777777, 100);
74
96
  shade-percent: shade(#777777, 13%);
97
+
98
+ fade-out: fadeOut(red, 5%); // support fadeOut and fadeout
99
+ fade-in: fadein(fadeout(red, 10%), 5%);
75
100
 
76
101
  hsv: hsv(5, 50%, 30%);
77
102
  hsva: hsva(3, 50%, 30%, 0.2);
@@ -91,6 +116,7 @@
91
116
  pixel: ispixel(32px);
92
117
  percent: ispercentage(32%);
93
118
  em: isem(32em);
119
+ cat: isunit(32cat, cat);
94
120
  }
95
121
  }
96
122
 
@@ -109,3 +135,8 @@
109
135
  average: average(#f60000, #0000f6);
110
136
  negation: negation(#f60000, #313131);
111
137
  }
138
+
139
+ #extract {
140
+ @anon: A B C 1 2 3;
141
+ result: extract(@anon, 6) extract(@anon, 5) extract(@anon, 4) extract(@anon, 3) extract(@anon, 2) extract(@anon, 1);
142
+ }
@@ -0,0 +1,8 @@
1
+ @my_theme: "test";
2
+
3
+ @import "import/import-@{my_theme}-e.less";
4
+
5
+ @import "import/import-@{in}@{terpolation}.less";
6
+
7
+ @in: "in";
8
+ @terpolation: "terpolation";
@@ -1,4 +1,4 @@
1
- @import-once "import/import-once-test-c";
2
- @import-once "import/import-once-test-c";
3
- @import-once "import/import-once-test-c.less";
4
- @import-once "import/deeper/import-once-test-a";
1
+ @import "import/import-once-test-c";
2
+ @import "import/import-once-test-c";
3
+ @import "import/import-once-test-c.less";
4
+ @import "import/deeper/import-once-test-a";
@@ -1,12 +1,21 @@
1
1
  @import url(http://fonts.googleapis.com/css?family=Open+Sans);
2
2
 
3
- @import url(something.css) screen and (color) and (max-width: 600px);
3
+ @import url(/absolute/something.css) screen and (color) and (max-width: 600px);
4
+
5
+ @var: 100px;
6
+ @import url("//ha.com/file.css") (min-width:@var);
4
7
 
5
8
  #import-test {
6
9
  .mixin;
7
10
  width: 10px;
8
- height: @a + 10%;
11
+ height: (@a + 10%);
9
12
  }
10
13
  @import "import/import-test-e" screen and (max-width: 600px);
11
14
 
12
15
  @import url("import/import-test-a.less");
16
+
17
+ @import (less, multiple) "import/import-test-d.css" screen and (max-width: 601px);
18
+
19
+ @import (multiple) "import/import-test-e" screen and (max-width: 602px);
20
+
21
+ @import (less, multiple) url("import/import-test-d.css") screen and (max-width: 603px);
@@ -1 +1 @@
1
- @import-once "../import-once-test-c";
1
+ @import "../import-once-test-c";
@@ -0,0 +1 @@
1
+ @import "import-@{in}@{terpolation}2.less";
@@ -0,0 +1,5 @@
1
+ .a {
2
+ var: test;
3
+ }
4
+
5
+ @in: "redefined-does-nothing";
@@ -10,7 +10,7 @@
10
10
  }
11
11
  .scope {
12
12
  @foo: 42;
13
- var: `this.foo.toJS()`;
13
+ var: `parseInt(this.foo.toJS())`;
14
14
  escaped: ~`2 + 5 + 'px'`;
15
15
  }
16
16
  .vars {
@@ -0,0 +1,7 @@
1
+ @media (-o-min-device-pixel-ratio: 2/1) {
2
+ .test-math-and-units {
3
+ font: ignores 0/0 rules;
4
+ test-division: 4 / 2 + 5em;
5
+ simple: 1px + 1px;
6
+ }
7
+ }
@@ -11,16 +11,19 @@
11
11
  }
12
12
  }
13
13
  .top, header > h1 {
14
- color: #222 * 2;
14
+ color: (#222 * 2);
15
15
  }
16
16
  }
17
17
 
18
18
  @media screen {
19
19
  @base: 8;
20
- body { max-width: @base * 60; }
20
+ body { max-width: (@base * 60); }
21
21
  }
22
22
 
23
- @media all and (device-aspect-ratio: 16/9) {
23
+ @ratio_large: 16;
24
+ @ratio_small: 9;
25
+
26
+ @media all and (device-aspect-ratio: @ratio_large / @ratio_small) {
24
27
  body { max-width: 800px; }
25
28
  }
26
29
 
@@ -197,3 +200,11 @@ body {
197
200
  background: blue;
198
201
  }
199
202
  }
203
+
204
+ @media (max-width: 1200px) {
205
+ /* a comment */
206
+
207
+ @media (max-width: 900px) {
208
+ body { font-size: 11px; }
209
+ }
210
+ }