/** * Plugin Manager */ var PluginManager = function(less) { this.less = less; this.visitors = []; this.preProcessors = []; this.postProcessors = []; this.installedPlugins = []; this.fileManagers = []; }; /** * Adds all the plugins in the array * @param {Array} plugins */ PluginManager.prototype.addPlugins = function(plugins) { if (plugins) { for (var i = 0; i < plugins.length; i++) { this.addPlugin(plugins[i]); } } }; /** * * @param plugin */ PluginManager.prototype.addPlugin = function(plugin) { this.installedPlugins.push(plugin); plugin.install(this.less, this); }; /** * Adds a visitor. The visitor object has options on itself to determine * when it should run. * @param visitor */ PluginManager.prototype.addVisitor = function(visitor) { this.visitors.push(visitor); }; /** * Adds a pre processor object * @param {object} preProcessor * @param {number} priority - guidelines 1 = before import, 1000 = import, 2000 = after import */ PluginManager.prototype.addPreProcessor = function(preProcessor, priority) { var indexToInsertAt; for (indexToInsertAt = 0; indexToInsertAt < this.preProcessors.length; indexToInsertAt++) { if (this.preProcessors[indexToInsertAt].priority >= priority) { break; } } this.preProcessors.splice(indexToInsertAt, 0, {preProcessor: preProcessor, priority: priority}); }; /** * Adds a post processor object * @param {object} postProcessor * @param {number} priority - guidelines 1 = before compression, 1000 = compression, 2000 = after compression */ PluginManager.prototype.addPostProcessor = function(postProcessor, priority) { var indexToInsertAt; for (indexToInsertAt = 0; indexToInsertAt < this.postProcessors.length; indexToInsertAt++) { if (this.postProcessors[indexToInsertAt].priority >= priority) { break; } } this.postProcessors.splice(indexToInsertAt, 0, {postProcessor: postProcessor, priority: priority}); }; /** * * @param manager */ PluginManager.prototype.addFileManager = function(manager) { this.fileManagers.push(manager); }; /** * * @returns {Array} * @private */ PluginManager.prototype.getPreProcessors = function() { var preProcessors = []; for (var i = 0; i < this.preProcessors.length; i++) { preProcessors.push(this.preProcessors[i].preProcessor); } return preProcessors; }; /** * * @returns {Array} * @private */ PluginManager.prototype.getPostProcessors = function() { var postProcessors = []; for (var i = 0; i < this.postProcessors.length; i++) { postProcessors.push(this.postProcessors[i].postProcessor); } return postProcessors; }; /** * * @returns {Array} * @private */ PluginManager.prototype.getVisitors = function() { return this.visitors; }; /** * * @returns {Array} * @private */ PluginManager.prototype.getFileManagers = function() { return this.fileManagers; }; module.exports = PluginManager;