|
|
// Generated by CoffeeScript 1.6.2
var BasePlugin, ambi, eachr, extendr, typeChecker, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
extendr = require('extendr');
typeChecker = require('typechecker');
ambi = require('ambi');
eachr = require('eachr');
BasePlugin = (function() { BasePlugin.prototype.docpad = null;
BasePlugin.prototype.name = null;
BasePlugin.prototype.config = {};
BasePlugin.prototype.instanceConfig = {};
BasePlugin.prototype.priority = 500;
function BasePlugin(opts) { this.getConfig = __bind(this.getConfig, this); this.setConfig = __bind(this.setConfig, this); var config, docpad, me;
me = this; docpad = opts.docpad, config = opts.config; this.docpad = docpad; this.config = extendr.deepClone(this.config); this.instanceConfig = extendr.deepClone(this.instanceConfig); this.initialConfig = this.config; this.setConfig(config); if (this.isEnabled() === false) { return this; } this.bindEvents(); this; }
BasePlugin.prototype.setInstanceConfig = function(instanceConfig) { if (instanceConfig) { extendr.safeDeepExtendPlainObjects(this.instanceConfig, instanceConfig); if (this.config) { extendr.safeDeepExtendPlainObjects(this.config, instanceConfig); } } return this; };
BasePlugin.prototype.setConfig = function(instanceConfig) { var configPackages, configsToMerge, docpad, userConfig;
if (instanceConfig == null) { instanceConfig = null; } docpad = this.docpad; userConfig = this.docpad.config.plugins[this.name]; this.config = this.docpad.config.plugins[this.name] = {}; if (instanceConfig) { this.setInstanceConfig(instanceConfig); } configPackages = [this.initialConfig, userConfig, this.instanceConfig]; configsToMerge = [this.config]; docpad.mergeConfigurations(configPackages, configsToMerge); return this; };
BasePlugin.prototype.getConfig = function() { return this.config; };
BasePlugin.prototype.bindEvents = function() { var docpad, events, pluginInstance;
pluginInstance = this; docpad = this.docpad; events = docpad.getEvents(); eachr(events, function(eventName) { var eventHandler;
if (typeChecker.isFunction(pluginInstance[eventName])) { eventHandler = pluginInstance[eventName]; return docpad.on(eventName, function(opts, next) { if (pluginInstance.isEnabled() === false) { return next(); } return ambi(eventHandler.bind(pluginInstance), opts, next); }); } }); return this; };
BasePlugin.prototype.isEnabled = function() { return this.config.enabled !== false; };
return BasePlugin;
})();
module.exports = BasePlugin;
|