UNPKG

webgme-engine

Version:

WebGME server and Client API without a GUI

111 lines (94 loc) 3.43 kB
/*globals define*/ /*eslint-env node, browser*/ /** * @author rkereskenyi / https://github.com/rkereskenyi */ define([], function () { 'use strict'; var EventDispatcher = function () { this._eventList = {}; }; EventDispatcher.prototype = { _eventList: null, _getEvent: function (eventName, create) { // Check if Array of Event Handlers has been created if (!this._eventList[eventName]) { // Check if the calling method wants to create the Array // if not created. This reduces unneeded memory usage. if (!create) { return null; } // Create the Array of Event Handlers this._eventList[eventName] = []; // new Array } // return the Array of Event Handlers already added return this._eventList[eventName]; }, addEventListener: function (eventName, handler) { // Get the Array of Event Handlers var evt = this._getEvent(eventName, true); // Add the new Event Handler to the Array evt.push(handler); }, removeEventListener: function (eventName, handler) { // Get the Array of Event Handlers var evt = this._getEvent(eventName); if (!evt) { return; } // Helper Method - an Array.indexOf equivalent var getArrayIndex = function (array, item) { for (var i = 0; i < array.length; i++) { if (array[i] === item) { return i; } } return -1; }; // Get the Array index of the Event Handler var index = getArrayIndex(evt, handler); if (index > -1) { // Remove Event Handler from Array evt.splice(index, 1); } }, removeAllEventListeners: function (eventName) { // Get the Array of Event Handlers var evt = this._getEvent(eventName); if (!evt) { return; } evt.splice(0, evt.length); }, dispatchEvent: function (eventName, eventArgs) { // Get a function that will call all the Event Handlers internally var handler = this._getEventHandler(eventName); if (handler) { // call the handler function // Pass in "sender" and "eventArgs" parameters handler(this, eventArgs); } }, clearAllEvents: function () { this._eventList = {}; }, _getEventHandler: function (eventName) { // Get Event Handler Array for this Event var evt = this._getEvent(eventName, false); if (!evt || evt.length === 0) { return null; } // Create the Handler method that will use currying to // call all the Events Handlers internally var h = function (sender, args) { for (var i = 0; i < evt.length; i++) { evt[i](sender, args); } }; // Return this new Handler method return h; } }; return EventDispatcher; });