less 2.3.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/lib/less/js/.gitignore +7 -0
  3. data/lib/less/js/.npmignore +1 -0
  4. data/lib/less/js/CHANGELOG.md +118 -0
  5. data/lib/less/js/CONTRIBUTING.md +50 -0
  6. data/lib/less/js/Makefile +14 -2
  7. data/lib/less/js/bin/lessc +72 -21
  8. data/lib/less/js/dist/less-1.3.1.js +4011 -0
  9. data/lib/less/js/dist/less-1.3.1.min.js +9 -0
  10. data/lib/less/js/dist/less-1.3.2.js +4401 -0
  11. data/lib/less/js/dist/less-1.3.2.min.js +9 -0
  12. data/lib/less/js/dist/less-1.3.3.js +4413 -0
  13. data/lib/less/js/dist/less-1.3.3.min.js +9 -0
  14. data/lib/less/js/dist/less-rhino-1.3.1.js +3725 -0
  15. data/lib/less/js/dist/less-rhino-1.3.2.js +3990 -0
  16. data/lib/less/js/dist/less-rhino-1.3.3.js +4002 -0
  17. data/lib/less/js/lib/less/browser.js +192 -53
  18. data/lib/less/js/lib/less/colors.js +1 -0
  19. data/lib/less/js/lib/less/functions.js +159 -10
  20. data/lib/less/js/lib/less/index.js +124 -56
  21. data/lib/less/js/lib/less/lessc_helper.js +62 -0
  22. data/lib/less/js/lib/less/parser.js +352 -135
  23. data/lib/less/js/lib/less/rhino.js +84 -23
  24. data/lib/less/js/lib/less/tree.js +28 -0
  25. data/lib/less/js/lib/less/tree/anonymous.js +15 -1
  26. data/lib/less/js/lib/less/tree/assignment.js +3 -1
  27. data/lib/less/js/lib/less/tree/call.js +12 -6
  28. data/lib/less/js/lib/less/tree/color.js +10 -0
  29. data/lib/less/js/lib/less/tree/dimension.js +3 -1
  30. data/lib/less/js/lib/less/tree/directive.js +9 -5
  31. data/lib/less/js/lib/less/tree/element.js +8 -6
  32. data/lib/less/js/lib/less/tree/import.js +16 -13
  33. data/lib/less/js/lib/less/tree/media.js +16 -9
  34. data/lib/less/js/lib/less/tree/mixin.js +123 -46
  35. data/lib/less/js/lib/less/tree/operation.js +5 -0
  36. data/lib/less/js/lib/less/tree/quoted.js +15 -1
  37. data/lib/less/js/lib/less/tree/ratio.js +13 -0
  38. data/lib/less/js/lib/less/tree/rule.js +7 -0
  39. data/lib/less/js/lib/less/tree/ruleset.js +232 -34
  40. data/lib/less/js/lib/less/tree/selector.js +21 -11
  41. data/lib/less/js/lib/less/tree/unicode-descriptor.js +13 -0
  42. data/lib/less/js/lib/less/tree/url.js +16 -14
  43. data/lib/less/js/lib/less/tree/variable.js +13 -1
  44. data/lib/less/js/package.json +13 -3
  45. data/lib/less/js/test/browser-test-prepare.js +29 -0
  46. data/lib/less/js/test/browser/common.js +74 -0
  47. data/lib/less/js/test/browser/css/relative-urls/urls.css +36 -0
  48. data/lib/less/js/test/browser/css/rootpath-relative/urls.css +36 -0
  49. data/lib/less/js/test/browser/css/rootpath/urls.css +36 -0
  50. data/lib/less/js/test/browser/css/urls.css +36 -0
  51. data/lib/less/js/test/browser/jasmine-html.js +681 -0
  52. data/lib/less/js/test/browser/jasmine.css +82 -0
  53. data/lib/less/js/test/browser/jasmine.js +2600 -0
  54. data/lib/less/js/test/browser/less/imports/urls.less +4 -0
  55. data/lib/less/js/test/browser/less/imports/urls2.less +4 -0
  56. data/lib/less/js/test/browser/less/relative-urls/urls.less +33 -0
  57. data/lib/less/js/test/browser/less/rootpath-relative/urls.less +33 -0
  58. data/lib/less/js/test/browser/less/rootpath/urls.less +33 -0
  59. data/lib/less/js/test/browser/less/urls.less +33 -0
  60. data/lib/less/js/test/browser/phantom-runner.js +139 -0
  61. data/lib/less/js/test/browser/runner-browser.js +3 -0
  62. data/lib/less/js/test/browser/runner-main.js +15 -0
  63. data/lib/less/js/test/browser/runner-relative-urls.js +4 -0
  64. data/lib/less/js/test/browser/runner-rootpath-relative.js +5 -0
  65. data/lib/less/js/test/browser/runner-rootpath.js +4 -0
  66. data/lib/less/js/test/browser/template.htm +10 -0
  67. data/lib/less/js/test/css/charsets.css +1 -0
  68. data/lib/less/js/test/css/colors.css +22 -0
  69. data/lib/less/js/test/css/comments.css +7 -0
  70. data/lib/less/js/test/css/css-3.css +57 -2
  71. data/lib/less/js/test/css/css-escapes.css +4 -0
  72. data/lib/less/js/test/css/css.css +11 -11
  73. data/lib/less/js/test/css/debug/linenumbers-all.css +43 -0
  74. data/lib/less/js/test/css/debug/linenumbers-comments.css +35 -0
  75. data/lib/less/js/test/css/debug/linenumbers-mediaquery.css +35 -0
  76. data/lib/less/js/test/css/functions.css +59 -2
  77. data/lib/less/js/test/css/ie-filters.css +7 -3
  78. data/lib/less/js/test/css/import-once.css +3 -0
  79. data/lib/less/js/test/css/import.css +7 -9
  80. data/lib/less/js/test/css/javascript.css +3 -2
  81. data/lib/less/js/test/css/media.css +116 -0
  82. data/lib/less/js/test/css/mixins-args.css +23 -4
  83. data/lib/less/js/test/css/mixins-guards.css +13 -0
  84. data/lib/less/js/test/css/mixins-important.css +21 -0
  85. data/lib/less/js/test/css/mixins-named-args.css +27 -0
  86. data/lib/less/js/test/css/mixins.css +50 -0
  87. data/lib/less/js/test/css/scope.css +20 -0
  88. data/lib/less/js/test/css/selectors.css +64 -0
  89. data/lib/less/js/test/css/static-urls/urls.css +42 -0
  90. data/lib/less/js/test/css/strings.css +2 -2
  91. data/lib/less/js/test/css/urls.css +42 -0
  92. data/lib/less/js/test/css/variables.css +0 -1
  93. data/lib/less/js/test/css/whitespace.css +4 -0
  94. data/lib/less/js/test/less-test.js +145 -36
  95. data/lib/less/js/test/less/charsets.less +3 -0
  96. data/lib/less/js/test/less/colors.less +27 -0
  97. data/lib/less/js/test/less/comments.less +12 -0
  98. data/lib/less/js/test/less/css-3.less +54 -6
  99. data/lib/less/js/test/less/css-escapes.less +6 -1
  100. data/lib/less/js/test/less/css.less +14 -12
  101. data/lib/less/js/test/less/debug/import/test.less +25 -0
  102. data/lib/less/js/test/less/debug/linenumbers.less +23 -0
  103. data/lib/less/js/test/less/errors/bad-variable-declaration1.less +1 -0
  104. data/lib/less/js/test/less/errors/bad-variable-declaration1.txt +2 -0
  105. data/lib/less/js/test/less/errors/comment-in-selector.less +1 -0
  106. data/lib/less/js/test/less/errors/comment-in-selector.txt +2 -0
  107. data/lib/less/js/test/less/errors/import-missing.less +1 -0
  108. data/lib/less/js/test/less/errors/import-missing.txt +3 -0
  109. data/lib/less/js/test/less/errors/import-no-semi.less +1 -0
  110. data/lib/less/js/test/less/errors/import-no-semi.txt +2 -0
  111. data/lib/less/js/test/less/errors/import-subfolder1.less +1 -0
  112. data/lib/less/js/test/less/errors/import-subfolder1.txt +3 -0
  113. data/lib/less/js/test/less/errors/import-subfolder2.less +1 -0
  114. data/lib/less/js/test/less/errors/import-subfolder2.txt +2 -0
  115. data/lib/less/js/test/less/errors/imports/import-subfolder1.less +1 -0
  116. data/lib/less/js/test/less/errors/imports/import-subfolder2.less +1 -0
  117. data/lib/less/js/test/less/errors/imports/import-test.less +4 -0
  118. data/lib/less/js/test/less/errors/imports/subfolder/mixin-not-defined.less +1 -0
  119. data/lib/less/js/test/less/errors/imports/subfolder/parse-error-curly-bracket.less +1 -0
  120. data/lib/less/js/test/less/errors/javascript-error.less +3 -0
  121. data/lib/less/js/test/less/errors/javascript-error.txt +4 -0
  122. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-1.less +6 -0
  123. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-1.txt +4 -0
  124. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-2.less +6 -0
  125. data/lib/less/js/test/less/errors/mixed-mixin-definition-args-2.txt +4 -0
  126. data/lib/less/js/test/less/errors/mixin-not-defined.less +11 -0
  127. data/lib/less/js/test/less/errors/mixin-not-defined.txt +3 -0
  128. data/lib/less/js/test/less/errors/mixin-not-matched.less +6 -0
  129. data/lib/less/js/test/less/errors/mixin-not-matched.txt +3 -0
  130. data/lib/less/js/test/less/errors/mixin-not-matched2.less +6 -0
  131. data/lib/less/js/test/less/errors/mixin-not-matched2.txt +3 -0
  132. data/lib/less/js/test/less/errors/parse-error-curly-bracket.less +1 -0
  133. data/lib/less/js/test/less/errors/parse-error-curly-bracket.txt +2 -0
  134. data/lib/less/js/test/less/errors/parse-error-missing-bracket.less +2 -0
  135. data/lib/less/js/test/less/errors/parse-error-missing-bracket.txt +2 -0
  136. data/lib/less/js/test/less/errors/parse-error-with-import.less +13 -0
  137. data/lib/less/js/test/less/errors/parse-error-with-import.txt +4 -0
  138. data/lib/less/js/test/less/errors/property-ie5-hack.less +3 -0
  139. data/lib/less/js/test/less/errors/property-ie5-hack.txt +4 -0
  140. data/lib/less/js/test/less/errors/recursive-variable.less +1 -0
  141. data/lib/less/js/test/less/errors/recursive-variable.txt +2 -0
  142. data/lib/less/js/test/less/functions.less +64 -2
  143. data/lib/less/js/test/less/ie-filters.less +7 -0
  144. data/lib/less/js/test/less/import-once.less +4 -0
  145. data/lib/less/js/test/less/import.less +2 -1
  146. data/lib/less/js/test/less/import/deeper/import-once-test-a.less +1 -0
  147. data/lib/less/js/test/less/import/import-and-relative-paths-test.less +6 -0
  148. data/lib/less/js/test/less/import/import-charset-test.less +1 -0
  149. data/lib/less/js/test/less/import/import-once-test-c.less +6 -0
  150. data/lib/less/js/test/less/import/import-test-a.less +1 -0
  151. data/lib/less/js/test/less/import/import-test-c.less +0 -1
  152. data/lib/less/js/test/less/import/imports/font.less +8 -0
  153. data/lib/less/js/test/less/import/imports/logo.less +5 -0
  154. data/lib/less/js/test/less/import/urls.less +1 -0
  155. data/lib/less/js/test/less/javascript.less +4 -2
  156. data/lib/less/js/test/less/media.less +120 -0
  157. data/lib/less/js/test/less/mixins-args.less +40 -10
  158. data/lib/less/js/test/less/mixins-guards.less +30 -0
  159. data/lib/less/js/test/less/mixins-important.less +4 -0
  160. data/lib/less/js/test/less/mixins-named-args.less +36 -0
  161. data/lib/less/js/test/less/mixins.less +47 -0
  162. data/lib/less/js/test/less/scope.less +48 -1
  163. data/lib/less/js/test/less/selectors.less +81 -0
  164. data/lib/less/js/test/less/static-urls/urls.less +33 -0
  165. data/lib/less/js/test/less/strings.less +1 -1
  166. data/lib/less/js/test/less/urls.less +33 -0
  167. data/lib/less/js/test/less/variables.less +0 -1
  168. data/lib/less/js/test/less/whitespace.less +7 -0
  169. data/lib/less/version.rb +1 -1
  170. metadata +101 -4
  171. data/lib/less/js/CHANGELOG +0 -41
  172. data/lib/less/js/lib/less/cssmin.js +0 -355
