JavaScript Observer pattern -- es5
define(function() {
var subscribers = {};
function subscribe (type, fn) {
if (! subscribers[type]) {
subscribers[type] = [];
}
if (subscribers[type].indexOf(fn) == -1) {
subscribers[type].push(fn);
}
}
function unsubscribe (type, fn) {
var listeners = subscribers[type];
if (! listeners) return;
var index = listeners.indexOf(fn);
if (index > -1) {
listeners.splice(index, 1);
}
}
function publish (type, e) {
if (! subscribers[type]) return;
if (! e.type) {
e.type = type;
}
var listeners = subscribers[type];
for (var i = 0, length = listeners.length; i < length; i ++) {
console.log(listeners[i]);
listeners[i](e);
}
}
return {
subscribe: subscribe,
unsubscribe: unsubscribe,
publish: publish
};
});