41 lines
896 B
JavaScript
41 lines
896 B
JavaScript
app.pubsub = (function(){
|
|
app.topics = {};
|
|
|
|
app.subscribe = function(topic, listener) {
|
|
if(topic instanceof RegExp){
|
|
listener.match = topic;
|
|
topic = "__REGEX__";
|
|
}
|
|
|
|
// create the topic if not yet created
|
|
if(!app.topics[topic]) app.topics[topic] = [];
|
|
|
|
// add the listener
|
|
app.topics[topic].push(listener);
|
|
}
|
|
|
|
app.matchTopics = function(topic){
|
|
topic = topic || '';
|
|
var matches = [... app.topics[topic] ? app.topics[topic] : []];
|
|
|
|
if(!app.topics['__REGEX__']) return matches;
|
|
|
|
for(var listener of app.topics['__REGEX__']){
|
|
if(topic.match(listener.match)) matches.push(listener);
|
|
}
|
|
|
|
return matches;
|
|
}
|
|
|
|
app.publish = function(topic, data) {
|
|
|
|
// send the event to all listeners
|
|
app.matchTopics(topic).forEach(function(listener) {
|
|
setTimeout(function(data, topic){
|
|
listener(data || {}, topic);
|
|
}, 0, data, topic);
|
|
});
|
|
}
|
|
|
|
return this;
|
|
})(app); |