| 1 | import {Stream, Producer, Listener} from 'xstream'; |
| 2 | |
| 3 | export function fromEvent(element: Element | Document, |
| 4 | eventName: string, |
| 5 | useCapture = false): Stream<Event> { |
| 6 | return Stream.create<Event>({ |
| 7 | element: element, |
| 8 | next: null, |
| 9 | start: function start(listener: Listener<Event>) { |
| 10 | this.next = function next(event: Event) { listener.next(event); }; |
| 11 | this.element.addEventListener(eventName, this.next, useCapture); |
| 12 | }, |
| 13 | stop: function stop() { |
| 14 | this.element.removeEventListener(eventName, this.next, useCapture); |
| 15 | }, |
| 16 | } as Producer<Event>); |
| 17 | } |