less 3.10.3 → 3.11.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 (143) hide show
  1. package/.github/FUNDING.yml +12 -0
  2. package/CHANGELOG.md +509 -711
  3. package/CONTRIBUTING.md +2 -2
  4. package/Gruntfile.js +42 -212
  5. package/README.md +31 -3
  6. package/bin/lessc +10538 -13511
  7. package/dist/less.cjs.js +10078 -12936
  8. package/dist/less.js +10670 -13462
  9. package/dist/less.min.js +3 -3
  10. package/dist/less.min.js.map +1 -1
  11. package/lib/less/contexts.js +1 -1
  12. package/lib/less/environment/abstract-file-manager.js +1 -1
  13. package/lib/less/import-manager.js +7 -20
  14. package/lib/less/index.js +1 -1
  15. package/lib/less/less-error.js +22 -2
  16. package/lib/less/parse-tree.js +2 -6
  17. package/lib/less/parser/parser.js +10 -10
  18. package/lib/less/tree/debug-info.js +2 -1
  19. package/lib/less/tree/namespace-value.js +1 -2
  20. package/lib/less/visitors/visitor.js +10 -2
  21. package/lib/less-node/file-manager.js +19 -49
  22. package/lib/lessc.js +3 -22
  23. package/package.json +21 -16
  24. package/test/browser/common.js +11 -49
  25. package/test/browser/generator/benchmark.config.js +50 -0
  26. package/test/browser/generator/generate.js +78 -0
  27. package/test/browser/generator/runner.config.js +180 -0
  28. package/test/browser/generator/runner.js +2 -0
  29. package/test/browser/generator/template.js +83 -0
  30. package/test/browser/runner-browser-options.js +0 -6
  31. package/test/browser/runner-browser-spec.js +1 -1
  32. package/test/browser/runner-main-spec.js +1 -1
  33. package/test/browser/runner-modify-vars-spec.js +1 -1
  34. package/test/browser/runner-production-spec.js +1 -1
  35. package/test/css/calc.css +9 -0
  36. package/test/css/comments.css +1 -1
  37. package/test/css/css-3.css +5 -5
  38. package/test/css/css-guards.css +1 -1
  39. package/test/css/debug/linenumbers-all.css +5 -5
  40. package/test/css/debug/linenumbers-comments.css +5 -5
  41. package/test/css/debug/linenumbers-mediaquery.css +5 -5
  42. package/test/css/extend-chaining.css +3 -3
  43. package/test/css/extend-media.css +1 -1
  44. package/test/css/extend-nest.css +1 -1
  45. package/test/css/filemanagerPlugin/filemanager.css +1 -1
  46. package/test/css/functions-each.css +1 -1
  47. package/test/css/import-once.css +2 -2
  48. package/test/css/import-reference-issues.css +1 -1
  49. package/test/css/import-reference.css +6 -6
  50. package/test/css/import.css +1 -1
  51. package/test/css/javascript.css +1 -1
  52. package/test/css/legacy/legacy.css +1 -1
  53. package/test/css/math/parens-division/mixins-args.css +1 -1
  54. package/test/css/math/parens-division/parens.css +1 -1
  55. package/test/css/math/strict/mixins-args.css +1 -1
  56. package/test/css/math/strict/parens.css +1 -1
  57. package/test/css/math/strict-legacy/mixins-args.css +1 -1
  58. package/test/css/math/strict-legacy/parens.css +1 -1
  59. package/test/css/media.css +14 -14
  60. package/test/css/merge.css +10 -10
  61. package/test/css/mixins-guards.css +6 -6
  62. package/test/css/mixins.css +2 -2
  63. package/test/css/namespacing/namespacing-3.css +16 -1
  64. package/test/css/namespacing/namespacing-4.css +1 -1
  65. package/test/css/namespacing/namespacing-functions.css +6 -0
  66. package/test/css/no-strict-math/mixins-guards.css +1 -1
  67. package/test/css/permissive-parse.css +1 -1
  68. package/test/css/plugin.css +9 -9
  69. package/test/css/postProcessorPlugin/postProcessor.css +2 -2
  70. package/test/css/preProcessorPlugin/preProcessor.css +1 -1
  71. package/test/css/selectors.css +2 -2
  72. package/test/css/variables.css +1 -1
  73. package/test/css/visitorPlugin/visitor.css +1 -1
  74. package/test/index.js +6 -0
  75. package/test/less/calc.less +17 -1
  76. package/test/less/comments.less +1 -1
  77. package/test/less/css-3.less +5 -5
  78. package/test/less/css-guards.less +2 -2
  79. package/test/less/debug/import/test.less +2 -2
  80. package/test/less/debug/linenumbers.less +3 -3
  81. package/test/less/errors/color-func-invalid-color.less +1 -1
  82. package/test/less/errors/color-func-invalid-color.txt +1 -1
  83. package/test/less/errors/invalid-color-with-comment.less +1 -0
  84. package/test/less/errors/invalid-color-with-comment.txt +2 -0
  85. package/test/less/errors/plugin-1.txt +2 -2
  86. package/test/less/errors/plugin-2.txt +1 -2
  87. package/test/less/errors/plugin-3.txt +1 -2
  88. package/test/less/errors/property-ie5-hack.less +1 -1
  89. package/test/less/extend-chaining.less +3 -3
  90. package/test/less/extend-media.less +1 -1
  91. package/test/less/extend-nest.less +1 -1
  92. package/test/less/filemanagerPlugin/filemanager.less +1 -1
  93. package/test/less/functions-each.less +1 -1
  94. package/test/less/import/import-reference.less +1 -1
  95. package/test/less/import/import-test-f.less +1 -1
  96. package/test/less/import/json/index.json +11 -0
  97. package/test/less/import/json/index.less +1 -0
  98. package/test/less/import-reference-issues/global-scope-import.less +2 -2
  99. package/test/less/import-reference-issues/global-scope-nested.less +1 -1
  100. package/test/less/import-reference-issues.less +2 -2
  101. package/test/less/import-reference.less +1 -1
  102. package/test/less/javascript.less +1 -1
  103. package/test/less/legacy/legacy.less +1 -1
  104. package/test/less/math/parens-division/mixins-args.less +4 -4
  105. package/test/less/math/parens-division/parens.less +1 -1
  106. package/test/less/math/strict/mixins-args.less +4 -4
  107. package/test/less/math/strict/parens.less +1 -1
  108. package/test/less/math/strict-legacy/mixins-args.less +4 -4
  109. package/test/less/math/strict-legacy/parens.less +1 -1
  110. package/test/less/media.less +9 -9
  111. package/test/less/merge.less +10 -10
  112. package/test/less/mixins-guards.less +8 -8
  113. package/test/less/mixins-important.less +3 -3
  114. package/test/less/mixins.less +2 -2
  115. package/test/less/namespacing/namespacing-3.less +25 -2
  116. package/test/less/namespacing/namespacing-4.less +1 -1
  117. package/test/less/namespacing/namespacing-5.less +2 -2
  118. package/test/less/namespacing/namespacing-functions.less +26 -0
  119. package/test/less/no-strict-math/mixins-guards.less +2 -2
  120. package/test/less/permissive-parse.less +1 -1
  121. package/test/less/plugin.less +9 -9
  122. package/test/less/postProcessorPlugin/postProcessor.less +2 -2
  123. package/test/less/preProcessorPlugin/preProcessor.less +1 -1
  124. package/test/less/selectors.less +1 -1
  125. package/test/less/sourcemaps/imported.css +1 -1
  126. package/test/less/variables.less +1 -1
  127. package/test/less/visitorPlugin/visitor.less +1 -1
  128. package/test/less-test.js +45 -11
  129. package/test/less.js +11 -0
  130. package/test/sourcemaps/custom-props.json +1 -1
  131. package/.DS_Store +0 -0
  132. package/test/.DS_Store +0 -0
  133. package/test/browser/less.min.js +0 -11
  134. package/test/browser/less.min.js.map +0 -1
  135. package/test/browser/onload.js +0 -13
  136. package/test/browser/test-runner-template.tmpl +0 -105
  137. package/test/browser/vendor/boot.js +0 -148
  138. package/test/browser/vendor/jasmine-jsreporter.js +0 -391
  139. package/test/browser/vendor/promise.js +0 -2
  140. package/test/css/.DS_Store +0 -0
  141. package/test/css/math/.DS_Store +0 -0
  142. package/test/less/.DS_Store +0 -0
  143. package/test/less/math/.DS_Store +0 -0
