|
@@ -9,8 +9,12 @@ export function registerListener(component, el, event, modifiers, expression, ex
|
|
|
event = camelCase(event);
|
|
|
}
|
|
|
|
|
|
+ let handler, listenerTarget
|
|
|
+
|
|
|
if (modifiers.includes('away')) {
|
|
|
- let handler = e => {
|
|
|
+ listenerTarget = document
|
|
|
+
|
|
|
+ handler = e => {
|
|
|
// Don't do anything if the click came from the element or within it.
|
|
|
if (el.contains(e.target)) return
|
|
|
|
|
@@ -25,14 +29,11 @@ export function registerListener(component, el, event, modifiers, expression, ex
|
|
|
document.removeEventListener(event, handler, options)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // Listen for this event at the root level.
|
|
|
- document.addEventListener(event, handler, options)
|
|
|
} else {
|
|
|
- let listenerTarget = modifiers.includes('window')
|
|
|
+ listenerTarget = modifiers.includes('window')
|
|
|
? window : (modifiers.includes('document') ? document : el)
|
|
|
|
|
|
- let handler = e => {
|
|
|
+ handler = e => {
|
|
|
// Remove this global event handler if the element that declared it
|
|
|
// has been removed. It's now stale.
|
|
|
if (listenerTarget === window || listenerTarget === document) {
|
|
@@ -68,15 +69,15 @@ export function registerListener(component, el, event, modifiers, expression, ex
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- if (modifiers.includes('debounce')) {
|
|
|
- let nextModifier = modifiers[modifiers.indexOf('debounce')+1] || 'invalid-wait'
|
|
|
- let wait = isNumeric(nextModifier.split('ms')[0]) ? Number(nextModifier.split('ms')[0]) : 250
|
|
|
- handler = debounce(handler, wait, this)
|
|
|
- }
|
|
|
-
|
|
|
- listenerTarget.addEventListener(event, handler, options)
|
|
|
+ if (modifiers.includes('debounce')) {
|
|
|
+ let nextModifier = modifiers[modifiers.indexOf('debounce')+1] || 'invalid-wait'
|
|
|
+ let wait = isNumeric(nextModifier.split('ms')[0]) ? Number(nextModifier.split('ms')[0]) : 250
|
|
|
+ handler = debounce(handler, wait, this)
|
|
|
}
|
|
|
+
|
|
|
+ listenerTarget.addEventListener(event, handler, options)
|
|
|
}
|
|
|
|
|
|
function runListenerHandler(component, expression, e, extraVars) {
|