UNPKG

@cycle/dom

Version:

The standard DOM Driver for Cycle.js, based on Snabbdom

70 lines 2.24 kB
import { Stream } from 'xstream'; export function fromEvent(element, eventName, useCapture, preventDefault, passive) { if (useCapture === void 0) { useCapture = false; } if (preventDefault === void 0) { preventDefault = false; } if (passive === void 0) { passive = false; } var next = null; return Stream.create({ start: function start(listener) { if (preventDefault) { next = function _next(event) { preventDefaultConditional(event, preventDefault); listener.next(event); }; } else { next = function _next(event) { listener.next(event); }; } element.addEventListener(eventName, next, { capture: useCapture, passive: passive, }); }, stop: function stop() { element.removeEventListener(eventName, next, useCapture); next = null; }, }); } function matchObject(matcher, obj) { var keys = Object.keys(matcher); var n = keys.length; for (var i = 0; i < n; i++) { var k = keys[i]; if (typeof matcher[k] === 'object' && typeof obj[k] === 'object') { if (!matchObject(matcher[k], obj[k])) { return false; } } else if (matcher[k] !== obj[k]) { return false; } } return true; } export function preventDefaultConditional(event, preventDefault) { if (preventDefault) { if (typeof preventDefault === 'boolean') { event.preventDefault(); } else if (isPredicate(preventDefault)) { if (preventDefault(event)) { event.preventDefault(); } } else if (typeof preventDefault === 'object') { if (matchObject(preventDefault, event)) { event.preventDefault(); } } else { throw new Error('preventDefault has to be either a boolean, predicate function or object'); } } } function isPredicate(fn) { return typeof fn === 'function'; } //# sourceMappingURL=fromEvent.js.map