JSFiddle - React, Tailwind, and code Playground

by szivak009

JavaScript

/*
 * Specification
 *
 * eventManager object handles and processes the events and subscriptions.
 * The event object contains the events. Each event has several
 * methods subscribed to it.
 * 
 * To subscribe an event, use event.subscribe
 * To unsubscribe an event, use event.unsubscribe.
 * To trigger an event, use event.trigger.
 *
 * Interfaces:
 * Object interface
 * - bind: calls event.subscribe on the given object.
 * - unbind: calls event.unsubscribe on the given object.
 * - events object: contains id's and event names related to the subscribed events.
 * These can be added to an object with the event component.
 */



$(document).ready(function(){

    var eventManager = (function(){
        var id = 0;
        var events = {
            'customEvent' : []
            //    0 : {
            //        fn : function(){},
            //        id : 'someid',
            //        obj : {}
            //    },
            //   
            //    1 : {
            //        fn : function(){},
            //        id : 'someid',
            //        obj : {}
            //    }
            //]        
        };
        
        return {
            
            events : function() {
                return events;
            },
        
            trigger : function(name, args) {
                if(!events[name]) return false;
                
                for(var i=0;i<events[name].length;i++) {
                    var e = events[name][i];
                
                    e.fn.call(e.obj || this, args);
                }
                
                return true;
            },
            
            subscribe : function(name, fn, obj) {
                if(!events[name]) {
                    events[name] = [];
                }
                                
                var eid=(++id).toString();
                events[name].push({
                    id : eid,
                    fn: fn,
                    obj: obj || null
        ...