less 2.4.0 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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]; }}
|