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.
63 lines
1.6 KiB
63 lines
1.6 KiB
|
10 years ago
|
/**
|
||
|
|
* Simple Event Bus
|
||
|
|
*
|
||
|
|
* Allows to easily hook into various page rendering / markdown parsing stages with custom modules
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* High Level API:
|
||
|
|
*
|
||
|
|
* // Subscribe
|
||
|
|
* events.subscribe(eventName:String, eventHandler:Function)
|
||
|
|
*
|
||
|
|
* // Publish
|
||
|
|
* events.publish(eventName:String, optionalArgument1, optionalArgument2, ..., optionalArgumentN);
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* Sample Usage:
|
||
|
|
*
|
||
|
|
* event.subscribe('markdown:parsed', function () {
|
||
|
|
* console.log('Markdown Parsed');
|
||
|
|
* });
|
||
|
|
*
|
||
|
|
* event.subscribe('markdown:parsed', function (title) {
|
||
|
|
* console.log('Markdown Parsed For Document: ' + title);
|
||
|
|
* });
|
||
|
|
*
|
||
|
|
* events.publish('markdown:parsed', 'SampleDocument.md');
|
||
|
|
* // Markdown Parsed
|
||
|
|
* // Markdown Parsed For Document: SampleDocument.md
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
(function (global) {
|
||
|
|
|
||
|
|
var eventBus = {
|
||
|
|
subscribers: [],
|
||
|
|
};
|
||
|
|
|
||
|
|
global.events = global.events || {
|
||
|
|
|
||
|
|
subscribe: function (eventName, eventHandler) {
|
||
|
|
// Initialize an array of event listeners if doesn't exist already
|
||
|
|
eventBus.subscribers[eventName] = eventBus.subscribers[eventName] || [];
|
||
|
|
|
||
|
|
eventBus.subscribers[eventName].push(eventHandler);
|
||
|
|
},
|
||
|
|
|
||
|
|
publish: function (eventName /*, arg1, arg2, ..., argN */) {
|
||
|
|
var eventArguments = [].slice.call(arguments, 1);
|
||
|
|
|
||
|
|
if (eventArguments.length) {
|
||
|
|
console.log('[Hooks] "%s" with args %O', eventName, eventArguments);
|
||
|
|
} else {
|
||
|
|
console.log('[Hooks] "%s"', eventName);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Call event handlers with given attributes
|
||
|
|
(eventBus.subscribers[eventName] || []).forEach(function (eventHandler) {
|
||
|
|
eventHandler.apply(null, eventArguments);
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
};
|
||
|
|
}(window));
|