all files / dom/ DelegatedEvent.js

6.25% Statements 1/16
0% Branches 0/4
0% Functions 0/3
6.25% Lines 1/16
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39                                                                           
import DefaultDOMElement from './DOMElement'
 
/*
  A wrapper for native DOM events when using event delegation via
  `DOMElement.on(eventName, selector, handler)`.
 
  @param [Component] owner
  @param [Element] selectedTarget native DOM element
  @param [Event] originalEvent native DOM event
*/
class DelegatedEvent {
  constructor(owner, selectedTarget, originalEvent) {
    this.owner = owner
    this.target = selectedTarget
    this.originalEvent = originalEvent
  }
}
 
DelegatedEvent.delegatedHandler = function(listener, top) {
  let handler = listener.handler
  let context = listener.context
  let selector = listener.options.selector
  return function(event) {
    let el = DefaultDOMElement.wrap(event.target)
    while(el) {
      if (el.is(selector)) {
        handler(new DelegatedEvent(context, event.target, event))
        break
      }
      if (el === top) {
        break
      }
      el = el.parentNode;
    }
  }
}
 
export default DelegatedEvent