less 2.4.0 → 2.5.3

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 (405) hide show
  1. package/.idea/jsLibraryMappings.xml +7 -7
  2. package/.idea/less.js.iml +9 -16
  3. package/.idea/libraries/less_js_node_modules.xml +14 -0
  4. package/.idea/misc.xml +14 -5
  5. package/.idea/modules.xml +8 -9
  6. package/.idea/vcs.xml +6 -7
  7. package/.idea/workspace.xml +592 -806
  8. package/.jscsrc +72 -72
  9. package/.travis.yml +1 -0
  10. package/CHANGELOG.md +54 -8
  11. package/Gruntfile.js +40 -13
  12. package/README.md +2 -0
  13. package/appveyor.yml +0 -6
  14. package/bin/lessc +22 -24
  15. package/bower.json +1 -2
  16. package/dist/less-rolledup.js +8572 -0
  17. package/dist/less.js +807 -401
  18. package/dist/less.min.js +9 -8
  19. package/lib/less/contexts.js +2 -0
  20. package/lib/less/environment/abstract-file-manager.js +5 -1
  21. package/lib/less/functions/color.js +46 -12
  22. package/lib/less/functions/function-caller.js +31 -2
  23. package/lib/less/functions/function-registry.js +28 -17
  24. package/lib/less/functions/math-helper.js +16 -0
  25. package/lib/less/functions/math.js +4 -16
  26. package/lib/less/functions/number.js +7 -2
  27. package/lib/less/functions/string.js +5 -3
  28. package/lib/less/functions/svg.js +19 -11
  29. package/lib/less/functions/types.js +1 -6
  30. package/lib/less/import-manager.js +8 -3
  31. package/lib/less/index.js +1 -1
  32. package/lib/less/parser/parser-input.js +55 -54
  33. package/lib/less/parser/parser.js +168 -52
  34. package/lib/less/plugins/function-importer.js +35 -0
  35. package/lib/less/source-map-output.js +1 -2
  36. package/lib/less/tree/anonymous.js +10 -2
  37. package/lib/less/tree/color.js +4 -1
  38. package/lib/less/tree/comment.js +0 -3
  39. package/lib/less/tree/dimension.js +5 -3
  40. package/lib/less/tree/directive.js +40 -15
  41. package/lib/less/tree/expression.js +5 -0
  42. package/lib/less/tree/import.js +22 -10
  43. package/lib/less/tree/media.js +3 -23
  44. package/lib/less/tree/mixin-call.js +17 -7
  45. package/lib/less/tree/mixin-definition.js +20 -6
  46. package/lib/less/tree/rule.js +19 -1
  47. package/lib/less/tree/ruleset.js +40 -27
  48. package/lib/less/tree/selector.js +8 -1
  49. package/lib/less/visitors/extend-visitor.js +1 -4
  50. package/lib/less/visitors/import-visitor.js +17 -2
  51. package/lib/less/visitors/join-selector-visitor.js +6 -0
  52. package/lib/less/visitors/to-css-visitor.js +48 -14
  53. package/lib/less-browser/bootstrap.js +5 -6
  54. package/lib/less-browser/index.js +20 -12
  55. package/lib/less-node/image-size.js +54 -31
  56. package/lib/less-node/index.js +1 -1
  57. package/lib/less-node/lessc-helper.js +2 -2
  58. package/lib/less-rhino/index.js +12 -8
  59. package/package.json +9 -13
  60. package/test/browser/less/urls.less +7 -1
  61. package/test/browser/less.js +30 -0
  62. package/test/browser/runner-VisitorPlugin-options.js +3 -0
  63. package/test/browser/runner-VisitorPlugin.js +3 -0
  64. package/test/browser/runner-filemanagerPlugin-options.js +4 -0
  65. package/test/browser/runner-filemanagerPlugin.js +3 -0
  66. package/test/browser/runner-global-vars-options.js +2 -1
  67. package/test/browser/runner-main-options.js +11 -11
  68. package/test/browser/runner-postProcessor.js +1 -1
  69. package/test/browser/runner-postProcessorPlugin-options.js +3 -0
  70. package/test/browser/runner-postProcessorPlugin.js +3 -0
  71. package/test/browser/runner-preProcessorPlugin-options.js +3 -0
  72. package/test/browser/runner-preProcessorPlugin.js +3 -0
  73. package/test/css/comments2.css +1 -1
  74. package/test/css/compression/compression.css +1 -1
  75. package/test/css/detached-rulesets.css +5 -0
  76. package/test/css/directives-bubling.css +119 -0
  77. package/test/css/extract-and-length.css +1 -1
  78. package/test/css/filemanagerPlugin/filemanager.css +3 -0
  79. package/test/css/functions.css +17 -1
  80. package/test/css/import-reference.css +5 -1
  81. package/test/css/import.css +4 -0
  82. package/test/css/include-path/include-path.css +4 -1
  83. package/test/css/include-path-string/include-path-string.css +3 -0
  84. package/test/css/legacy/legacy.css +14 -0
  85. package/test/css/media.css +0 -1
  86. package/test/css/mixins-args.css +51 -1
  87. package/test/css/plugin.css +44 -0
  88. package/test/css/postProcessorPlugin/postProcessor.css +4 -0
  89. package/test/css/preProcessorPlugin/preProcessor.css +3 -0
  90. package/test/css/scope.css +1 -1
  91. package/test/css/strings.css +1 -1
  92. package/test/css/url-args/urls.css +5 -5
  93. package/test/css/urls.css +8 -8
  94. package/test/css/variables.css +5 -5
  95. package/test/css/visitorPlugin/visitor.css +3 -0
  96. package/test/data/image.jpg +0 -0
  97. package/test/data/image.svg +2 -1
  98. package/test/data/page.html +1 -1
  99. package/test/index.js +5 -0
  100. package/test/less/detached-rulesets.less +9 -0
  101. package/test/less/directives-bubling.less +142 -0
  102. package/test/less/errors/at-rules-undefined-var.txt +4 -4
  103. package/test/less/errors/css-guard-default-func.txt +4 -4
  104. package/test/less/errors/javascript-undefined-var.txt +4 -4
  105. package/test/less/errors/mixins-guards-default-func-1.txt +4 -4
  106. package/test/less/errors/mixins-guards-default-func-2.txt +4 -4
  107. package/test/less/errors/mixins-guards-default-func-3.txt +4 -4
  108. package/test/less/errors/{parse-error-extra-parens.less → parse-error-media-no-block-1.less} +0 -0
  109. package/test/less/errors/parse-error-media-no-block-1.txt +3 -0
  110. package/test/less/errors/parse-error-media-no-block-2.less +1 -0
  111. package/test/less/errors/parse-error-media-no-block-2.txt +2 -0
  112. package/test/less/errors/parse-error-media-no-block-3.less +4 -0
  113. package/test/less/errors/parse-error-media-no-block-3.txt +3 -0
  114. package/test/less/errors/percentage-non-number-argument.less +3 -0
  115. package/test/less/errors/percentage-non-number-argument.txt +4 -0
  116. package/test/less/errors/property-interp-not-defined.txt +2 -2
  117. package/test/less/errors/svg-gradient2.txt +1 -1
  118. package/test/less/errors/svg-gradient3.txt +1 -1
  119. package/test/less/errors/svg-gradient4.less +4 -0
  120. package/test/less/errors/svg-gradient4.txt +4 -0
  121. package/test/less/errors/svg-gradient5.less +4 -0
  122. package/test/less/errors/svg-gradient5.txt +4 -0
  123. package/test/less/errors/svg-gradient6.less +4 -0
  124. package/test/less/errors/svg-gradient6.txt +4 -0
  125. package/test/less/filemanagerPlugin/colors.test +1 -0
  126. package/test/less/filemanagerPlugin/filemanager.less +4 -0
  127. package/test/less/functions.less +20 -2
  128. package/test/less/import/css-import.less +1 -0
  129. package/test/less/import/import-inline-invalid-css.less +1 -0
  130. package/test/less/import/import-reference.less +10 -1
  131. package/test/less/import/import-test-a.less +1 -0
  132. package/test/less/import-reference.less +4 -1
  133. package/test/less/import.less +1 -0
  134. package/test/less/include-path/include-path.less +3 -1
  135. package/test/less/include-path-string/include-path-string.less +3 -0
  136. package/test/less/legacy/legacy.less +14 -0
  137. package/test/less/mixins-args.less +48 -0
  138. package/test/less/mixins-guards.less +9 -0
  139. package/test/less/no-output.less +1 -1
  140. package/test/less/plugin/plugin-global.js +9 -0
  141. package/test/less/plugin/plugin-local.js +8 -0
  142. package/test/less/plugin/plugin-transitive.js +5 -0
  143. package/test/less/plugin/plugin-transitive.less +5 -0
  144. package/test/less/plugin.less +85 -0
  145. package/test/less/postProcessorPlugin/postProcessor.less +4 -0
  146. package/test/less/preProcessorPlugin/preProcessor.less +3 -0
  147. package/test/less/sourcemaps/imported.css +6 -6
  148. package/test/less/visitorPlugin/visitor.less +4 -0
  149. package/test/less-bom/charsets.less +3 -0
  150. package/test/less-bom/colors.less +98 -0
  151. package/test/less-bom/comments.less +102 -0
  152. package/test/less-bom/comments2.less +20 -0
  153. package/test/less-bom/compression/compression.less +36 -0
  154. package/test/less-bom/css-3.less +154 -0
  155. package/test/less-bom/css-escapes.less +33 -0
  156. package/test/less-bom/css-guards.less +103 -0
  157. package/test/less-bom/css.less +108 -0
  158. package/test/less-bom/debug/import/test.less +25 -0
  159. package/test/less-bom/debug/linenumbers.less +33 -0
  160. package/test/less-bom/detached-rulesets.less +112 -0
  161. package/test/less-bom/directives-bubling.less +142 -0
  162. package/test/less-bom/empty.less +1 -0
  163. package/test/less-bom/errors/add-mixed-units.less +3 -0
  164. package/test/less-bom/errors/add-mixed-units.txt +4 -0
  165. package/test/less-bom/errors/add-mixed-units2.less +3 -0
  166. package/test/less-bom/errors/add-mixed-units2.txt +4 -0
  167. package/test/less-bom/errors/at-rules-undefined-var.less +4 -0
  168. package/test/less-bom/errors/at-rules-undefined-var.txt +4 -0
  169. package/test/less-bom/errors/bad-variable-declaration1.less +1 -0
  170. package/test/less-bom/errors/bad-variable-declaration1.txt +2 -0
  171. package/test/less-bom/errors/color-func-invalid-color.less +3 -0
  172. package/test/less-bom/errors/color-func-invalid-color.txt +4 -0
  173. package/test/less-bom/errors/color-invalid-hex-code.less +3 -0
  174. package/test/less-bom/errors/color-invalid-hex-code.txt +4 -0
  175. package/test/less-bom/errors/color-invalid-hex-code2.less +3 -0
  176. package/test/less-bom/errors/color-invalid-hex-code2.txt +4 -0
  177. package/test/less-bom/errors/css-guard-default-func.less +4 -0
  178. package/test/less-bom/errors/css-guard-default-func.txt +4 -0
  179. package/test/less-bom/errors/detached-ruleset-1.less +6 -0
  180. package/test/less-bom/errors/detached-ruleset-1.txt +4 -0
  181. package/test/less-bom/errors/detached-ruleset-2.less +6 -0
  182. package/test/less-bom/errors/detached-ruleset-2.txt +4 -0
  183. package/test/less-bom/errors/detached-ruleset-3.less +4 -0
  184. package/test/less-bom/errors/detached-ruleset-3.txt +4 -0
  185. package/test/less-bom/errors/detached-ruleset-5.less +4 -0
  186. package/test/less-bom/errors/detached-ruleset-5.txt +3 -0
  187. package/test/less-bom/errors/detached-ruleset-6.less +5 -0
  188. package/test/less-bom/errors/detached-ruleset-6.txt +4 -0
  189. package/test/less-bom/errors/divide-mixed-units.less +3 -0
  190. package/test/less-bom/errors/divide-mixed-units.txt +4 -0
  191. package/test/less-bom/errors/extend-no-selector.less +3 -0
  192. package/test/less-bom/errors/extend-no-selector.txt +3 -0
  193. package/test/less-bom/errors/extend-not-at-end.less +3 -0
  194. package/test/less-bom/errors/extend-not-at-end.txt +3 -0
  195. package/test/less-bom/errors/import-malformed.less +1 -0
  196. package/test/less-bom/errors/import-malformed.txt +3 -0
  197. package/test/less-bom/errors/import-missing.less +6 -0
  198. package/test/less-bom/errors/import-missing.txt +3 -0
  199. package/test/less-bom/errors/import-no-semi.less +1 -0
  200. package/test/less-bom/errors/import-no-semi.txt +2 -0
  201. package/test/less-bom/errors/import-subfolder1.less +1 -0
  202. package/test/less-bom/errors/import-subfolder1.txt +3 -0
  203. package/test/less-bom/errors/import-subfolder2.less +1 -0
  204. package/test/less-bom/errors/import-subfolder2.txt +4 -0
  205. package/test/less-bom/errors/imports/import-subfolder1.less +1 -0
  206. package/test/less-bom/errors/imports/import-subfolder2.less +1 -0
  207. package/test/less-bom/errors/imports/import-test.less +4 -0
  208. package/test/less-bom/errors/imports/subfolder/mixin-not-defined.less +1 -0
  209. package/test/less-bom/errors/imports/subfolder/parse-error-curly-bracket.less +1 -0
  210. package/test/less-bom/errors/javascript-error.less +3 -0
  211. package/test/less-bom/errors/javascript-error.txt +4 -0
  212. package/test/less-bom/errors/javascript-undefined-var.less +3 -0
  213. package/test/less-bom/errors/javascript-undefined-var.txt +4 -0
  214. package/test/less-bom/errors/mixed-mixin-definition-args-1.less +6 -0
  215. package/test/less-bom/errors/mixed-mixin-definition-args-1.txt +4 -0
  216. package/test/less-bom/errors/mixed-mixin-definition-args-2.less +6 -0
  217. package/test/less-bom/errors/mixed-mixin-definition-args-2.txt +4 -0
  218. package/test/less-bom/errors/mixin-not-defined.less +11 -0
  219. package/test/less-bom/errors/mixin-not-defined.txt +3 -0
  220. package/test/less-bom/errors/mixin-not-matched.less +6 -0
  221. package/test/less-bom/errors/mixin-not-matched.txt +3 -0
  222. package/test/less-bom/errors/mixin-not-matched2.less +6 -0
  223. package/test/less-bom/errors/mixin-not-matched2.txt +3 -0
  224. package/test/less-bom/errors/mixin-not-visible-in-scope-1.less +9 -0
  225. package/test/less-bom/errors/mixin-not-visible-in-scope-1.txt +4 -0
  226. package/test/less-bom/errors/mixins-guards-default-func-1.less +9 -0
  227. package/test/less-bom/errors/mixins-guards-default-func-1.txt +4 -0
  228. package/test/less-bom/errors/mixins-guards-default-func-2.less +9 -0
  229. package/test/less-bom/errors/mixins-guards-default-func-2.txt +4 -0
  230. package/test/less-bom/errors/mixins-guards-default-func-3.less +9 -0
  231. package/test/less-bom/errors/mixins-guards-default-func-3.txt +4 -0
  232. package/test/less-bom/errors/multiple-guards-on-css-selectors.less +4 -0
  233. package/test/less-bom/errors/multiple-guards-on-css-selectors.txt +4 -0
  234. package/test/less-bom/errors/multiple-guards-on-css-selectors2.less +4 -0
  235. package/test/less-bom/errors/multiple-guards-on-css-selectors2.txt +4 -0
  236. package/test/less-bom/errors/multiply-mixed-units.less +7 -0
  237. package/test/less-bom/errors/multiply-mixed-units.txt +4 -0
  238. package/test/less-bom/errors/parens-error-1.less +3 -0
  239. package/test/less-bom/errors/parens-error-1.txt +4 -0
  240. package/test/less-bom/errors/parens-error-2.less +3 -0
  241. package/test/less-bom/errors/parens-error-2.txt +4 -0
  242. package/test/less-bom/errors/parens-error-3.less +3 -0
  243. package/test/less-bom/errors/parens-error-3.txt +4 -0
  244. package/test/less-bom/errors/parse-error-curly-bracket.less +4 -0
  245. package/test/less-bom/errors/parse-error-curly-bracket.txt +4 -0
  246. package/test/less-bom/errors/parse-error-media-no-block-1.less +5 -0
  247. package/test/less-bom/errors/parse-error-media-no-block-1.txt +3 -0
  248. package/test/less-bom/errors/parse-error-media-no-block-2.less +1 -0
  249. package/test/less-bom/errors/parse-error-media-no-block-2.txt +2 -0
  250. package/test/less-bom/errors/parse-error-media-no-block-3.less +4 -0
  251. package/test/less-bom/errors/parse-error-media-no-block-3.txt +3 -0
  252. package/test/less-bom/errors/parse-error-missing-bracket.less +2 -0
  253. package/test/less-bom/errors/parse-error-missing-bracket.txt +3 -0
  254. package/test/less-bom/errors/parse-error-missing-parens.less +5 -0
  255. package/test/less-bom/errors/parse-error-missing-parens.txt +3 -0
  256. package/test/less-bom/errors/parse-error-with-import.less +13 -0
  257. package/test/less-bom/errors/parse-error-with-import.txt +4 -0
  258. package/test/less-bom/errors/percentage-missing-space.less +3 -0
  259. package/test/less-bom/errors/percentage-missing-space.txt +4 -0
  260. package/test/less-bom/errors/percentage-non-number-argument.less +3 -0
  261. package/test/less-bom/errors/percentage-non-number-argument.txt +4 -0
  262. package/test/less-bom/errors/property-asterisk-only-name.less +3 -0
  263. package/test/less-bom/errors/property-asterisk-only-name.txt +4 -0
  264. package/test/less-bom/errors/property-ie5-hack.less +3 -0
  265. package/test/less-bom/errors/property-ie5-hack.txt +3 -0
  266. package/test/less-bom/errors/property-in-root.less +4 -0
  267. package/test/less-bom/errors/property-in-root.txt +4 -0
  268. package/test/less-bom/errors/property-in-root2.less +1 -0
  269. package/test/less-bom/errors/property-in-root2.txt +4 -0
  270. package/test/less-bom/errors/property-in-root3.less +4 -0
  271. package/test/less-bom/errors/property-in-root3.txt +3 -0
  272. package/test/less-bom/errors/property-interp-not-defined.less +1 -0
  273. package/test/less-bom/errors/property-interp-not-defined.txt +2 -0
  274. package/test/less-bom/errors/recursive-variable.less +1 -0
  275. package/test/less-bom/errors/recursive-variable.txt +2 -0
  276. package/test/less-bom/errors/single-character.less +1 -0
  277. package/test/less-bom/errors/single-character.txt +2 -0
  278. package/test/less-bom/errors/svg-gradient1.less +3 -0
  279. package/test/less-bom/errors/svg-gradient1.txt +4 -0
  280. package/test/less-bom/errors/svg-gradient2.less +3 -0
  281. package/test/less-bom/errors/svg-gradient2.txt +4 -0
  282. package/test/less-bom/errors/svg-gradient3.less +3 -0
  283. package/test/less-bom/errors/svg-gradient3.txt +4 -0
  284. package/test/less-bom/errors/svg-gradient4.less +4 -0
  285. package/test/less-bom/errors/svg-gradient4.txt +4 -0
  286. package/test/less-bom/errors/svg-gradient5.less +4 -0
  287. package/test/less-bom/errors/svg-gradient5.txt +4 -0
  288. package/test/less-bom/errors/svg-gradient6.less +4 -0
  289. package/test/less-bom/errors/svg-gradient6.txt +4 -0
  290. package/test/less-bom/errors/unit-function.less +3 -0
  291. package/test/less-bom/errors/unit-function.txt +4 -0
  292. package/test/less-bom/extend-chaining.less +91 -0
  293. package/test/less-bom/extend-clearfix.less +19 -0
  294. package/test/less-bom/extend-exact.less +46 -0
  295. package/test/less-bom/extend-media.less +24 -0
  296. package/test/less-bom/extend-nest.less +65 -0
  297. package/test/less-bom/extend-selector.less +99 -0
  298. package/test/less-bom/extend.less +81 -0
  299. package/test/less-bom/extract-and-length.less +133 -0
  300. package/test/less-bom/filemanagerPlugin/colors.test +1 -0
  301. package/test/less-bom/filemanagerPlugin/filemanager.less +4 -0
  302. package/test/less-bom/functions.less +232 -0
  303. package/test/less-bom/globalVars/extended.json +5 -0
  304. package/test/less-bom/globalVars/extended.less +10 -0
  305. package/test/less-bom/globalVars/simple.json +3 -0
  306. package/test/less-bom/globalVars/simple.less +3 -0
  307. package/test/less-bom/ie-filters.less +15 -0
  308. package/test/less-bom/import/css-import.less +1 -0
  309. package/test/less-bom/import/deeper/deeper-2/url-import-2.less +3 -0
  310. package/test/less-bom/import/deeper/deeper-2/url-import.less +1 -0
  311. package/test/less-bom/import/deeper/import-once-test-a.less +1 -0
  312. package/test/less-bom/import/deeper/url-import.less +1 -0
  313. package/test/less-bom/import/import-and-relative-paths-test.less +17 -0
  314. package/test/less-bom/import/import-charset-test.less +1 -0
  315. package/test/less-bom/import/import-inline-invalid-css.less +1 -0
  316. package/test/less-bom/import/import-interpolation.less +2 -0
  317. package/test/less-bom/import/import-interpolation2.less +5 -0
  318. package/test/less-bom/import/import-once-test-c.less +6 -0
  319. package/test/less-bom/import/import-reference.less +98 -0
  320. package/test/less-bom/import/import-test-a.less +5 -0
  321. package/test/less-bom/import/import-test-b.less +8 -0
  322. package/test/less-bom/import/import-test-c.less +6 -0
  323. package/test/less-bom/import/import-test-d.css +1 -0
  324. package/test/less-bom/import/import-test-e.less +2 -0
  325. package/test/less-bom/import/import-test-f.less +5 -0
  326. package/test/less-bom/import/imports/font.less +8 -0
  327. package/test/less-bom/import/imports/logo.less +6 -0
  328. package/test/less-bom/import/interpolation-vars.less +6 -0
  329. package/test/less-bom/import/invalid-css.less +1 -0
  330. package/test/less-bom/import/urls.less +1 -0
  331. package/test/less-bom/import-inline.less +3 -0
  332. package/test/less-bom/import-interpolation.less +8 -0
  333. package/test/less-bom/import-once.less +6 -0
  334. package/test/less-bom/import-reference.less +26 -0
  335. package/test/less-bom/import.less +31 -0
  336. package/test/less-bom/include-path/include-path.less +8 -0
  337. package/test/less-bom/include-path-string/include-path-string.less +3 -0
  338. package/test/less-bom/javascript.less +38 -0
  339. package/test/less-bom/lazy-eval.less +6 -0
  340. package/test/less-bom/legacy/legacy.less +21 -0
  341. package/test/less-bom/media.less +234 -0
  342. package/test/less-bom/merge.less +78 -0
  343. package/test/less-bom/mixins-args.less +263 -0
  344. package/test/less-bom/mixins-closure.less +26 -0
  345. package/test/less-bom/mixins-guards-default-func.less +195 -0
  346. package/test/less-bom/mixins-guards.less +280 -0
  347. package/test/less-bom/mixins-important.less +53 -0
  348. package/test/less-bom/mixins-interpolated.less +75 -0
  349. package/test/less-bom/mixins-named-args.less +36 -0
  350. package/test/less-bom/mixins-nested.less +22 -0
  351. package/test/less-bom/mixins-pattern.less +102 -0
  352. package/test/less-bom/mixins.less +145 -0
  353. package/test/less-bom/modifyVars/extended.json +5 -0
  354. package/test/less-bom/modifyVars/extended.less +11 -0
  355. package/test/less-bom/nested-gradient-with-svg-gradient/mixin-consumer.less +5 -0
  356. package/test/less-bom/nested-gradient-with-svg-gradient/svg-gradient-mixin.less +15 -0
  357. package/test/less-bom/no-js-errors/no-js-errors.less +3 -0
  358. package/test/less-bom/no-js-errors/no-js-errors.txt +4 -0
  359. package/test/less-bom/no-output.less +2 -0
  360. package/test/less-bom/operations.less +62 -0
  361. package/test/less-bom/parens.less +45 -0
  362. package/test/less-bom/plugin/plugin-global.js +9 -0
  363. package/test/less-bom/plugin/plugin-local.js +8 -0
  364. package/test/less-bom/plugin/plugin-transitive.js +5 -0
  365. package/test/less-bom/plugin/plugin-transitive.less +5 -0
  366. package/test/less-bom/plugin.less +85 -0
  367. package/test/less-bom/postProcessorPlugin/postProcessor.less +4 -0
  368. package/test/less-bom/preProcessorPlugin/preProcessor.less +3 -0
  369. package/test/less-bom/property-name-interp.less +56 -0
  370. package/test/less-bom/rulesets.less +30 -0
  371. package/test/less-bom/scope.less +104 -0
  372. package/test/less-bom/selectors.less +184 -0
  373. package/test/less-bom/sourcemaps/basic.json +3 -0
  374. package/test/less-bom/sourcemaps/basic.less +27 -0
  375. package/test/less-bom/sourcemaps/imported.css +7 -0
  376. package/test/less-bom/sourcemaps-empty/empty.less +1 -0
  377. package/test/less-bom/sourcemaps-empty/var-defs.less +1 -0
  378. package/test/less-bom/static-urls/urls.less +33 -0
  379. package/test/less-bom/strict-units/strict-units.less +4 -0
  380. package/test/less-bom/strings.less +73 -0
  381. package/test/less-bom/url-args/urls.less +63 -0
  382. package/test/less-bom/urls.less +94 -0
  383. package/test/less-bom/variables-in-at-rules.less +20 -0
  384. package/test/less-bom/variables.less +119 -0
  385. package/test/less-bom/visitorPlugin/visitor.less +4 -0
  386. package/test/less-bom/whitespace.less +44 -0
  387. package/test/less-test.js +9 -5
  388. package/test/plugins/filemanager/index.js +19 -0
  389. package/test/plugins/postprocess/index.js +14 -0
  390. package/test/plugins/preprocess/index.js +19 -0
  391. package/test/plugins/visitor/index.js +24 -0
  392. package/test.less +1 -0
  393. package/.idea/codeStyleSettings.xml +0 -13
  394. package/.idea/encodings.xml +0 -5
  395. package/.idea/inspectionProfiles/Project_Default.xml +0 -8
  396. package/.idea/inspectionProfiles/profiles_settings.xml +0 -7
  397. package/.idea/jsLinters/jscs.xml +0 -4
  398. package/.idea/jsLinters/jshint.xml +0 -70
  399. package/.idea/libraries/sass_stdlib.xml +0 -8
  400. package/.idea/scopes/scope_settings.xml +0 -5
  401. package/projectFilesBackup/.idea/libraries/sass_stdlib.xml +0 -8
  402. package/test/less/errors/detached-ruleset-4.less +0 -5
  403. package/test/less/errors/detached-ruleset-4.txt +0 -4
  404. package/test/less/errors/parse-error-extra-parens.txt +0 -3
  405. package/test/sourcemaps/maps/import-map.map +0 -1
