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
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;
|