/** * @class Radio * @description Wrapper for event listening, removing, & dispatching. Currently only supports broadcasting Custom and Mouse events * @author Chris Peters */ export default class Radio { /** * @method Radio.tuneIn * @param {Any} target * @param {String} event * @param {Function} callback */ static tuneIn(target, event, callback) { target.addEventListener(event, callback, false); } /** * @method Radio.tuneOut * @param {Any} target * @param {String} event * @param {Function} callback */ static tuneOut(target, event, callback) { target.removeEventListener(event, callback, false); } /** * * @method Radio.broadcast * @param {Any} target * @param {String} event * @param {Object} data */ static broadcast(target, event, data) { let evt; switch(event) { case 'click': case 'dblclick': case 'mousedown': case 'mouseup': case 'mousemove': evt = new MouseEvent(event, { 'view': window, 'bubbles': true, 'cancelable': false }); break; default: evt = new CustomEvent(event, { detail: data }); break; } target.dispatchEvent(evt); } }