JSFiddle - React, Tailwind, and code Playground
by ipeshev
JavaScript
var topics = {};
jQuery.Topic = function( id,options) {
var callbacks, method,
topic = id && topics[ id ];
if ( !topic ) {
callbacks = jQuery.Callbacks(options);
topic = (function(){
subscribed = [];
function checkSubscribed(f){
var l=subscribed.length,i ;
for(i=0; i<l;i++){
if(subscribed[i]===f)
return i;
}
return false;
};
return {
publish: callbacks.fire,
subscribe: function(callBack){
if(options=='onetime'){
var pos = checkSubscribed(callBack);
if(pos === false)
subscribed.push(callBack);
else {
subscribed[pos]= callBack
callbacks.remove(subscribed[pos]);
}
}
if(options == 'last')
callbacks.add(callBack);
return this;
},
unsubscribe: callbacks.remove
}
}());
if ( id ) {
topics[ id ] = topic;
}
}
return topic;
};
//One time binding
var callBack = function(){console.log("here")};
$.Topic('test','onetime').subscribe(callBack);
$.Topic('test','onetime').subscribe(callBack);
//console.log(t);
//t.subscribe(callBack);
//t.subscribe(callBack);
//t.subscribe(callBack);
$.Topic('test').publish("ok");
//Multi time bindingd
var p =$.Topic('test1');
var callBack1 = function(){console.log("there")};
p.subscribe(callBack1);
p.subscribe(callBack1);
p.subscribe(callBack1);
p.subscribe(callBack1);
p.publish("ok");