Pinafore-Web-Client-Frontend/src/routes/_utils/events.js

55 lines
1.2 KiB
JavaScript
Raw Normal View History

import { registerResizeListener, unregisterResizeListener } from './resize.js'
2018-02-09 07:29:29 +01:00
export function mouseover (node, callback) {
function onMouseEnter () {
callback(true) // eslint-disable-line
}
2018-02-09 07:29:29 +01:00
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)
}
}
2018-02-09 07:29:29 +01:00
}
2018-03-25 03:04:54 +02:00
export function selectionChange (node, callback) {
2019-08-03 22:49:37 +02:00
const events = ['keyup', 'click', 'focus', 'blur']
const listener = () => {
2018-03-25 03:04:54 +02:00
callback(node.selectionStart)
}
2019-08-03 22:49:37 +02:00
for (const event of events) {
2018-03-25 03:04:54 +02:00
node.addEventListener(event, listener)
}
return {
destroy () {
2019-08-03 22:49:37 +02:00
for (const event of events) {
2018-03-25 03:04:54 +02:00
node.removeEventListener(event, listener)
}
}
}
}
export function resize (node, callback) {
registerResizeListener(callback)
return {
destroy () {
unregisterResizeListener(callback)
}
}
}
export function documentKeydown (node, callback) {
document.addEventListener('keydown', callback)
return {
destroy () {
document.removeEventListener('keydown', callback)
}
}
}