UNPKG

@cycle/dom

Version:

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

74 lines 2.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var xstream_1 = require("xstream"); 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 xstream_1.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; }, }); } exports.fromEvent = fromEvent; 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; } 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'); } } } exports.preventDefaultConditional = preventDefaultConditional; function isPredicate(fn) { return typeof fn === 'function'; } //# sourceMappingURL=fromEvent.js.map