less 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Changelog.md +4 -0
- data/Gemfile +1 -1
- data/less.gemspec +1 -1
- data/lib/less/defaults.rb +3 -3
- data/lib/less/java_script/v8_context.rb +1 -1
- data/lib/less/js/.gitattributes +3 -2
- data/lib/less/js/.gitignore +18 -2
- data/lib/less/js/.jshintrc +11 -0
- data/lib/less/js/CHANGELOG.md +87 -2
- data/lib/less/js/CONTRIBUTING.md +4 -3
- data/lib/less/js/Gruntfile.js +290 -0
- data/lib/less/js/README.md +342 -12
- data/lib/less/js/benchmark/benchmark.less +194 -194
- data/lib/less/js/benchmark/less-benchmark.js +9 -10
- data/lib/less/js/bin/lessc +154 -12
- data/lib/less/js/bower.json +18 -0
- data/lib/less/js/build.gradle +347 -0
- data/lib/less/js/build/README.md +350 -0
- data/lib/less/js/build/browser-header.js +4 -0
- data/lib/less/js/build/build.yml +160 -0
- data/lib/less/js/build/require-rhino.js +7 -2
- data/lib/less/js/build/rhino-header.js +4 -0
- data/lib/less/js/build/rhino-modules.js +131 -0
- data/lib/less/js/build/tasks/.gitkeep +1 -0
- data/lib/less/js/dist/less-1.5.0.js +6914 -0
- data/lib/less/js/dist/less-1.5.0.min.js +13 -0
- data/lib/less/js/dist/less-1.5.1.js +6941 -0
- data/lib/less/js/dist/less-1.5.1.min.js +13 -0
- data/lib/less/js/dist/less-1.6.0.js +7485 -0
- data/lib/less/js/dist/less-1.6.0.min.js +16 -0
- data/lib/less/js/dist/less-1.6.1.js +7513 -0
- data/lib/less/js/dist/less-1.6.1.min.js +16 -0
- data/lib/less/js/dist/less-1.6.2.js +7624 -0
- data/lib/less/js/dist/less-1.6.2.min.js +16 -0
- data/lib/less/js/dist/less-rhino-1.5.1.js +6831 -0
- data/lib/less/js/dist/less-rhino-1.6.2.js +9017 -0
- data/lib/less/js/dist/lessc-rhino-1.6.2.js +449 -0
- data/lib/less/js/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/lib/less/js/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/lib/less/js/gradlew +164 -0
- data/lib/less/js/gradlew.bat +90 -0
- data/lib/less/js/lib/less/browser.js +482 -367
- data/lib/less/js/lib/less/colors.js +0 -1
- data/lib/less/js/lib/less/encoder.js +4 -0
- data/lib/less/js/lib/less/env.js +50 -19
- data/lib/less/js/lib/less/extend-visitor.js +66 -41
- data/lib/less/js/lib/less/functions.js +309 -104
- data/lib/less/js/lib/less/import-visitor.js +21 -10
- data/lib/less/js/lib/less/index.js +90 -68
- data/lib/less/js/lib/less/join-selector-visitor.js +11 -4
- data/lib/less/js/lib/less/lessc_helper.js +56 -45
- data/lib/less/js/lib/less/parser.js +830 -460
- data/lib/less/js/lib/less/rhino.js +380 -58
- data/lib/less/js/lib/less/source-map-output.js +141 -0
- data/lib/less/js/lib/less/to-css-visitor.js +215 -0
- data/lib/less/js/lib/less/tree.js +57 -5
- data/lib/less/js/lib/less/tree/alpha.js +13 -5
- data/lib/less/js/lib/less/tree/anonymous.js +11 -5
- data/lib/less/js/lib/less/tree/assignment.js +11 -5
- data/lib/less/js/lib/less/tree/call.js +19 -8
- data/lib/less/js/lib/less/tree/color.js +59 -36
- data/lib/less/js/lib/less/tree/comment.js +17 -4
- data/lib/less/js/lib/less/tree/condition.js +3 -3
- data/lib/less/js/lib/less/tree/dimension.js +161 -153
- data/lib/less/js/lib/less/tree/directive.js +39 -18
- data/lib/less/js/lib/less/tree/element.js +41 -18
- data/lib/less/js/lib/less/tree/expression.js +11 -5
- data/lib/less/js/lib/less/tree/extend.js +11 -1
- data/lib/less/js/lib/less/tree/import.js +34 -20
- data/lib/less/js/lib/less/tree/javascript.js +16 -10
- data/lib/less/js/lib/less/tree/keyword.js +5 -2
- data/lib/less/js/lib/less/tree/media.js +39 -22
- data/lib/less/js/lib/less/tree/mixin.js +135 -56
- data/lib/less/js/lib/less/tree/negative.js +4 -2
- data/lib/less/js/lib/less/tree/operation.js +17 -12
- data/lib/less/js/lib/less/tree/paren.js +5 -2
- data/lib/less/js/lib/less/tree/quoted.js +9 -6
- data/lib/less/js/lib/less/tree/rule.js +39 -21
- data/lib/less/js/lib/less/tree/ruleset.js +229 -145
- data/lib/less/js/lib/less/tree/selector.js +101 -34
- data/lib/less/js/lib/less/tree/unicode-descriptor.js +4 -3
- data/lib/less/js/lib/less/tree/url.js +33 -11
- data/lib/less/js/lib/less/tree/value.js +13 -6
- data/lib/less/js/lib/less/tree/variable.js +13 -8
- data/lib/less/js/lib/less/visitor.js +117 -25
- data/lib/less/js/lib/source-map/source-map-0.1.31.js +1933 -0
- data/lib/less/js/lib/source-map/source-map-footer.js +4 -0
- data/lib/less/js/lib/source-map/source-map-header.js +3 -0
- data/lib/less/js/package.json +30 -15
- data/lib/less/js/test/browser/common.js +131 -56
- data/lib/less/js/test/browser/css/global-vars/simple.css +3 -0
- data/lib/less/js/test/browser/css/modify-vars/simple.css +8 -0
- data/lib/less/js/test/browser/css/relative-urls/urls.css +8 -9
- data/lib/less/js/test/browser/css/rootpath-relative/urls.css +0 -1
- data/lib/less/js/test/browser/css/rootpath/urls.css +0 -1
- data/lib/less/js/test/browser/css/urls.css +18 -14
- data/lib/less/js/test/browser/es5.js +27 -0
- data/lib/less/js/test/{less/errors/color-operation-error.less → browser/less/console-errors/test-error.less} +0 -0
- data/lib/less/js/test/browser/less/console-errors/test-error.txt +2 -0
- data/lib/less/js/test/browser/less/global-vars/simple.less +3 -0
- data/lib/less/js/test/browser/less/modify-vars/imports/simple2.less +4 -0
- data/lib/less/js/test/browser/less/modify-vars/simple.less +8 -0
- data/lib/less/js/test/browser/less/relative-urls/urls.less +1 -1
- data/lib/less/js/test/browser/less/rootpath-relative/urls.less +1 -1
- data/lib/less/js/test/browser/less/rootpath/urls.less +1 -1
- data/lib/less/js/test/browser/less/urls.less +9 -1
- data/lib/less/js/test/browser/phantom-runner.js +112 -103
- data/lib/less/js/test/browser/runner-browser-options.js +42 -0
- data/lib/less/js/test/browser/{runner-browser.js → runner-browser-spec.js} +7 -2
- data/lib/less/js/test/browser/runner-console-errors.js +5 -0
- data/lib/less/js/test/browser/runner-errors-options.js +5 -0
- data/lib/less/js/test/browser/runner-errors-spec.js +4 -0
- data/lib/less/js/test/browser/runner-global-vars-options.js +4 -0
- data/lib/less/js/test/browser/runner-global-vars-spec.js +3 -0
- data/lib/less/js/test/browser/runner-legacy-options.js +4 -0
- data/lib/less/js/test/browser/{runner-legacy.js → runner-legacy-spec.js} +1 -4
- data/lib/less/js/test/browser/runner-main-options.js +15 -0
- data/lib/less/js/test/browser/runner-main-spec.js +3 -0
- data/lib/less/js/test/browser/runner-modify-vars-options.js +2 -0
- data/lib/less/js/test/browser/runner-modify-vars-spec.js +43 -0
- data/lib/less/js/test/browser/runner-no-js-errors-options.js +4 -0
- data/lib/less/js/test/browser/runner-no-js-errors-spec.js +4 -0
- data/lib/less/js/test/browser/runner-production-options.js +3 -0
- data/lib/less/js/test/browser/{runner-production.js → runner-production-spec.js} +1 -3
- data/lib/less/js/test/browser/runner-relative-urls-options.js +3 -0
- data/lib/less/js/test/browser/{runner-relative-urls.js → runner-relative-urls-spec.js} +1 -2
- data/lib/less/js/test/browser/runner-rootpath-options.js +3 -0
- data/lib/less/js/test/browser/runner-rootpath-relative-options.js +4 -0
- data/lib/less/js/test/browser/{runner-rootpath-relative.js → runner-rootpath-relative-spec.js} +1 -3
- data/lib/less/js/test/browser/{runner-rootpath.js → runner-rootpath-spec.js} +1 -2
- data/lib/less/js/test/browser/test-runner-template.tmpl +47 -0
- data/lib/less/js/test/css/colors.css +7 -0
- data/lib/less/js/test/css/comments.css +9 -4
- data/lib/less/js/test/css/compression/compression.css +3 -2
- data/lib/less/js/test/css/css-3.css +17 -5
- data/lib/less/js/test/css/css-guards.css +37 -0
- data/lib/less/js/test/css/debug/linenumbers-all.css +6 -0
- data/lib/less/js/test/css/debug/linenumbers-comments.css +5 -0
- data/lib/less/js/test/css/debug/linenumbers-mediaquery.css +5 -0
- data/lib/less/js/test/css/empty.css +0 -0
- data/lib/less/js/test/css/extend-chaining.css +9 -0
- data/lib/less/js/test/css/extend-selector.css +10 -2
- data/lib/less/js/test/css/extract-and-length.css +133 -0
- data/lib/less/js/test/css/functions.css +23 -10
- data/lib/less/js/test/css/globalVars/extended.css +12 -0
- data/lib/less/js/test/css/globalVars/simple.css +6 -0
- data/lib/less/js/test/css/import-inline.css +5 -0
- data/lib/less/js/test/css/import-once.css +12 -0
- data/lib/less/js/test/css/import-reference.css +49 -0
- data/lib/less/js/test/css/import.css +0 -2
- data/lib/less/js/test/css/media.css +21 -5
- data/lib/less/js/test/css/merge.css +26 -0
- data/lib/less/js/test/css/mixins-guards-default-func.css +129 -0
- data/lib/less/js/test/css/mixins-guards.css +6 -0
- data/lib/less/js/test/css/mixins-important.css +7 -0
- data/lib/less/js/test/css/mixins-interpolated.css +39 -0
- data/lib/less/js/test/css/mixins.css +20 -0
- data/lib/less/js/test/css/modifyVars/extended.css +9 -0
- data/lib/less/js/test/css/no-output.css +0 -0
- data/lib/less/js/test/css/parens.css +3 -0
- data/lib/less/js/test/css/property-name-interp.css +20 -0
- data/lib/less/js/test/css/selectors.css +12 -0
- data/lib/less/js/test/css/static-urls/urls.css +7 -4
- data/lib/less/js/test/css/strings.css +3 -0
- data/lib/less/js/test/css/url-args/urls.css +56 -0
- data/lib/less/js/test/css/urls.css +21 -9
- data/lib/less/js/test/index.js +45 -0
- data/lib/less/js/test/less-test.js +234 -191
- data/lib/less/js/test/less/colors.less +6 -0
- data/lib/less/js/test/less/comments.less +7 -1
- data/lib/less/js/test/less/compression/compression.less +21 -1
- data/lib/less/js/test/less/css-3.less +12 -0
- data/lib/less/js/test/less/css-guards.less +99 -0
- data/lib/less/js/test/less/debug/linenumbers.less +11 -1
- data/lib/less/js/test/less/empty.less +0 -0
- data/lib/less/js/test/less/errors/add-mixed-units.txt +4 -2
- data/lib/less/js/test/less/errors/add-mixed-units2.txt +4 -2
- data/lib/less/js/test/less/errors/color-func-invalid-color.less +3 -0
- data/lib/less/js/test/less/errors/color-func-invalid-color.txt +4 -0
- data/lib/less/js/test/less/errors/css-guard-default-func.less +4 -0
- data/lib/less/js/test/less/errors/css-guard-default-func.txt +4 -0
- data/lib/less/js/test/less/errors/import-subfolder2.txt +4 -2
- data/lib/less/js/test/less/errors/javascript-undefined-var.less +3 -0
- data/lib/less/js/test/less/errors/javascript-undefined-var.txt +4 -0
- data/lib/less/js/test/less/errors/mixins-guards-default-func-1.less +9 -0
- data/lib/less/js/test/less/errors/mixins-guards-default-func-1.txt +4 -0
- data/lib/less/js/test/less/errors/mixins-guards-default-func-2.less +9 -0
- data/lib/less/js/test/less/errors/mixins-guards-default-func-2.txt +4 -0
- data/lib/less/js/test/less/errors/mixins-guards-default-func-3.less +9 -0
- data/lib/less/js/test/less/errors/mixins-guards-default-func-3.txt +4 -0
- data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors.less +4 -0
- data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors.txt +4 -0
- data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors2.less +4 -0
- data/lib/less/js/test/less/errors/multiple-guards-on-css-selectors2.txt +4 -0
- data/lib/less/js/test/less/errors/parse-error-curly-bracket.less +4 -1
- data/lib/less/js/test/less/errors/parse-error-curly-bracket.txt +4 -2
- data/lib/less/js/test/less/errors/parse-error-extra-parens.less +5 -0
- data/lib/less/js/test/less/errors/parse-error-extra-parens.txt +3 -0
- data/lib/less/js/test/less/errors/parse-error-missing-bracket.txt +2 -2
- data/lib/less/js/test/less/errors/parse-error-missing-parens.less +5 -0
- data/lib/less/js/test/less/errors/parse-error-missing-parens.txt +3 -0
- data/lib/less/js/test/less/errors/property-asterisk-only-name.less +3 -0
- data/lib/less/js/test/less/errors/property-asterisk-only-name.txt +4 -0
- data/lib/less/js/test/less/errors/property-interp-not-defined.less +1 -0
- data/lib/less/js/test/less/errors/property-interp-not-defined.txt +2 -0
- data/lib/less/js/test/less/errors/svg-gradient1.less +3 -0
- data/lib/less/js/test/less/errors/svg-gradient1.txt +4 -0
- data/lib/less/js/test/less/errors/svg-gradient2.less +3 -0
- data/lib/less/js/test/less/errors/svg-gradient2.txt +4 -0
- data/lib/less/js/test/less/errors/svg-gradient3.less +3 -0
- data/lib/less/js/test/less/errors/svg-gradient3.txt +4 -0
- data/lib/less/js/test/less/errors/unit-function.less +3 -0
- data/lib/less/js/test/less/errors/unit-function.txt +4 -0
- data/lib/less/js/test/less/extend-chaining.less +12 -0
- data/lib/less/js/test/less/extend-selector.less +15 -0
- data/lib/less/js/test/less/extract-and-length.less +133 -0
- data/lib/less/js/test/less/functions.less +15 -2
- data/lib/less/js/test/less/globalVars/extended.json +5 -0
- data/lib/less/js/test/less/globalVars/extended.less +10 -0
- data/lib/less/js/test/less/globalVars/simple.json +3 -0
- data/lib/less/js/test/less/globalVars/simple.less +3 -0
- data/lib/less/js/test/less/import-inline.less +2 -0
- data/lib/less/js/test/less/import-once.less +2 -0
- data/lib/less/js/test/less/import-reference.less +18 -0
- data/lib/less/js/test/less/import/import-and-relative-paths-test.less +11 -0
- data/lib/less/js/test/less/import/import-reference.less +43 -0
- data/lib/less/js/test/less/import/import-test-f.less +5 -0
- data/lib/less/js/test/less/import/invalid-css.less +1 -0
- data/lib/less/js/test/less/media.less +25 -1
- data/lib/less/js/test/less/merge.less +59 -0
- data/lib/less/js/test/less/mixins-args.less +10 -0
- data/lib/less/js/test/less/mixins-guards-default-func.less +195 -0
- data/lib/less/js/test/less/mixins-guards.less +16 -0
- data/lib/less/js/test/less/mixins-important.less +4 -1
- data/lib/less/js/test/less/mixins-interpolated.less +69 -0
- data/lib/less/js/test/less/mixins.less +27 -0
- data/lib/less/js/test/less/modifyVars/extended.json +5 -0
- data/lib/less/js/test/less/modifyVars/extended.less +11 -0
- data/lib/less/js/test/less/no-js-errors/no-js-errors.less +3 -0
- data/lib/less/js/test/less/no-js-errors/no-js-errors.txt +4 -0
- data/lib/less/js/test/less/no-output.less +2 -0
- data/lib/less/js/test/less/parens.less +4 -0
- data/lib/less/js/test/less/property-name-interp.less +53 -0
- data/lib/less/js/test/less/selectors.less +13 -0
- data/lib/less/js/test/less/sourcemaps/basic.json +3 -0
- data/lib/less/js/test/less/sourcemaps/basic.less +27 -0
- data/lib/less/js/test/less/sourcemaps/imported.css +7 -0
- data/lib/less/js/test/less/strings.less +6 -0
- data/lib/less/js/test/less/url-args/urls.less +63 -0
- data/lib/less/js/test/less/urls.less +15 -0
- data/lib/less/js/test/rhino/test-header.js +15 -0
- data/lib/less/js/test/sourcemaps/basic.json +1 -0
- data/lib/less/js/test/sourcemaps/index.html +17 -0
- data/lib/less/loader.rb +48 -40
- data/lib/less/version.rb +1 -1
- data/spec/less/parser_spec.rb +15 -15
- metadata +146 -40
- data/lib/less/js/Makefile +0 -102
- data/lib/less/js/build/header.js +0 -9
- data/lib/less/js/test/browser-test-prepare.js +0 -46
- data/lib/less/js/test/browser/runner-errors.js +0 -5
- data/lib/less/js/test/browser/runner-main.js +0 -15
- data/lib/less/js/test/browser/template.htm +0 -10
- data/lib/less/js/test/less/errors/color-operation-error.txt +0 -2
|
@@ -27,9 +27,10 @@
|
|
|
27
27
|
},
|
|
28
28
|
visitImport: function (importNode, visitArgs) {
|
|
29
29
|
var importVisitor = this,
|
|
30
|
-
evaldImportNode
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
evaldImportNode,
|
|
31
|
+
inlineCSS = importNode.options.inline;
|
|
32
|
+
|
|
33
|
+
if (!importNode.css || inlineCSS) {
|
|
33
34
|
|
|
34
35
|
try {
|
|
35
36
|
evaldImportNode = importNode.evalForImport(this.env);
|
|
@@ -41,13 +42,19 @@
|
|
|
41
42
|
importNode.error = e;
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
if (evaldImportNode && !evaldImportNode.css) {
|
|
45
|
+
if (evaldImportNode && (!evaldImportNode.css || inlineCSS)) {
|
|
45
46
|
importNode = evaldImportNode;
|
|
46
47
|
this.importCount++;
|
|
47
48
|
var env = new tree.evalEnv(this.env, this.env.frames.slice(0));
|
|
48
|
-
|
|
49
|
+
|
|
50
|
+
if (importNode.options.multiple) {
|
|
51
|
+
env.importMultiple = true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
this._importer.push(importNode.getPath(), importNode.currentFileInfo, importNode.options, function (e, root, imported, fullPath) {
|
|
49
55
|
if (e && !e.filename) { e.index = importNode.index; e.filename = importNode.currentFileInfo.filename; }
|
|
50
|
-
|
|
56
|
+
|
|
57
|
+
if (imported && !env.importMultiple) { importNode.skip = imported; }
|
|
51
58
|
|
|
52
59
|
var subFinish = function(e) {
|
|
53
60
|
importVisitor.importCount--;
|
|
@@ -59,11 +66,15 @@
|
|
|
59
66
|
|
|
60
67
|
if (root) {
|
|
61
68
|
importNode.root = root;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
importNode.importedFilename = fullPath;
|
|
70
|
+
if (!inlineCSS && !importNode.skip) {
|
|
71
|
+
new(tree.importVisitor)(importVisitor._importer, subFinish, env)
|
|
72
|
+
.run(root);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
66
75
|
}
|
|
76
|
+
|
|
77
|
+
subFinish();
|
|
67
78
|
});
|
|
68
79
|
}
|
|
69
80
|
}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
var path = require('path'),
|
|
2
|
-
sys = require('util'),
|
|
3
2
|
url = require('url'),
|
|
4
3
|
request,
|
|
5
4
|
fs = require('fs');
|
|
6
5
|
|
|
7
6
|
var less = {
|
|
8
|
-
version: [1,
|
|
7
|
+
version: [1, 6, 2],
|
|
9
8
|
Parser: require('./parser').Parser,
|
|
10
|
-
importer: require('./parser').importer,
|
|
11
9
|
tree: require('./tree'),
|
|
12
10
|
render: function (input, options, callback) {
|
|
13
11
|
options = options || {};
|
|
14
12
|
|
|
15
13
|
if (typeof(options) === 'function') {
|
|
16
|
-
callback = options
|
|
14
|
+
callback = options;
|
|
15
|
+
options = {};
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
var parser = new(less.Parser)(options),
|
|
@@ -21,15 +20,17 @@ var less = {
|
|
|
21
20
|
|
|
22
21
|
if (callback) {
|
|
23
22
|
parser.parse(input, function (e, root) {
|
|
24
|
-
callback(e, root && root.toCSS && root.toCSS(options));
|
|
23
|
+
try { callback(e, root && root.toCSS && root.toCSS(options)); }
|
|
24
|
+
catch (err) { callback(err); }
|
|
25
25
|
});
|
|
26
26
|
} else {
|
|
27
|
-
ee = new(require('events').EventEmitter);
|
|
27
|
+
ee = new (require('events').EventEmitter)();
|
|
28
28
|
|
|
29
29
|
process.nextTick(function () {
|
|
30
30
|
parser.parse(input, function (e, root) {
|
|
31
|
-
if (e) { ee.emit('error', e) }
|
|
32
|
-
|
|
31
|
+
if (e) { return ee.emit('error', e); }
|
|
32
|
+
try { ee.emit('success', root.toCSS(options)); }
|
|
33
|
+
catch (err) { ee.emit('error', err); }
|
|
33
34
|
});
|
|
34
35
|
});
|
|
35
36
|
return ee;
|
|
@@ -41,10 +42,10 @@ var less = {
|
|
|
41
42
|
var message = "";
|
|
42
43
|
var extract = ctx.extract;
|
|
43
44
|
var error = [];
|
|
44
|
-
var stylize = options.color ? require('./lessc_helper').stylize : function (str) { return str };
|
|
45
|
+
var stylize = options.color ? require('./lessc_helper').stylize : function (str) { return str; };
|
|
45
46
|
|
|
46
47
|
// only output a stack if it isn't a less error
|
|
47
|
-
if (ctx.stack && !ctx.type) { return stylize(ctx.stack, 'red') }
|
|
48
|
+
if (ctx.stack && !ctx.type) { return stylize(ctx.stack, 'red'); }
|
|
48
49
|
|
|
49
50
|
if (!ctx.hasOwnProperty('index') || !extract) {
|
|
50
51
|
return ctx.stack || ctx.message;
|
|
@@ -70,8 +71,10 @@ var less = {
|
|
|
70
71
|
error = error.join('\n') + stylize('', 'reset') + '\n';
|
|
71
72
|
|
|
72
73
|
message += stylize(ctx.type + 'Error: ' + ctx.message, 'red');
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
if (ctx.filename) {
|
|
75
|
+
message += stylize(' in ', 'red') + ctx.filename +
|
|
76
|
+
stylize(' on line ' + ctx.line + ', column ' + (ctx.column + 1) + ':', 'grey');
|
|
77
|
+
}
|
|
75
78
|
|
|
76
79
|
message += '\n' + error;
|
|
77
80
|
|
|
@@ -84,26 +87,44 @@ var less = {
|
|
|
84
87
|
},
|
|
85
88
|
writeError: function (ctx, options) {
|
|
86
89
|
options = options || {};
|
|
87
|
-
if (options.silent) { return }
|
|
88
|
-
|
|
90
|
+
if (options.silent) { return; }
|
|
91
|
+
console.error(less.formatError(ctx, options));
|
|
89
92
|
}
|
|
90
93
|
};
|
|
91
94
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
require('./tree/color');
|
|
96
|
+
require('./tree/directive');
|
|
97
|
+
require('./tree/operation');
|
|
98
|
+
require('./tree/dimension');
|
|
99
|
+
require('./tree/keyword');
|
|
100
|
+
require('./tree/variable');
|
|
101
|
+
require('./tree/ruleset');
|
|
102
|
+
require('./tree/element');
|
|
103
|
+
require('./tree/selector');
|
|
104
|
+
require('./tree/quoted');
|
|
105
|
+
require('./tree/expression');
|
|
106
|
+
require('./tree/rule');
|
|
107
|
+
require('./tree/call');
|
|
108
|
+
require('./tree/url');
|
|
109
|
+
require('./tree/alpha');
|
|
110
|
+
require('./tree/import');
|
|
111
|
+
require('./tree/mixin');
|
|
112
|
+
require('./tree/comment');
|
|
113
|
+
require('./tree/anonymous');
|
|
114
|
+
require('./tree/value');
|
|
115
|
+
require('./tree/javascript');
|
|
116
|
+
require('./tree/assignment');
|
|
117
|
+
require('./tree/condition');
|
|
118
|
+
require('./tree/paren');
|
|
119
|
+
require('./tree/media');
|
|
120
|
+
require('./tree/unicode-descriptor');
|
|
121
|
+
require('./tree/negative');
|
|
122
|
+
require('./tree/extend');
|
|
102
123
|
|
|
103
124
|
|
|
104
125
|
var isUrlRe = /^(?:https?:)?\/\//i;
|
|
105
126
|
|
|
106
|
-
less.Parser.
|
|
127
|
+
less.Parser.fileLoader = function (file, currentFileInfo, callback, env) {
|
|
107
128
|
var pathname, dirname, data,
|
|
108
129
|
newFileInfo = {
|
|
109
130
|
relativeUrls: env.relativeUrls,
|
|
@@ -112,12 +133,7 @@ less.Parser.importer = function (file, currentFileInfo, callback, env) {
|
|
|
112
133
|
rootFilename: currentFileInfo.rootFilename
|
|
113
134
|
};
|
|
114
135
|
|
|
115
|
-
function
|
|
116
|
-
if (e) { return callback(e); }
|
|
117
|
-
|
|
118
|
-
env = new less.tree.parseEnv(env);
|
|
119
|
-
env.processImports = false;
|
|
120
|
-
|
|
136
|
+
function handleDataAndCallCallback(data) {
|
|
121
137
|
var j = file.lastIndexOf('/');
|
|
122
138
|
|
|
123
139
|
// Pass on an updated rootpath if path of imported file is relative and file
|
|
@@ -135,12 +151,8 @@ less.Parser.importer = function (file, currentFileInfo, callback, env) {
|
|
|
135
151
|
newFileInfo.currentDirectory = pathname.replace(/[^\\\/]*$/, "");
|
|
136
152
|
newFileInfo.filename = pathname;
|
|
137
153
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
new(less.Parser)(env).parse(data, function (e, root) {
|
|
141
|
-
callback(e, root, pathname);
|
|
142
|
-
});
|
|
143
|
-
};
|
|
154
|
+
callback(null, data, pathname, newFileInfo);
|
|
155
|
+
}
|
|
144
156
|
|
|
145
157
|
var isUrl = isUrlRe.test( file );
|
|
146
158
|
if (isUrl || isUrlRe.test(currentFileInfo.currentDirectory)) {
|
|
@@ -154,63 +166,71 @@ less.Parser.importer = function (file, currentFileInfo, callback, env) {
|
|
|
154
166
|
}
|
|
155
167
|
|
|
156
168
|
var urlStr = isUrl ? file : url.resolve(currentFileInfo.currentDirectory, file),
|
|
157
|
-
urlObj = url.parse(urlStr)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
port: urlObj.port || 80,
|
|
161
|
-
path: urlObj.pathname + (urlObj.search||'')
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
request.get(urlStr, function (error, res, body) {
|
|
169
|
+
urlObj = url.parse(urlStr);
|
|
170
|
+
|
|
171
|
+
request.get({uri: urlStr, strictSSL: !env.insecure }, function (error, res, body) {
|
|
165
172
|
if (res.statusCode === 404) {
|
|
166
173
|
callback({ type: 'File', message: "resource '" + urlStr + "' was not found\n" });
|
|
167
174
|
return;
|
|
168
175
|
}
|
|
169
176
|
if (!body) {
|
|
170
|
-
|
|
177
|
+
console.error( 'Warning: Empty body (HTTP '+ res.statusCode + ') returned by "' + urlStr +'"' );
|
|
171
178
|
}
|
|
172
179
|
if (error) {
|
|
173
180
|
callback({ type: 'File', message: "resource '" + urlStr + "' gave this Error:\n "+ error +"\n" });
|
|
174
181
|
}
|
|
175
182
|
pathname = urlStr;
|
|
176
183
|
dirname = urlObj.protocol +'//'+ urlObj.host + urlObj.pathname.replace(/[^\/]*$/, '');
|
|
177
|
-
|
|
184
|
+
handleDataAndCallCallback(body);
|
|
178
185
|
});
|
|
179
186
|
} else {
|
|
180
187
|
|
|
181
188
|
var paths = [currentFileInfo.currentDirectory].concat(env.paths);
|
|
182
189
|
paths.push('.');
|
|
183
190
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
+
if (env.syncImport) {
|
|
192
|
+
for (var i = 0; i < paths.length; i++) {
|
|
193
|
+
try {
|
|
194
|
+
pathname = path.join(paths[i], file);
|
|
195
|
+
fs.statSync(pathname);
|
|
196
|
+
break;
|
|
197
|
+
} catch (e) {
|
|
198
|
+
pathname = null;
|
|
199
|
+
}
|
|
191
200
|
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if (!pathname) {
|
|
195
201
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
dirname = path.dirname(pathname);
|
|
202
|
+
if (!pathname) {
|
|
203
|
+
callback({ type: 'File', message: "'" + file + "' wasn't found" });
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
201
206
|
|
|
202
|
-
if (env.syncImport) {
|
|
203
207
|
try {
|
|
204
208
|
data = fs.readFileSync(pathname, 'utf-8');
|
|
205
|
-
|
|
209
|
+
handleDataAndCallCallback(data);
|
|
206
210
|
} catch (e) {
|
|
207
|
-
|
|
211
|
+
callback(e);
|
|
208
212
|
}
|
|
209
213
|
} else {
|
|
210
|
-
|
|
214
|
+
(function tryPathIndex(i) {
|
|
215
|
+
if (i < paths.length) {
|
|
216
|
+
pathname = path.join(paths[i], file);
|
|
217
|
+
fs.stat(pathname, function (err) {
|
|
218
|
+
if (err) {
|
|
219
|
+
tryPathIndex(i + 1);
|
|
220
|
+
} else {
|
|
221
|
+
fs.readFile(pathname, 'utf-8', function(e, data) {
|
|
222
|
+
if (e) { callback(e); }
|
|
223
|
+
handleDataAndCallCallback(data);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
} else {
|
|
228
|
+
callback({ type: 'File', message: "'" + file + "' wasn't found" });
|
|
229
|
+
}
|
|
230
|
+
}(0));
|
|
211
231
|
}
|
|
212
232
|
}
|
|
213
|
-
}
|
|
233
|
+
};
|
|
214
234
|
|
|
215
235
|
require('./env');
|
|
216
236
|
require('./functions');
|
|
@@ -219,5 +239,7 @@ require('./visitor.js');
|
|
|
219
239
|
require('./import-visitor.js');
|
|
220
240
|
require('./extend-visitor.js');
|
|
221
241
|
require('./join-selector-visitor.js');
|
|
242
|
+
require('./to-css-visitor.js');
|
|
243
|
+
require('./source-map-output.js');
|
|
222
244
|
|
|
223
|
-
for (var k in less) { exports[k] = less[k]; }
|
|
245
|
+
for (var k in less) { if (less.hasOwnProperty(k)) { exports[k] = less[k]; }}
|
|
@@ -16,12 +16,19 @@
|
|
|
16
16
|
},
|
|
17
17
|
|
|
18
18
|
visitRuleset: function (rulesetNode, visitArgs) {
|
|
19
|
-
var context = this.contexts[this.contexts.length - 1]
|
|
20
|
-
|
|
19
|
+
var context = this.contexts[this.contexts.length - 1],
|
|
20
|
+
paths = [], selectors;
|
|
21
|
+
|
|
21
22
|
this.contexts.push(paths);
|
|
22
23
|
|
|
23
24
|
if (! rulesetNode.root) {
|
|
24
|
-
|
|
25
|
+
selectors = rulesetNode.selectors;
|
|
26
|
+
if (selectors) {
|
|
27
|
+
selectors = selectors.filter(function(selector) { return selector.getIsOutput(); });
|
|
28
|
+
rulesetNode.selectors = selectors.length ? selectors : (selectors = null);
|
|
29
|
+
if (selectors) { rulesetNode.joinSelectors(paths, context, selectors); }
|
|
30
|
+
}
|
|
31
|
+
if (!selectors) { rulesetNode.rules = null; }
|
|
25
32
|
rulesetNode.paths = paths;
|
|
26
33
|
}
|
|
27
34
|
},
|
|
@@ -30,7 +37,7 @@
|
|
|
30
37
|
},
|
|
31
38
|
visitMedia: function (mediaNode, visitArgs) {
|
|
32
39
|
var context = this.contexts[this.contexts.length - 1];
|
|
33
|
-
mediaNode.
|
|
40
|
+
mediaNode.rules[0].root = (context.length === 0 || context[0].multiMedia);
|
|
34
41
|
}
|
|
35
42
|
};
|
|
36
43
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
// lessc_helper.js
|
|
2
2
|
//
|
|
3
3
|
// helper functions for lessc
|
|
4
|
-
var sys = require('util');
|
|
5
|
-
|
|
6
4
|
var lessc_helper = {
|
|
7
5
|
|
|
8
6
|
//Stylize a string
|
|
@@ -23,49 +21,62 @@ var lessc_helper = {
|
|
|
23
21
|
|
|
24
22
|
//Print command line options
|
|
25
23
|
printUsage: function() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
24
|
+
console.log("usage: lessc [option option=parameter ...] <source> [destination]");
|
|
25
|
+
console.log("");
|
|
26
|
+
console.log("If source is set to `-' (dash or hyphen-minus), input is read from stdin.");
|
|
27
|
+
console.log("");
|
|
28
|
+
console.log("options:");
|
|
29
|
+
console.log(" -h, --help Print help (this message) and exit.");
|
|
30
|
+
console.log(" --include-path=PATHS Set include paths. Separated by `:'. Use `;' on Windows.");
|
|
31
|
+
console.log(" -M, --depends Output a makefile import dependency list to stdout");
|
|
32
|
+
console.log(" --no-color Disable colorized output.");
|
|
33
|
+
console.log(" --no-ie-compat Disable IE compatibility checks.");
|
|
34
|
+
console.log(" --no-js Disable JavaScript in less files");
|
|
35
|
+
console.log(" -l, --lint Syntax check only (lint).");
|
|
36
|
+
console.log(" -s, --silent Suppress output of error messages.");
|
|
37
|
+
console.log(" --strict-imports Force evaluation of imports.");
|
|
38
|
+
console.log(" --insecure Allow imports from insecure https hosts.");
|
|
39
|
+
console.log(" -v, --version Print version number and exit.");
|
|
40
|
+
console.log(" -x, --compress Compress output by removing some whitespaces.");
|
|
41
|
+
console.log(" --clean-css Compress output using clean-css");
|
|
42
|
+
console.log(" --clean-option=opt:val Pass an option to clean css, using CLI arguments from ");
|
|
43
|
+
console.log(" https://github.com/GoalSmashers/clean-css e.g.");
|
|
44
|
+
console.log(" --clean-option=--selectors-merge-mode:ie8");
|
|
45
|
+
console.log(" and to switch on advanced use --clean-option=--advanced");
|
|
46
|
+
console.log(" --source-map[=FILENAME] Outputs a v3 sourcemap to the filename (or output filename.map)");
|
|
47
|
+
console.log(" --source-map-rootpath=X adds this path onto the sourcemap filename and less file paths");
|
|
48
|
+
console.log(" --source-map-basepath=X Sets sourcemap base path, defaults to current working directory.");
|
|
49
|
+
console.log(" --source-map-less-inline puts the less files into the map instead of referencing them");
|
|
50
|
+
console.log(" --source-map-map-inline puts the map (and any less files) into the output css file");
|
|
51
|
+
console.log(" --source-map-url=URL the complete url and filename put in the less file");
|
|
52
|
+
console.log(" -rp, --rootpath=URL Set rootpath for url rewriting in relative imports and urls.");
|
|
53
|
+
console.log(" Works with or without the relative-urls option.");
|
|
54
|
+
console.log(" -ru, --relative-urls re-write relative urls to the base less file.");
|
|
55
|
+
console.log(" -sm=on|off Turn on or off strict math, where in strict mode, math");
|
|
56
|
+
console.log(" --strict-math=on|off requires brackets. This option may default to on and then");
|
|
57
|
+
console.log(" be removed in the future.");
|
|
58
|
+
console.log(" -su=on|off Allow mixed units, e.g. 1px+1em or 1px*1px which have units");
|
|
59
|
+
console.log(" --strict-units=on|off that cannot be represented.");
|
|
60
|
+
console.log(" --global-var='VAR=VALUE' Defines a variable that can be referenced by the file.");
|
|
61
|
+
console.log(" --modify-var='VAR=VALUE' Modifies a variable already declared in the file.");
|
|
62
|
+
console.log("");
|
|
63
|
+
console.log("-------------------------- Deprecated ----------------");
|
|
64
|
+
console.log(" -O0, -O1, -O2 Set the parser's optimization level. The lower");
|
|
65
|
+
console.log(" the number, the less nodes it will create in the");
|
|
66
|
+
console.log(" tree. This could matter for debugging, or if you");
|
|
67
|
+
console.log(" want to access the individual nodes in the tree.");
|
|
68
|
+
console.log(" --line-numbers=TYPE Outputs filename and line numbers.");
|
|
69
|
+
console.log(" TYPE can be either 'comments', which will output");
|
|
70
|
+
console.log(" the debug info within comments, 'mediaquery'");
|
|
71
|
+
console.log(" that will output the information within a fake");
|
|
72
|
+
console.log(" media query which is compatible with the SASS");
|
|
73
|
+
console.log(" format, and 'all' which will do both.");
|
|
74
|
+
console.log(" --verbose Be verbose.");
|
|
75
|
+
console.log("");
|
|
76
|
+
console.log("Report bugs to: http://github.com/less/less.js/issues");
|
|
77
|
+
console.log("Home page: <http://lesscss.org/>");
|
|
65
78
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
79
|
+
};
|
|
69
80
|
|
|
70
81
|
// Exports helper functions
|
|
71
|
-
for (var h in lessc_helper) { exports[h] = lessc_helper[h] }
|
|
82
|
+
for (var h in lessc_helper) { if (lessc_helper.hasOwnProperty(h)) { exports[h] = lessc_helper[h]; }}
|