less 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +4 -0
  3. data/Gemfile +1 -1
  4. data/less.gemspec +1 -1
  5. data/lib/less/defaults.rb +3 -3
  6. data/lib/less/java_script/v8_context.rb +1 -1
  7. data/lib/less/js/.gitattributes +3 -2
  8. data/lib/less/js/.gitignore +18 -2
  9. data/lib/less/js/.jshintrc +11 -0
  10. data/lib/less/js/CHANGELOG.md +87 -2
  11. data/lib/less/js/CONTRIBUTING.md +4 -3
  12. data/lib/less/js/Gruntfile.js +290 -0
  13. data/lib/less/js/README.md +342 -12
  14. data/lib/less/js/benchmark/benchmark.less +194 -194
  15. data/lib/less/js/benchmark/less-benchmark.js +9 -10
  16. data/lib/less/js/bin/lessc +154 -12
  17. data/lib/less/js/bower.json +18 -0
  18. data/lib/less/js/build.gradle +347 -0
  19. data/lib/less/js/build/README.md +350 -0
  20. data/lib/less/js/build/browser-header.js +4 -0
  21. data/lib/less/js/build/build.yml +160 -0
  22. data/lib/less/js/build/require-rhino.js +7 -2
  23. data/lib/less/js/build/rhino-header.js +4 -0
  24. data/lib/less/js/build/rhino-modules.js +131 -0
  25. data/lib/less/js/build/tasks/.gitkeep +1 -0
  26. data/lib/less/js/dist/less-1.5.0.js +6914 -0
  27. data/lib/less/js/dist/less-1.5.0.min.js +13 -0
  28. data/lib/less/js/dist/less-1.5.1.js +6941 -0
  29. data/lib/less/js/dist/less-1.5.1.min.js +13 -0
  30. data/lib/less/js/dist/less-1.6.0.js +7485 -0
  31. data/lib/less/js/dist/less-1.6.0.min.js +16 -0
  32. data/lib/less/js/dist/less-1.6.1.js +7513 -0
  33. data/lib/less/js/dist/less-1.6.1.min.js +16 -0
  34. data/lib/less/js/dist/less-1.6.2.js +7624 -0
  35. data/lib/less/js/dist/less-1.6.2.min.js +16 -0
  36. data/lib/less/js/dist/less-rhino-1.5.1.js +6831 -0
  37. data/lib/less/js/dist/less-rhino-1.6.2.js +9017 -0
  38. data/lib/less/js/dist/lessc-rhino-1.6.2.js +449 -0
  39. data/lib/less/js/gradle/wrapper/gradle-wrapper.jar +0 -0
  40. data/lib/less/js/gradle/wrapper/gradle-wrapper.properties +6 -0
  41. data/lib/less/js/gradlew +164 -0
  42. data/lib/less/js/gradlew.bat +90 -0
  43. data/lib/less/js/lib/less/browser.js +482 -367
  44. data/lib/less/js/lib/less/colors.js +0 -1
  45. data/lib/less/js/lib/less/encoder.js +4 -0
  46. data/lib/less/js/lib/less/env.js +50 -19
  47. data/lib/less/js/lib/less/extend-visitor.js +66 -41
  48. data/lib/less/js/lib/less/functions.js +309 -104
  49. data/lib/less/js/lib/less/import-visitor.js +21 -10
  50. data/lib/less/js/lib/less/index.js +90 -68
  51. data/lib/less/js/lib/less/join-selector-visitor.js +11 -4
  52. data/lib/less/js/lib/less/lessc_helper.js +56 -45
  53. data/lib/less/js/lib/less/parser.js +830 -460
  54. data/lib/less/js/lib/less/rhino.js +380 -58
  55. data/lib/less/js/lib/less/source-map-output.js +141 -0
  56. data/lib/less/js/lib/less/to-css-visitor.js +215 -0
  57. data/lib/less/js/lib/less/tree.js +57 -5
  58. data/lib/less/js/lib/less/tree/alpha.js +13 -5
  59. data/lib/less/js/lib/less/tree/anonymous.js +11 -5
  60. data/lib/less/js/lib/less/tree/assignment.js +11 -5
  61. data/lib/less/js/lib/less/tree/call.js +19 -8
  62. data/lib/less/js/lib/less/tree/color.js +59 -36
  63. data/lib/less/js/lib/less/tree/comment.js +17 -4
  64. data/lib/less/js/lib/less/tree/condition.js +3 -3
  65. data/lib/less/js/lib/less/tree/dimension.js +161 -153
  66. data/lib/less/js/lib/less/tree/directive.js +39 -18
  67. data/lib/less/js/lib/less/tree/element.js +41 -18
  68. data/lib/less/js/lib/less/tree/expression.js +11 -5
  69. data/lib/less/js/lib/less/tree/extend.js +11 -1
  70. data/lib/less/js/lib/less/tree/import.js +34 -20
  71. data/lib/less/js/lib/less/tree/javascript.js +16 -10
  72. data/lib/less/js/lib/less/tree/keyword.js +5 -2
  73. data/lib/less/js/lib/less/tree/media.js +39 -22
  74. data/lib/less/js/lib/less/tree/mixin.js +135 -56
  75. data/lib/less/js/lib/less/tree/negative.js +4 -2
  76. data/lib/less/js/lib/less/tree/operation.js +17 -12
  77. data/lib/less/js/lib/less/tree/paren.js +5 -2
  78. data/lib/less/js/lib/less/tree/quoted.js +9 -6
  79. data/lib/less/js/lib/less/tree/rule.js +39 -21
  80. data/lib/less/js/lib/less/tree/ruleset.js +229 -145
  81. data/lib/less/js/lib/less/tree/selector.js +101 -34
  82. data/lib/less/js/lib/less/tree/unicode-descriptor.js +4 -3
  83. data/lib/less/js/lib/less/tree/url.js +33 -11
  84. data/lib/less/js/lib/less/tree/value.js +13 -6
  85. data/lib/less/js/lib/less/tree/variable.js +13 -8
  86. data/lib/less/js/lib/less/visitor.js +117 -25
  87. data/lib/less/js/lib/source-map/source-map-0.1.31.js +1933 -0
  88. data/lib/less/js/lib/source-map/source-map-footer.js +4 -0
  89. data/lib/less/js/lib/source-map/source-map-header.js +3 -0
  90. data/lib/less/js/package.json +30 -15
  91. data/lib/less/js/test/browser/common.js +131 -56
  92. data/lib/less/js/test/browser/css/global-vars/simple.css +3 -0
  93. data/lib/less/js/test/browser/css/modify-vars/simple.css +8 -0
  94. data/lib/less/js/test/browser/css/relative-urls/urls.css +8 -9
  95. data/lib/less/js/test/browser/css/rootpath-relative/urls.css +0 -1
  96. data/lib/less/js/test/browser/css/rootpath/urls.css +0 -1
  97. data/lib/less/js/test/browser/css/urls.css +18 -14
  98. data/lib/less/js/test/browser/es5.js +27 -0
  99. data/lib/less/js/test/{less/errors/color-operation-error.less → browser/less/console-errors/test-error.less} +0 -0
  100. data/lib/less/js/test/browser/less/console-errors/test-error.txt +2 -0
  101. data/lib/less/js/test/browser/less/global-vars/simple.less +3 -0
  102. data/lib/less/js/test/browser/less/modify-vars/imports/simple2.less +4 -0
  103. data/lib/less/js/test/browser/less/modify-vars/simple.less +8 -0
  104. data/lib/less/js/test/browser/less/relative-urls/urls.less +1 -1
  105. data/lib/less/js/test/browser/less/rootpath-relative/urls.less +1 -1
  106. data/lib/less/js/test/browser/less/rootpath/urls.less +1 -1
  107. data/lib/less/js/test/browser/less/urls.less +9 -1
  108. data/lib/less/js/test/browser/phantom-runner.js +112 -103
  109. data/lib/less/js/test/browser/runner-browser-options.js +42 -0
  110. data/lib/less/js/test/browser/{runner-browser.js → runner-browser-spec.js} +7 -2
  111. data/lib/less/js/test/browser/runner-console-errors.js +5 -0
  112. data/lib/less/js/test/browser/runner-errors-options.js +5 -0
  113. data/lib/less/js/test/browser/runner-errors-spec.js +4 -0
  114. data/lib/less/js/test/browser/runner-global-vars-options.js +4 -0
  115. data/lib/less/js/test/browser/runner-global-vars-spec.js +3 -0
  116. data/lib/less/js/test/browser/runner-legacy-options.js +4 -0
  117. data/lib/less/js/test/browser/{runner-legacy.js → runner-legacy-spec.js} +1 -4
  118. data/lib/less/js/test/browser/runner-main-options.js +15 -0
  119. data/lib/less/js/test/browser/runner-main-spec.js +3 -0
  120. data/lib/less/js/test/browser/runner-modify-vars-options.js +2 -0
  121. data/lib/less/js/test/browser/runner-modify-vars-spec.js +43 -0
  122. data/lib/less/js/test/browser/runner-no-js-errors-options.js +4 -0
  123. data/lib/less/js/test/browser/runner-no-js-errors-spec.js +4 -0
  124. data/lib/less/js/test/browser/runner-production-options.js +3 -0
  125. data/lib/less/js/test/browser/{runner-production.js → runner-production-spec.js} +1 -3
  126. data/lib/less/js/test/browser/runner-relative-urls-options.js +3 -0
  127. data/lib/less/js/test/browser/{runner-relative-urls.js → runner-relative-urls-spec.js} +1 -2
  128. data/lib/less/js/test/browser/runner-rootpath-options.js +3 -0
  129. data/lib/less/js/test/browser/runner-rootpath-relative-options.js +4 -0
  130. data/lib/less/js/test/browser/{runner-rootpath-relative.js → runner-rootpath-relative-spec.js} +1 -3
  131. data/lib/less/js/test/browser/{runner-rootpath.js → runner-rootpath-spec.js} +1 -2
  132. data/lib/less/js/test/browser/test-runner-template.tmpl +47 -0
  133. data/lib/less/js/test/css/colors.css +7 -0
  134. data/lib/less/js/test/css/comments.css +9 -4
  135. data/lib/less/js/test/css/compression/compression.css +3 -2
  136. data/lib/less/js/test/css/css-3.css +17 -5
  137. data/lib/less/js/test/css/css-guards.css +37 -0
  138. data/lib/less/js/test/css/debug/linenumbers-all.css +6 -0
  139. data/lib/less/js/test/css/debug/linenumbers-comments.css +5 -0
  140. data/lib/less/js/test/css/debug/linenumbers-mediaquery.css +5 -0
  141. data/lib/less/js/test/css/empty.css +0 -0
  142. data/lib/less/js/test/css/extend-chaining.css +9 -0
  143. data/lib/less/js/test/css/extend-selector.css +10 -2
  144. data/lib/less/js/test/css/extract-and-length.css +133 -0
  145. data/lib/less/js/test/css/functions.css +23 -10
  146. data/lib/less/js/test/css/globalVars/extended.css +12 -0
  147. data/lib/less/js/test/css/globalVars/simple.css +6 -0
  148. data/lib/less/js/test/css/import-inline.css +5 -0
  149. data/lib/less/js/test/css/import-once.css +12 -0
  150. data/lib/less/js/test/css/import-reference.css +49 -0
  151. data/lib/less/js/test/css/import.css +0 -2
  152. data/lib/less/js/test/css/media.css +21 -5
  153. data/lib/less/js/test/css/merge.css +26 -0
  154. data/lib/less/js/test/css/mixins-guards-default-func.css +129 -0
  155. data/lib/less/js/test/css/mixins-guards.css +6 -0
  156. data/lib/less/js/test/css/mixins-important.css +7 -0
  157. data/lib/less/js/test/css/mixins-interpolated.css +39 -0
  158. data/lib/less/js/test/css/mixins.css +20 -0
  159. data/lib/less/js/test/css/modifyVars/extended.css +9 -0
  160. data/lib/less/js/test/css/no-output.css +0 -0
  161. data/lib/less/js/test/css/parens.css +3 -0
  162. data/lib/less/js/test/css/property-name-interp.css +20 -0
  163. data/lib/less/js/test/css/selectors.css +12 -0
  164. data/lib/less/js/test/css/static-urls/urls.css +7 -4
  165. data/lib/less/js/test/css/strings.css +3 -0
  166. data/lib/less/js/test/css/url-args/urls.css +56 -0
  167. data/lib/less/js/test/css/urls.css +21 -9
  168. data/lib/less/js/test/index.js +45 -0
  169. data/lib/less/js/test/less-test.js +234 -191
  170. data/lib/less/js/test/less/colors.less +6 -0
  171. data/lib/less/js/test/less/comments.less +7 -1
  172. data/lib/less/js/test/less/compression/compression.less +21 -1
  173. data/lib/less/js/test/less/css-3.less +12 -0
  174. data/lib/less/js/test/less/css-guards.less +99 -0
  175. data/lib/less/js/test/less/debug/linenumbers.less +11 -1
  176. data/lib/less/js/test/less/empty.less +0 -0
  177. data/lib/less/js/test/less/errors/add-mixed-units.txt +4 -2
  178. data/lib/less/js/test/less/errors/add-mixed-units2.txt +4 -2
  179. data/lib/less/js/test/less/errors/color-func-invalid-color.less +3 -0
  180. data/lib/less/js/test/less/errors/color-func-invalid-color.txt +4 -0
  181. data/lib/less/js/test/less/errors/css-guard-default-func.less +4 -0
  182. data/lib/less/js/test/less/errors/css-guard-default-func.txt +4 -0
  183. data/lib/less/js/test/less/errors/import-subfolder2.txt +4 -2
  184. data/lib/less/js/test/less/errors/javascript-undefined-var.less +3 -0
  185. data/lib/less/js/test/less/errors/javascript-undefined-var.txt +4 -0
  186. data/lib/less/js/test/less/errors/mixins-guards-default-func-1.less +9 -0
  187. data/lib/less/js/test/less/errors/mixins-guards-default-func-1.txt +4 -0
  188. data/lib/less/js/test/less/errors/mixins-guards-default-func-2.less +9 -0
  189. data/lib/less/js/test/less/errors/mixins-guards-default-func-2.txt +4 -0
  190. data/lib/less/js/test/less/errors/mixins-guards-default-func-3.less +9 -0
  191. data/lib/less/js/test/less/errors/mixins-guards-default-func-3.txt +4 -0
  192. data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors.less +4 -0
  193. data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors.txt +4 -0
  194. data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors2.less +4 -0
  195. data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors2.txt +4 -0
  196. data/lib/less/js/test/less/errors/parse-error-curly-bracket.less +4 -1
  197. data/lib/less/js/test/less/errors/parse-error-curly-bracket.txt +4 -2
  198. data/lib/less/js/test/less/errors/parse-error-extra-parens.less +5 -0
  199. data/lib/less/js/test/less/errors/parse-error-extra-parens.txt +3 -0
  200. data/lib/less/js/test/less/errors/parse-error-missing-bracket.txt +2 -2
  201. data/lib/less/js/test/less/errors/parse-error-missing-parens.less +5 -0
  202. data/lib/less/js/test/less/errors/parse-error-missing-parens.txt +3 -0
  203. data/lib/less/js/test/less/errors/property-asterisk-only-name.less +3 -0
  204. data/lib/less/js/test/less/errors/property-asterisk-only-name.txt +4 -0
  205. data/lib/less/js/test/less/errors/property-interp-not-defined.less +1 -0
  206. data/lib/less/js/test/less/errors/property-interp-not-defined.txt +2 -0
  207. data/lib/less/js/test/less/errors/svg-gradient1.less +3 -0
  208. data/lib/less/js/test/less/errors/svg-gradient1.txt +4 -0
  209. data/lib/less/js/test/less/errors/svg-gradient2.less +3 -0
  210. data/lib/less/js/test/less/errors/svg-gradient2.txt +4 -0
  211. data/lib/less/js/test/less/errors/svg-gradient3.less +3 -0
  212. data/lib/less/js/test/less/errors/svg-gradient3.txt +4 -0
  213. data/lib/less/js/test/less/errors/unit-function.less +3 -0
  214. data/lib/less/js/test/less/errors/unit-function.txt +4 -0
  215. data/lib/less/js/test/less/extend-chaining.less +12 -0
  216. data/lib/less/js/test/less/extend-selector.less +15 -0
  217. data/lib/less/js/test/less/extract-and-length.less +133 -0
  218. data/lib/less/js/test/less/functions.less +15 -2
  219. data/lib/less/js/test/less/globalVars/extended.json +5 -0
  220. data/lib/less/js/test/less/globalVars/extended.less +10 -0
  221. data/lib/less/js/test/less/globalVars/simple.json +3 -0
  222. data/lib/less/js/test/less/globalVars/simple.less +3 -0
  223. data/lib/less/js/test/less/import-inline.less +2 -0
  224. data/lib/less/js/test/less/import-once.less +2 -0
  225. data/lib/less/js/test/less/import-reference.less +18 -0
  226. data/lib/less/js/test/less/import/import-and-relative-paths-test.less +11 -0
  227. data/lib/less/js/test/less/import/import-reference.less +43 -0
  228. data/lib/less/js/test/less/import/import-test-f.less +5 -0
  229. data/lib/less/js/test/less/import/invalid-css.less +1 -0
  230. data/lib/less/js/test/less/media.less +25 -1
  231. data/lib/less/js/test/less/merge.less +59 -0
  232. data/lib/less/js/test/less/mixins-args.less +10 -0
  233. data/lib/less/js/test/less/mixins-guards-default-func.less +195 -0
  234. data/lib/less/js/test/less/mixins-guards.less +16 -0
  235. data/lib/less/js/test/less/mixins-important.less +4 -1
  236. data/lib/less/js/test/less/mixins-interpolated.less +69 -0
  237. data/lib/less/js/test/less/mixins.less +27 -0
  238. data/lib/less/js/test/less/modifyVars/extended.json +5 -0
  239. data/lib/less/js/test/less/modifyVars/extended.less +11 -0
  240. data/lib/less/js/test/less/no-js-errors/no-js-errors.less +3 -0
  241. data/lib/less/js/test/less/no-js-errors/no-js-errors.txt +4 -0
  242. data/lib/less/js/test/less/no-output.less +2 -0
  243. data/lib/less/js/test/less/parens.less +4 -0
  244. data/lib/less/js/test/less/property-name-interp.less +53 -0
  245. data/lib/less/js/test/less/selectors.less +13 -0
  246. data/lib/less/js/test/less/sourcemaps/basic.json +3 -0
  247. data/lib/less/js/test/less/sourcemaps/basic.less +27 -0
  248. data/lib/less/js/test/less/sourcemaps/imported.css +7 -0
  249. data/lib/less/js/test/less/strings.less +6 -0
  250. data/lib/less/js/test/less/url-args/urls.less +63 -0
  251. data/lib/less/js/test/less/urls.less +15 -0
  252. data/lib/less/js/test/rhino/test-header.js +15 -0
  253. data/lib/less/js/test/sourcemaps/basic.json +1 -0
  254. data/lib/less/js/test/sourcemaps/index.html +17 -0
  255. data/lib/less/loader.rb +48 -40
  256. data/lib/less/version.rb +1 -1
  257. data/spec/less/parser_spec.rb +15 -15
  258. metadata +146 -40
  259. data/lib/less/js/Makefile +0 -102
  260. data/lib/less/js/build/header.js +0 -9
  261. data/lib/less/js/test/browser-test-prepare.js +0 -46
  262. data/lib/less/js/test/browser/runner-errors.js +0 -5
  263. data/lib/less/js/test/browser/runner-main.js +0 -15
  264. data/lib/less/js/test/browser/template.htm +0 -10
  265. data/lib/less/js/test/less/errors/color-operation-error.txt +0 -2