@@ -45,6 +45,13 @@ ToCSSVisitor.prototype = {
45
45
  return mediaNode;
46
46
  },
47
47
 
48
+ visitImport: function (importNode, visitArgs) {
49
+ if (importNode.path.currentFileInfo.reference !== undefined && importNode.css) {
50
+ return;
51
+ }
52
+ return importNode;
53
+ },
54
+
48
55
  visitDirective: function(directiveNode, visitArgs) {
49
56
  if (directiveNode.name === "@charset") {
50
57
  if (!directiveNode.getIsReferenced()) {
@@ -63,8 +70,30 @@ ToCSSVisitor.prototype = {
63
70
  }
64
71
  this.charset = true;
65
72
  }
66
- if (directiveNode.rules && directiveNode.rules.rules) {
67
- this._mergeRules(directiveNode.rules.rules);
73
+ function hasVisibleChild(directiveNode) {
74
+ //prepare list of childs
75
+ var rule, bodyRules = directiveNode.rules;
76
+ //if there is only one nested ruleset and that one has no path, then it is
77
+ //just fake ruleset that got not replaced and we need to look inside it to
78
+ //get real childs
79
+ if (bodyRules.length === 1 && (!bodyRules[0].paths || bodyRules[0].paths.length === 0)) {
80
+ bodyRules = bodyRules[0].rules;
81
+ }
82
+ for (var r = 0; r < bodyRules.length; r++) {
83
+ rule = bodyRules[r];
84
+ if (rule.getIsReferenced && rule.getIsReferenced()) {
85
+ //the directive contains something that was referenced (likely by extend)
86
+ //therefore it needs to be shown in output too
87
+ return true;
88
+ }
89
+ }
90
+ return false;
91
+ }
92
+
93
+ if (directiveNode.rules && directiveNode.rules.length) {
94
+ //it is still true that it is only one ruleset in array
95
+ //this is last such moment
96
+ this._mergeRules(directiveNode.rules[0].rules);
68
97
  //process childs
69
98
  directiveNode.accept(this._visitor);
70
99
  visitArgs.visitDeeper = false;
@@ -74,22 +103,18 @@ ToCSSVisitor.prototype = {
74
103
  return directiveNode;
75
104
  }
76
105
 
77
- if (!directiveNode.rules.rules) {
106
+ if (!directiveNode.rules || !directiveNode.rules.length) {
78
107
  return ;
79
108
  }
80
109
 
81
- //the directive was not directly referenced
82
- for (var r = 0; r < directiveNode.rules.rules.length; r++) {
83
- var rule = directiveNode.rules.rules[r];
84
- if (rule.getIsReferenced && rule.getIsReferenced()) {
85
- //the directive contains something that was referenced (likely by extend)
86
- //therefore it needs to be shown in output too
87
-
88
- //marking as referenced in case the directive is stored inside another directive
89
- directiveNode.markReferenced();
90
- return directiveNode;
91
- }
110
+ //the directive was not directly referenced - we need to check whether some of its childs
111
+ //was referenced
112
+ if (hasVisibleChild(directiveNode)) {
113
+ //marking as referenced in case the directive is stored inside another directive
114
+ directiveNode.markReferenced();
115
+ return directiveNode;
92
116
  }
117
+
93
118
  //The directive was not directly referenced and does not contain anything that
94
119
  //was referenced. Therefore it must not be shown in output.
95
120
  return ;
@@ -269,6 +294,15 @@ ToCSSVisitor.prototype = {
269
294
  rule.value = toValue(spacedGroups);
270
295
  }
271
296
  });
297
+ },
298
+
299
+ visitAnonymous: function(anonymousNode, visitArgs) {
300
+ if (!anonymousNode.getIsReferenced()) {
301
+ return ;
302
+ }
303
+
304
+ anonymousNode.accept(this._visitor);
305
+ return anonymousNode;
272
306
  }
273
307
  };
274
308
 
@@ -13,14 +13,13 @@ require("./add-default-options")(window, options);
13
13
 
14
14
  var less = module.exports = require("./index")(window, options);
15
15
 
16
+ window.less = less;
17
+
16
18
  if (options.onReady) {
17
19
  if (/!watch/.test(window.location.hash)) {
18
20
  less.watch();
19
21
  }
20
22
 
21
- less.pageLoadFinished = less.registerStylesheets().then(
22
- function () {
23
- return less.refresh(less.env === 'development');
24
- }
25
- );
26
- }
23
+ less.registerStylesheetsImmediately();
24
+ less.pageLoadFinished = less.refresh(less.env === 'development');
25
+ }
@@ -27,7 +27,7 @@ module.exports = function(window, options) {
27
27
 
28
28
  var typePattern = /^text\/(x-)?less$/;
29
29
 
30
- function postProcessCSS(styles) {
30
+ function postProcessCSS(styles) { // deprecated, use a plugin for postprocesstasks
31
31
  if (options.postProcessor && typeof options.postProcessor === 'function') {
32
32
  styles = options.postProcessor.call(styles, styles) || styles;
33
33
  }
@@ -187,20 +187,28 @@ module.exports = function(window, options) {
187
187
  less.unwatch = function () {clearInterval(less.watchTimer); this.watchMode = false; return false; };
188
188
 
189
189
  //
190
- // Get all <link> tags with the 'rel' attribute set to "stylesheet/less"
190
+ // Synchronously get all <link> tags with the 'rel' attribute set to
191
+ // "stylesheet/less".
191
192
  //
192
- less.registerStylesheets = function() {
193
- return new Promise(function(resolve, reject) {
194
- var links = document.getElementsByTagName('link');
195
- less.sheets = [];
196
-
197
- for (var i = 0; i < links.length; i++) {
198
- if (links[i].rel === 'stylesheet/less' || (links[i].rel.match(/stylesheet/) &&
199
- (links[i].type.match(typePattern)))) {
200
- less.sheets.push(links[i]);
201
- }
193
+ less.registerStylesheetsImmediately = function() {
194
+ var links = document.getElementsByTagName('link');
195
+ less.sheets = [];
196
+
197
+ for (var i = 0; i < links.length; i++) {
198
+ if (links[i].rel === 'stylesheet/less' || (links[i].rel.match(/stylesheet/) &&
199
+ (links[i].type.match(typePattern)))) {
200
+ less.sheets.push(links[i]);
202
201
  }
202
+ }
203
+ };
203
204
 
205
+ //
206
+ // Asynchronously get all <link> tags with the 'rel' attribute set to
207
+ // "stylesheet/less", returning a Promise.
208
+ //
209
+ less.registerStylesheets = function() {
210
+ return new Promise(function(resolve, reject) {
211
+ less.registerStylesheetsImmediately();
204
212
  resolve();
205
213
  });
206
214
  };
@@ -1,34 +1,57 @@
1
- var Dimension = require("../less/tree/dimension"),
1
+ module.exports = function(environment) {
2
+ var Dimension = require("../less/tree/dimension"),
2
3
  Expression = require("../less/tree/expression"),
3
- functionRegistry = require("./../less/functions/function-registry"),
4
- path = require("path");
5
-
6
- function imageSize(filePathNode) {
7
- var filePath = filePathNode.value;
8
- var currentDirectory = filePathNode.currentFileInfo.relativeUrls ?
9
- filePathNode.currentFileInfo.currentDirectory : filePathNode.currentFileInfo.entryPath;
10
-
11
- var sizeOf = require('image-size');
12
- filePath = path.join(currentDirectory, filePath);
13
- return sizeOf(filePath);
14
- }
15
-
16
- var imageFunctions = {
17
- "image-size": function(filePathNode) {
18
- var size = imageSize(filePathNode);
19
- return new Expression([
20
- new Dimension(size.width, "px"),
21
- new Dimension(size.height, "px")
22
- ]);
23
- },
24
- "image-width": function(filePathNode) {
25
- var size = imageSize(filePathNode);
26
- return new Dimension(size.width, "px");
27
- },
28
- "image-height": function(filePathNode) {
29
- var size = imageSize(filePathNode);
30
- return new Dimension(size.height, "px");
4
+ functionRegistry = require("./../less/functions/function-registry");
5
+
6
+ function imageSize(functionContext, filePathNode) {
7
+ var filePath = filePathNode.value;
8
+ var currentFileInfo = functionContext.currentFileInfo;
9
+ var currentDirectory = currentFileInfo.relativeUrls ?
10
+ currentFileInfo.currentDirectory : currentFileInfo.entryPath;
11
+
12
+ var fragmentStart = filePath.indexOf('#');
13
+ var fragment = '';
14
+ if (fragmentStart !== -1) {
15
+ fragment = filePath.slice(fragmentStart);
16
+ filePath = filePath.slice(0, fragmentStart);
17
+ }
18
+
19
+ var fileManager = environment.getFileManager(filePath, currentDirectory, functionContext.context, environment, true);
20
+
21
+ if (!fileManager) {
22
+ throw {
23
+ type: "File",
24
+ message: "Can not set up FileManager for " + filePathNode
25
+ };
26
+ }
27
+
28
+ var fileSync = fileManager.loadFileSync(filePath, currentDirectory, functionContext.context, environment);
29
+
30
+ if (fileSync.error) {
31
+ throw fileSync.error;
32
+ }
33
+
34
+ var sizeOf = require('image-size');
35
+ return sizeOf(fileSync.filename);
31
36
  }
32
- };
33
37
 
34
- functionRegistry.addMultiple(imageFunctions);
38
+ var imageFunctions = {
39
+ "image-size": function(filePathNode) {
40
+ var size = imageSize(this, filePathNode);
41
+ return new Expression([
42
+ new Dimension(size.width, "px"),
43
+ new Dimension(size.height, "px")
44
+ ]);
45
+ },
46
+ "image-width": function(filePathNode) {
47
+ var size = imageSize(this, filePathNode);
48
+ return new Dimension(size.width, "px");
49
+ },
50
+ "image-height": function(filePathNode) {
51
+ var size = imageSize(this, filePathNode);
52
+ return new Dimension(size.height, "px");
53
+ }
54
+ };
55
+
56
+ functionRegistry.addMultiple(imageFunctions);
57
+ };
@@ -69,6 +69,6 @@ less.writeError = function (ctx, options) {
69
69
  };
70
70
 
71
71
  // provide image-size functionality
72
- require('./image-size');
72
+ require('./image-size')(less.environment);
73
73
 
74
74
  module.exports = less;
@@ -27,7 +27,7 @@ var lessc_helper = {
27
27
  console.log("");
28
28
  console.log("options:");
29
29
  console.log(" -h, --help Prints help (this message) and exit.");
30
- console.log(" --include-path=PATHS Sets include paths. Separated by `:'. Use `;' on Windows.");
30
+ console.log(" --include-path=PATHS Sets include paths. Separated by `:'. `;' also supported on windows.");
31
31
  console.log(" -M, --depends Outputs a makefile import dependency list to stdout.");
32
32
  console.log(" --no-color Disables colorized output.");
33
33
  console.log(" --no-ie-compat Disables IE compatibility checks.");
@@ -37,6 +37,7 @@ var lessc_helper = {
37
37
  console.log(" --strict-imports Forces evaluation of imports.");
38
38
  console.log(" --insecure Allows imports from insecure https hosts.");
39
39
  console.log(" -v, --version Prints version number and exit.");
40
+ console.log(" --verbose Be verbose.");
40
41
  console.log(" --source-map[=FILENAME] Outputs a v3 sourcemap to the filename (or output filename.map).");
41
42
  console.log(" --source-map-rootpath=X Adds this path onto the sourcemap filename and less file paths.");
42
43
  console.log(" --source-map-basepath=X Sets sourcemap base path, defaults to current working directory.");
@@ -69,7 +70,6 @@ var lessc_helper = {
69
70
  console.log(" that will output the information within a fake");
70
71
  console.log(" media query which is compatible with the SASS");
71
72
  console.log(" format, and 'all' which will do both.");
72
- console.log(" --verbose Be verbose.");
73
73
  console.log(" -x, --compress Compresses output by removing some whitespaces.");
74
74
  console.log(" We recommend you use a dedicated minifer like less-plugin-clean-css");
75
75
  console.log("");
@@ -1,4 +1,5 @@
1
- /*jshint rhino:true, unused: false */
1
+ /* jshint rhino:true, unused: false */
2
+ /* jscs:disable validateIndentation */
2
3
  /*global name:true, less, loadStyleSheet, os */
3
4
 
4
5
  function formatError(ctx, options) {
@@ -263,13 +264,16 @@ function writeFile(filename, content) {
263
264
  break;
264
265
  case 'include-path':
265
266
  if (checkArgFunc(arg, match[2])) {
266
- options.paths = match[2].split(os.type().match(/Windows/) ? ';' : ':')
267
- .map(function(p) {
268
- if (p) {
269
- // return path.resolve(process.cwd(), p);
270
- return p;
271
- }
272
- });
267
+ // support for both ; and : path separators
268
+ // even on windows when using absolute paths with drive letters (eg C:\path:D:\path)
269
+ options.paths = match[2]
270
+ .split(os.type().match(/Windows/) ? /:(?!\\)|;/ : ':')
271
+ .map(function(p) {
272
+ if (p) {
273
+ // return path.resolve(process.cwd(), p);
274
+ return p;
275
+ }
276
+ });
273
277
  }
274
278
  break;
275
279
  case 'line-numbers':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "less",
3
- "version": "2.4.0",
3
+ "version": "2.5.3",
4
4
  "description": "Leaner CSS",
5
5
  "homepage": "http://lesscss.org",
6
6
  "author": {
@@ -17,12 +17,7 @@
17
17
  "type": "git",
18
18
  "url": "https://github.com/less/less.js.git"
19
19
  },
20
- "licenses": [
21
- {
22
- "type": "Apache v2",
23
- "url": "https://github.com/less/less.js/blob/master/LICENSE"
24
- }
25
- ],
20
+ "license": "Apache-2.0",
26
21
  "bin": {
27
22
  "lessc": "./bin/lessc"
28
23
  },
@@ -33,6 +28,7 @@
33
28
  "jam": {
34
29
  "main": "./dist/less.js"
35
30
  },
31
+ "browser": "./dist/less.js",
36
32
  "engines": {
37
33
  "node": ">=0.10.0"
38
34
  },
@@ -47,7 +43,7 @@
47
43
  "mkdirp": "^0.5.0",
48
44
  "promise": "^6.0.1",
49
45
  "request": "^2.51.0",
50
- "source-map": "^0.2.0"
46
+ "source-map": "^0.4.2"
51
47
  },
52
48
  "devDependencies": {
53
49
  "diff": "^1.0",
@@ -55,13 +51,13 @@
55
51
  "grunt-contrib-clean": "^0.6.0",
56
52
  "grunt-contrib-concat": "^0.5.0",
57
53
  "grunt-contrib-connect": "^0.9.0",
58
- "grunt-contrib-jasmine": "^0.8.1",
54
+ "grunt-contrib-jasmine": "^0.8.2",
59
55
  "grunt-contrib-jshint": "^0.11.0",
60
- "grunt-contrib-uglify": "^0.7.0",
61
- "grunt-jscs": "^1.2.0",
56
+ "grunt-contrib-uglify": "^0.8.0",
57
+ "grunt-jscs": "^1.6.0",
62
58
  "grunt-shell": "^1.1.1",
63
- "grunt-browserify": "^3.2.0",
64
- "matchdep": "^0.3.0",
59
+ "grunt-browserify": "~3.5.0",
60
+ "jit-grunt": "^0.9.1",
65
61
  "time-grunt": "^1.0.0",
66
62
  "grunt-saucelabs": "^8.3.2"
67
63
  },
@@ -50,10 +50,16 @@
50
50
  uri: data-uri('../../data/data-uri-fail.png');
51
51
  }
52
52
  #svg-functions {
53
- background-image: svg-gradient(to bottom, black, white);
53
+ @colorlist1: black, white;
54
+ background-image: svg-gradient(to bottom, @colorlist1);
55
+ background-image: svg-gradient(to bottom, black white);
54
56
  background-image: svg-gradient(to bottom, black, orange 3%, white);
57
+ @colorlist2: black, orange 3%, white;
58
+ background-image: svg-gradient(to bottom, @colorlist2);
55
59
  @green_5: green 5%;
56
60
  @orange_percentage: 3%;
57
61
  @orange_color: orange;
62
+ @colorlist3: (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%;
63
+ background-image: svg-gradient(to bottom,@colorlist3);
58
64
  background-image: svg-gradient(to bottom, (mix(black, white) + #444) 1%, @orange_color @orange_percentage, ((@green_5)), white 95%);
59
65
  }