pinafore/routes/_utils/events.js
Nolan Lawson c309e5842d
slightly improve Svelte 2.0 compatibility (#244)
* slightly improve Svelte 2.0 compatibility

* fixup

* fix lint
2018-04-29 22:13:41 -07:00

72 lines
1.5 KiB
JavaScript

export function imgLoadError (node, callback) {
node.addEventListener('error', callback)
return {
destroy () {
node.removeEventListener('error', callback)
}
}
}
export function imgLoad (node, callback) {
node.addEventListener('load', callback)
return {
destroy () {
node.removeEventListener('load', callback)
}
}
}
export function mouseover (node, callback) {
function onMouseEnter () {
callback(true) // eslint-disable-line
}
function onMouseLeave () {
callback(false) // eslint-disable-line
}
node.addEventListener('mouseenter', onMouseEnter)
node.addEventListener('mouseleave', onMouseLeave)
return {
destroy () {
node.removeEventListener('mouseenter', onMouseEnter)
node.removeEventListener('mouseleave', onMouseLeave)
}
}
}
export function focusWithCapture (node, callback) {
node.addEventListener('focus', callback, true)
return {
destroy () {
node.removeEventListener('focus', callback, true)
}
}
}
export function blurWithCapture (node, callback) {
node.addEventListener('blur', callback, true)
return {
destroy () {
node.removeEventListener('blur', callback, true)
}
}
}
export function selectionChange (node, callback) {
let events = ['keyup', 'click', 'focus', 'blur']
let listener = () => {
callback(node.selectionStart)
}
for (let event of events) {
node.addEventListener(event, listener)
}
return {
destroy () {
for (let event of events) {
node.removeEventListener(event, listener)
}
}
}
}