You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

136 lines
3.8 KiB

// Generated by CoffeeScript 1.6.3
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.bindListeners();
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.addListeners();
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);
if (!this.isEnabled()) {
this.removeListeners();
}
return this;
};
BasePlugin.prototype.getConfig = function() {
return this.config;
};
BasePlugin.prototype.bindEvents = function() {
return this.addListeners();
};
BasePlugin.prototype.bindListeners = function() {
var docpad, events, pluginInstance;
pluginInstance = this;
docpad = this.docpad;
events = docpad.getEvents();
eachr(events, function(eventName) {
var eventHandler;
eventHandler = pluginInstance[eventName];
if (typeChecker.isFunction(eventHandler)) {
return pluginInstance[eventName] = eventHandler.bind(pluginInstance);
}
});
return this;
};
BasePlugin.prototype.addListeners = function() {
var docpad, events, pluginInstance;
pluginInstance = this;
docpad = this.docpad;
events = docpad.getEvents();
eachr(events, function(eventName) {
var eventHandler, eventHandlerPriority;
eventHandler = pluginInstance[eventName];
if (typeChecker.isFunction(eventHandler)) {
eventHandlerPriority = pluginInstance[eventName + 'Priority'] || pluginInstance.priority || null;
eventHandler.priority = eventHandlerPriority;
return docpad.off(eventName, eventHandler).on(eventName, eventHandler);
}
});
return this;
};
BasePlugin.prototype.removeListeners = function() {
var docpad, events, pluginInstance;
pluginInstance = this;
docpad = this.docpad;
events = docpad.getEvents();
eachr(events, function(eventName) {
var eventHandler;
eventHandler = pluginInstance[eventName];
if (typeChecker.isFunction(eventHandler)) {
return docpad.off(eventName, eventHandler);
}
});
return this;
};
BasePlugin.prototype.isEnabled = function() {
return this.config.enabled !== false;
};
return BasePlugin;
})();
module.exports = BasePlugin;