@@ -0,0 +1,4 @@
1
+ ParseError: Syntax Error on line 8 in {path}parse-error-with-import.less:8:8
2
+ 7
3
+ 8 nonsense;
4
+ 9
@@ -0,0 +1,3 @@
1
+ .test {
2
+ display/*/: block; /*sorry for IE5*/
3
+ }
@@ -0,0 +1,4 @@
1
+ ParseError: Syntax Error on line 2 in {path}property-ie5-hack.less:2:2
2
+ 1 .test {
3
+ 2 display/*/: block; /*sorry for IE5*/
4
+ 3 }
@@ -0,0 +1 @@
1
+ @bodyColor: darken(@bodyColor, 30%);
@@ -0,0 +1,2 @@
1
+ NameError: Recursive variable definition for @bodyColor in {path}recursive-variable.less:1:19
2
+ 1 @bodyColor: darken(@bodyColor, 30%);
@@ -1,10 +1,12 @@
1
1
  #functions {
2
2
  @var: 10;
3
+ @colors: #000, #fff;
3
4
  color: _color("evil red"); // #660000
4
5
  width: increment(15);
5
6
  height: undefined("self");
6
7
  border-width: add(2, 3);
7
8
  variable: increment(@var);
9
+ background: linear-gradient(@colors);
8
10
  }
