less 3.9.0 → 3.10.1

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 (511) hide show
  1. package/.DS_Store +0 -0
  2. package/.eslintignore +4 -1
  3. package/.eslintrc.json +69 -87
  4. package/CHANGELOG.md +7 -0
  5. package/Gruntfile.js +336 -330
  6. package/bin/lessc +13110 -481
  7. package/dist/less.cjs.js +12571 -0
  8. package/dist/less.js +12878 -11507
  9. package/dist/less.min.js +7 -14
  10. package/dist/less.min.js.map +1 -0
  11. package/index.js +1 -1
  12. package/lib/less/constants.js +12 -12
  13. package/lib/less/contexts.js +93 -95
  14. package/lib/less/data/colors.js +1 -1
  15. package/lib/less/data/index.js +4 -4
  16. package/lib/less/data/unit-conversions.js +1 -1
  17. package/lib/less/default-options.js +53 -58
  18. package/lib/less/environment/abstract-file-manager.js +114 -110
  19. package/lib/less/environment/abstract-plugin-loader.js +139 -141
  20. package/lib/less/environment/environment-api.js +1 -1
  21. package/lib/less/environment/environment.js +44 -41
  22. package/lib/less/environment/file-manager-api.js +1 -1
  23. package/lib/less/functions/boolean.js +10 -12
  24. package/lib/less/functions/color-blending.js +20 -10
  25. package/lib/less/functions/color.js +63 -49
  26. package/lib/less/functions/data-uri.js +25 -39
  27. package/lib/less/functions/default.js +5 -7
  28. package/lib/less/functions/function-caller.js +42 -39
  29. package/lib/less/functions/function-registry.js +3 -3
  30. package/lib/less/functions/index.js +28 -16
  31. package/lib/less/functions/list.js +34 -28
  32. package/lib/less/functions/math-helper.js +4 -5
  33. package/lib/less/functions/math.js +8 -9
  34. package/lib/less/functions/number.js +26 -18
  35. package/lib/less/functions/string.js +13 -13
  36. package/lib/less/functions/svg.js +25 -25
  37. package/lib/less/functions/types.js +23 -27
  38. package/lib/less/import-manager.js +140 -138
  39. package/lib/less/index.js +72 -35
  40. package/lib/less/less-error.js +29 -30
  41. package/lib/less/logger.js +4 -4
  42. package/lib/less/parse-tree.js +53 -47
  43. package/lib/less/parse.js +23 -25
  44. package/lib/less/parser/chunker.js +17 -7
  45. package/lib/less/parser/parser-input.js +100 -93
  46. package/lib/less/parser/parser.js +310 -170
  47. package/lib/less/plugin-manager.js +146 -133
  48. package/lib/less/render.js +10 -13
  49. package/lib/less/source-map-builder.js +62 -57
  50. package/lib/less/source-map-output.js +118 -112
  51. package/lib/less/transform-tree.js +21 -18
  52. package/lib/less/tree/anonymous.js +35 -27
  53. package/lib/less/tree/assignment.js +29 -23
  54. package/lib/less/tree/atrule.js +150 -121
  55. package/lib/less/tree/attribute.js +32 -25
  56. package/lib/less/tree/call.js +87 -79
  57. package/lib/less/tree/color.js +202 -185
  58. package/lib/less/tree/combinator.js +25 -19
  59. package/lib/less/tree/comment.js +27 -21
  60. package/lib/less/tree/condition.js +41 -35
  61. package/lib/less/tree/debug-info.js +13 -17
  62. package/lib/less/tree/declaration.js +101 -88
  63. package/lib/less/tree/detached-ruleset.js +27 -20
  64. package/lib/less/tree/dimension.js +142 -124
  65. package/lib/less/tree/element.js +67 -58
  66. package/lib/less/tree/expression.js +66 -57
  67. package/lib/less/tree/extend.js +61 -53
  68. package/lib/less/tree/import.js +144 -141
  69. package/lib/less/tree/index.js +52 -40
  70. package/lib/less/tree/javascript.js +29 -25
  71. package/lib/less/tree/js-eval-node.js +50 -53
  72. package/lib/less/tree/keyword.js +15 -8
  73. package/lib/less/tree/media.js +137 -124
  74. package/lib/less/tree/mixin-call.js +178 -149
  75. package/lib/less/tree/mixin-definition.js +198 -178
  76. package/lib/less/tree/namespace-value.js +75 -67
  77. package/lib/less/tree/negative.js +24 -18
  78. package/lib/less/tree/node.js +138 -117
  79. package/lib/less/tree/operation.js +57 -49
  80. package/lib/less/tree/paren.js +20 -14
  81. package/lib/less/tree/property.js +65 -58
  82. package/lib/less/tree/quoted.js +62 -53
  83. package/lib/less/tree/ruleset.js +739 -680
  84. package/lib/less/tree/selector.js +129 -114
  85. package/lib/less/tree/unicode-descriptor.js +10 -6
  86. package/lib/less/tree/unit.js +117 -97
  87. package/lib/less/tree/url.js +54 -47
  88. package/lib/less/tree/value.js +38 -33
  89. package/lib/less/tree/variable-call.js +41 -34
  90. package/lib/less/tree/variable.js +58 -51
  91. package/lib/less/utils.js +110 -108
  92. package/lib/less/visitors/extend-visitor.js +157 -114
  93. package/lib/less/visitors/import-sequencer.js +47 -43
  94. package/lib/less/visitors/import-visitor.js +22 -23
  95. package/lib/less/visitors/index.js +14 -9
  96. package/lib/less/visitors/join-selector-visitor.js +32 -26
  97. package/lib/less/visitors/set-tree-visibility-visitor.js +37 -30
  98. package/lib/less/visitors/to-css-visitor.js +60 -57
  99. package/lib/less/visitors/visitor.js +44 -35
  100. package/lib/less-browser/add-default-options.js +4 -4
  101. package/lib/less-browser/bootstrap.js +11 -9
  102. package/lib/less-browser/browser.js +13 -12
  103. package/lib/less-browser/cache.js +9 -9
  104. package/lib/less-browser/error-reporting.js +27 -27
  105. package/lib/less-browser/file-manager.js +37 -35
  106. package/lib/less-browser/image-size.js +3 -3
  107. package/lib/less-browser/index.js +78 -73
  108. package/lib/less-browser/log-listener.js +6 -7
  109. package/lib/less-browser/plugin-loader.js +15 -13
  110. package/lib/less-browser/utils.js +20 -20
  111. package/lib/less-node/environment.js +4 -2
  112. package/lib/less-node/file-manager.js +128 -127
  113. package/lib/less-node/fs.js +2 -2
  114. package/lib/less-node/image-size.js +19 -18
  115. package/lib/less-node/index.js +16 -12
  116. package/lib/less-node/lessc-helper.js +4 -5
  117. package/lib/less-node/plugin-loader.js +41 -40
  118. package/lib/less-node/url-file-manager.js +41 -48
  119. package/lib/lessc.js +557 -0
  120. package/package.json +21 -11
  121. package/test/.DS_Store +0 -0
  122. package/test/browser/common.js +34 -30
  123. package/test/browser/css/urls.css +0 -3
  124. package/test/browser/less/plugin/plugin.js +4 -7
  125. package/test/browser/less/urls.less +0 -3
  126. package/test/browser/less.min.js +11 -0
  127. package/test/browser/less.min.js.map +1 -0
  128. package/test/browser/onload.js +13 -0
  129. package/test/browser/runner-browser-options.js +0 -5
  130. package/test/browser/test-runner-template.tmpl +39 -52
  131. package/test/browser/vendor/boot.js +148 -0
  132. package/test/browser/{jasmine-jsreporter.js → vendor/jasmine-jsreporter.js} +0 -0
  133. package/test/copy-bom.js +2 -1
  134. package/test/css/.DS_Store +0 -0
  135. package/test/css/functions-each.css +10 -0
  136. package/test/css/math/.DS_Store +0 -0
  137. package/test/css/namespacing/namespacing-1.css +4 -0
  138. package/test/css/urls.css +0 -1
  139. package/test/index.js +2 -5
  140. package/test/less/.DS_Store +0 -0
  141. package/test/less/colors.less +1 -1
  142. package/test/less/errors/color-func-invalid-color-2.less +2 -0
  143. package/test/less/errors/color-func-invalid-color-2.txt +3 -0
  144. package/test/less/functions-each.less +32 -0
  145. package/test/less/math/.DS_Store +0 -0
  146. package/test/less/namespacing/namespacing-1.less +10 -0
  147. package/test/less/urls.less +0 -1
  148. package/test/less-test.js +20 -11
  149. package/test/modify-vars.js +11 -2
  150. package/.travis.yml +0 -33
  151. package/appveyor.yml +0 -32
  152. package/browser.js +0 -1
  153. package/test/browser/less.js +0 -12956
  154. package/test/less-bom/3rd-party/bootstrap4.less +0 -1
  155. package/test/less-bom/3rd-party/uikit.less +0 -1
  156. package/test/less-bom/calc.less +0 -30
  157. package/test/less-bom/charsets.less +0 -3
  158. package/test/less-bom/colors.less +0 -116
  159. package/test/less-bom/comments.less +0 -102
  160. package/test/less-bom/comments2.less +0 -31
  161. package/test/less-bom/compression/compression.less +0 -36
  162. package/test/less-bom/css-3.less +0 -153
  163. package/test/less-bom/css-escapes.less +0 -42
  164. package/test/less-bom/css-grid.less +0 -30
  165. package/test/less-bom/css-guards.less +0 -103
  166. package/test/less-bom/debug/import/test.less +0 -25
  167. package/test/less-bom/debug/linenumbers.less +0 -33
  168. package/test/less-bom/detached-rulesets.less +0 -112
  169. package/test/less-bom/directives-bubling.less +0 -142
  170. package/test/less-bom/empty.less +0 -1
  171. package/test/less-bom/errors/add-mixed-units.less +0 -3
  172. package/test/less-bom/errors/add-mixed-units.txt +0 -4
  173. package/test/less-bom/errors/add-mixed-units2.less +0 -3
  174. package/test/less-bom/errors/add-mixed-units2.txt +0 -4
  175. package/test/less-bom/errors/at-rules-undefined-var.less +0 -4
  176. package/test/less-bom/errors/at-rules-undefined-var.txt +0 -4
  177. package/test/less-bom/errors/at-rules-unmatching-block.less +0 -4
  178. package/test/less-bom/errors/at-rules-unmatching-block.txt +0 -3
  179. package/test/less-bom/errors/bad-variable-declaration1.less +0 -1
  180. package/test/less-bom/errors/bad-variable-declaration1.txt +0 -2
  181. package/test/less-bom/errors/color-func-invalid-color.less +0 -3
  182. package/test/less-bom/errors/color-func-invalid-color.txt +0 -4
  183. package/test/less-bom/errors/css-guard-default-func.less +0 -4
  184. package/test/less-bom/errors/css-guard-default-func.txt +0 -4
  185. package/test/less-bom/errors/custom-property-unmatched-block-1.less +0 -6
  186. package/test/less-bom/errors/custom-property-unmatched-block-1.txt +0 -4
  187. package/test/less-bom/errors/custom-property-unmatched-block-2.less +0 -6
  188. package/test/less-bom/errors/custom-property-unmatched-block-2.txt +0 -4
  189. package/test/less-bom/errors/custom-property-unmatched-block-3.less +0 -6
  190. package/test/less-bom/errors/custom-property-unmatched-block-3.txt +0 -4
  191. package/test/less-bom/errors/detached-ruleset-1.less +0 -6
  192. package/test/less-bom/errors/detached-ruleset-1.txt +0 -4
  193. package/test/less-bom/errors/detached-ruleset-2.less +0 -6
  194. package/test/less-bom/errors/detached-ruleset-2.txt +0 -4
  195. package/test/less-bom/errors/detached-ruleset-3.less +0 -4
  196. package/test/less-bom/errors/detached-ruleset-3.txt +0 -4
  197. package/test/less-bom/errors/detached-ruleset-5.less +0 -4
  198. package/test/less-bom/errors/detached-ruleset-5.txt +0 -3
  199. package/test/less-bom/errors/detached-ruleset-6.less +0 -5
  200. package/test/less-bom/errors/detached-ruleset-6.txt +0 -4
  201. package/test/less-bom/errors/divide-mixed-units.less +0 -3
  202. package/test/less-bom/errors/divide-mixed-units.txt +0 -4
  203. package/test/less-bom/errors/extend-no-selector.less +0 -3
  204. package/test/less-bom/errors/extend-no-selector.txt +0 -3
  205. package/test/less-bom/errors/extend-not-at-end.less +0 -3
  206. package/test/less-bom/errors/extend-not-at-end.txt +0 -3
  207. package/test/less-bom/errors/functions-1.less +0 -2
  208. package/test/less-bom/errors/functions-1.txt +0 -3
  209. package/test/less-bom/errors/functions-10-keyword.less +0 -2
  210. package/test/less-bom/errors/functions-10-keyword.txt +0 -3
  211. package/test/less-bom/errors/functions-11-operation.less +0 -2
  212. package/test/less-bom/errors/functions-11-operation.txt +0 -3
  213. package/test/less-bom/errors/functions-12-quoted.less +0 -2
  214. package/test/less-bom/errors/functions-12-quoted.txt +0 -3
  215. package/test/less-bom/errors/functions-13-selector.less +0 -2
  216. package/test/less-bom/errors/functions-13-selector.txt +0 -3
  217. package/test/less-bom/errors/functions-14-url.less +0 -2
  218. package/test/less-bom/errors/functions-14-url.txt +0 -3
  219. package/test/less-bom/errors/functions-15-value.less +0 -2
  220. package/test/less-bom/errors/functions-15-value.txt +0 -3
  221. package/test/less-bom/errors/functions-3-assignment.less +0 -2
  222. package/test/less-bom/errors/functions-3-assignment.txt +0 -3
  223. package/test/less-bom/errors/functions-4-call.less +0 -2
  224. package/test/less-bom/errors/functions-4-call.txt +0 -3
  225. package/test/less-bom/errors/functions-5-color-2.less +0 -1
  226. package/test/less-bom/errors/functions-5-color-2.txt +0 -2
  227. package/test/less-bom/errors/functions-5-color.less +0 -2
  228. package/test/less-bom/errors/functions-5-color.txt +0 -3
  229. package/test/less-bom/errors/functions-6-condition.less +0 -2
  230. package/test/less-bom/errors/functions-6-condition.txt +0 -3
  231. package/test/less-bom/errors/functions-7-dimension.less +0 -2
  232. package/test/less-bom/errors/functions-7-dimension.txt +0 -3
  233. package/test/less-bom/errors/functions-8-element.less +0 -2
  234. package/test/less-bom/errors/functions-8-element.txt +0 -3
  235. package/test/less-bom/errors/functions-9-expression.less +0 -2
  236. package/test/less-bom/errors/functions-9-expression.txt +0 -3
  237. package/test/less-bom/errors/import-malformed.less +0 -1
  238. package/test/less-bom/errors/import-malformed.txt +0 -3
  239. package/test/less-bom/errors/import-missing.less +0 -6
  240. package/test/less-bom/errors/import-missing.txt +0 -3
  241. package/test/less-bom/errors/import-no-semi.less +0 -1
  242. package/test/less-bom/errors/import-no-semi.txt +0 -2
  243. package/test/less-bom/errors/import-subfolder1.less +0 -1
  244. package/test/less-bom/errors/import-subfolder1.txt +0 -3
  245. package/test/less-bom/errors/import-subfolder2.less +0 -1
  246. package/test/less-bom/errors/import-subfolder2.txt +0 -4
  247. package/test/less-bom/errors/imports/import-subfolder1.less +0 -1
  248. package/test/less-bom/errors/imports/import-subfolder2.less +0 -1
  249. package/test/less-bom/errors/imports/import-test.less +0 -4
  250. package/test/less-bom/errors/imports/subfolder/mixin-not-defined.less +0 -1
  251. package/test/less-bom/errors/imports/subfolder/parse-error-curly-bracket.less +0 -1
  252. package/test/less-bom/errors/javascript-error.less +0 -3
  253. package/test/less-bom/errors/javascript-error.txt +0 -4
  254. package/test/less-bom/errors/javascript-undefined-var.less +0 -3
  255. package/test/less-bom/errors/javascript-undefined-var.txt +0 -4
  256. package/test/less-bom/errors/mixed-mixin-definition-args-1.less +0 -6
  257. package/test/less-bom/errors/mixed-mixin-definition-args-1.txt +0 -4
  258. package/test/less-bom/errors/mixed-mixin-definition-args-2.less +0 -6
  259. package/test/less-bom/errors/mixed-mixin-definition-args-2.txt +0 -4
  260. package/test/less-bom/errors/mixin-not-defined-2.less +0 -7
  261. package/test/less-bom/errors/mixin-not-defined-2.txt +0 -4
  262. package/test/less-bom/errors/mixin-not-defined.less +0 -11
  263. package/test/less-bom/errors/mixin-not-defined.txt +0 -3
  264. package/test/less-bom/errors/mixin-not-matched.less +0 -6
  265. package/test/less-bom/errors/mixin-not-matched.txt +0 -3
  266. package/test/less-bom/errors/mixin-not-matched2.less +0 -6
  267. package/test/less-bom/errors/mixin-not-matched2.txt +0 -3
  268. package/test/less-bom/errors/mixin-not-visible-in-scope-1.less +0 -9
  269. package/test/less-bom/errors/mixin-not-visible-in-scope-1.txt +0 -4
  270. package/test/less-bom/errors/mixins-guards-cond-expected.less +0 -5
  271. package/test/less-bom/errors/mixins-guards-cond-expected.txt +0 -3
  272. package/test/less-bom/errors/mixins-guards-default-func-1.less +0 -9
  273. package/test/less-bom/errors/mixins-guards-default-func-1.txt +0 -4
  274. package/test/less-bom/errors/mixins-guards-default-func-2.less +0 -9
  275. package/test/less-bom/errors/mixins-guards-default-func-2.txt +0 -4
  276. package/test/less-bom/errors/mixins-guards-default-func-3.less +0 -9
  277. package/test/less-bom/errors/mixins-guards-default-func-3.txt +0 -4
  278. package/test/less-bom/errors/multiple-guards-on-css-selectors.less +0 -4
  279. package/test/less-bom/errors/multiple-guards-on-css-selectors.txt +0 -4
  280. package/test/less-bom/errors/multiple-guards-on-css-selectors2.less +0 -4
  281. package/test/less-bom/errors/multiple-guards-on-css-selectors2.txt +0 -4
  282. package/test/less-bom/errors/multiply-mixed-units.less +0 -7
  283. package/test/less-bom/errors/multiply-mixed-units.txt +0 -4
  284. package/test/less-bom/errors/namespacing-2.less +0 -7
  285. package/test/less-bom/errors/namespacing-2.txt +0 -4
  286. package/test/less-bom/errors/namespacing-3.less +0 -8
  287. package/test/less-bom/errors/namespacing-3.txt +0 -4
  288. package/test/less-bom/errors/namespacing-4.less +0 -7
  289. package/test/less-bom/errors/namespacing-4.txt +0 -4
  290. package/test/less-bom/errors/parens-error-1.less +0 -3
  291. package/test/less-bom/errors/parens-error-1.txt +0 -4
  292. package/test/less-bom/errors/parens-error-2.less +0 -3
  293. package/test/less-bom/errors/parens-error-2.txt +0 -4
  294. package/test/less-bom/errors/parens-error-3.less +0 -3
  295. package/test/less-bom/errors/parens-error-3.txt +0 -4
  296. package/test/less-bom/errors/parse-error-curly-bracket.less +0 -4
  297. package/test/less-bom/errors/parse-error-curly-bracket.txt +0 -4
  298. package/test/less-bom/errors/parse-error-media-no-block-1.less +0 -5
  299. package/test/less-bom/errors/parse-error-media-no-block-1.txt +0 -3
  300. package/test/less-bom/errors/parse-error-media-no-block-2.less +0 -1
  301. package/test/less-bom/errors/parse-error-media-no-block-2.txt +0 -2
  302. package/test/less-bom/errors/parse-error-media-no-block-3.less +0 -4
  303. package/test/less-bom/errors/parse-error-media-no-block-3.txt +0 -3
  304. package/test/less-bom/errors/parse-error-missing-bracket.less +0 -2
  305. package/test/less-bom/errors/parse-error-missing-bracket.txt +0 -3
  306. package/test/less-bom/errors/parse-error-missing-parens.less +0 -5
  307. package/test/less-bom/errors/parse-error-missing-parens.txt +0 -3
  308. package/test/less-bom/errors/parse-error-with-import.less +0 -13
  309. package/test/less-bom/errors/parse-error-with-import.txt +0 -4
  310. package/test/less-bom/errors/percentage-missing-space.less +0 -3
  311. package/test/less-bom/errors/percentage-missing-space.txt +0 -4
  312. package/test/less-bom/errors/percentage-non-number-argument.less +0 -3
  313. package/test/less-bom/errors/percentage-non-number-argument.txt +0 -4
  314. package/test/less-bom/errors/plugin/plugin-error-2.js +0 -5
  315. package/test/less-bom/errors/plugin/plugin-error-3.js +0 -5
  316. package/test/less-bom/errors/plugin/plugin-error.js +0 -1
  317. package/test/less-bom/errors/plugin-1.less +0 -1
  318. package/test/less-bom/errors/plugin-1.txt +0 -2
  319. package/test/less-bom/errors/plugin-2.less +0 -1
  320. package/test/less-bom/errors/plugin-2.txt +0 -5
  321. package/test/less-bom/errors/plugin-3.less +0 -1
  322. package/test/less-bom/errors/plugin-3.txt +0 -5
  323. package/test/less-bom/errors/property-asterisk-only-name.less +0 -3
  324. package/test/less-bom/errors/property-asterisk-only-name.txt +0 -4
  325. package/test/less-bom/errors/property-ie5-hack.less +0 -3
  326. package/test/less-bom/errors/property-ie5-hack.txt +0 -3
  327. package/test/less-bom/errors/property-in-root.less +0 -4
  328. package/test/less-bom/errors/property-in-root.txt +0 -4
  329. package/test/less-bom/errors/property-in-root2.less +0 -1
  330. package/test/less-bom/errors/property-in-root2.txt +0 -4
  331. package/test/less-bom/errors/property-in-root3.less +0 -4
  332. package/test/less-bom/errors/property-in-root3.txt +0 -3
  333. package/test/less-bom/errors/property-interp-not-defined.less +0 -1
  334. package/test/less-bom/errors/property-interp-not-defined.txt +0 -2
  335. package/test/less-bom/errors/recursive-variable.less +0 -1
  336. package/test/less-bom/errors/recursive-variable.txt +0 -2
  337. package/test/less-bom/errors/root-func-undefined-1.less +0 -1
  338. package/test/less-bom/errors/root-func-undefined-1.txt +0 -2
  339. package/test/less-bom/errors/root-func-undefined-2.less +0 -2
  340. package/test/less-bom/errors/root-func-undefined-2.txt +0 -3
  341. package/test/less-bom/errors/single-character.less +0 -1
  342. package/test/less-bom/errors/single-character.txt +0 -2
  343. package/test/less-bom/errors/svg-gradient1.less +0 -3
  344. package/test/less-bom/errors/svg-gradient1.txt +0 -4
  345. package/test/less-bom/errors/svg-gradient2.less +0 -3
  346. package/test/less-bom/errors/svg-gradient2.txt +0 -4
  347. package/test/less-bom/errors/svg-gradient3.less +0 -3
  348. package/test/less-bom/errors/svg-gradient3.txt +0 -4
  349. package/test/less-bom/errors/svg-gradient4.less +0 -4
  350. package/test/less-bom/errors/svg-gradient4.txt +0 -4
  351. package/test/less-bom/errors/svg-gradient5.less +0 -4
  352. package/test/less-bom/errors/svg-gradient5.txt +0 -4
  353. package/test/less-bom/errors/svg-gradient6.less +0 -4
  354. package/test/less-bom/errors/svg-gradient6.txt +0 -4
  355. package/test/less-bom/errors/unit-function.less +0 -3
  356. package/test/less-bom/errors/unit-function.txt +0 -4
  357. package/test/less-bom/extend-chaining.less +0 -91
  358. package/test/less-bom/extend-clearfix.less +0 -19
  359. package/test/less-bom/extend-exact.less +0 -46
  360. package/test/less-bom/extend-media.less +0 -24
  361. package/test/less-bom/extend-nest.less +0 -65
  362. package/test/less-bom/extend-selector.less +0 -110
  363. package/test/less-bom/extend.less +0 -81
  364. package/test/less-bom/extract-and-length.less +0 -146
  365. package/test/less-bom/filemanagerPlugin/colors.test +0 -1
  366. package/test/less-bom/filemanagerPlugin/filemanager.less +0 -4
  367. package/test/less-bom/functions-each.less +0 -131
  368. package/test/less-bom/functions.less +0 -279
  369. package/test/less-bom/globalVars/extended.json +0 -5
  370. package/test/less-bom/globalVars/extended.less +0 -10
  371. package/test/less-bom/globalVars/simple.json +0 -3
  372. package/test/less-bom/globalVars/simple.less +0 -3
  373. package/test/less-bom/ie-filters.less +0 -15
  374. package/test/less-bom/import/css-import.less +0 -1
  375. package/test/less-bom/import/deeper/deeper-2/url-import-2.less +0 -3
  376. package/test/less-bom/import/deeper/deeper-2/url-import.less +0 -1
  377. package/test/less-bom/import/deeper/import-once-test-a.less +0 -1
  378. package/test/less-bom/import/deeper/url-import.less +0 -1
  379. package/test/less-bom/import/import-and-relative-paths-test.less +0 -17
  380. package/test/less-bom/import/import-charset-test.less +0 -1
  381. package/test/less-bom/import/import-inline-invalid-css.less +0 -1
  382. package/test/less-bom/import/import-interpolation.less +0 -2
  383. package/test/less-bom/import/import-interpolation2.less +0 -5
  384. package/test/less-bom/import/import-once-test-c.less +0 -6
  385. package/test/less-bom/import/import-reference.less +0 -98
  386. package/test/less-bom/import/import-test-a.less +0 -5
  387. package/test/less-bom/import/import-test-b.less +0 -8
  388. package/test/less-bom/import/import-test-c.less +0 -6
  389. package/test/less-bom/import/import-test-d.css +0 -1
  390. package/test/less-bom/import/import-test-e.less +0 -2
  391. package/test/less-bom/import/import-test-f.less +0 -5
  392. package/test/less-bom/import/imports/font.less +0 -8
  393. package/test/less-bom/import/imports/logo.less +0 -6
  394. package/test/less-bom/import/interpolation-vars.less +0 -6
  395. package/test/less-bom/import/invalid-css.less +0 -1
  396. package/test/less-bom/import/urls.less +0 -1
  397. package/test/less-bom/import-inline.less +0 -3
  398. package/test/less-bom/import-interpolation.less +0 -8
  399. package/test/less-bom/import-module.less +0 -3
  400. package/test/less-bom/import-once.less +0 -6
  401. package/test/less-bom/import-reference-issues/appender-reference-1968.less +0 -6
  402. package/test/less-bom/import-reference-issues/global-scope-import.less +0 -13
  403. package/test/less-bom/import-reference-issues/global-scope-nested.less +0 -3
  404. package/test/less-bom/import-reference-issues/mixin-1968.less +0 -8
  405. package/test/less-bom/import-reference-issues/multiple-import-nested.less +0 -12
  406. package/test/less-bom/import-reference-issues/multiple-import.less +0 -10
  407. package/test/less-bom/import-reference-issues/simple-mixin.css +0 -3
  408. package/test/less-bom/import-reference-issues/simple-ruleset-2162.less +0 -3
  409. package/test/less-bom/import-reference-issues.less +0 -50
  410. package/test/less-bom/import-reference.less +0 -26
  411. package/test/less-bom/import.less +0 -29
  412. package/test/less-bom/include-path/include-path.less +0 -8
  413. package/test/less-bom/include-path-string/include-path-string.less +0 -3
  414. package/test/less-bom/javascript.less +0 -39
  415. package/test/less-bom/lazy-eval.less +0 -6
  416. package/test/less-bom/legacy/legacy.less +0 -21
  417. package/test/less-bom/math/parens-division/media-math.less +0 -9
  418. package/test/less-bom/math/parens-division/mixins-args.less +0 -264
  419. package/test/less-bom/math/parens-division/new-division.less +0 -17
  420. package/test/less-bom/math/parens-division/parens.less +0 -46
  421. package/test/less-bom/math/strict/css.less +0 -108
  422. package/test/less-bom/math/strict/media-math.less +0 -9
  423. package/test/less-bom/math/strict/mixins-args.less +0 -264
  424. package/test/less-bom/math/strict/parens.less +0 -46
  425. package/test/less-bom/math/strict-legacy/css.less +0 -108
  426. package/test/less-bom/math/strict-legacy/media-math.less +0 -9
  427. package/test/less-bom/math/strict-legacy/mixins-args.less +0 -263
  428. package/test/less-bom/math/strict-legacy/parens.less +0 -50
  429. package/test/less-bom/media.less +0 -241
  430. package/test/less-bom/merge.less +0 -81
  431. package/test/less-bom/mixins-closure.less +0 -26
  432. package/test/less-bom/mixins-guards-default-func.less +0 -195
  433. package/test/less-bom/mixins-guards.less +0 -358
  434. package/test/less-bom/mixins-important.less +0 -53
  435. package/test/less-bom/mixins-interpolated.less +0 -75
  436. package/test/less-bom/mixins-named-args.less +0 -36
  437. package/test/less-bom/mixins-nested.less +0 -22
  438. package/test/less-bom/mixins-pattern.less +0 -102
  439. package/test/less-bom/mixins.less +0 -145
  440. package/test/less-bom/modifyVars/extended.json +0 -5
  441. package/test/less-bom/modifyVars/extended.less +0 -11
  442. package/test/less-bom/namespacing/imports/a-better-bootstrap.less +0 -13
  443. package/test/less-bom/namespacing/imports/library.less +0 -14
  444. package/test/less-bom/namespacing/namespacing-1.less +0 -42
  445. package/test/less-bom/namespacing/namespacing-2.less +0 -27
  446. package/test/less-bom/namespacing/namespacing-3.less +0 -28
  447. package/test/less-bom/namespacing/namespacing-4.less +0 -33
  448. package/test/less-bom/namespacing/namespacing-5.less +0 -32
  449. package/test/less-bom/namespacing/namespacing-6.less +0 -26
  450. package/test/less-bom/namespacing/namespacing-7.less +0 -48
  451. package/test/less-bom/namespacing/namespacing-functions.less +0 -11
  452. package/test/less-bom/namespacing/namespacing-media.less +0 -26
  453. package/test/less-bom/namespacing/namespacing-operations.less +0 -15
  454. package/test/less-bom/nested-gradient-with-svg-gradient/mixin-consumer.less +0 -5
  455. package/test/less-bom/nested-gradient-with-svg-gradient/svg-gradient-mixin.less +0 -15
  456. package/test/less-bom/no-js-errors/no-js-errors.less +0 -3
  457. package/test/less-bom/no-js-errors/no-js-errors.txt +0 -4
  458. package/test/less-bom/no-output.less +0 -2
  459. package/test/less-bom/no-strict-math/mixins-guards.less +0 -25
  460. package/test/less-bom/no-strict-math/no-sm-operations.less +0 -16
  461. package/test/less-bom/operations.less +0 -63
  462. package/test/less-bom/parse-interpolation.less +0 -53
  463. package/test/less-bom/permissive-parse.less +0 -50
  464. package/test/less-bom/plugin/plugin-collection.js +0 -9
  465. package/test/less-bom/plugin/plugin-global.js +0 -9
  466. package/test/less-bom/plugin/plugin-local.js +0 -14
  467. package/test/less-bom/plugin/plugin-preeval.js +0 -27
  468. package/test/less-bom/plugin/plugin-scope1.js +0 -3
  469. package/test/less-bom/plugin/plugin-scope2.js +0 -3
  470. package/test/less-bom/plugin/plugin-set-options-v2.js +0 -33
  471. package/test/less-bom/plugin/plugin-set-options-v3.js +0 -31
  472. package/test/less-bom/plugin/plugin-set-options.js +0 -32
  473. package/test/less-bom/plugin/plugin-simple.js +0 -7
  474. package/test/less-bom/plugin/plugin-transitive.js +0 -6
  475. package/test/less-bom/plugin/plugin-transitive.less +0 -5
  476. package/test/less-bom/plugin/plugin-tree-nodes.js +0 -82
  477. package/test/less-bom/plugin-module.less +0 -7
  478. package/test/less-bom/plugin-preeval.less +0 -15
  479. package/test/less-bom/plugin.less +0 -142
  480. package/test/less-bom/postProcessorPlugin/postProcessor.less +0 -4
  481. package/test/less-bom/preProcessorPlugin/preProcessor.less +0 -3
  482. package/test/less-bom/property-accessors.less +0 -67
  483. package/test/less-bom/property-name-interp.less +0 -56
  484. package/test/less-bom/rewrite-urls-all/folder/file.less +0 -8
  485. package/test/less-bom/rewrite-urls-all/rewrite-urls-all.less +0 -11
  486. package/test/less-bom/rewrite-urls-local/folder/file.less +0 -8
  487. package/test/less-bom/rewrite-urls-local/rewrite-urls-local.less +0 -11
  488. package/test/less-bom/root-registry/file.less +0 -1
  489. package/test/less-bom/root-registry/root.less +0 -3
  490. package/test/less-bom/rootpath-rewrite-urls-all/folder/file.less +0 -8
  491. package/test/less-bom/rootpath-rewrite-urls-all/rootpath-rewrite-urls-all.less +0 -11
  492. package/test/less-bom/rootpath-rewrite-urls-local/folder/file.less +0 -8
  493. package/test/less-bom/rootpath-rewrite-urls-local/rootpath-rewrite-urls-local.less +0 -11
  494. package/test/less-bom/rulesets.less +0 -30
  495. package/test/less-bom/scope.less +0 -104
  496. package/test/less-bom/selectors.less +0 -184
  497. package/test/less-bom/sourcemaps/basic.json +0 -3
  498. package/test/less-bom/sourcemaps/basic.less +0 -27
  499. package/test/less-bom/sourcemaps/custom-props.less +0 -8
  500. package/test/less-bom/sourcemaps/imported.css +0 -7
  501. package/test/less-bom/sourcemaps-empty/empty.less +0 -1
  502. package/test/less-bom/sourcemaps-empty/var-defs.less +0 -1
  503. package/test/less-bom/static-urls/urls.less +0 -33
  504. package/test/less-bom/strict-units/strict-units.less +0 -4
  505. package/test/less-bom/strings.less +0 -73
  506. package/test/less-bom/url-args/urls.less +0 -63
  507. package/test/less-bom/urls.less +0 -94
  508. package/test/less-bom/variables-in-at-rules.less +0 -20
  509. package/test/less-bom/variables.less +0 -127
  510. package/test/less-bom/visitorPlugin/visitor.less +0 -4
  511. package/test/less-bom/whitespace.less +0 -44
