#Basic Pub / Sub Based off of this gist by learncodeacademy.
The min.js version removes ViewLedger funciton.
#Basic Pub / Sub Based off of this gist by learncodeacademy.
The min.js version removes ViewLedger funciton.
| var emitter = (function() { | |
| "use strict"; | |
| //VARS | |
| var _name = 'Emitter'; | |
| var ledger = {}; // Stores the subscribed callbacks to be triggered on event emit. | |
| //GETTERS | |
| // Return a view of the ledger / mostly for fun | |
| function viewLedger() { | |
| var l = ledger; | |
| return l; | |
| } | |
| // FUNCTIONS | |
| // subscribe to an event | |
| function subscribe(eventName, fn) { | |
| console.debug('%s [ subscribe ] : ( %s )', _name, eventName); | |
| // Creates an empty array on the ledger object if one doesn't exist already | |
| ledger[eventName] = ledger[eventName] || []; | |
| // Add the function to be called when this event is emitted | |
| ledger[eventName].push(fn); | |
| } | |
| // unsubscribe an event | |
| function unsubscribe(eventName, fn) { | |
| console.debug('%s [ unsubscribe ] : ( %s )', _name, eventName); | |
| if (ledger[eventName]) { | |
| for (var i = 0; i < ledger[eventName].length; i++) { | |
| if (ledger[eventName][i] === fn) { | |
| ledger[eventName].splice(i, 1); | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| // Emit event(s) | |
| function emit(eventName, data) { | |
| console.debug('%s [ emit ] : ( %s )', _name, eventName); | |
| if (ledger[eventName]) { | |
| console.debug('\tFound( %s ) %s to emit.', ledger[eventName].length, eventName); | |
| ledger[eventName].forEach(function (fn) { | |
| fn(data); // call the fn of each "subscribed" event | |
| console.debug('\t\t callback ran:', fn.toString().split(' ')[1]); | |
| }); | |
| } | |
| else { | |
| console.debug('\t No Subscribers'); | |
| } | |
| } | |
| //EXPOSE | |
| return { | |
| ViewLedger: viewLedger, | |
| Subscribe: subscribe, | |
| Unsubscribe: unsubscribe, | |
| Emit: emit | |
| }; | |
| })(); |
| var emitter=function(){"use strict";function i(i,n){t[i]=t[i]||[],t[i].push(n)}function n(i,n){if(t[i])for(var r=0;r<t[i].length;r++)if(t[i][r]===n){t[i].splice(r,1);break}}function r(i,n){t[i]&&t[i].forEach(function(i){i(n)})}var t={};return{Subscribe:i,Unsubscribe:n,Emit:r}}(); |