9
11
 
10
12
  #built-in {
@@ -17,24 +19,72 @@
17
19
  greyscale: greyscale(#203c31);
18
20
  spin-p: spin(hsl(340, 50%, 50%), 40);
19
21
  spin-n: spin(hsl(30, 50%, 50%), -40);
22
+ luma-white: luma(#fff);
23
+ luma-black: luma(#000);
24
+ luma-black-alpha: luma(rgba(0,0,0,0.5));
25
+ luma-red: luma(#ff0000);
26
+ luma-green: luma(#00ff00);
27
+ luma-blue: luma(#0000ff);
28
+ luma-yellow: luma(#ffff00);
29
+ luma-cyan: luma(#00ffff);
30
+ luma-white-alpha: luma(rgba(255,255,255,0.5));
31
+ contrast-filter: contrast(30%);
32
+ contrast-white: contrast(#fff);
33
+ contrast-black: contrast(#000);
34
+ contrast-red: contrast(#ff0000);
35
+ contrast-green: contrast(#00ff00);
36
+ contrast-blue: contrast(#0000ff);
37
+ contrast-yellow: contrast(#ffff00);
38
+ contrast-cyan: contrast(#00ffff);
39
+ contrast-light: contrast(#fff, #111111, #eeeeee);
40
+ contrast-dark: contrast(#000, #111111, #eeeeee);
41
+ contrast-light-thresh: contrast(#fff, #111111, #eeeeee, 0.5);
42
+ contrast-dark-thresh: contrast(#000, #111111, #eeeeee, 0.5);
43
+ contrast-high-thresh: contrast(#555, #111111, #eeeeee, 0.6);
44
+ contrast-low-thresh: contrast(#555, #111111, #eeeeee, 0.1);
20
45
  format: %("rgb(%d, %d, %d)", @r, 128, 64);
21
46
  format-string: %("hello %s", "world");
22
47
  format-multiple: %("hello %s %d", "earth", 2);
23
48
  format-url-encode: %('red is %A', #ff0000);
24
49
  eformat: e(%("rgb(%d, %d, %d)", @r, 128, 64));
50
+
51
+ unitless: unit(12px);
52
+ unit: unit(13px + 1px, em);
25
53
 
26
54
  hue: hue(hsl(98, 12%, 95%));
27
55
  saturation: saturation(hsl(98, 12%, 95%));
28
56
  lightness: lightness(hsl(98, 12%, 95%));
57
+ red: red(#f00);
58
+ green: green(#0f0);
59
+ blue: blue(#00f);
29
60
  rounded: round(@r/3);
61
+ rounded-two: round(@r/3, 2);
30
62
  roundedpx: round(10px / 3);
63
+ roundedpx-three: round(10px / 3, 3);
64
+ rounded-percentage: round(10.2%);
65
+ ceil: ceil(10.1px);
66
+ floor: floor(12.9px);
31
67
  percentage: percentage(10px / 50);
32
68
  color: color("#ff0011");
69
+ tint: tint(#777777, 13);
70
+ tint-full: tint(#777777, 100);
71
+ tint-percent: tint(#777777, 13%);
72
+ shade: shade(#777777, 13);
73
+ shade-full: shade(#777777, 100);
74
+ shade-percent: shade(#777777, 13%);
75
+
76
+ hsv: hsv(5, 50%, 30%);
77
+ hsva: hsva(3, 50%, 30%, 0.2);
78
+
79
+ mix: mix(#ff0000, #ffff00, 80);
80
+ mix-0: mix(#ff0000, #ffff00, 0);
81
+ mix-100: mix(#ff0000, #ffff00, 100);
82
+ mix-weightless: mix(#ff0000, #ffff00);
33
83
 
34
84
  .is-a {
35
85
  color: iscolor(#ddd);
36
- color: iscolor(red);
37
- color: iscolor(rgb(0, 0, 0));
86
+ color1: iscolor(red);
87
+ color2: iscolor(rgb(0, 0, 0));
38
88
  keyword: iskeyword(hello);
39
89
  number: isnumber(32);
40
90
  string: isstring("hello");
@@ -47,3 +97,15 @@
47
97
  #alpha {
48
98
  alpha: darken(hsla(25, 50%, 50%, 0.6), 10%);
49
99
  }
100
+
101
+ #blendmodes {
102
+ multiply: multiply(#f60000, #f60000);
103
+ screen: screen(#f60000, #0000f6);
104
+ overlay: overlay(#f60000, #0000f6);
105
+ softlight: softlight(#f60000, #ffffff);
106
+ hardlight: hardlight(#f60000, #0000f6);
107
+ difference: difference(#f60000, #0000f6);
108
+ exclusion: exclusion(#f60000, #0000f6);
109
+ average: average(#f60000, #0000f6);
110
+ negation: negation(#f60000, #313131);
111
+ }
@@ -5,4 +5,11 @@
5
5
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity = 20);
6
6
  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@fat);
7
7
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#333333", endColorstr=@cloudhead, GradientType=@fat);
8
+ }
9
+ .evalTest(@arg) {
10
+ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=@arg);
11
+ }
12
+ .evalTest1 {
13
+ .evalTest(30);
14
+ .evalTest(5);
8
15
  }
@@ -0,0 +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,4 +1,3 @@
1
- @import url("import/import-test-a.less");
2
1
  @import url(http://fonts.googleapis.com/css?family=Open+Sans);
3
2
 
4
3
  @import url(something.css) screen and (color) and (max-width: 600px);
@@ -9,3 +8,5 @@
9
8
  height: @a + 10%;
10
9
  }
11
10
  @import "import/import-test-e" screen and (max-width: 600px);
11
+
12
+ @import url("import/import-test-a.less");
@@ -0,0 +1 @@
1
+ @import-once "../import-once-test-c";
@@ -0,0 +1,6 @@
1
+ @import "../css/background.css";
2
+ @import "import-test-d.css";
3
+
4
+ @import "imports/logo";
5
+ @import "imports/font";
6
+
@@ -0,0 +1 @@
1
+ @charset "ISO-8859-1";
@@ -0,0 +1,6 @@
1
+
2
+ @c: red;
3
+
4
+ #import {
5
+ color: @c;
6
+ }
@@ -1,2 +1,3 @@
1
1
  @import "import-test-b.less";
2
2
  @a: 20%;
3
+ @import "urls.less";
@@ -1,5 +1,4 @@
1
1
 
2
- @import "import-test-d.css";
3
2
  @c: red;
4
3
 
5
4
  #import {
@@ -0,0 +1,8 @@
1
+ @font-face {
2
+ font-family: xecret;
3
+ src: url('../assets/xecret.ttf');
4
+ }
5
+
6
+ #secret {
7
+ font-family: xecret, sans-serif;
8
+ }
@@ -0,0 +1,5 @@
1
+ #logo {
2
+ width: 100px;
3
+ height: 100px;
4
+ background: url('../assets/logo.png');
5
+ }
@@ -0,0 +1 @@
1
+ // empty file showing that it loads from the relative path first
@@ -3,8 +3,10 @@
3
3
  js: `1 + 1`;
4
4
  js: `"hello world"`;
5
5
  js: `[1, 2, 3]`;
6
- title: `process.title`;
6
+ title: `typeof process.title`;
7
7
  ternary: `(1 + 1 == 2 ? true : false)`;
8
+ multiline: `(function(){var x = 1 + 1;
9
+ return x})()`;
8
10
  }
9
11
  .scope {
10
12
  @foo: 42;
@@ -23,5 +25,5 @@
23
25
  @ary: 1, 2, 3;
24
26
  @ary2: 1 2 3;
25
27
  ary: `@{ary}.join(', ')`;
26
- ary: `@{ary2}.join(', ')`;
28
+ ary1: `@{ary2}.join(', ')`;
27
29
  }
@@ -20,6 +20,10 @@
20
20
  body { max-width: @base * 60; }
21
21
  }
22
22
 
23
+ @media all and (device-aspect-ratio: 16/9) {
24
+ body { max-width: 800px; }
25
+ }
26
+
23
27
  @media all and (orientation:portrait) {
24
28
  aside { float: none; }
25
29
  }
@@ -44,6 +48,33 @@ body {
44
48
  }
45
49
  }
46
50
 
51
+ @media screen {
52
+ .sidebar {
53
+ width: 300px;
54
+ @media (orientation: landscape) {
55
+ width: 500px;
56
+ }
57
+ }
58
+ }
59
+
60
+ @media a {
61
+ .first {
62
+ @media b {
63
+ .second {
64
+ .third {
65
+ width: 300px;
66
+ @media c {
67
+ width: 500px;
68
+ }
69
+ }
70
+ .fourth {
71
+ width: 3;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+
47
78
  body {
48
79
  @media a, b and c {
49
80
  width: 95%;
@@ -77,3 +108,92 @@ body {
77
108
  @media @smartphone {
78
109
  width: 480px;
79
110
  }
111
+
112
+ @media print {
113
+ @page :left {
114
+ margin: 0.5cm;
115
+ }
116
+ @page :right {
117
+ margin: 0.5cm;
118
+ }
119
+ @page Test:first {
120
+ margin: 1cm;
121
+ }
122
+ @page :first {
123
+ size: 8.5in 11in;
124
+ @top-left {
125
+ margin: 1cm;
126
+ }
127
+ @top-left-corner {
128
+ margin: 1cm;
129
+ }
130
+ @top-center {
131
+ margin: 1cm;
132
+ }
133
+ @top-right {
134
+ margin: 1cm;
135
+ }
136
+ @top-right-corner {
137
+ margin: 1cm;
138
+ }
139
+ @bottom-left {
140
+ margin: 1cm;
141
+ }
142
+ @bottom-left-corner {
143
+ margin: 1cm;
144
+ }
145
+ @bottom-center {
146
+ margin: 1cm;
147
+ }
148
+ @bottom-right {
149
+ margin: 1cm;
150
+ }
151
+ @bottom-right-corner {
152
+ margin: 1cm;
153
+ }
154
+ @left-top {
155
+ margin: 1cm;
156
+ }
157
+ @left-middle {
158
+ margin: 1cm;
159
+ }
160
+ @left-bottom {
161
+ margin: 1cm;
162
+ }
163
+ @right-top {
164
+ margin: 1cm;
165
+ }
166
+ @right-middle {
167
+ content: "Page " counter(page);
168
+ }
169
+ @right-bottom {
170
+ margin: 1cm;
171
+ }
172
+ }
173
+ }
174
+
175
+ @media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (-o-min-device-pixel-ratio: 2/1), (min-resolution: 2dppx), (min-resolution: 128dpcm) {
176
+ .b {
177
+ background: red;
178
+ }
179
+ }
180
+
181
+ .bg() {
182
+ background: red;
183
+
184
+ @media (max-width: 500px) {
185
+ background: green;
186
+ }
187
+ }
188
+
189
+ body {
190
+ .bg();
191
+ }
192
+
193
+ @bpMedium: 1000px;
194
+ @media (max-width: @bpMedium) {
195
+ body {
196
+ .bg();
197
+ background: blue;
198
+ }
199
+ }
@@ -19,6 +19,9 @@
19
19
 
20
20
  #hidden {
21
21
  .hidden;
22
+ }
23
+
24
+ #hidden1 {
22
25
  .hidden();
23
26
  }
24
27
 
@@ -96,16 +99,6 @@ body {
96
99
  }
97
100
  #var-inside { .var-inside; }
98
101
 
99
- // # mixins
100
-
101
- #id-mixin () {
102
- color: red;
103
- }
104
- .id-class {
105
- #id-mixin();
106
- #id-mixin;
107
- }
108
-
109
102
  .mixin-arguments (@width: 0px, ...) {
110
103
  border: @arguments;
111
104
  width: @width;
@@ -135,3 +128,40 @@ body {
135
128
  .edge-case {
136
129
  .mixin-arguments("{");
137
130
  }
131
+
132
+ // semi-colon vs comma for delimiting
133
+
134
+ .mixin-takes-one(@a) {
135
+ one: @a;
136
+ }
137
+
138
+ .mixin-takes-two(@a; @b) {
139
+ one: @a;
140
+ two: @b;
141
+ }
142
+
143
+ .comma-vs-semi-colon {
144
+ .mixin-takes-two(@a : a; @b : b, c);
145
+ .mixin-takes-two(@a : d, e; @b : f);
146
+ .mixin-takes-one(@a: g);
147
+ .mixin-takes-one(@a : h;);
148
+ .mixin-takes-one(i);
149
+ .mixin-takes-one(j;);
150
+ .mixin-takes-two(k, l);
151
+ .mixin-takes-one(m, n;);
152
+ .mixin-takes-two(o, p; q);
153
+ .mixin-takes-two(r, s; t;);
154
+ }
155
+
156
+ .mixin-conflict(@a:defA, @b:defB, @c:defC) {
157
+ three: @a, @b, @c;
158
+ }
159
+
160
+ .mixin-conflict(@a:defA, @b:defB, @c:defC, @d:defD) {
161
+ four: @a, @b, @c, @d;
162
+ }
163
+
164
+ #named-conflict {
165
+ .mixin-conflict(11, 12, 13, @a:a);
166
+ .mixin-conflict(@a:a, 21, 22, 23);
167
+ }
@@ -92,3 +92,33 @@
92
92
  .bool () when not (false) and (false), not (false) { content: not false and false, not false }
93
93
 
94
94
  .bool1 { .bool }
95
+
96
+ .equality-unit-test(@num) when (@num = 1%) {
97
+ test: fail;
98
+ }
99
+ .equality-unit-test(@num) when (@num = 2) {
100
+ test: pass;
101
+ }
102
+ .equality-units {
103
+ .equality-unit-test(1px);
104
+ .equality-unit-test(2px);
105
+ }
106
+
107
+ .colorguard(@col) when (@col = red) { content: is @col; }
108
+ .colorguard(@col) when not (blue = @col) { content: is not blue its @col; }
109
+ .colorguard(@col) {}
110
+ .colorguardtest {
111
+ .colorguard(red);
112
+ .colorguard(blue);
113
+ .colorguard(purple);
114
+ }
115
+
116
+ .stringguard(@str) when (@str = "theme1") { content: is theme1; }
117
+ .stringguard(@str) when not ("theme2" = @str) { content: is not theme2; }
118
+ .stringguard(@str) when (~"theme1" = @str) { content: is theme1 no quotes; }
119
+ .stringguard(@str) {}
120
+ .stringguardtest {
121
+ .stringguard("theme1");
122
+ .stringguard("theme2");
123
+ .stringguard(theme1);
124
+ }