@@ -0,0 +1,350 @@
1
+ # [Less.js v<%= pkg.version %>](http://lesscss.org)
2
+
3
+ > The **dynamic** stylesheet language. [http://lesscss.org](http://lesscss.org).
4
+
5
+ This is the JavaScript, and now official, stable version of LESS.
6
+
7
+
8
+ ## Getting Started
9
+
10
+ Options for adding Less.js to your project:
11
+
12
+ * Install with [NPM](https://npmjs.org/): `npm install less`
13
+ * [Download the latest release][download]
14
+ * Clone the repo: `git clone git://github.com/less/less.js.git`
15
+
16
+
17
+
18
+ ## Feature Highlights
19
+ LESS extends CSS with dynamic features such as:
20
+
21
+ * [nesting](#nesting)
22
+ * [variables](#variables)
23
+ * [operations](#operations)
24
+ * [mixins](#mixins)
25
+ * [extend](#extend) (selector inheritance)
26
+
27
+ To learn about the many other features Less.js has to offer please visit [http://lesscss.org](http://lesscss.org) and [the Less.js wiki][wiki]
28
+
29
+
30
+ ### Examples
31
+ #### nesting
32
+ Take advantage of nesting to make code more readable and maintainable. This:
33
+
34
+ ```less
35
+ .nav > li > a {
36
+ border: 1px solid #f5f5f5;
37
+ &:hover {
38
+ border-color: #ddd;
39
+ }
40
+ }
41
+ ```
42
+
43
+ renders to:
44
+
45
+ ```css
46
+ .nav > li > a {
47
+ border: 1px solid #f5f5f5;
48
+ }
49
+ .nav > li > a:hover {
50
+ border-color: #ddd;
51
+ }
52
+ ```
53
+
54
+
55
+ #### variables
56
+ Updated commonly used values from a single location.
57
+
58
+ ```less
59
+ // Variables ("inline" comments like this can be used)
60
+ @link-color: #428bca; // appears as "sea blue"
61
+
62
+ /* Or "block comments" that span
63
+ multiple lines, like this */
64
+ a {
65
+ color: @link-color; // use the variable in styles
66
+ }
67
+ ```
68
+
69
+ Variables can also be used in `@import` statements, URLs, selector names, and more.
70
+
71
+
72
+
73
+ #### operations
74
+ Continuing with the same example above, we can use our variables even easier to maintain with _operations_, which enables the use of addition, subraction, multiplication and division in your styles:
75
+
76
+ ```less
77
+ // Variables
78
+ @link-color: #428bca;
79
+ @link-color-hover: darken(@link-color, 10%);
80
+
81
+ // Styles
82
+ a {
83
+ color: @link-color;
84
+ }
85
+ a:hover {
86
+ color: @link-color-hover;
87
+ }
88
+ ```
89
+ renders to:
90
+
91
+ ```css
92
+ a {
93
+ color: #428bca;
94
+ }
95
+ a:hover {
96
+ color: #3071a9;
97
+ }
98
+ ```
99
+
100
+ #### mixins
101
+ ##### "implicit" mixins
102
+ Mixins enable you to apply the styles of one selector inside another selector like this:
103
+
104
+ ```less
105
+ // Variables
106
+ @link-color: #428bca;
107
+
108
+ // Any "regular" class...
109
+ .link {
110
+ color: @link-color;
111
+ }
112
+ a {
113
+ font-weight: bold;
114
+ .link; // ...can be used as an "implicit" mixin
115
+ }
116
+ ```
117
+
118
+ renders to:
119
+
120
+ ```css
121
+ .link {
122
+ color: #428bca;
123
+ }
124
+ a {
125
+ font-weight: bold;
126
+ color: #428bca;
127
+ }
128
+ ```
129
+
130
+ So any selector can be an "implicit mixin". We'll show you a DRYer way to do this below.
131
+
132
+
133
+
134
+ ##### parametric mixins
135
+ Mixins can also accept parameters:
136
+
137
+ ```less
138
+ // Transition mixin
139
+ .transition(@transition) {
140
+ -webkit-transition: @transition;
141
+ -moz-transition: @transition;
142
+ -o-transition: @transition;
143
+ transition: @transition;
144
+ }
145
+ ```
146
+
147
+ used like this:
148
+
149
+ ```less
150
+ // Variables
151
+ @link-color: #428bca;
152
+ @link-color-hover: darken(@link-color, 10%);
153
+
154
+ //Transition mixin would be anywhere here
155
+
156
+ a {
157
+ font-weight: bold;
158
+ color: @link-color;
159
+ .transition(color .2s ease-in-out);
160
+ // Hover state
161
+ &:hover {
162
+ color: @link-color-hover;
163
+ }
164
+ }
165
+ ```
166
+
167
+ renders to:
168
+
169
+ ```css
170
+ a {
171
+ font-weight: bold;
172
+ color: #428bca;
173
+ -webkit-transition: color 0.2s ease-in-out;
174
+ -moz-transition: color 0.2s ease-in-out;
175
+ -o-transition: color 0.2s ease-in-out;
176
+ transition: color 0.2s ease-in-out;
177
+ }
178
+ a:hover {
179
+ color: #3071a9;
180
+ }
181
+ ```
182
+
183
+
184
+ #### extend
185
+ The `extend` feature can be thought of as the _inverse_ of mixins. It accomplishes the goal of "borrowing styles", but rather than copying all the rules of _Selector A_ over to _Selector B_, `extend` copies the name of the _inheriting selector_ (_Selector B_) over to the _extending selector_ (_Selector A_). So continuing with the example used for [mixins](#mixins) above, extend works like this:
186
+
187
+ ```less
188
+ // Variables
189
+ @link-color: #428bca;
190
+
191
+ .link {
192
+ color: @link-color;
193
+ }
194
+ a:extend(.link) {
195
+ font-weight: bold;
196
+ }
197
+ // Can also be written as
198
+ a {
199
+ &:extend(.link);
200
+ font-weight: bold;
201
+ }
202
+ ```
203
+
204
+ renders to:
205
+
206
+ ```css
207
+ .link, a {
208
+ color: #428bca;
209
+ }
210
+ a {
211
+ font-weight: bold;
212
+ }
213
+ ```
214
+
215
+ ## Usage
216
+
217
+ ### Compiling and Parsing
218
+ Invoke the compiler from node:
219
+
220
+ ```javascript
221
+ var less = require('less');
222
+
223
+ less.render('.class { width: (1 + 1) }', function (e, css) {
224
+ console.log(css);
225
+ });
226
+ ```
227
+
228
+ Outputs:
229
+
230
+ ```css
231
+ .class {
232
+ width: 2;
233
+ }
234
+ ```
235
+
236
+ You may also manually invoke the parser and compiler:
237
+
238
+ ```javascript
239
+ var parser = new(less.Parser);
240
+
241
+ parser.parse('.class { width: (1 + 1) }', function (err, tree) {
242
+ if (err) { return console.error(err) }
243
+ console.log(tree.toCSS());
244
+ });
245
+ ```
246
+
247
+
248
+ ### Configuration
249
+ You may also pass options to the compiler:
250
+
251
+ ```javascript
252
+ var parser = new(less.Parser)({
253
+ paths: ['.', './src/less'], // Specify search paths for @import directives
254
+ filename: 'style.less' // Specify a filename, for better error messages
255
+ });
256
+
257
+ parser.parse('.class { width: (1 + 1) }', function (e, tree) {
258
+ tree.toCSS({ compress: true }); // Minify CSS output
259
+ });
260
+ ```
261
+
262
+ ## More information
263
+
264
+ For general information on the language, configuration options or usage visit [lesscss.org](http://lesscss.org) or [the less wiki][wiki].
265
+
266
+ Here are other resources for using Less.js:
267
+
268
+ * [stackoverflow.com][so] is a great place to get answers about Less.
269
+ * [node.js tools](https://github.com/less/less.js/wiki/Converting-LESS-to-CSS) for converting Less to CSS
270
+ * [GUI compilers for Less](https://github.com/less/less.js/wiki/GUI-compilers-that-use-LESS.js)
271
+ * [Less.js Issues][issues] for reporting bugs
272
+
273
+
274
+
275
+ ## Contributing
276
+ Please read [CONTRIBUTING.md](./CONTRIBUTING.md). Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/).
277
+
278
+ ### Reporting Issues
279
+
280
+ Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas/). After that if you find a bug or would like to make feature request, [please open a new issue][issues].
281
+
282
+ Please report documentation issues in [the documentation project](https://github.com/less/less-docs).
283
+
284
+ ### Development
285
+
286
+ #### Install Less.js
287
+
288
+ Start by either [downloading this project][download] manually, or in the command line:
289
+
290
+ ```shell
291
+ git clone https://github.com/less/less.js.git "less"
292
+ ```
293
+ and then `cd less`.
294
+
295
+
296
+ #### Install dependencies
297
+
298
+ To install all the dependencies for less development, run:
299
+
300
+ ```shell
301
+ npm install
302
+ ```
303
+
304
+ If you haven't run grunt before, install grunt-cli globally so you can just run `grunt`
305
+
306
+ ```shell
307
+ npm install grunt-cli -g
308
+ ```
309
+
310
+ You should now be able to build Less.js, run tests, benchmarking, and other tasks listed in the Gruntfile.
311
+
312
+ ## Using Less.js Grunt
313
+
314
+ Tests, benchmarking and building is done using Grunt `<%= pkg.devDependencies.grunt %>`. If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to install and use Grunt plugins, which are necessary for development with Less.js.
315
+
316
+ The Less.js [Gruntfile](Gruntfile.js) is configured with the following "convenience tasks" :
317
+
318
+ #### test - `grunt`
319
+ Runs jshint, nodeunit and headless jasmine tests using [phantomjs](http://code.google.com/p/phantomjs/). You must have phantomjs installed for the jasmine tests to run.
320
+
321
+ #### test - `grunt benchmark`
322
+ Runs the benchmark suite.
323
+
324
+ #### build for testing browser - 'grunt browser'
325
+ This builds less.js and puts it in 'test/browser/less.js'
326
+
327
+ #### build - `grunt stable | grunt beta | grunt alpha`
328
+ Builds Less.js from from the `/lib/less` source files. This is done by the developer releasing a new release, do not do this if you are creating a pull request.
329
+
330
+ #### readme - `grunt readme`
331
+ Build the README file from [a template](build/README.md) to ensure that metadata is up-to-date and (more likely to be) correct.
332
+
333
+ Please review the [Gruntfile](Gruntfile.js) to become acquainted with the other available tasks.
334
+
335
+ **Please note** that if you have any issues installing dependencies or running any of the Gruntfile commands, please make sure to uninstall any previous versions, both in the local node_modules directory, and clear your global npm cache, and then try running `npm install` again. After that if you still have issues, please let us know about it so we can help.
336
+
337
+
338
+ ## Release History
339
+ See the [changelog](CHANGELOG.md)
340
+
341
+ ## [License](LICENSE)
342
+
343
+ Copyright (c) 2009-<%= grunt.template.today("yyyy") %> [Alexis Sellier](http://cloudhead.io/) & The Core Less Team
344
+ Licensed under the [Apache License](LICENSE).
345
+
346
+
347
+ [so]: http://stackoverflow.com/questions/tagged/twitter-bootstrap+less "StackOverflow.com"
348
+ [issues]: https://github.com/less/less.js/issues "GitHub Issues for Less.js"
349
+ [wiki]: https://github.com/less/less.js/wiki "The official wiki for Less.js"
350
+ [download]: https://github.com/less/less.js/zipball/master "Download Less.js"
@@ -0,0 +1,4 @@
1
+ if (typeof(window.less) === 'undefined' || typeof(window.less.nodeType) !== 'undefined') { window.less = {}; }
2
+ less = window.less;
3
+ tree = window.less.tree = {};
4
+ less.mode = 'browser';
@@ -0,0 +1,160 @@
1
+ ###
2
+ # NOTICE:
3
+ # this file is specifically for controlling
4
+ # paths for Less.js source files, as well as
5
+ # the order in which source files are
6
+ # concatenated.
7
+ #
8
+ # Please do not add paths for anything else
9
+ # to this file. All other paths for testing,
10
+ # benchmarking and so on should be controlled
11
+ # in the Gruntfile.
12
+ ###
13
+
14
+ # Less.js Lib
15
+ lib: lib/less
16
+ lib_source_map: 'lib/source-map'
17
+
18
+ # =================================
19
+ # General
20
+ # =================================
21
+ prepend:
22
+ browser: ['build/require.js', 'build/browser-header.js']
23
+ rhino: ['build/require-rhino.js', 'build/rhino-header.js', 'build/rhino-modules.js']
24
+
25
+ append:
26
+ amd: build/amd.js
27
+ browser: <%= build.lib %>/browser.js
28
+ rhino: <%= build.lib %>/rhino.js
29
+
30
+
31
+ # =================================
32
+ # Core less files
33
+ # =================================
34
+
35
+ # <%= build.less.* %>
36
+ less:
37
+ parser : <%= build.lib %>/parser.js
38
+ functions : <%= build.lib %>/functions.js
39
+ colors : <%= build.lib %>/colors.js
40
+ tree : <%= build.lib %>/tree.js
41
+ treedir : <%= build.lib %>/tree/*.js # glob all files in ./lib/less/tree directory
42
+ env : <%= build.lib %>/env.js
43
+ visitor : <%= build.lib %>/visitor.js
44
+ import_visitor : <%= build.lib %>/import-visitor.js
45
+ join : <%= build.lib %>/join-selector-visitor.js
46
+ to_css_visitor : <%= build.lib %>/to-css-visitor.js
47
+ extend_visitor : <%= build.lib %>/extend-visitor.js
48
+ browser : <%= build.lib %>/browser.js
49
+ source_map_output: <%= build.lib %>/source-map-output.js
50
+
51
+
52
+ # =================================
53
+ # Browser build
54
+ # =================================
55
+
56
+ # <%= build.browser %>
57
+ browser:
58
+
59
+ # prepend utils
60
+ - <%= build.prepend.browser %>
61
+
62
+ # core
63
+ - <%= build.less.parser %>
64
+ - <%= build.less.functions %>
65
+ - <%= build.less.colors %>
66
+ - <%= build.less.tree %>
67
+ - <%= build.less.treedir %> # glob all files
68
+ - <%= build.less.env %>
69
+ - <%= build.less.visitor %>
70
+ - <%= build.less.import_visitor %>
71
+ - <%= build.less.join %>
72
+ - <%= build.less.to_css_visitor %>
73
+ - <%= build.less.extend_visitor %>
74
+ - <%= build.less.source_map_output %>
75
+
76
+ # append browser-specific code
77
+ - <%= build.append.browser %>
78
+ - <%= build.append.amd %>
79
+
80
+
81
+ # =================================
82
+ # Rhino build
83
+ # =================================
84
+
85
+ # <%= build.rhino %>
86
+ rhino:
87
+ # prepend utils
88
+ - <%= build.prepend.rhino %>
89
+
90
+ # core
91
+ - <%= build.less.parser %>
92
+ - <%= build.less.functions %>
93
+ - <%= build.less.colors %>
94
+ - <%= build.less.tree %>
95
+ - <%= build.less.treedir %> # glob all files
96
+ - <%= build.less.env %>
97
+ - <%= build.less.visitor %>
98
+ - <%= build.less.import_visitor %>
99
+ - <%= build.less.join %>
100
+ - <%= build.less.to_css_visitor %>
101
+ - <%= build.less.extend_visitor %>
102
+ - <%= build.less.source_map_output %>
103
+ - <%= build.source_map %>
104
+
105
+
106
+ # <%= build.rhinolessc %>
107
+ rhinolessc:
108
+ - <%= build.append.rhino %>
109
+
110
+
111
+ # =================================
112
+ # Tree files
113
+ # =================================
114
+
115
+ # <%= build.tree %>
116
+ # Technically listing the array out this way isn't
117
+ # necessary since we can glob the files in alphabetical
118
+ # order anyway. But this gives you control over the order
119
+ # the files are used, and allows targeting of individual
120
+ # files directly in the Gruntfile. But be we can just
121
+ # remove this if files can be concatenated in any order.
122
+ tree:
123
+ - <%= build.lib %>/tree/alpha.js
124
+ - <%= build.lib %>/tree/anonymous.js
125
+ - <%= build.lib %>/tree/assignment.js
126
+ - <%= build.lib %>/tree/call.js
127
+ - <%= build.lib %>/tree/color.js
128
+ - <%= build.lib %>/tree/comment.js
129
+ - <%= build.lib %>/tree/condition.js
130
+ - <%= build.lib %>/tree/dimension.js
131
+ - <%= build.lib %>/tree/directive.js
132
+ - <%= build.lib %>/tree/element.js
133
+ - <%= build.lib %>/tree/expression.js
134
+ - <%= build.lib %>/tree/extend.js
135
+ - <%= build.lib %>/tree/import.js
136
+ - <%= build.lib %>/tree/javascript.js
137
+ - <%= build.lib %>/tree/keyword.js
138
+ - <%= build.lib %>/tree/media.js
139
+ - <%= build.lib %>/tree/mixin.js
140
+ - <%= build.lib %>/tree/negative.js
141
+ - <%= build.lib %>/tree/operation.js
142
+ - <%= build.lib %>/tree/paren.js
143
+ - <%= build.lib %>/tree/quoted.js
144
+ - <%= build.lib %>/tree/rule.js
145
+ - <%= build.lib %>/tree/ruleset.js
146
+ - <%= build.lib %>/tree/selector.js
147
+ - <%= build.lib %>/tree/unicode-descriptor.js
148
+ - <%= build.lib %>/tree/url.js
149
+ - <%= build.lib %>/tree/value.js
150
+ - <%= build.lib %>/tree/variable.js
151
+
152
+ # =================================
153
+ # source-map build
154
+ # =================================
155
+
156
+ # <%= build.source_map %>
157
+ source_map:
158
+ - <%= build.lib_source_map %>/source-map-header.js
159
+ - <%= build.lib_source_map %>/source-map-0.1.31.js
160
+ - <%= build.lib_source_map %>/source-map-footer.js