package/CONTRIBUTING.md CHANGED
@@ -35,13 +35,13 @@ _Pull requests are encouraged!_
35
35
  * Start by adding a feature request to get feedback and see how your idea is received.
36
36
  * If your pull request solves an existing issue, but it's different in some way, _please create a new issue_ and make sure to discuss it with the core contributors. Otherwise you risk your hard work being rejected.
37
37
  * Do not change the **./dist/** folder, we do this when releasing
38
- * _Please add tests_ for your work. Tests are invoked using `npm test` command. It will run both node.js tests and browser ([PhantomJS](http://phantomjs.org/)) tests.
38
+ * _Please add tests_ for your work. Tests are invoked using `npm test` command. It will run both node.js tests and browser (Headless Chrome) tests.
39
39
 
40
40
  ### Coding Standards
41
41
 
42
42
  * Always use spaces, never tabs
43
43
  * End lines in semi-colons.
44
- * Loosely aim towards jsHint standards
44
+ * Loosely aim towards eslint standards
45
45
 
46
46
 
47
47
  ## Developing
package/Gruntfile.js CHANGED
@@ -186,7 +186,7 @@ module.exports = function(grunt) {
186
186
  const nodeVersion = semver.major(process.versions.node);
187
187
  let scriptRuntime = 'node';
188
188
  if (nodeVersion < 8) {
189
- scriptRuntime = path.resolve(path.join('node_modules', '.bin', 'babel-node')) + ' --presets=@babel/env';
189
+ scriptRuntime = path.resolve(path.join('node_modules', '.bin', 'ts-node'));
190
190
  }
191
191
 
192
192
  // Project configuration.
@@ -200,23 +200,36 @@ module.exports = function(grunt) {
200
200
  }
201
201
  },
202
202
  build: {
203
- command: [
204
- scriptRuntime + " build/rollup.js --dist"
205
- ].join(" && ")
203
+ command: scriptRuntime + " build/rollup.js --dist"
206
204
  },
207
205
  testbuild: {
208
206
  command: [
209
207
  scriptRuntime + " build/rollup.js --lessc --out=./tmp/lessc",
210
208
  scriptRuntime + " build/rollup.js --node --out=./tmp/less.cjs.js",
211
- scriptRuntime + " build/rollup.js --browser --out=./test/browser/less.min.js"
209
+ scriptRuntime + " build/rollup.js --browser --out=./tmp/browser/less.min.js"
212
210
  ].join(" && ")
213
211
  },
212
+ testcjs: {
213
+ command: scriptRuntime + " build/rollup.js --node --out=./tmp/less.cjs.js"
214
+ },
215
+ testbrowser: {
216
+ command: scriptRuntime + " build/rollup.js --browser --out=./tmp/browser/less.min.js"
217
+ },
214
218
  test: {
215
219
  command: "node test/index.js"
216
220
  },
221
+ generatebrowser: {
222
+ command: 'node test/browser/generator/generate.js'
223
+ },
224
+ runbrowser: {
225
+ command: 'node test/browser/generator/runner.js'
226
+ },
217
227
  benchmark: {
218
228
  command: "node benchmark/index.js"
219
229
  },
230
+ benchmarkbrowser: {
231
+ command: "node test/browser/generator/runner.js benchmark"
232
+ },
220
233
  opts: {
221
234
  // test running with all current options (using `opts` since `options` means something already)
222
235
  command: [
@@ -273,201 +286,7 @@ module.exports = function(grunt) {
273
286
  }
274
287
  },
275
288
 
276
- jasmine: {
277
- options: {
278
- keepRunner: true,
279
- host: "http://localhost:8081/",
280
- polyfills: [
281
- "./node_modules/phantomjs-polyfill-object-assign/object-assign-polyfill.js",
282
- "test/browser/vendor/promise.js"
283
- ],
284
- vendor: [
285
- "test/browser/vendor/jasmine-jsreporter.js",
286
- "test/browser/common.js",
287
- "test/browser/less.min.js"
288
- ],
289
- template: "test/browser/test-runner-template.tmpl"
290
- },
291
- main: {
292
- // src is used to build list of less files to compile
293
- src: [
294
- "test/less/*.less",
295
- "!test/less/plugin-preeval.less", // uses ES6 syntax
296
- // Don't test NPM import, obviously
297
- "!test/less/plugin-module.less",
298
- "!test/less/import-module.less",
299
- "!test/less/javascript.less",
300
- "!test/less/urls.less",
301
- "!test/less/empty.less"
302
- ],
303
- options: {
304
- helpers: "test/browser/runner-main-options.js",
305
- specs: "test/browser/runner-main-spec.js",
306
- outfile: "tmp/browser/test-runner-main.html"
307
- }
308
- },
309
- legacy: {
310
- src: ["test/less/legacy/*.less"],
311
- options: {
312
- helpers: "test/browser/runner-legacy-options.js",
313
- specs: "test/browser/runner-legacy-spec.js",
314
- outfile: "tmp/browser/test-runner-legacy.html"
315
- }
316
- },
317
- strictUnits: {
318
- src: ["test/less/strict-units/*.less"],
319
- options: {
320
- helpers: "test/browser/runner-strict-units-options.js",
321
- specs: "test/browser/runner-strict-units-spec.js",
322
- outfile: "tmp/browser/test-runner-strict-units.html"
323
- }
324
- },
325
- errors: {
326
- src: [
327
- "test/less/errors/*.less",
328
- "!test/less/errors/javascript-error.less",
329
- "test/browser/less/errors/*.less"
330
- ],
331
- options: {
332
- timeout: 20000,
333
- helpers: "test/browser/runner-errors-options.js",
334
- specs: "test/browser/runner-errors-spec.js",
335
- outfile: "tmp/browser/test-runner-errors.html"
336
- }
337
- },
338
- noJsErrors: {
339
- src: ["test/less/no-js-errors/*.less"],
340
- options: {
341
- helpers: "test/browser/runner-no-js-errors-options.js",
342
- specs: "test/browser/runner-no-js-errors-spec.js",
343
- outfile: "tmp/browser/test-runner-no-js-errors.html"
344
- }
345
- },
346
- browser: {
347
- src: [
348
- "test/browser/less/*.less",
349
- "test/browser/less/plugin/*.less"
350
- ],
351
- options: {
352
- helpers: "test/browser/runner-browser-options.js",
353
- specs: "test/browser/runner-browser-spec.js",
354
- outfile: "tmp/browser/test-runner-browser.html"
355
- }
356
- },
357
- relativeUrls: {
358
- src: ["test/browser/less/relative-urls/*.less"],
359
- options: {
360
- helpers: "test/browser/runner-relative-urls-options.js",
361
- specs: "test/browser/runner-relative-urls-spec.js",
362
- outfile: "tmp/browser/test-runner-relative-urls.html"
363
- }
364
- },
365
- rewriteUrls: {
366
- src: ["test/browser/less/rewrite-urls/*.less"],
367
- options: {
368
- helpers: "test/browser/runner-rewrite-urls-options.js",
369
- specs: "test/browser/runner-rewrite-urls-spec.js",
370
- outfile: "tmp/browser/test-runner-rewrite-urls.html"
371
- }
372
- },
373
- rootpath: {
374
- src: ["test/browser/less/rootpath/*.less"],
375
- options: {
376
- helpers: "test/browser/runner-rootpath-options.js",
377
- specs: "test/browser/runner-rootpath-spec.js",
378
- outfile: "tmp/browser/test-runner-rootpath.html"
379
- }
380
- },
381
- rootpathRelative: {
382
- src: ["test/browser/less/rootpath-relative/*.less"],
383
- options: {
384
- helpers: "test/browser/runner-rootpath-relative-options.js",
385
- specs: "test/browser/runner-rootpath-relative-spec.js",
386
- outfile: "tmp/browser/test-runner-rootpath-relative.html"
387
- }
388
- },
389
- rootpathRewriteUrls: {
390
- src: ["test/browser/less/rootpath-rewrite-urls/*.less"],
391
- options: {
392
- helpers:
393
- "test/browser/runner-rootpath-rewrite-urls-options.js",
394
- specs: "test/browser/runner-rootpath-rewrite-urls-spec.js",
395
- outfile:
396
- "tmp/browser/test-runner-rootpath-rewrite-urls.html"
397
- }
398
- },
399
- production: {
400
- src: ["test/browser/less/production/*.less"],
401
- options: {
402
- helpers: "test/browser/runner-production-options.js",
403
- specs: "test/browser/runner-production-spec.js",
404
- outfile: "tmp/browser/test-runner-production.html"
405
- }
406
- },
407
- modifyVars: {
408
- src: ["test/browser/less/modify-vars/*.less"],
409
- options: {
410
- helpers: "test/browser/runner-modify-vars-options.js",
411
- specs: "test/browser/runner-modify-vars-spec.js",
412
- outfile: "tmp/browser/test-runner-modify-vars.html"
413
- }
414
- },
415
- globalVars: {
416
- src: ["test/browser/less/global-vars/*.less"],
417
- options: {
418
- helpers: "test/browser/runner-global-vars-options.js",
419
- specs: "test/browser/runner-global-vars-spec.js",
420
- outfile: "tmp/browser/test-runner-global-vars.html"
421
- }
422
- },
423
- postProcessorPlugin: {
424
- src: ["test/less/postProcessorPlugin/*.less"],
425
- options: {
426
- helpers: [
427
- "test/plugins/postprocess/index.js",
428
- "test/browser/runner-postProcessorPlugin-options.js"
429
- ],
430
- specs: "test/browser/runner-postProcessorPlugin.js",
431
- outfile:
432
- "tmp/browser/test-runner-post-processor-plugin.html"
433
- }
434
- },
435
- preProcessorPlugin: {
436
- src: ["test/less/preProcessorPlugin/*.less"],
437
- options: {
438
- helpers: [
439
- "test/plugins/preprocess/index.js",
440
- "test/browser/runner-preProcessorPlugin-options.js"
441
- ],
442
- specs: "test/browser/runner-preProcessorPlugin.js",
443
- outfile: "tmp/browser/test-runner-pre-processor-plugin.html"
444
- }
445
- },
446
- visitorPlugin: {
447
- src: ["test/less/visitorPlugin/*.less"],
448
- options: {
449
- helpers: [
450
- "test/plugins/visitor/index.js",
451
- "test/browser/runner-VisitorPlugin-options.js"
452
- ],
453
- specs: "test/browser/runner-VisitorPlugin.js",
454
- outfile: "tmp/browser/test-runner-visitor-plugin.html"
455
- }
456
- },
457
- filemanagerPlugin: {
458
- src: ["test/less/filemanagerPlugin/*.less"],
459
- options: {
460
- helpers: [
461
- "test/plugins/filemanager/index.js",
462
- "test/browser/runner-filemanagerPlugin-options.js"
463
- ],
464
- specs: "test/browser/runner-filemanagerPlugin.js",
465
- outfile: "tmp/browser/test-runner-filemanager-plugin.html"
466
- }
467
- }
468
- },
469
-
470
- "saucelabs-jasmine": sauceJobs,
289
+ "saucelabs-mocha": sauceJobs,
471
290
 
472
291
  // Clean the version of less built for the tests
473
292
  clean: {
@@ -495,20 +314,20 @@ module.exports = function(grunt) {
495
314
 
496
315
  // Create the browser version of less.js
497
316
  grunt.registerTask("browsertest-lessjs", [
498
- "shell:testbuild"
317
+ "shell:testbrowser"
499
318
  ]);
500
319
 
501
320
  // Run all browser tests
502
321
  grunt.registerTask("browsertest", [
503
322
  "browsertest-lessjs",
504
323
  "connect",
505
- "jasmine"
324
+ "shell:runbrowser"
506
325
  ]);
507
326
 
508
327
  // setup a web server to run the browser tests in a browser rather than phantom
509
328
  grunt.registerTask("browsertest-server", [
510
329
  "browsertest-lessjs",
511
- "jasmine::build",
330
+ "shell:generatebrowser",
512
331
  "connect::keepalive"
513
332
  ]);
514
333
 
@@ -526,13 +345,13 @@ module.exports = function(grunt) {
526
345
 
527
346
  grunt.registerTask("sauce", [
528
347
  "browsertest-lessjs",
529
- "jasmine::build",
348
+ "shell:generatebrowser",
530
349
  "connect",
531
350
  "sauce-after-setup"
532
351
  ]);
533
352
 
534
353
  grunt.registerTask("sauce-after-setup", [
535
- "saucelabs-jasmine:all",
354
+ "saucelabs-mocha:all",
536
355
  "clean:sauce_log"
537
356
  ]);
538
357
 
@@ -544,14 +363,12 @@ module.exports = function(grunt) {
544
363
  "shell:opts",
545
364
  "shell:plugin",
546
365
  "connect",
547
- "jasmine"
366
+ "shell:runbrowser"
548
367
  ];
549
368
 
550
369
  if (
551
370
  isNaN(Number(process.env.TRAVIS_PULL_REQUEST, 10)) &&
552
- Number(process.env.TRAVIS_NODE_VERSION) === 4 &&
553
- (process.env.TRAVIS_BRANCH === "master" ||
554
- process.env.TRAVIS_BRANCH === "3.x")
371
+ (process.env.TRAVIS_BRANCH === "master")
555
372
  ) {
556
373
  testTasks.push("force:on");
557
374
  testTasks.push("sauce-after-setup");
@@ -567,8 +384,11 @@ module.exports = function(grunt) {
567
384
  // Run shell plugin test
568
385
  grunt.registerTask("shell-plugin", ["shell:plugin"]);
569
386
 
570
- // Run all tests except browsertest
571
- grunt.registerTask("quicktest", testTasks.slice(0, -1));
387
+ // Quickly build and run Node tests
388
+ grunt.registerTask("quicktest", [
389
+ "shell:testcjs",
390
+ "shell:test"
391
+ ]);
572
392
 
573
393
  // generate a good test environment for testing sourcemaps
574
394
  grunt.registerTask("sourcemap-test", [
@@ -579,5 +399,15 @@ module.exports = function(grunt) {
579
399
  ]);
580
400
 
581
401
  // Run benchmark
582
- grunt.registerTask("benchmark", ["shell:benchmark"]);
402
+ grunt.registerTask("benchmark-node", [
403
+ "shell:testcjs",
404
+ "shell:benchmark"
405
+ ]);
406
+
407
+ // Run all browser tests
408
+ grunt.registerTask("benchmark", [
409
+ "browsertest-lessjs",
410
+ "connect",
411
+ "shell:benchmarkbrowser"
412
+ ]);
583
413
  };
package/README.md CHANGED
@@ -1,11 +1,9 @@
1
1
  <p align="center"><img src="http://lesscss.org/public/img/less_logo.png" width="264" height="117">
2
2
 
3
- <p align="center"><a href="http://badge.fury.io/js/less"><img src="https://badge.fury.io/js/less.svg"></a> <a href="https://travis-ci.org/less/less.js"><img src="https://travis-ci.org/less/less.js.svg?branch=master" style="max-width:100%;"></a> <a href="https://ci.appveyor.com/project/lukeapage/less-js/branch/master"><img src="https://ci.appveyor.com/api/projects/status/bx2qspy3qbuxpl9q/branch/master?svg=true" style="max-width:100%;"></a> <a href="https://david-dm.org/less/less.js"><img src="https://david-dm.org/less/less.js.svg" style="max-width:100%;"></a> <a href="https://david-dm.org/less/less.js#info=devDependencies"><img src="https://david-dm.org/less/less.js/dev-status.svg" style="max-width:100%;"></a> <a href="https://david-dm.org/less/less.js#info=optionalDependencies"><img alt="optionalDependency Status" src="https://david-dm.org/less/less.js/optional-status.svg" style="max-width:100%;"></a> <a href="https://twitter.com/lesstocss"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/lesstocss.svg?style=flat-square" style="max-width:100%;"></a></p>
3
+ <p align="center"><a href="http://badge.fury.io/js/less"><a href="https://opencollective.com/less" alt="Financial Contributors on Open Collective"><img src="https://opencollective.com/less/all/badge.svg?label=financial+contributors" /></a> <img src="https://badge.fury.io/js/less.svg"></a> <a href="https://travis-ci.org/less/less.js"><img src="https://travis-ci.org/less/less.js.svg?branch=master" style="max-width:100%;"></a> <a href="https://ci.appveyor.com/project/lukeapage/less-js/branch/master"><img src="https://ci.appveyor.com/api/projects/status/bx2qspy3qbuxpl9q/branch/master?svg=true" style="max-width:100%;"></a> <a href="https://david-dm.org/less/less.js"><img src="https://david-dm.org/less/less.js.svg" style="max-width:100%;"></a> <a href="https://david-dm.org/less/less.js#info=devDependencies"><img src="https://david-dm.org/less/less.js/dev-status.svg" style="max-width:100%;"></a> <a href="https://twitter.com/lesstocss"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/lesstocss.svg?style=flat-square" style="max-width:100%;"></a></p>
4
4
 
5
5
  <p align="center"><a href="https://gitter.im/less/less.js?utm_source=badge&amp;utm_medium=badge&amp;utm_campaign=pr-badge&amp;utm_content=badge"><img src="https://badges.gitter.im/Join%20Chat.svg" style="max-width:100%;"></a> <br><sup class="rich-diff-level-one">Chat with Less.js users and contributors</sup></p>
6
6
 
7
- <p align="center"><a href="https://saucelabs.com/u/less" rel="nofollow"><img src="https://saucelabs.com/browser-matrix/less.svg" alt="Sauce Test Status" style="max-width:100%;"></a></p>
8
-
9
7
  # [Less.js](http://lesscss.org)
10
8
 
11
9
  > The **dynamic** stylesheet language. [http://lesscss.org](http://lesscss.org).
@@ -47,6 +45,36 @@ Read [Developing Less](http://lesscss.org/usage/#developing-less).
47
45
  ## Release History
48
46
  See the [changelog](CHANGELOG.md)
49
47
 
48
+ ## Contributors
49
+
50
+ ### Code Contributors
51
+
52
+ This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
53
+ <a href="https://github.com/less/less.js/graphs/contributors"><img src="https://opencollective.com/less/contributors.svg?width=890&button=false" /></a>
54
+
55
+ ### Financial Contributors
56
+
57
+ Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/less/contribute)]
58
+
59
+ #### Individuals
60
+
61
+ <a href="https://opencollective.com/less"><img src="https://opencollective.com/less/individuals.svg?width=890"></a>
62
+
63
+ #### Organizations
64
+
65
+ Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/less/contribute)]
66
+
67
+ <a href="https://opencollective.com/less/organization/0/website"><img src="https://opencollective.com/less/organization/0/avatar.svg"></a>
68
+ <a href="https://opencollective.com/less/organization/1/website"><img src="https://opencollective.com/less/organization/1/avatar.svg"></a>
69
+ <a href="https://opencollective.com/less/organization/2/website"><img src="https://opencollective.com/less/organization/2/avatar.svg"></a>
70
+ <a href="https://opencollective.com/less/organization/3/website"><img src="https://opencollective.com/less/organization/3/avatar.svg"></a>
71
+ <a href="https://opencollective.com/less/organization/4/website"><img src="https://opencollective.com/less/organization/4/avatar.svg"></a>
72
+ <a href="https://opencollective.com/less/organization/5/website"><img src="https://opencollective.com/less/organization/5/avatar.svg"></a>
73
+ <a href="https://opencollective.com/less/organization/6/website"><img src="https://opencollective.com/less/organization/6/avatar.svg"></a>
74
+ <a href="https://opencollective.com/less/organization/7/website"><img src="https://opencollective.com/less/organization/7/avatar.svg"></a>
75
+ <a href="https://opencollective.com/less/organization/8/website"><img src="https://opencollective.com/less/organization/8/avatar.svg"></a>
76
+ <a href="https://opencollective.com/less/organization/9/website"><img src="https://opencollective.com/less/organization/9/avatar.svg"></a>
77
+
50
78
  ## [License](LICENSE)
51
79
 
52
80
  Copyright (c) 2009-2017 [Alexis Sellier](http://cloudhead.io) & The Core Less Team