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