setDomListeners = (task, target, listeners, isCapt) => {

  isCapt = (typeof isCapt === 'boolean' ? isCapt : false);
  task = task + 'EventListener';

  for (let event in listeners) {

    const l = listeners[event];

    if (typeof l === 'function') {

      target[task](event, l, isCapt);
    } else { // expect Array

      target[task](event, l[0], (typeof l[1] === 'boolean' ? l[1] : isCapt));
    }

  }

}
Adds or removes listeners from the target in capture or
non-capture (bubbling) mode.

@param {string} task - Either "add" or "remove". Make sure to
    always call add and remove with *excatly* the same listeners
    Note: if you use bind, you change the function object.
@param {Element} target - The element to attach or remove the
    listener to or from.
@param {Object<string, (Function|Array)>} listeners - The key is
    the event name and the value is either a handler function
    or an array where the first index is the handler function and
    the second is a boolean that specifies whether to use capture
    or not.
@param {boolean} [isCapt=false] - Whether to run the handler in
    bubbling or capturing phase.