diff --git a/lib/amd/build/pubsub.min.js b/lib/amd/build/pubsub.min.js new file mode 100644 index 00000000000..871bb59c16d --- /dev/null +++ b/lib/amd/build/pubsub.min.js @@ -0,0 +1 @@ +define([],function(){var a={},b=function(b,c){a[b]=a[b]||[],a[b].push(c)},c=function(b,c){if(a[b])for(var d=0;d. + +/** + * A simple Javascript PubSub implementation. + * + * @module core/pubsub + * @copyright 2018 Ryan Wyllie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +define([], function() { + + var events = {}; + + /** + * Subscribe to an event. + * + * @param {string} eventName The name of the event to subscribe to. + * @param {function} callback The callback function to run when eventName occurs. + */ + var subscribe = function(eventName, callback) { + events[eventName] = events[eventName] || []; + events[eventName].push(callback); + }; + + /** + * Unsubscribe from an event. + * + * @param {string} eventName The name of the event to unsubscribe from. + * @param {function} callback The callback to unsubscribe. + */ + var unsubscribe = function(eventName, callback) { + if (events[eventName]) { + for (var i = 0; i < events[eventName].length; i++) { + if (events[eventName][i] === callback) { + events[eventName].splice(i, 1); + break; + } + } + } + }; + + /** + * Publish an event to all subscribers. + * + * @param {string} eventName The name of the event to publish. + * @param {any} data The data to provide to the subscribed callbacks. + */ + var publish = function(eventName, data) { + if (events[eventName]) { + events[eventName].forEach(function(callback) { + callback(data); + }); + } + }; + + return { + subscribe: subscribe, + unsubscribe: unsubscribe, + publish: publish + }; +});