diff --git a/Gruntfile.js b/Gruntfile.js index d428142d..0b5c200d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -252,20 +252,44 @@ module.exports = function (grunt) { outfile: 'tmp/browser/test-runner-post-processor.html' } }, - postProcessorPLugin: { + postProcessorPlugin: { src: ['test/browser/less/postProcessorPlugin/*.less'], options: { helpers: 'test/browser/runner-postProcessorPlugin-options.js', specs: 'test/browser/runner-postProcessorPlugin.js', outfile: 'tmp/browser/test-runner-post-processor-plugin.html' } - } + }, + preProcessorPlugin: { + src: ['test/browser/less/preProcessorPlugin/*.less'], + options: { + helpers: 'test/browser/runner-preProcessorPlugin-options.js', + specs: 'test/browser/runner-preProcessorPlugin.js', + outfile: 'tmp/browser/test-runner-pre-processor-plugin.html' + } + }, + visitorPlugin: { + src: ['test/browser/less/visitorPlugin/*.less'], + options: { + helpers: 'test/browser/runner-VisitorPlugin-options.js', + specs: 'test/browser/runner-VisitorPlugin.js', + outfile: 'tmp/browser/test-runner-visitor-plugin.html' + } + }, + filemanagerPlugin: { + src: ['test/browser/less/filemanagerPlugin/*.less'], + options: { + helpers: 'test/browser/runner-filemanagerPlugin-options.js', + specs: 'test/browser/runner-filemanagerPlugin.js', + outfile: 'tmp/browser/test-runner-filemanager-plugin.html' + } + } }, 'saucelabs-jasmine': { all: { options: { - urls: ["post-processor-plugin","post-processor", "global-vars", "modify-vars", "production", "rootpath-relative", + urls: ["filemanager-plugin","visitor-plugin","pre-processor-plugin","post-processor-plugin","post-processor", "global-vars", "modify-vars", "production", "rootpath-relative", "rootpath", "relative-urls", "browser", "no-js-errors", "legacy", "strict-units" ].map(function(testName) { return "http://localhost:8081/tmp/browser/test-runner-" + testName + ".html"; diff --git a/dist/less.js b/dist/less.js index 169c71cd..24976442 100644 --- a/dist/less.js +++ b/dist/less.js @@ -446,8 +446,11 @@ module.exports = function(options, logger) { }; FileManager.prototype.loadFile = function loadFile(filename, currentDirectory, options, environment, callback) { + + console.log('loading...' + currentDirectory + filename); + if (currentDirectory && !this.isPathAbsolute(filename)) { - filename = currentDirectory + filename; + filename = ; } options = options || {}; @@ -9846,4 +9849,4 @@ if (typeof Promise === 'undefined') { require('./polyfill-done.js'); },{"./lib/core.js":89,"./lib/es6-extensions.js":90,"./polyfill-done.js":92,"asap":91}]},{},[2])(2) -}); \ No newline at end of file +}); diff --git a/lib/less-browser/index.js b/lib/less-browser/index.js index ffdfd9db..c6dc4502 100644 --- a/lib/less-browser/index.js +++ b/lib/less-browser/index.js @@ -27,7 +27,7 @@ module.exports = function(window, options) { var typePattern = /^text\/(x-)?less$/; - function postProcessCSS(styles) { + function postProcessCSS(styles) { // deprecated, use a plugin for postprocesstasks if (options.postProcessor && typeof options.postProcessor === 'function') { styles = options.postProcessor.call(styles, styles) || styles; } diff --git a/test/browser/css/filemanagerPlugin/filemanager.css b/test/browser/css/filemanagerPlugin/filemanager.css new file mode 100644 index 00000000..6446ebfd --- /dev/null +++ b/test/browser/css/filemanagerPlugin/filemanager.css @@ -0,0 +1,3 @@ +.test { + color: red; +} diff --git a/test/browser/css/preProcessorPlugin/preProcessor.css b/test/browser/css/preProcessorPlugin/preProcessor.css new file mode 100644 index 00000000..6446ebfd --- /dev/null +++ b/test/browser/css/preProcessorPlugin/preProcessor.css @@ -0,0 +1,3 @@ +.test { + color: red; +} diff --git a/test/browser/css/visitorPlugin/visitor.css b/test/browser/css/visitorPlugin/visitor.css new file mode 100644 index 00000000..6446ebfd --- /dev/null +++ b/test/browser/css/visitorPlugin/visitor.css @@ -0,0 +1,3 @@ +.test { + color: red; +} diff --git a/test/browser/less/filemanagerPlugin/colors.test b/test/browser/less/filemanagerPlugin/colors.test new file mode 100644 index 00000000..b605e2f0 --- /dev/null +++ b/test/browser/less/filemanagerPlugin/colors.test @@ -0,0 +1 @@ +//@color: red; diff --git a/test/browser/less/filemanagerPlugin/filemanager.less b/test/browser/less/filemanagerPlugin/filemanager.less new file mode 100644 index 00000000..75896dbd --- /dev/null +++ b/test/browser/less/filemanagerPlugin/filemanager.less @@ -0,0 +1,4 @@ +@import "test.test"; +.test { + color: red; +} diff --git a/test/browser/less/preProcessorPlugin/preProcessor.less b/test/browser/less/preProcessorPlugin/preProcessor.less new file mode 100644 index 00000000..50183ea2 --- /dev/null +++ b/test/browser/less/preProcessorPlugin/preProcessor.less @@ -0,0 +1,3 @@ +.test { + color: @color; +} diff --git a/test/browser/less/visitorPlugin/visitor.less b/test/browser/less/visitorPlugin/visitor.less new file mode 100644 index 00000000..bd2da3e8 --- /dev/null +++ b/test/browser/less/visitorPlugin/visitor.less @@ -0,0 +1,4 @@ +.test { + color: red; + -some-aribitrary-property: value; +} diff --git a/test/browser/runner-VisitorPlugin-options.js b/test/browser/runner-VisitorPlugin-options.js new file mode 100644 index 00000000..4fa04c60 --- /dev/null +++ b/test/browser/runner-VisitorPlugin-options.js @@ -0,0 +1,29 @@ +RemoveProperty = function(less) { + this._visitor = new less.visitors.Visitor(this); +}; + +RemoveProperty.prototype = { + isReplacing: true, + run: function (root) { + return this._visitor.visit(root); + }, + visitRule: function (ruleNode, visitArgs) { + if (ruleNode.name != '-some-aribitrary-property') + { + return ruleNode; + } + else { + return []; + } + } +}; + +var VisitorPlugin = { + install: function(less, pluginManager) { + pluginManager.addVisitor( new RemoveProperty(less)); + } +}; + +var less = {logLevel: 4, + errorReporting: "console", + plugins: [VisitorPlugin]}; diff --git a/test/browser/runner-VisitorPlugin.js b/test/browser/runner-VisitorPlugin.js new file mode 100644 index 00000000..3c4287a2 --- /dev/null +++ b/test/browser/runner-VisitorPlugin.js @@ -0,0 +1,3 @@ +describe("less.js Visitor Plugin", function() { + testLessEqualsInDocument(); +}); diff --git a/test/browser/runner-filemanagerPlugin-options.js b/test/browser/runner-filemanagerPlugin-options.js new file mode 100644 index 00000000..3b9fc52d --- /dev/null +++ b/test/browser/runner-filemanagerPlugin-options.js @@ -0,0 +1,29 @@ +var plugin = function(less) { + + var FileManager = less.FileManager; + + function TestFileManager() { + }; + + TestFileManager = new FileManager(); + + TestFileManager.loadFile = function (filename, currentDirectory, options, environment, callback) { + if (filename.match(/.*\.test$/)) { + return less.environment.fileManagers[0].loadFile("colors.test", currentDirectory, options, environment, callback); + } + return less.environment.fileManagers[0].loadFile(filename, currentDirectory, options, environment, callback); + }; + + return TestFileManager; +}; + +var AddFilePlugin = { + install: function(less, pluginManager) { + less.environment.addFileManager(new plugin(less)); + } +}; + +var less = {logLevel: 4, + errorReporting: "console", + plugins: [AddFilePlugin] + }; diff --git a/test/browser/runner-filemanagerPlugin.js b/test/browser/runner-filemanagerPlugin.js new file mode 100644 index 00000000..1ede4157 --- /dev/null +++ b/test/browser/runner-filemanagerPlugin.js @@ -0,0 +1,3 @@ +describe("less.js filemanager Plugin", function() { + testLessEqualsInDocument(); +}); diff --git a/test/browser/runner-postProcessor.js b/test/browser/runner-postProcessor.js index a104a59b..64937669 100644 --- a/test/browser/runner-postProcessor.js +++ b/test/browser/runner-postProcessor.js @@ -1,3 +1,3 @@ -describe("less.js postProcessor", function() { +describe("less.js postProcessor (deprecated)", function() { testLessEqualsInDocument(); }); diff --git a/test/browser/runner-preProcessorPlugin-options.js b/test/browser/runner-preProcessorPlugin-options.js new file mode 100644 index 00000000..6d0fd433 --- /dev/null +++ b/test/browser/runner-preProcessorPlugin-options.js @@ -0,0 +1,22 @@ +var preProcessor = function() {}; + +preProcessor.prototype = { + process : function (src, extra) { + var injected = '@color: red;\n'; + var ignored = extra.imports.contentsIgnoredChars; + var fileInfo = extra.fileInfo; + ignored[fileInfo.filename] = ignored[fileInfo.filename] || 0; + ignored[fileInfo.filename] += injected.length; + return injected + src; + } +}; + +var preProcessorPlugin = { + install: function(less, pluginManager) { + pluginManager.addPreProcessor( new preProcessor()); + } +}; + +var less = {logLevel: 4, + errorReporting: "console", + plugins: [preProcessorPlugin]}; diff --git a/test/browser/runner-preProcessorPlugin.js b/test/browser/runner-preProcessorPlugin.js new file mode 100644 index 00000000..4382396e --- /dev/null +++ b/test/browser/runner-preProcessorPlugin.js @@ -0,0 +1,3 @@ +describe("less.js preProcessor Plugin", function() { + testLessEqualsInDocument(); +});