@@ -1,219 +1,236 @@
1
- var Node = require('./node'),
2
- colors = require('../data/colors');
1
+ import Node from './node';
2
+ import colors from '../data/colors';
3
3
 
4
4
  //
5
5
  // RGB Colors - #ff0014, #eee
6
6
  //
7
- var Color = function (rgb, a, originalForm) {
8
- var self = this;
9
- //
10
- // The end goal here, is to parse the arguments
11
- // into an integer triplet, such as `128, 255, 0`
12
- //
13
- // This facilitates operations and conversions.
14
- //
15
- if (Array.isArray(rgb)) {
16
- this.rgb = rgb;
17
- } else if (rgb.length >= 6) {
18
- this.rgb = [];
19
- rgb.match(/.{2}/g).map(function (c, i) {
20
- if (i < 3) {
21
- self.rgb.push(parseInt(c, 16));
22
- } else {
23
- self.alpha = (parseInt(c, 16)) / 255;
24
- }
25
- });
26
- } else {
27
- this.rgb = [];
28
- rgb.split('').map(function (c, i) {
29
- if (i < 3) {
30
- self.rgb.push(parseInt(c + c, 16));
31
- } else {
32
- self.alpha = (parseInt(c + c, 16)) / 255;
33
- }
34
- });
35
- }
36
- this.alpha = this.alpha || (typeof a === 'number' ? a : 1);
37
- if (typeof originalForm !== 'undefined') {
38
- this.value = originalForm;
7
+ class Color extends Node {
8
+ constructor(rgb, a, originalForm) {
9
+ super();
10
+
11
+ const self = this;
12
+ //
13
+ // The end goal here, is to parse the arguments
14
+ // into an integer triplet, such as `128, 255, 0`
15
+ //
16
+ // This facilitates operations and conversions.
17
+ //
18
+ if (Array.isArray(rgb)) {
19
+ this.rgb = rgb;
20
+ } else if (rgb.length >= 6) {
21
+ this.rgb = [];
22
+ rgb.match(/.{2}/g).map((c, i) => {
23
+ if (i < 3) {
24
+ self.rgb.push(parseInt(c, 16));
25
+ } else {
26
+ self.alpha = (parseInt(c, 16)) / 255;
27
+ }
28
+ });
29
+ } else {
30
+ this.rgb = [];
31
+ rgb.split('').map((c, i) => {
32
+ if (i < 3) {
33
+ self.rgb.push(parseInt(c + c, 16));
34
+ } else {
35
+ self.alpha = (parseInt(c + c, 16)) / 255;
36
+ }
37
+ });
38
+ }
39
+ this.alpha = this.alpha || (typeof a === 'number' ? a : 1);
40
+ if (typeof originalForm !== 'undefined') {
41
+ this.value = originalForm;
42
+ }
39
43
  }
40
- };
41
44
 
42
- Color.prototype = new Node();
43
- Color.prototype.type = 'Color';
45
+ luma() {
46
+ let r = this.rgb[0] / 255;
47
+ let g = this.rgb[1] / 255;
48
+ let b = this.rgb[2] / 255;
44
49
 
45
- function clamp(v, max) {
46
- return Math.min(Math.max(v, 0), max);
47
- }
50
+ r = (r <= 0.03928) ? r / 12.92 : Math.pow(((r + 0.055) / 1.055), 2.4);
51
+ g = (g <= 0.03928) ? g / 12.92 : Math.pow(((g + 0.055) / 1.055), 2.4);
52
+ b = (b <= 0.03928) ? b / 12.92 : Math.pow(((b + 0.055) / 1.055), 2.4);
48
53
 
49
- function toHex(v) {
50
- return '#' + v.map(function (c) {
51
- c = clamp(Math.round(c), 255);
52
- return (c < 16 ? '0' : '') + c.toString(16);
53
- }).join('');
54
- }
55
-
56
- Color.prototype.luma = function () {
57
- var r = this.rgb[0] / 255,
58
- g = this.rgb[1] / 255,
59
- b = this.rgb[2] / 255;
60
-
61
- r = (r <= 0.03928) ? r / 12.92 : Math.pow(((r + 0.055) / 1.055), 2.4);
62
- g = (g <= 0.03928) ? g / 12.92 : Math.pow(((g + 0.055) / 1.055), 2.4);
63
- b = (b <= 0.03928) ? b / 12.92 : Math.pow(((b + 0.055) / 1.055), 2.4);
64
-
65
- return 0.2126 * r + 0.7152 * g + 0.0722 * b;
66
- };
67
- Color.prototype.genCSS = function (context, output) {
68
- output.add(this.toCSS(context));
69
- };
70
- Color.prototype.toCSS = function (context, doNotCompress) {
71
- var compress = context && context.compress && !doNotCompress, color, alpha,
72
- colorFunction, args = [];
54
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
55
+ }
73
56
 
74
- // `value` is set if this color was originally
75
- // converted from a named color string so we need
76
- // to respect this and try to output named color too.
77
- alpha = this.fround(context, this.alpha);
57
+ genCSS(context, output) {
58
+ output.add(this.toCSS(context));
59
+ }
78
60
 
79
- if (this.value) {
80
- if (this.value.indexOf('rgb') === 0) {
81
- if (alpha < 1) {
82
- colorFunction = 'rgba';
83
- }
84
- } else if (this.value.indexOf('hsl') === 0) {
85
- if (alpha < 1) {
86
- colorFunction = 'hsla';
61
+ toCSS(context, doNotCompress) {
62
+ const compress = context && context.compress && !doNotCompress;
63
+ let color;
64
+ let alpha;
65
+ let colorFunction;
66
+ let args = [];
67
+
68
+ // `value` is set if this color was originally
69
+ // converted from a named color string so we need
70
+ // to respect this and try to output named color too.
71
+ alpha = this.fround(context, this.alpha);
72
+
73
+ if (this.value) {
74
+ if (this.value.indexOf('rgb') === 0) {
75
+ if (alpha < 1) {
76
+ colorFunction = 'rgba';
77
+ }
78
+ } else if (this.value.indexOf('hsl') === 0) {
79
+ if (alpha < 1) {
80
+ colorFunction = 'hsla';
81
+ } else {
82
+ colorFunction = 'hsl';
83
+ }
87
84
  } else {
88
- colorFunction = 'hsl';
85
+ return this.value;
89
86
  }
90
87
  } else {
91
- return this.value;
88
+ if (alpha < 1) {
89
+ colorFunction = 'rgba';
90
+ }
92
91
  }
93
- } else {
94
- if (alpha < 1) {
95
- colorFunction = 'rgba';
92
+
93
+ switch (colorFunction) {
94
+ case 'rgba':
95
+ args = this.rgb.map(c => clamp(Math.round(c), 255)).concat(clamp(alpha, 1));
96
+ break;
97
+ case 'hsla':
98
+ args.push(clamp(alpha, 1));
99
+ case 'hsl':
100
+ color = this.toHSL();
101
+ args = [
102
+ this.fround(context, color.h),
103
+ `${this.fround(context, color.s * 100)}%`,
104
+ `${this.fround(context, color.l * 100)}%`
105
+ ].concat(args);
96
106
  }
97
- }
98
107
 
99
- switch (colorFunction) {
100
- case 'rgba':
101
- args = this.rgb.map(function (c) {
102
- return clamp(Math.round(c), 255);
103
- }).concat(clamp(alpha, 1));
104
- break;
105
- case 'hsla':
106
- args.push(clamp(alpha, 1));
107
- case 'hsl':
108
- color = this.toHSL();
109
- args = [
110
- this.fround(context, color.h),
111
- this.fround(context, color.s * 100) + '%',
112
- this.fround(context, color.l * 100) + '%'
113
- ].concat(args);
108
+ if (colorFunction) {
109
+ // Values are capped between `0` and `255`, rounded and zero-padded.
110
+ return `${colorFunction}(${args.join(`,${compress ? '' : ' '}`)})`;
111
+ }
112
+
113
+ color = this.toRGB();
114
+
115
+ if (compress) {
116
+ const splitcolor = color.split('');
117
+
118
+ // Convert color to short format
119
+ if (splitcolor[1] === splitcolor[2] && splitcolor[3] === splitcolor[4] && splitcolor[5] === splitcolor[6]) {
120
+ color = `#${splitcolor[1]}${splitcolor[3]}${splitcolor[5]}`;
121
+ }
122
+ }
123
+
124
+ return color;
114
125
  }
115
126
 
116
- if (colorFunction) {
117
- // Values are capped between `0` and `255`, rounded and zero-padded.
118
- return colorFunction + '(' + args.join(',' + (compress ? '' : ' ')) + ')';
127
+ //
128
+ // Operations have to be done per-channel, if not,
129
+ // channels will spill onto each other. Once we have
130
+ // our result, in the form of an integer triplet,
131
+ // we create a new Color node to hold the result.
132
+ //
133
+ operate(context, op, other) {
134
+ const rgb = new Array(3);
135
+ const alpha = this.alpha * (1 - other.alpha) + other.alpha;
136
+ for (let c = 0; c < 3; c++) {
137
+ rgb[c] = this._operate(context, op, this.rgb[c], other.rgb[c]);
138
+ }
139
+ return new Color(rgb, alpha);
119
140
  }
120
141
 
121
- color = this.toRGB();
142
+ toRGB() {
143
+ return toHex(this.rgb);
144
+ }
122
145
 
123
- if (compress) {
124
- var splitcolor = color.split('');
146
+ toHSL() {
147
+ const r = this.rgb[0] / 255;
148
+ const g = this.rgb[1] / 255;
149
+ const b = this.rgb[2] / 255;
150
+ const a = this.alpha;
151
+ const max = Math.max(r, g, b);
152
+ const min = Math.min(r, g, b);
153
+ let h;
154
+ let s;
155
+ const l = (max + min) / 2;
156
+ const d = max - min;
157
+
158
+ if (max === min) {
159
+ h = s = 0;
160
+ } else {
161
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
125
162
 
126
- // Convert color to short format
127
- if (splitcolor[1] === splitcolor[2] && splitcolor[3] === splitcolor[4] && splitcolor[5] === splitcolor[6]) {
128
- color = '#' + splitcolor[1] + splitcolor[3] + splitcolor[5];
163
+ switch (max) {
164
+ case r: h = (g - b) / d + (g < b ? 6 : 0); break;
165
+ case g: h = (b - r) / d + 2; break;
166
+ case b: h = (r - g) / d + 4; break;
167
+ }
168
+ h /= 6;
129
169
  }
170
+ return { h: h * 360, s, l, a };
130
171
  }
131
172
 
132
- return color;
133
- };
173
+ // Adapted from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
174
+ toHSV() {
175
+ const r = this.rgb[0] / 255;
176
+ const g = this.rgb[1] / 255;
177
+ const b = this.rgb[2] / 255;
178
+ const a = this.alpha;
179
+ const max = Math.max(r, g, b);
180
+ const min = Math.min(r, g, b);
181
+ let h;
182
+ let s;
183
+ const v = max;
184
+
185
+ const d = max - min;
186
+ if (max === 0) {
187
+ s = 0;
188
+ } else {
189
+ s = d / max;
190
+ }
134
191
 
135
- //
136
- // Operations have to be done per-channel, if not,
137
- // channels will spill onto each other. Once we have
138
- // our result, in the form of an integer triplet,
139
- // we create a new Color node to hold the result.
140
- //
141
- Color.prototype.operate = function (context, op, other) {
142
- var rgb = new Array(3);
143
- var alpha = this.alpha * (1 - other.alpha) + other.alpha;
144
- for (var c = 0; c < 3; c++) {
145
- rgb[c] = this._operate(context, op, this.rgb[c], other.rgb[c]);
146
- }
147
- return new Color(rgb, alpha);
148
- };
149
- Color.prototype.toRGB = function () {
150
- return toHex(this.rgb);
151
- };
152
- Color.prototype.toHSL = function () {
153
- var r = this.rgb[0] / 255,
154
- g = this.rgb[1] / 255,
155
- b = this.rgb[2] / 255,
156
- a = this.alpha;
157
-
158
- var max = Math.max(r, g, b), min = Math.min(r, g, b);
159
- var h, s, l = (max + min) / 2, d = max - min;
160
-
161
- if (max === min) {
162
- h = s = 0;
163
- } else {
164
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
165
-
166
- switch (max) {
167
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
168
- case g: h = (b - r) / d + 2; break;
169
- case b: h = (r - g) / d + 4; break;
192
+ if (max === min) {
193
+ h = 0;
194
+ } else {
195
+ switch (max) {
196
+ case r: h = (g - b) / d + (g < b ? 6 : 0); break;
197
+ case g: h = (b - r) / d + 2; break;
198
+ case b: h = (r - g) / d + 4; break;
199
+ }
200
+ h /= 6;
170
201
  }
171
- h /= 6;
202
+ return { h: h * 360, s, v, a };
172
203
  }
173
- return { h: h * 360, s: s, l: l, a: a };
174
- };
175
- // Adapted from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
176
- Color.prototype.toHSV = function () {
177
- var r = this.rgb[0] / 255,
178
- g = this.rgb[1] / 255,
179
- b = this.rgb[2] / 255,
180
- a = this.alpha;
181
-
182
- var max = Math.max(r, g, b), min = Math.min(r, g, b);
183
- var h, s, v = max;
184
-
185
- var d = max - min;
186
- if (max === 0) {
187
- s = 0;
188
- } else {
189
- s = d / max;
204
+
205
+ toARGB() {
206
+ return toHex([this.alpha * 255].concat(this.rgb));
190
207
  }
191
208
 
192
- if (max === min) {
193
- h = 0;
194
- } else {
195
- switch (max) {
196
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
197
- case g: h = (b - r) / d + 2; break;
198
- case b: h = (r - g) / d + 4; break;
199
- }
200
- h /= 6;
209
+ compare(x) {
210
+ return (x.rgb &&
211
+ x.rgb[0] === this.rgb[0] &&
212
+ x.rgb[1] === this.rgb[1] &&
213
+ x.rgb[2] === this.rgb[2] &&
214
+ x.alpha === this.alpha) ? 0 : undefined;
201
215
  }
202
- return { h: h * 360, s: s, v: v, a: a };
203
- };
204
- Color.prototype.toARGB = function () {
205
- return toHex([this.alpha * 255].concat(this.rgb));
206
- };
207
- Color.prototype.compare = function (x) {
208
- return (x.rgb &&
209
- x.rgb[0] === this.rgb[0] &&
210
- x.rgb[1] === this.rgb[1] &&
211
- x.rgb[2] === this.rgb[2] &&
212
- x.alpha === this.alpha) ? 0 : undefined;
213
- };
216
+ }
217
+
218
+ Color.prototype.type = 'Color';
219
+
220
+ function clamp(v, max) {
221
+ return Math.min(Math.max(v, 0), max);
222
+ }
223
+
224
+ function toHex(v) {
225
+ return `#${v.map(c => {
226
+ c = clamp(Math.round(c), 255);
227
+ return (c < 16 ? '0' : '') + c.toString(16);
228
+ }).join('')}`;
229
+ }
214
230
 
215
- Color.fromKeyword = function(keyword) {
216
- var c, key = keyword.toLowerCase();
231
+ Color.fromKeyword = keyword => {
232
+ let c;
233
+ const key = keyword.toLowerCase();
217
234
  if (colors.hasOwnProperty(key)) {
218
235
  c = new Color(colors[key].slice(1));
219
236
  }
@@ -226,4 +243,4 @@ Color.fromKeyword = function(keyword) {
226
243
  return c;
227
244
  }
228
245
  };
229
- module.exports = Color;
246
+ export default Color;
@@ -1,23 +1,29 @@
1
- var Node = require('./node');
2
-
3
- var Combinator = function (value) {
4
- if (value === ' ') {
5
- this.value = ' ';
6
- this.emptyOrWhitespace = true;
7
- } else {
8
- this.value = value ? value.trim() : '';
9
- this.emptyOrWhitespace = this.value === '';
10
- }
11
- };
12
- Combinator.prototype = new Node();
13
- Combinator.prototype.type = 'Combinator';
14
- var _noSpaceCombinators = {
1
+ import Node from './node';
2
+ const _noSpaceCombinators = {
15
3
  '': true,
16
4
  ' ': true,
17
5
  '|': true
18
6
  };
19
- Combinator.prototype.genCSS = function (context, output) {
20
- var spaceOrEmpty = (context.compress || _noSpaceCombinators[this.value]) ? '' : ' ';
21
- output.add(spaceOrEmpty + this.value + spaceOrEmpty);
22
- };
23
- module.exports = Combinator;
7
+
8
+ class Combinator extends Node {
9
+ constructor(value) {
10
+ super();
11
+
12
+ if (value === ' ') {
13
+ this.value = ' ';
14
+ this.emptyOrWhitespace = true;
15
+ } else {
16
+ this.value = value ? value.trim() : '';
17
+ this.emptyOrWhitespace = this.value === '';
18
+ }
19
+ }
20
+
21
+ genCSS(context, output) {
22
+ const spaceOrEmpty = (context.compress || _noSpaceCombinators[this.value]) ? '' : ' ';
23
+ output.add(spaceOrEmpty + this.value + spaceOrEmpty);
24
+ }
25
+ }
26
+
27
+ Combinator.prototype.type = 'Combinator';
28
+
29
+ export default Combinator;
@@ -1,23 +1,29 @@
1
- var Node = require('./node'),
2
- getDebugInfo = require('./debug-info');
1
+ import Node from './node';
2
+ import getDebugInfo from './debug-info';
3
3
 
4
- var Comment = function (value, isLineComment, index, currentFileInfo) {
5
- this.value = value;
6
- this.isLineComment = isLineComment;
7
- this._index = index;
8
- this._fileInfo = currentFileInfo;
9
- this.allowRoot = true;
10
- };
11
- Comment.prototype = new Node();
12
- Comment.prototype.type = 'Comment';
13
- Comment.prototype.genCSS = function (context, output) {
14
- if (this.debugInfo) {
15
- output.add(getDebugInfo(context, this), this.fileInfo(), this.getIndex());
4
+ class Comment extends Node {
5
+ constructor(value, isLineComment, index, currentFileInfo) {
6
+ super();
7
+
8
+ this.value = value;
9
+ this.isLineComment = isLineComment;
10
+ this._index = index;
11
+ this._fileInfo = currentFileInfo;
12
+ this.allowRoot = true;
13
+ }
14
+
15
+ genCSS(context, output) {
16
+ if (this.debugInfo) {
17
+ output.add(getDebugInfo(context, this), this.fileInfo(), this.getIndex());
18
+ }
19
+ output.add(this.value);
16
20
  }
17
- output.add(this.value);
18
- };
19
- Comment.prototype.isSilent = function(context) {
20
- var isCompressed = context.compress && this.value[2] !== '!';
21
- return this.isLineComment || isCompressed;
22
- };
23
- module.exports = Comment;
21
+
22
+ isSilent(context) {
23
+ const isCompressed = context.compress && this.value[2] !== '!';
24
+ return this.isLineComment || isCompressed;
25
+ }
26
+ }
27
+
28
+ Comment.prototype.type = 'Comment';
29
+ export default Comment;
@@ -1,37 +1,43 @@
1
- var Node = require('./node');
1
+ import Node from './node';
2
2
 
3
- var Condition = function (op, l, r, i, negate) {
4
- this.op = op.trim();
5
- this.lvalue = l;
6
- this.rvalue = r;
7
- this._index = i;
8
- this.negate = negate;
9
- };
10
- Condition.prototype = new Node();
11
- Condition.prototype.type = 'Condition';
12
- Condition.prototype.accept = function (visitor) {
13
- this.lvalue = visitor.visit(this.lvalue);
14
- this.rvalue = visitor.visit(this.rvalue);
15
- };
16
- Condition.prototype.eval = function (context) {
17
- var result = (function (op, a, b) {
18
- switch (op) {
19
- case 'and': return a && b;
20
- case 'or': return a || b;
21
- default:
22
- switch (Node.compare(a, b)) {
23
- case -1:
24
- return op === '<' || op === '=<' || op === '<=';
25
- case 0:
26
- return op === '=' || op === '>=' || op === '=<' || op === '<=';
27
- case 1:
28
- return op === '>' || op === '>=';
29
- default:
30
- return false;
31
- }
32
- }
33
- })(this.op, this.lvalue.eval(context), this.rvalue.eval(context));
3
+ class Condition extends Node {
4
+ constructor(op, l, r, i, negate) {
5
+ super();
6
+
7
+ this.op = op.trim();
8
+ this.lvalue = l;
9
+ this.rvalue = r;
10
+ this._index = i;
11
+ this.negate = negate;
12
+ }
13
+
14
+ accept(visitor) {
15
+ this.lvalue = visitor.visit(this.lvalue);
16
+ this.rvalue = visitor.visit(this.rvalue);
17
+ }
34
18
 
35
- return this.negate ? !result : result;
36
- };
37
- module.exports = Condition;
19
+ eval(context) {
20
+ const result = ((op, a, b) => {
21
+ switch (op) {
22
+ case 'and': return a && b;
23
+ case 'or': return a || b;
24
+ default:
25
+ switch (Node.compare(a, b)) {
26
+ case -1:
27
+ return op === '<' || op === '=<' || op === '<=';
28
+ case 0:
29
+ return op === '=' || op === '>=' || op === '=<' || op === '<=';
30
+ case 1:
31
+ return op === '>' || op === '>=';
32
+ default:
33
+ return false;
34
+ }
35
+ }
36
+ })(this.op, this.lvalue.eval(context), this.rvalue.eval(context));
37
+
38
+ return this.negate ? !result : result;
39
+ }
40
+ }
41
+
42
+ Condition.prototype.type = 'Condition';
43
+ export default Condition;
@@ -1,5 +1,5 @@
1
- var debugInfo = function(context, ctx, lineSeparator) {
2
- var result = '';
1
+ const debugInfo = (context, ctx, lineSeparator) => {
2
+ let result = '';
3
3
  if (context.dumpLineNumbers && !context.compress) {
4
4
  switch (context.dumpLineNumbers) {
5
5
  case 'comments':
@@ -16,23 +16,19 @@ var debugInfo = function(context, ctx, lineSeparator) {
16
16
  return result;
17
17
  };
18
18
 
19
- debugInfo.asComment = function(ctx) {
20
- return '/* line ' + ctx.debugInfo.lineNumber + ', ' + ctx.debugInfo.fileName + ' */\n';
21
- };
19
+ debugInfo.asComment = ctx => `/* line ${ctx.debugInfo.lineNumber}, ${ctx.debugInfo.fileName} */\n`;
22
20
 
23
- debugInfo.asMediaQuery = function(ctx) {
24
- var filenameWithProtocol = ctx.debugInfo.fileName;
21
+ debugInfo.asMediaQuery = ctx => {
22
+ let filenameWithProtocol = ctx.debugInfo.fileName;
25
23
  if (!/^[a-z]+:\/\//i.test(filenameWithProtocol)) {
26
- filenameWithProtocol = 'file://' + filenameWithProtocol;
24
+ filenameWithProtocol = `file://${filenameWithProtocol}`;
27
25
  }
28
- return '@media -sass-debug-info{filename{font-family:' +
29
- filenameWithProtocol.replace(/([.:\/\\])/g, function (a) {
30
- if (a == '\\') {
31
- a = '\/';
32
- }
33
- return '\\' + a;
34
- }) +
35
- '}line{font-family:\\00003' + ctx.debugInfo.lineNumber + '}}\n';
26
+ return `@media -sass-debug-info{filename{font-family:${filenameWithProtocol.replace(/([.:\/\\])/g, a => {
27
+ if (a == '\\') {
28
+ a = '\/';
29
+ }
30
+ return `\\${a}`;
31
+ })}}line{font-family:\\00003${ctx.debugInfo.lineNumber}}}\n`;
36
32
  };
37
33
 
38
- module.exports = debugInfo;
34
+ export default debugInfo;