UNPKG

2.24 kBJavaScriptView Raw
1import { Stream } from 'xstream';
2export function fromEvent(element, eventName, useCapture, preventDefault, passive) {
3 if (useCapture === void 0) { useCapture = false; }
4 if (preventDefault === void 0) { preventDefault = false; }
5 if (passive === void 0) { passive = false; }
6 var next = null;
7 return Stream.create({
8 start: function start(listener) {
9 if (preventDefault) {
10 next = function _next(event) {
11 preventDefaultConditional(event, preventDefault);
12 listener.next(event);
13 };
14 }
15 else {
16 next = function _next(event) {
17 listener.next(event);
18 };
19 }
20 element.addEventListener(eventName, next, {
21 capture: useCapture,
22 passive: passive,
23 });
24 },
25 stop: function stop() {
26 element.removeEventListener(eventName, next, useCapture);
27 next = null;
28 },
29 });
30}
31function matchObject(matcher, obj) {
32 var keys = Object.keys(matcher);
33 var n = keys.length;
34 for (var i = 0; i < n; i++) {
35 var k = keys[i];
36 if (typeof matcher[k] === 'object' && typeof obj[k] === 'object') {
37 if (!matchObject(matcher[k], obj[k])) {
38 return false;
39 }
40 }
41 else if (matcher[k] !== obj[k]) {
42 return false;
43 }
44 }
45 return true;
46}
47export function preventDefaultConditional(event, preventDefault) {
48 if (preventDefault) {
49 if (typeof preventDefault === 'boolean') {
50 event.preventDefault();
51 }
52 else if (isPredicate(preventDefault)) {
53 if (preventDefault(event)) {
54 event.preventDefault();
55 }
56 }
57 else if (typeof preventDefault === 'object') {
58 if (matchObject(preventDefault, event)) {
59 event.preventDefault();
60 }
61 }
62 else {
63 throw new Error('preventDefault has to be either a boolean, predicate function or object');
64 }
65 }
66}
67function isPredicate(fn) {
68 return typeof fn === 'function';
69}
70//# sourceMappingURL=fromEvent.js.map
\No newline at end of file