eventListener.js

/**
 * @module eventListener
**/
'use strict';

const {assign} = Object;
const {isArray} = Array;

module.exports = function(obj) {
    let listeners = {};
    let self = assign(obj || new Function(), {
        addEventListener,
        removeEventListener,
        triggerEvent
    });
    function addEventListener(eventName, cb) {
        eventName = `on${eventName}`;
        if (typeof cb !== 'function') {return;}
        if (!listeners[eventName]) {listeners[eventName] = [];}
        if (listeners[eventName].indexOf(cb) > -1) {return;}
        listeners[eventName].push(cb);
    }
    function removeEventListener(eventName, cb) {
        eventName = `on${eventName}`;
        let _listeners = listeners[eventName];
        if (isArray(_listeners)) {
            _listeners.splice(_listeners.indexOf(cb), 1);
        }
    }
    function triggerEvent(eventName, event) {
        eventName = `on${eventName}`;
        let _listeners = listeners[eventName];
        if (isArray(_listeners)) {
            _listeners.forEach(listener => listener(event));
        }
    }
    return self;
};