mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-12-02 23:57:59 +01:00
21 lines
518 B
JavaScript
21 lines
518 B
JavaScript
|
/**
|
||
|
* DOM events
|
||
|
*/
|
||
|
|
||
|
export function fire(el, event, detail) {
|
||
|
el.dispatchEvent(new CustomEvent(event, { detail, bubbles: true, cancelable: true }));
|
||
|
}
|
||
|
|
||
|
export function on(node, event, selector, func) {
|
||
|
delegate(node, event, { [selector]: func });
|
||
|
}
|
||
|
|
||
|
export function delegate(node, event, selectors) {
|
||
|
node.addEventListener(event, e => {
|
||
|
for (const selector in selectors) {
|
||
|
const target = e.target.closest(selector);
|
||
|
if (target && selectors[selector](e, target) === false) break;
|
||
|
}
|
||
|
});
|
||
|
}
|