JSFiddle - React, Tailwind, and code Playground

by Derek Anderson

JavaScript

var yobidashi = (function(){
    var _ = {
    pub: function (eventname) {
        //emit event
        var uniqueName = 'yobidashi.' + eventname;
        var CustomEvent = function ( event, params ) {
            params = params || { bubbles: false, cancelable: false, detail: undefined };
            var evt = document.createEvent( 'CustomEvent' );
            evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
            return evt;
        };
        
        if (window.CustomEvent) {
            var event = new CustomEvent(uniqueName, {
                'detail': ''
            });
            var elem = document.getElementsByTagName('body')[0];
            elem.dispatchEvent(event);
        } else {
            if (document.attachEvent) {
                document.documentElement[uniqueName] += 1;
            }
        }
    },
    sub: function (eventname, callback) {
        // bind a callback to an event emitter
        if (document.createEvent) {
            var obj = document.getElementsByTagName('body')[0];
            obj.addEventListener('yobidashi.' + eventname, callback);
        } else if (document.createEventObject) {
            document.documentElement.attachEvent('onpropertychange', callback);
        }
    },
        unsub: function (eventname, callback) {
            if (document.createEvent) {
                var obj = document.getElementsByTagName('body')[0];
                obj.removeEventListener('yobidashi.' + eventname, callback);
            } else if (document.createEventObject) {
                document.documentElement.detachEvent('onpropertychange', callback);
            }
        }
};

    return _;


}())


var cb = function(){
    alert('cb1 event happened');
}

var cb2 = function(){
    alert('cb2 event happened');
}

yobidashi.sub('/channel/poop', cb);

yobidashi.sub('/channel/poop', cb2);

//cb1 shouldn't happen
yobidashi.unsub('/channel/poop', cb);

yobidashi.pub('/channel/poop');