#= require ./dom
{ matches } = Quails
# Polyfill for CustomEvent in IE9+ # developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill CustomEvent = window.CustomEvent
if typeof CustomEvent isnt 'function'
CustomEvent = (event, params) -> evt = document.createEvent('CustomEvent') evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail) evt CustomEvent.prototype = window.Event.prototype
# Triggers a custom event on an element and returns false if the event result is false fire = Quails.fire = (obj, name, data) ->
event = new CustomEvent( name, bubbles: true, cancelable: true, detail: data, ) obj.dispatchEvent(event) !event.defaultPrevented
# Helper function, needed to provide consistent behavior in IE Quails.stopEverything = (e) ->
fire(e.target, 'ujs:everythingStopped') e.preventDefault() e.stopPropagation() e.stopImmediatePropagation()
Quails.delegate = (element, selector, eventType, handler) ->
element.addEventListener eventType, (e) -> target = e.target target = target.parentNode until not (target instanceof Element) or matches(target, selector) if target instanceof Element and handler.call(target, e) == false e.preventDefault() e.stopPropagation()