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
data/lib/less/js/gradlew
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
##############################################################################
|
4
|
+
##
|
5
|
+
## Gradle start up script for UN*X
|
6
|
+
##
|
7
|
+
##############################################################################
|
8
|
+
|
9
|
+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
10
|
+
DEFAULT_JVM_OPTS=""
|
11
|
+
|
12
|
+
APP_NAME="Gradle"
|
13
|
+
APP_BASE_NAME=`basename "$0"`
|
14
|
+
|
15
|
+
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
16
|
+
MAX_FD="maximum"
|
17
|
+
|
18
|
+
warn ( ) {
|
19
|
+
echo "$*"
|
20
|
+
}
|
21
|
+
|
22
|
+
die ( ) {
|
23
|
+
echo
|
24
|
+
echo "$*"
|
25
|
+
echo
|
26
|
+
exit 1
|
27
|
+
}
|
28
|
+
|
29
|
+
# OS specific support (must be 'true' or 'false').
|
30
|
+
cygwin=false
|
31
|
+
msys=false
|
32
|
+
darwin=false
|
33
|
+
case "`uname`" in
|
34
|
+
CYGWIN* )
|
35
|
+
cygwin=true
|
36
|
+
;;
|
37
|
+
Darwin* )
|
38
|
+
darwin=true
|
39
|
+
;;
|
40
|
+
MINGW* )
|
41
|
+
msys=true
|
42
|
+
;;
|
43
|
+
esac
|
44
|
+
|
45
|
+
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
46
|
+
if $cygwin ; then
|
47
|
+
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
48
|
+
fi
|
49
|
+
|
50
|
+
# Attempt to set APP_HOME
|
51
|
+
# Resolve links: $0 may be a link
|
52
|
+
PRG="$0"
|
53
|
+
# Need this for relative symlinks.
|
54
|
+
while [ -h "$PRG" ] ; do
|
55
|
+
ls=`ls -ld "$PRG"`
|
56
|
+
link=`expr "$ls" : '.*-> \(.*\)$'`
|
57
|
+
if expr "$link" : '/.*' > /dev/null; then
|
58
|
+
PRG="$link"
|
59
|
+
else
|
60
|
+
PRG=`dirname "$PRG"`"/$link"
|
61
|
+
fi
|
62
|
+
done
|
63
|
+
SAVED="`pwd`"
|
64
|
+
cd "`dirname \"$PRG\"`/" >&-
|
65
|
+
APP_HOME="`pwd -P`"
|
66
|
+
cd "$SAVED" >&-
|
67
|
+
|
68
|
+
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
69
|
+
|
70
|
+
# Determine the Java command to use to start the JVM.
|
71
|
+
if [ -n "$JAVA_HOME" ] ; then
|
72
|
+
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
73
|
+
# IBM's JDK on AIX uses strange locations for the executables
|
74
|
+
JAVACMD="$JAVA_HOME/jre/sh/java"
|
75
|
+
else
|
76
|
+
JAVACMD="$JAVA_HOME/bin/java"
|
77
|
+
fi
|
78
|
+
if [ ! -x "$JAVACMD" ] ; then
|
79
|
+
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
80
|
+
|
81
|
+
Please set the JAVA_HOME variable in your environment to match the
|
82
|
+
location of your Java installation."
|
83
|
+
fi
|
84
|
+
else
|
85
|
+
JAVACMD="java"
|
86
|
+
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
87
|
+
|
88
|
+
Please set the JAVA_HOME variable in your environment to match the
|
89
|
+
location of your Java installation."
|
90
|
+
fi
|
91
|
+
|
92
|
+
# Increase the maximum file descriptors if we can.
|
93
|
+
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
94
|
+
MAX_FD_LIMIT=`ulimit -H -n`
|
95
|
+
if [ $? -eq 0 ] ; then
|
96
|
+
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
97
|
+
MAX_FD="$MAX_FD_LIMIT"
|
98
|
+
fi
|
99
|
+
ulimit -n $MAX_FD
|
100
|
+
if [ $? -ne 0 ] ; then
|
101
|
+
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
102
|
+
fi
|
103
|
+
else
|
104
|
+
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
105
|
+
fi
|
106
|
+
fi
|
107
|
+
|
108
|
+
# For Darwin, add options to specify how the application appears in the dock
|
109
|
+
if $darwin; then
|
110
|
+
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
111
|
+
fi
|
112
|
+
|
113
|
+
# For Cygwin, switch paths to Windows format before running java
|
114
|
+
if $cygwin ; then
|
115
|
+
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
116
|
+
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
117
|
+
|
118
|
+
# We build the pattern for arguments to be converted via cygpath
|
119
|
+
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
120
|
+
SEP=""
|
121
|
+
for dir in $ROOTDIRSRAW ; do
|
122
|
+
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
123
|
+
SEP="|"
|
124
|
+
done
|
125
|
+
OURCYGPATTERN="(^($ROOTDIRS))"
|
126
|
+
# Add a user-defined pattern to the cygpath arguments
|
127
|
+
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
128
|
+
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
129
|
+
fi
|
130
|
+
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
131
|
+
i=0
|
132
|
+
for arg in "$@" ; do
|
133
|
+
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
134
|
+
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
135
|
+
|
136
|
+
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
137
|
+
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
138
|
+
else
|
139
|
+
eval `echo args$i`="\"$arg\""
|
140
|
+
fi
|
141
|
+
i=$((i+1))
|
142
|
+
done
|
143
|
+
case $i in
|
144
|
+
(0) set -- ;;
|
145
|
+
(1) set -- "$args0" ;;
|
146
|
+
(2) set -- "$args0" "$args1" ;;
|
147
|
+
(3) set -- "$args0" "$args1" "$args2" ;;
|
148
|
+
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
149
|
+
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
150
|
+
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
151
|
+
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
152
|
+
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
153
|
+
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
154
|
+
esac
|
155
|
+
fi
|
156
|
+
|
157
|
+
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
158
|
+
function splitJvmOpts() {
|
159
|
+
JVM_OPTS=("$@")
|
160
|
+
}
|
161
|
+
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
162
|
+
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
163
|
+
|
164
|
+
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
@@ -0,0 +1,90 @@
|
|
1
|
+
@if "%DEBUG%" == "" @echo off
|
2
|
+
@rem ##########################################################################
|
3
|
+
@rem
|
4
|
+
@rem Gradle startup script for Windows
|
5
|
+
@rem
|
6
|
+
@rem ##########################################################################
|
7
|
+
|
8
|
+
@rem Set local scope for the variables with windows NT shell
|
9
|
+
if "%OS%"=="Windows_NT" setlocal
|
10
|
+
|
11
|
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
12
|
+
set DEFAULT_JVM_OPTS=
|
13
|
+
|
14
|
+
set DIRNAME=%~dp0
|
15
|
+
if "%DIRNAME%" == "" set DIRNAME=.
|
16
|
+
set APP_BASE_NAME=%~n0
|
17
|
+
set APP_HOME=%DIRNAME%
|
18
|
+
|
19
|
+
@rem Find java.exe
|
20
|
+
if defined JAVA_HOME goto findJavaFromJavaHome
|
21
|
+
|
22
|
+
set JAVA_EXE=java.exe
|
23
|
+
%JAVA_EXE% -version >NUL 2>&1
|
24
|
+
if "%ERRORLEVEL%" == "0" goto init
|
25
|
+
|
26
|
+
echo.
|
27
|
+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
28
|
+
echo.
|
29
|
+
echo Please set the JAVA_HOME variable in your environment to match the
|
30
|
+
echo location of your Java installation.
|
31
|
+
|
32
|
+
goto fail
|
33
|
+
|
34
|
+
:findJavaFromJavaHome
|
35
|
+
set JAVA_HOME=%JAVA_HOME:"=%
|
36
|
+
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
37
|
+
|
38
|
+
if exist "%JAVA_EXE%" goto init
|
39
|
+
|
40
|
+
echo.
|
41
|
+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
42
|
+
echo.
|
43
|
+
echo Please set the JAVA_HOME variable in your environment to match the
|
44
|
+
echo location of your Java installation.
|
45
|
+
|
46
|
+
goto fail
|
47
|
+
|
48
|
+
:init
|
49
|
+
@rem Get command-line arguments, handling Windowz variants
|
50
|
+
|
51
|
+
if not "%OS%" == "Windows_NT" goto win9xME_args
|
52
|
+
if "%@eval[2+2]" == "4" goto 4NT_args
|
53
|
+
|
54
|
+
:win9xME_args
|
55
|
+
@rem Slurp the command line arguments.
|
56
|
+
set CMD_LINE_ARGS=
|
57
|
+
set _SKIP=2
|
58
|
+
|
59
|
+
:win9xME_args_slurp
|
60
|
+
if "x%~1" == "x" goto execute
|
61
|
+
|
62
|
+
set CMD_LINE_ARGS=%*
|
63
|
+
goto execute
|
64
|
+
|
65
|
+
:4NT_args
|
66
|
+
@rem Get arguments from the 4NT Shell from JP Software
|
67
|
+
set CMD_LINE_ARGS=%$
|
68
|
+
|
69
|
+
:execute
|
70
|
+
@rem Setup the command line
|
71
|
+
|
72
|
+
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
73
|
+
|
74
|
+
@rem Execute Gradle
|
75
|
+
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
76
|
+
|
77
|
+
:end
|
78
|
+
@rem End local scope for the variables with windows NT shell
|
79
|
+
if "%ERRORLEVEL%"=="0" goto mainEnd
|
80
|
+
|
81
|
+
:fail
|
82
|
+
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
83
|
+
rem the _cmd.exe /c_ return code!
|
84
|
+
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
85
|
+
exit /b 1
|
86
|
+
|
87
|
+
:mainEnd
|
88
|
+
if "%OS%"=="Windows_NT" endlocal
|
89
|
+
|
90
|
+
:omega
|
@@ -1,16 +1,31 @@
|
|
1
1
|
//
|
2
2
|
// browser.js - client-side engine
|
3
3
|
//
|
4
|
+
/*global less, window, document, XMLHttpRequest, location */
|
4
5
|
|
5
6
|
var isFileProtocol = /^(file|chrome(-extension)?|resource|qrc|app):/.test(location.protocol);
|
6
7
|
|
7
8
|
less.env = less.env || (location.hostname == '127.0.0.1' ||
|
8
9
|
location.hostname == '0.0.0.0' ||
|
9
10
|
location.hostname == 'localhost' ||
|
10
|
-
location.port
|
11
|
+
(location.port &&
|
12
|
+
location.port.length > 0) ||
|
11
13
|
isFileProtocol ? 'development'
|
12
14
|
: 'production');
|
13
15
|
|
16
|
+
var logLevel = {
|
17
|
+
info: 2,
|
18
|
+
errors: 1,
|
19
|
+
none: 0
|
20
|
+
};
|
21
|
+
|
22
|
+
// The amount of logging in the javascript console.
|
23
|
+
// 2 - Information and errors
|
24
|
+
// 1 - Errors
|
25
|
+
// 0 - None
|
26
|
+
// Defaults to 2
|
27
|
+
less.logLevel = typeof(less.logLevel) != 'undefined' ? less.logLevel : logLevel.info;
|
28
|
+
|
14
29
|
// Load styles asynchronously (default: false)
|
15
30
|
//
|
16
31
|
// This is set to `false` by default, so that the body
|
@@ -26,7 +41,9 @@ less.poll = less.poll || (isFileProtocol ? 1000 : 1500);
|
|
26
41
|
//Setup user functions
|
27
42
|
if (less.functions) {
|
28
43
|
for(var func in less.functions) {
|
29
|
-
less.
|
44
|
+
if (less.functions.hasOwnProperty(func)) {
|
45
|
+
less.tree.functions[func] = less.functions[func];
|
46
|
+
}
|
30
47
|
}
|
31
48
|
}
|
32
49
|
|
@@ -35,162 +52,275 @@ if (dumpLineNumbers) {
|
|
35
52
|
less.dumpLineNumbers = dumpLineNumbers[1];
|
36
53
|
}
|
37
54
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
less.watch = function () {
|
42
|
-
if (!less.watchMode ){
|
43
|
-
less.env = 'development';
|
44
|
-
initRunningMode();
|
45
|
-
}
|
46
|
-
return this.watchMode = true
|
47
|
-
};
|
48
|
-
|
49
|
-
less.unwatch = function () {clearInterval(less.watchTimer); return this.watchMode = false; };
|
55
|
+
var typePattern = /^text\/(x-)?less$/;
|
56
|
+
var cache = null;
|
57
|
+
var fileCache = {};
|
50
58
|
|
51
|
-
function
|
52
|
-
if (less.env
|
53
|
-
less
|
54
|
-
less.watchTimer = setInterval(function () {
|
55
|
-
if (less.watchMode) {
|
56
|
-
loadStyleSheets(function (e, root, _, sheet, env) {
|
57
|
-
if (e) {
|
58
|
-
error(e, sheet.href);
|
59
|
-
} else if (root) {
|
60
|
-
createCSS(root.toCSS(less), sheet, env.lastModified);
|
61
|
-
}
|
62
|
-
});
|
63
|
-
}
|
64
|
-
}, less.poll);
|
65
|
-
} else {
|
66
|
-
less.optimization = 3;
|
59
|
+
function log(str, level) {
|
60
|
+
if (less.env == 'development' && typeof(console) !== 'undefined' && less.logLevel >= level) {
|
61
|
+
console.log('less: ' + str);
|
67
62
|
}
|
68
63
|
}
|
69
64
|
|
70
|
-
|
71
|
-
|
65
|
+
function extractId(href) {
|
66
|
+
return href.replace(/^[a-z-]+:\/+?[^\/]+/, '' ) // Remove protocol & domain
|
67
|
+
.replace(/^\//, '' ) // Remove root /
|
68
|
+
.replace(/\.[a-zA-Z]+$/, '' ) // Remove simple extension
|
69
|
+
.replace(/[^\.\w-]+/g, '-') // Replace illegal characters
|
70
|
+
.replace(/\./g, ':'); // Replace dots with colons(for valid id)
|
72
71
|
}
|
73
72
|
|
74
|
-
|
73
|
+
function errorConsole(e, rootHref) {
|
74
|
+
var template = '{line} {content}';
|
75
|
+
var filename = e.filename || rootHref;
|
76
|
+
var errors = [];
|
77
|
+
var content = (e.type || "Syntax") + "Error: " + (e.message || 'There is an error in your .less file') +
|
78
|
+
" in " + filename + " ";
|
75
79
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
+
var errorline = function (e, i, classname) {
|
81
|
+
if (e.extract[i] !== undefined) {
|
82
|
+
errors.push(template.replace(/\{line\}/, (parseInt(e.line, 10) || 0) + (i - 1))
|
83
|
+
.replace(/\{class\}/, classname)
|
84
|
+
.replace(/\{content\}/, e.extract[i]));
|
85
|
+
}
|
86
|
+
};
|
87
|
+
|
88
|
+
if (e.extract) {
|
89
|
+
errorline(e, 0, '');
|
90
|
+
errorline(e, 1, 'line');
|
91
|
+
errorline(e, 2, '');
|
92
|
+
content += 'on line ' + e.line + ', column ' + (e.column + 1) + ':\n' +
|
93
|
+
errors.join('\n');
|
94
|
+
} else if (e.stack) {
|
95
|
+
content += e.stack;
|
96
|
+
}
|
97
|
+
log(content, logLevel.errors);
|
80
98
|
}
|
81
99
|
|
82
|
-
|
83
|
-
//
|
84
|
-
|
85
|
-
var links = document.getElementsByTagName('link');
|
86
|
-
var typePattern = /^text\/(x-)?less$/;
|
100
|
+
function createCSS(styles, sheet, lastModified) {
|
101
|
+
// Strip the query-string
|
102
|
+
var href = sheet.href || '';
|
87
103
|
|
88
|
-
|
104
|
+
// If there is no title set, use the filename, minus the extension
|
105
|
+
var id = 'less:' + (sheet.title || extractId(href));
|
89
106
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
107
|
+
// If this has already been inserted into the DOM, we may need to replace it
|
108
|
+
var oldCss = document.getElementById(id);
|
109
|
+
var keepOldCss = false;
|
110
|
+
|
111
|
+
// Create a new stylesheet node for insertion or (if necessary) replacement
|
112
|
+
var css = document.createElement('style');
|
113
|
+
css.setAttribute('type', 'text/css');
|
114
|
+
if (sheet.media) {
|
115
|
+
css.setAttribute('media', sheet.media);
|
94
116
|
}
|
95
|
-
|
117
|
+
css.id = id;
|
96
118
|
|
97
|
-
//
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
119
|
+
if (css.styleSheet) { // IE
|
120
|
+
try {
|
121
|
+
css.styleSheet.cssText = styles;
|
122
|
+
} catch (e) {
|
123
|
+
throw new(Error)("Couldn't reassign styleSheet.cssText.");
|
124
|
+
}
|
125
|
+
} else {
|
126
|
+
css.appendChild(document.createTextNode(styles));
|
127
|
+
|
128
|
+
// If new contents match contents of oldCss, don't replace oldCss
|
129
|
+
keepOldCss = (oldCss !== null && oldCss.childNodes.length > 0 && css.childNodes.length > 0 &&
|
130
|
+
oldCss.firstChild.nodeValue === css.firstChild.nodeValue);
|
107
131
|
}
|
108
|
-
|
109
|
-
|
110
|
-
|
132
|
+
|
133
|
+
var head = document.getElementsByTagName('head')[0];
|
134
|
+
|
135
|
+
// If there is no oldCss, just append; otherwise, only append if we need
|
136
|
+
// to replace oldCss with an updated stylesheet
|
137
|
+
if (oldCss === null || keepOldCss === false) {
|
138
|
+
var nextEl = sheet && sheet.nextSibling || null;
|
139
|
+
if (nextEl) {
|
140
|
+
nextEl.parentNode.insertBefore(css, nextEl);
|
111
141
|
} else {
|
112
|
-
|
142
|
+
head.appendChild(css);
|
113
143
|
}
|
114
|
-
}
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
var startTime, endTime;
|
119
|
-
startTime = endTime = new(Date);
|
144
|
+
}
|
145
|
+
if (oldCss && keepOldCss === false) {
|
146
|
+
oldCss.parentNode.removeChild(oldCss);
|
147
|
+
}
|
120
148
|
|
121
|
-
|
122
|
-
|
123
|
-
|
149
|
+
// Don't update the local store if the file wasn't modified
|
150
|
+
if (lastModified && cache) {
|
151
|
+
log('saving ' + href + ' to cache.', logLevel.info);
|
152
|
+
try {
|
153
|
+
cache.setItem(href, styles);
|
154
|
+
cache.setItem(href + ':timestamp', lastModified);
|
155
|
+
} catch(e) {
|
156
|
+
//TODO - could do with adding more robust error handling
|
157
|
+
log('failed to save', logLevel.errors);
|
124
158
|
}
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
function errorHTML(e, rootHref) {
|
163
|
+
var id = 'less-error-message:' + extractId(rootHref || "");
|
164
|
+
var template = '<li><label>{line}</label><pre class="{class}">{content}</pre></li>';
|
165
|
+
var elem = document.createElement('div'), timer, content, errors = [];
|
166
|
+
var filename = e.filename || rootHref;
|
167
|
+
var filenameNoPath = filename.match(/([^\/]+(\?.*)?)$/)[1];
|
168
|
+
|
169
|
+
elem.id = id;
|
170
|
+
elem.className = "less-error-message";
|
171
|
+
|
172
|
+
content = '<h3>' + (e.type || "Syntax") + "Error: " + (e.message || 'There is an error in your .less file') +
|
173
|
+
'</h3>' + '<p>in <a href="' + filename + '">' + filenameNoPath + "</a> ";
|
174
|
+
|
175
|
+
var errorline = function (e, i, classname) {
|
176
|
+
if (e.extract[i] !== undefined) {
|
177
|
+
errors.push(template.replace(/\{line\}/, (parseInt(e.line, 10) || 0) + (i - 1))
|
178
|
+
.replace(/\{class\}/, classname)
|
179
|
+
.replace(/\{content\}/, e.extract[i]));
|
130
180
|
}
|
131
|
-
|
132
|
-
(env.remaining === 0) && log("css generated in " + (new(Date) - startTime) + 'ms');
|
133
|
-
endTime = new(Date);
|
134
|
-
}, reload);
|
181
|
+
};
|
135
182
|
|
136
|
-
|
137
|
-
|
138
|
-
|
183
|
+
if (e.extract) {
|
184
|
+
errorline(e, 0, '');
|
185
|
+
errorline(e, 1, 'line');
|
186
|
+
errorline(e, 2, '');
|
187
|
+
content += 'on line ' + e.line + ', column ' + (e.column + 1) + ':</p>' +
|
188
|
+
'<ul>' + errors.join('') + '</ul>';
|
189
|
+
} else if (e.stack) {
|
190
|
+
content += '<br/>' + e.stack.split('\n').slice(1).join('<br/>');
|
191
|
+
}
|
192
|
+
elem.innerHTML = content;
|
139
193
|
|
140
|
-
|
194
|
+
// CSS for error messages
|
195
|
+
createCSS([
|
196
|
+
'.less-error-message ul, .less-error-message li {',
|
197
|
+
'list-style-type: none;',
|
198
|
+
'margin-right: 15px;',
|
199
|
+
'padding: 4px 0;',
|
200
|
+
'margin: 0;',
|
201
|
+
'}',
|
202
|
+
'.less-error-message label {',
|
203
|
+
'font-size: 12px;',
|
204
|
+
'margin-right: 15px;',
|
205
|
+
'padding: 4px 0;',
|
206
|
+
'color: #cc7777;',
|
207
|
+
'}',
|
208
|
+
'.less-error-message pre {',
|
209
|
+
'color: #dd6666;',
|
210
|
+
'padding: 4px 0;',
|
211
|
+
'margin: 0;',
|
212
|
+
'display: inline-block;',
|
213
|
+
'}',
|
214
|
+
'.less-error-message pre.line {',
|
215
|
+
'color: #ff0000;',
|
216
|
+
'}',
|
217
|
+
'.less-error-message h3 {',
|
218
|
+
'font-size: 20px;',
|
219
|
+
'font-weight: bold;',
|
220
|
+
'padding: 15px 0 5px 0;',
|
221
|
+
'margin: 0;',
|
222
|
+
'}',
|
223
|
+
'.less-error-message a {',
|
224
|
+
'color: #10a',
|
225
|
+
'}',
|
226
|
+
'.less-error-message .error {',
|
227
|
+
'color: red;',
|
228
|
+
'font-weight: bold;',
|
229
|
+
'padding-bottom: 2px;',
|
230
|
+
'border-bottom: 1px dashed red;',
|
231
|
+
'}'
|
232
|
+
].join('\n'), { title: 'error-message' });
|
141
233
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
234
|
+
elem.style.cssText = [
|
235
|
+
"font-family: Arial, sans-serif",
|
236
|
+
"border: 1px solid #e00",
|
237
|
+
"background-color: #eee",
|
238
|
+
"border-radius: 5px",
|
239
|
+
"-webkit-border-radius: 5px",
|
240
|
+
"-moz-border-radius: 5px",
|
241
|
+
"color: #e00",
|
242
|
+
"padding: 15px",
|
243
|
+
"margin-bottom: 15px"
|
244
|
+
].join(';');
|
148
245
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
var style = styles[i];
|
155
|
-
style.type = 'text/css';
|
156
|
-
if (style.styleSheet) {
|
157
|
-
style.styleSheet.cssText = css;
|
246
|
+
if (less.env == 'development') {
|
247
|
+
timer = setInterval(function () {
|
248
|
+
if (document.body) {
|
249
|
+
if (document.getElementById(id)) {
|
250
|
+
document.body.replaceChild(elem, document.getElementById(id));
|
158
251
|
} else {
|
159
|
-
|
252
|
+
document.body.insertBefore(elem, document.body.firstChild);
|
160
253
|
}
|
161
|
-
|
162
|
-
|
254
|
+
clearInterval(timer);
|
255
|
+
}
|
256
|
+
}, 10);
|
163
257
|
}
|
164
258
|
}
|
165
259
|
|
166
|
-
function
|
167
|
-
|
168
|
-
|
260
|
+
function error(e, rootHref) {
|
261
|
+
if (!less.errorReporting || less.errorReporting === "html") {
|
262
|
+
errorHTML(e, rootHref);
|
263
|
+
} else if (less.errorReporting === "console") {
|
264
|
+
errorConsole(e, rootHref);
|
265
|
+
} else if (typeof less.errorReporting === 'function') {
|
266
|
+
less.errorReporting("add", e, rootHref);
|
169
267
|
}
|
170
268
|
}
|
171
269
|
|
172
|
-
function
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
baseUrlParts = extractUrlParts(baseUrl),
|
177
|
-
i, max, urlDirectories, baseUrlDirectories, diff = "";
|
178
|
-
if (urlParts.hostPart !== baseUrlParts.hostPart) {
|
179
|
-
return "";
|
270
|
+
function removeErrorHTML(path) {
|
271
|
+
var node = document.getElementById('less-error-message:' + extractId(path));
|
272
|
+
if (node) {
|
273
|
+
node.parentNode.removeChild(node);
|
180
274
|
}
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
275
|
+
}
|
276
|
+
|
277
|
+
function removeErrorConsole(path) {
|
278
|
+
//no action
|
279
|
+
}
|
280
|
+
|
281
|
+
function removeError(path) {
|
282
|
+
if (!less.errorReporting || less.errorReporting === "html") {
|
283
|
+
removeErrorHTML(path);
|
284
|
+
} else if (less.errorReporting === "console") {
|
285
|
+
removeErrorConsole(path);
|
286
|
+
} else if (typeof less.errorReporting === 'function') {
|
287
|
+
less.errorReporting("remove", path);
|
189
288
|
}
|
190
|
-
|
191
|
-
|
289
|
+
}
|
290
|
+
|
291
|
+
function loadStyles(modifyVars) {
|
292
|
+
var styles = document.getElementsByTagName('style'),
|
293
|
+
style;
|
294
|
+
for (var i = 0; i < styles.length; i++) {
|
295
|
+
style = styles[i];
|
296
|
+
if (style.type.match(typePattern)) {
|
297
|
+
var env = new less.tree.parseEnv(less),
|
298
|
+
lessText = style.innerHTML || '';
|
299
|
+
env.filename = document.location.href.replace(/#.*$/, '');
|
300
|
+
|
301
|
+
if (modifyVars || less.globalVars) {
|
302
|
+
env.useFileCache = true;
|
303
|
+
}
|
304
|
+
|
305
|
+
/*jshint loopfunc:true */
|
306
|
+
// use closure to store current value of i
|
307
|
+
var callback = (function(style) {
|
308
|
+
return function (e, cssAST) {
|
309
|
+
if (e) {
|
310
|
+
return error(e, "inline");
|
311
|
+
}
|
312
|
+
var css = cssAST.toCSS(less);
|
313
|
+
style.type = 'text/css';
|
314
|
+
if (style.styleSheet) {
|
315
|
+
style.styleSheet.cssText = css;
|
316
|
+
} else {
|
317
|
+
style.innerHTML = css;
|
318
|
+
}
|
319
|
+
};
|
320
|
+
})(style);
|
321
|
+
new(less.Parser)(env).parse(lessText, callback, {globalVars: less.globalVars, modifyVars: modifyVars});
|
322
|
+
}
|
192
323
|
}
|
193
|
-
return diff;
|
194
324
|
}
|
195
325
|
|
196
326
|
function extractUrlParts(url, baseUrl) {
|
@@ -208,7 +338,7 @@ function extractUrlParts(url, baseUrl) {
|
|
208
338
|
throw new Error("Could not parse sheet href - '"+url+"'");
|
209
339
|
}
|
210
340
|
|
211
|
-
// Stylesheets in IE don't always return the full path
|
341
|
+
// Stylesheets in IE don't always return the full path
|
212
342
|
if (!urlParts[1] || urlParts[2]) {
|
213
343
|
baseUrlParts = baseUrl.match(urlPartsRegex);
|
214
344
|
if (!baseUrlParts) {
|
@@ -219,7 +349,7 @@ function extractUrlParts(url, baseUrl) {
|
|
219
349
|
urlParts[3] = baseUrlParts[3] + urlParts[3];
|
220
350
|
}
|
221
351
|
}
|
222
|
-
|
352
|
+
|
223
353
|
if (urlParts[3]) {
|
224
354
|
directories = urlParts[3].replace(/\\/g, "/").split("/");
|
225
355
|
|
@@ -247,162 +377,65 @@ function extractUrlParts(url, baseUrl) {
|
|
247
377
|
return returner;
|
248
378
|
}
|
249
379
|
|
250
|
-
function
|
251
|
-
|
252
|
-
// sheet may be set to the stylesheet for the initial load or a collection of properties including
|
253
|
-
// some env variables for imports
|
254
|
-
var hrefParts = extractUrlParts(sheet.href, window.location.href);
|
255
|
-
var href = hrefParts.url;
|
256
|
-
var css = cache && cache.getItem(href);
|
257
|
-
var timestamp = cache && cache.getItem(href + ':timestamp');
|
258
|
-
var styles = { css: css, timestamp: timestamp };
|
259
|
-
var env;
|
260
|
-
var newFileInfo = {
|
261
|
-
relativeUrls: less.relativeUrls,
|
262
|
-
currentDirectory: hrefParts.path,
|
263
|
-
filename: href
|
264
|
-
};
|
380
|
+
function pathDiff(url, baseUrl) {
|
381
|
+
// diff between two paths to create a relative path
|
265
382
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
} else {
|
272
|
-
env = new less.tree.parseEnv(less);
|
273
|
-
env.mime = sheet.type;
|
274
|
-
newFileInfo.entryPath = hrefParts.path;
|
275
|
-
newFileInfo.rootpath = less.rootpath || hrefParts.path;
|
276
|
-
newFileInfo.rootFilename = href;
|
383
|
+
var urlParts = extractUrlParts(url),
|
384
|
+
baseUrlParts = extractUrlParts(baseUrl),
|
385
|
+
i, max, urlDirectories, baseUrlDirectories, diff = "";
|
386
|
+
if (urlParts.hostPart !== baseUrlParts.hostPart) {
|
387
|
+
return "";
|
277
388
|
}
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
// - need an originalRootpath
|
282
|
-
if (less.rootpath) {
|
283
|
-
newFileInfo.rootpath = extractUrlParts(less.rootpath + pathDiff(hrefParts.path, newFileInfo.entryPath)).path;
|
284
|
-
} else {
|
285
|
-
newFileInfo.rootpath = hrefParts.path;
|
286
|
-
}
|
389
|
+
max = Math.max(baseUrlParts.directories.length, urlParts.directories.length);
|
390
|
+
for(i = 0; i < max; i++) {
|
391
|
+
if (baseUrlParts.directories[i] !== urlParts.directories[i]) { break; }
|
287
392
|
}
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
if (!reload && styles && lastModified &&
|
294
|
-
(new(Date)(lastModified).valueOf() ===
|
295
|
-
new(Date)(styles.timestamp).valueOf())) {
|
296
|
-
// Use local copy
|
297
|
-
createCSS(styles.css, sheet);
|
298
|
-
callback(null, null, data, sheet, { local: true, remaining: remaining }, href);
|
299
|
-
} else {
|
300
|
-
// Use remote copy (re-parse)
|
301
|
-
try {
|
302
|
-
env.contents[href] = data; // Updating content cache
|
303
|
-
env.paths = [hrefParts.path];
|
304
|
-
env.currentFileInfo = newFileInfo;
|
305
|
-
|
306
|
-
new(less.Parser)(env).parse(data, function (e, root) {
|
307
|
-
if (e) { return callback(e, null, null, sheet); }
|
308
|
-
try {
|
309
|
-
callback(e, root, data, sheet, { local: false, lastModified: lastModified, remaining: remaining }, href);
|
310
|
-
//TODO - there must be a better way? A generic less-to-css function that can both call error
|
311
|
-
//and removeNode where appropriate
|
312
|
-
//should also add tests
|
313
|
-
if (env.currentFileInfo.rootFilename === href) {
|
314
|
-
removeNode(document.getElementById('less-error-message:' + extractId(href)));
|
315
|
-
}
|
316
|
-
} catch (e) {
|
317
|
-
callback(e, null, null, sheet);
|
318
|
-
}
|
319
|
-
});
|
320
|
-
} catch (e) {
|
321
|
-
callback(e, null, null, sheet);
|
322
|
-
}
|
323
|
-
}
|
324
|
-
}, function (status, url) {
|
325
|
-
callback({ type: 'File', message: "'" + url + "' wasn't found (" + status + ")" }, null, null, sheet);
|
326
|
-
});
|
327
|
-
}
|
328
|
-
|
329
|
-
function extractId(href) {
|
330
|
-
return href.replace(/^[a-z-]+:\/+?[^\/]+/, '' ) // Remove protocol & domain
|
331
|
-
.replace(/^\//, '' ) // Remove root /
|
332
|
-
.replace(/\.[a-zA-Z]+$/, '' ) // Remove simple extension
|
333
|
-
.replace(/[^\.\w-]+/g, '-') // Replace illegal characters
|
334
|
-
.replace(/\./g, ':'); // Replace dots with colons(for valid id)
|
335
|
-
}
|
336
|
-
|
337
|
-
function createCSS(styles, sheet, lastModified) {
|
338
|
-
// Strip the query-string
|
339
|
-
var href = sheet.href || '';
|
340
|
-
|
341
|
-
// If there is no title set, use the filename, minus the extension
|
342
|
-
var id = 'less:' + (sheet.title || extractId(href));
|
343
|
-
|
344
|
-
// If this has already been inserted into the DOM, we may need to replace it
|
345
|
-
var oldCss = document.getElementById(id);
|
346
|
-
var keepOldCss = false;
|
347
|
-
|
348
|
-
// Create a new stylesheet node for insertion or (if necessary) replacement
|
349
|
-
var css = document.createElement('style');
|
350
|
-
css.setAttribute('type', 'text/css');
|
351
|
-
if (sheet.media) {
|
352
|
-
css.setAttribute('media', sheet.media);
|
353
|
-
}
|
354
|
-
css.id = id;
|
355
|
-
|
356
|
-
if (css.styleSheet) { // IE
|
357
|
-
try {
|
358
|
-
css.styleSheet.cssText = styles;
|
359
|
-
} catch (e) {
|
360
|
-
throw new(Error)("Couldn't reassign styleSheet.cssText.");
|
361
|
-
}
|
362
|
-
} else {
|
363
|
-
css.appendChild(document.createTextNode(styles));
|
364
|
-
|
365
|
-
// If new contents match contents of oldCss, don't replace oldCss
|
366
|
-
keepOldCss = (oldCss !== null && oldCss.childNodes.length > 0 && css.childNodes.length > 0 &&
|
367
|
-
oldCss.firstChild.nodeValue === css.firstChild.nodeValue);
|
368
|
-
}
|
369
|
-
|
370
|
-
var head = document.getElementsByTagName('head')[0];
|
371
|
-
|
372
|
-
// If there is no oldCss, just append; otherwise, only append if we need
|
373
|
-
// to replace oldCss with an updated stylesheet
|
374
|
-
if (oldCss == null || keepOldCss === false) {
|
375
|
-
var nextEl = sheet && sheet.nextSibling || null;
|
376
|
-
(nextEl || document.getElementsByTagName('head')[0]).parentNode.insertBefore(css, nextEl);
|
393
|
+
baseUrlDirectories = baseUrlParts.directories.slice(i);
|
394
|
+
urlDirectories = urlParts.directories.slice(i);
|
395
|
+
for(i = 0; i < baseUrlDirectories.length-1; i++) {
|
396
|
+
diff += "../";
|
377
397
|
}
|
378
|
-
|
379
|
-
|
398
|
+
for(i = 0; i < urlDirectories.length-1; i++) {
|
399
|
+
diff += urlDirectories[i] + "/";
|
380
400
|
}
|
401
|
+
return diff;
|
402
|
+
}
|
381
403
|
|
382
|
-
|
383
|
-
if (
|
384
|
-
|
404
|
+
function getXMLHttpRequest() {
|
405
|
+
if (window.XMLHttpRequest) {
|
406
|
+
return new XMLHttpRequest();
|
407
|
+
} else {
|
385
408
|
try {
|
386
|
-
|
387
|
-
|
388
|
-
} catch(e) {
|
389
|
-
|
390
|
-
|
409
|
+
/*global ActiveXObject */
|
410
|
+
return new ActiveXObject("MSXML2.XMLHTTP.3.0");
|
411
|
+
} catch (e) {
|
412
|
+
log("browser doesn't support AJAX.", logLevel.errors);
|
413
|
+
return null;
|
391
414
|
}
|
392
415
|
}
|
393
416
|
}
|
394
417
|
|
395
|
-
function
|
418
|
+
function doXHR(url, type, callback, errback) {
|
396
419
|
var xhr = getXMLHttpRequest();
|
397
420
|
var async = isFileProtocol ? less.fileAsync : less.async;
|
398
421
|
|
399
422
|
if (typeof(xhr.overrideMimeType) === 'function') {
|
400
423
|
xhr.overrideMimeType('text/css');
|
401
424
|
}
|
425
|
+
log("XHR: Getting '" + url + "'", logLevel.info);
|
402
426
|
xhr.open('GET', url, async);
|
403
427
|
xhr.setRequestHeader('Accept', type || 'text/x-less, text/css; q=0.9, */*; q=0.5');
|
404
428
|
xhr.send(null);
|
405
429
|
|
430
|
+
function handleResponse(xhr, callback, errback) {
|
431
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
432
|
+
callback(xhr.responseText,
|
433
|
+
xhr.getResponseHeader("Last-Modified"));
|
434
|
+
} else if (typeof(errback) === 'function') {
|
435
|
+
errback(xhr.status, url);
|
436
|
+
}
|
437
|
+
}
|
438
|
+
|
406
439
|
if (isFileProtocol && !less.fileAsync) {
|
407
440
|
if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 300)) {
|
408
441
|
callback(xhr.responseText);
|
@@ -418,132 +451,214 @@ function xhr(url, type, callback, errback) {
|
|
418
451
|
} else {
|
419
452
|
handleResponse(xhr, callback, errback);
|
420
453
|
}
|
454
|
+
}
|
421
455
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
} else if (typeof(errback) === 'function') {
|
427
|
-
errback(xhr.status, url);
|
428
|
-
}
|
456
|
+
function loadFile(originalHref, currentFileInfo, callback, env, modifyVars) {
|
457
|
+
|
458
|
+
if (currentFileInfo && currentFileInfo.currentDirectory && !/^([a-z-]+:)?\//.test(originalHref)) {
|
459
|
+
originalHref = currentFileInfo.currentDirectory + originalHref;
|
429
460
|
}
|
430
|
-
}
|
431
461
|
|
432
|
-
|
433
|
-
|
434
|
-
|
462
|
+
// sheet may be set to the stylesheet for the initial load or a collection of properties including
|
463
|
+
// some env variables for imports
|
464
|
+
var hrefParts = extractUrlParts(originalHref, window.location.href);
|
465
|
+
var href = hrefParts.url;
|
466
|
+
var newFileInfo = {
|
467
|
+
currentDirectory: hrefParts.path,
|
468
|
+
filename: href
|
469
|
+
};
|
470
|
+
|
471
|
+
if (currentFileInfo) {
|
472
|
+
newFileInfo.entryPath = currentFileInfo.entryPath;
|
473
|
+
newFileInfo.rootpath = currentFileInfo.rootpath;
|
474
|
+
newFileInfo.rootFilename = currentFileInfo.rootFilename;
|
475
|
+
newFileInfo.relativeUrls = currentFileInfo.relativeUrls;
|
435
476
|
} else {
|
477
|
+
newFileInfo.entryPath = hrefParts.path;
|
478
|
+
newFileInfo.rootpath = less.rootpath || hrefParts.path;
|
479
|
+
newFileInfo.rootFilename = href;
|
480
|
+
newFileInfo.relativeUrls = env.relativeUrls;
|
481
|
+
}
|
482
|
+
|
483
|
+
if (newFileInfo.relativeUrls) {
|
484
|
+
if (env.rootpath) {
|
485
|
+
newFileInfo.rootpath = extractUrlParts(env.rootpath + pathDiff(hrefParts.path, newFileInfo.entryPath)).path;
|
486
|
+
} else {
|
487
|
+
newFileInfo.rootpath = hrefParts.path;
|
488
|
+
}
|
489
|
+
}
|
490
|
+
|
491
|
+
if (env.useFileCache && fileCache[href]) {
|
436
492
|
try {
|
437
|
-
|
493
|
+
var lessText = fileCache[href];
|
494
|
+
callback(null, lessText, href, newFileInfo, { lastModified: new Date() });
|
438
495
|
} catch (e) {
|
439
|
-
|
440
|
-
return null;
|
496
|
+
callback(e, null, href);
|
441
497
|
}
|
498
|
+
return;
|
442
499
|
}
|
443
|
-
}
|
444
500
|
|
445
|
-
function
|
446
|
-
|
447
|
-
|
501
|
+
doXHR(href, env.mime, function (data, lastModified) {
|
502
|
+
// per file cache
|
503
|
+
fileCache[href] = data;
|
448
504
|
|
449
|
-
|
450
|
-
|
505
|
+
// Use remote copy (re-parse)
|
506
|
+
try {
|
507
|
+
callback(null, data, href, newFileInfo, { lastModified: lastModified });
|
508
|
+
} catch (e) {
|
509
|
+
callback(e, null, href);
|
510
|
+
}
|
511
|
+
}, function (status, url) {
|
512
|
+
callback({ type: 'File', message: "'" + url + "' wasn't found (" + status + ")" }, null, href);
|
513
|
+
});
|
451
514
|
}
|
452
515
|
|
453
|
-
function
|
454
|
-
var id = 'less-error-message:' + extractId(rootHref || "");
|
455
|
-
var template = '<li><label>{line}</label><pre class="{class}">{content}</pre></li>';
|
456
|
-
var elem = document.createElement('div'), timer, content, error = [];
|
457
|
-
var filename = e.filename || rootHref;
|
458
|
-
var filenameNoPath = filename.match(/([^\/]+(\?.*)?)$/)[1];
|
516
|
+
function loadStyleSheet(sheet, callback, reload, remaining, modifyVars) {
|
459
517
|
|
460
|
-
|
461
|
-
|
518
|
+
var env = new less.tree.parseEnv(less);
|
519
|
+
env.mime = sheet.type;
|
462
520
|
|
463
|
-
|
464
|
-
|
521
|
+
if (modifyVars || less.globalVars) {
|
522
|
+
env.useFileCache = true;
|
523
|
+
}
|
465
524
|
|
466
|
-
|
467
|
-
if (e.extract[i] != undefined) {
|
468
|
-
error.push(template.replace(/\{line\}/, (parseInt(e.line) || 0) + (i - 1))
|
469
|
-
.replace(/\{class\}/, classname)
|
470
|
-
.replace(/\{content\}/, e.extract[i]));
|
471
|
-
}
|
472
|
-
};
|
525
|
+
loadFile(sheet.href, null, function(e, data, path, newFileInfo, webInfo) {
|
473
526
|
|
474
|
-
|
475
|
-
|
476
|
-
errorline(e, 1, 'line');
|
477
|
-
errorline(e, 2, '');
|
478
|
-
content += 'on line ' + e.line + ', column ' + (e.column + 1) + ':</p>' +
|
479
|
-
'<ul>' + error.join('') + '</ul>';
|
480
|
-
} else if (e.stack) {
|
481
|
-
content += '<br/>' + e.stack.split('\n').slice(1).join('<br/>');
|
482
|
-
}
|
483
|
-
elem.innerHTML = content;
|
527
|
+
if (webInfo) {
|
528
|
+
webInfo.remaining = remaining;
|
484
529
|
|
485
|
-
|
486
|
-
|
487
|
-
'.less-error-message ul, .less-error-message li {',
|
488
|
-
'list-style-type: none;',
|
489
|
-
'margin-right: 15px;',
|
490
|
-
'padding: 4px 0;',
|
491
|
-
'margin: 0;',
|
492
|
-
'}',
|
493
|
-
'.less-error-message label {',
|
494
|
-
'font-size: 12px;',
|
495
|
-
'margin-right: 15px;',
|
496
|
-
'padding: 4px 0;',
|
497
|
-
'color: #cc7777;',
|
498
|
-
'}',
|
499
|
-
'.less-error-message pre {',
|
500
|
-
'color: #dd6666;',
|
501
|
-
'padding: 4px 0;',
|
502
|
-
'margin: 0;',
|
503
|
-
'display: inline-block;',
|
504
|
-
'}',
|
505
|
-
'.less-error-message pre.line {',
|
506
|
-
'color: #ff0000;',
|
507
|
-
'}',
|
508
|
-
'.less-error-message h3 {',
|
509
|
-
'font-size: 20px;',
|
510
|
-
'font-weight: bold;',
|
511
|
-
'padding: 15px 0 5px 0;',
|
512
|
-
'margin: 0;',
|
513
|
-
'}',
|
514
|
-
'.less-error-message a {',
|
515
|
-
'color: #10a',
|
516
|
-
'}',
|
517
|
-
'.less-error-message .error {',
|
518
|
-
'color: red;',
|
519
|
-
'font-weight: bold;',
|
520
|
-
'padding-bottom: 2px;',
|
521
|
-
'border-bottom: 1px dashed red;',
|
522
|
-
'}'
|
523
|
-
].join('\n'), { title: 'error-message' });
|
530
|
+
var css = cache && cache.getItem(path),
|
531
|
+
timestamp = cache && cache.getItem(path + ':timestamp');
|
524
532
|
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
].join(';');
|
533
|
+
if (!reload && timestamp && webInfo.lastModified &&
|
534
|
+
(new(Date)(webInfo.lastModified).valueOf() ===
|
535
|
+
new(Date)(timestamp).valueOf())) {
|
536
|
+
// Use local copy
|
537
|
+
createCSS(css, sheet);
|
538
|
+
webInfo.local = true;
|
539
|
+
callback(null, null, data, sheet, webInfo, path);
|
540
|
+
return;
|
541
|
+
}
|
542
|
+
}
|
536
543
|
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
+
//TODO add tests around how this behaves when reloading
|
545
|
+
removeError(path);
|
546
|
+
|
547
|
+
if (data) {
|
548
|
+
env.currentFileInfo = newFileInfo;
|
549
|
+
new(less.Parser)(env).parse(data, function (e, root) {
|
550
|
+
if (e) { return callback(e, null, null, sheet); }
|
551
|
+
try {
|
552
|
+
callback(e, root, data, sheet, webInfo, path);
|
553
|
+
} catch (e) {
|
554
|
+
callback(e, null, null, sheet);
|
544
555
|
}
|
545
|
-
|
556
|
+
}, {modifyVars: modifyVars, globalVars: less.globalVars});
|
557
|
+
} else {
|
558
|
+
callback(e, null, null, sheet, webInfo, path);
|
559
|
+
}
|
560
|
+
}, env, modifyVars);
|
561
|
+
}
|
562
|
+
|
563
|
+
function loadStyleSheets(callback, reload, modifyVars) {
|
564
|
+
for (var i = 0; i < less.sheets.length; i++) {
|
565
|
+
loadStyleSheet(less.sheets[i], callback, reload, less.sheets.length - (i + 1), modifyVars);
|
566
|
+
}
|
567
|
+
}
|
568
|
+
|
569
|
+
function initRunningMode(){
|
570
|
+
if (less.env === 'development') {
|
571
|
+
less.optimization = 0;
|
572
|
+
less.watchTimer = setInterval(function () {
|
573
|
+
if (less.watchMode) {
|
574
|
+
loadStyleSheets(function (e, root, _, sheet, env) {
|
575
|
+
if (e) {
|
576
|
+
error(e, sheet.href);
|
577
|
+
} else if (root) {
|
578
|
+
createCSS(root.toCSS(less), sheet, env.lastModified);
|
579
|
+
}
|
580
|
+
});
|
546
581
|
}
|
547
|
-
},
|
582
|
+
}, less.poll);
|
583
|
+
} else {
|
584
|
+
less.optimization = 3;
|
585
|
+
}
|
586
|
+
}
|
587
|
+
|
588
|
+
|
589
|
+
|
590
|
+
//
|
591
|
+
// Watch mode
|
592
|
+
//
|
593
|
+
less.watch = function () {
|
594
|
+
if (!less.watchMode ){
|
595
|
+
less.env = 'development';
|
596
|
+
initRunningMode();
|
597
|
+
}
|
598
|
+
this.watchMode = true;
|
599
|
+
return true;
|
600
|
+
};
|
601
|
+
|
602
|
+
less.unwatch = function () {clearInterval(less.watchTimer); this.watchMode = false; return false; };
|
603
|
+
|
604
|
+
if (/!watch/.test(location.hash)) {
|
605
|
+
less.watch();
|
606
|
+
}
|
607
|
+
|
608
|
+
if (less.env != 'development') {
|
609
|
+
try {
|
610
|
+
cache = (typeof(window.localStorage) === 'undefined') ? null : window.localStorage;
|
611
|
+
} catch (_) {}
|
612
|
+
}
|
613
|
+
|
614
|
+
//
|
615
|
+
// Get all <link> tags with the 'rel' attribute set to "stylesheet/less"
|
616
|
+
//
|
617
|
+
var links = document.getElementsByTagName('link');
|
618
|
+
|
619
|
+
less.sheets = [];
|
620
|
+
|
621
|
+
for (var i = 0; i < links.length; i++) {
|
622
|
+
if (links[i].rel === 'stylesheet/less' || (links[i].rel.match(/stylesheet/) &&
|
623
|
+
(links[i].type.match(typePattern)))) {
|
624
|
+
less.sheets.push(links[i]);
|
548
625
|
}
|
549
626
|
}
|
627
|
+
|
628
|
+
//
|
629
|
+
// With this function, it's possible to alter variables and re-render
|
630
|
+
// CSS without reloading less-files
|
631
|
+
//
|
632
|
+
less.modifyVars = function(record) {
|
633
|
+
less.refresh(false, record);
|
634
|
+
};
|
635
|
+
|
636
|
+
less.refresh = function (reload, modifyVars) {
|
637
|
+
var startTime, endTime;
|
638
|
+
startTime = endTime = new Date();
|
639
|
+
|
640
|
+
loadStyleSheets(function (e, root, _, sheet, env) {
|
641
|
+
if (e) {
|
642
|
+
return error(e, sheet.href);
|
643
|
+
}
|
644
|
+
if (env.local) {
|
645
|
+
log("loading " + sheet.href + " from cache.", logLevel.info);
|
646
|
+
} else {
|
647
|
+
log("parsed " + sheet.href + " successfully.", logLevel.info);
|
648
|
+
createCSS(root.toCSS(less), sheet, env.lastModified);
|
649
|
+
}
|
650
|
+
log("css for " + sheet.href + " generated in " + (new Date() - endTime) + 'ms', logLevel.info);
|
651
|
+
if (env.remaining === 0) {
|
652
|
+
log("css generated in " + (new Date() - startTime) + 'ms', logLevel.info);
|
653
|
+
}
|
654
|
+
endTime = new Date();
|
655
|
+
}, reload, modifyVars);
|
656
|
+
|
657
|
+
loadStyles(modifyVars);
|
658
|
+
};
|
659
|
+
|
660
|
+
less.refreshStyles = loadStyles;
|
661
|
+
|
662
|
+
less.Parser.fileLoader = loadFile;
|
663
|
+
|
664
|
+
less.refresh(less.env === 'development');
|