| Index: tools/dom/src/EventStreamProvider.dart
|
| diff --git a/tools/dom/src/EventStreamProvider.dart b/tools/dom/src/EventStreamProvider.dart
|
| index eef7ebdfda582cf88fe96a68d64e4605569e366d..58c6cde49c462eaff4c6e95eb840813e48c0edc9 100644
|
| --- a/tools/dom/src/EventStreamProvider.dart
|
| +++ b/tools/dom/src/EventStreamProvider.dart
|
| @@ -40,6 +40,8 @@ abstract class ElementStream<T extends Event> implements Stream<T> {
|
| * [delegate](http://api.jquery.com/delegate/).
|
| */
|
| Stream<T> matches(String selector);
|
| +
|
| + StreamSubscription<T> capture(void onData(T event));
|
| }
|
|
|
| /**
|
| @@ -56,6 +58,10 @@ class _ElementEventStreamImpl<T extends Event> extends _EventStream<T>
|
| e._selector = selector;
|
| return e;
|
| });
|
| +
|
| + StreamSubscription<T> capture(void onData(T event)) =>
|
| + new _EventStreamSubscription<T>(
|
| + this._target, this._eventType, onData, true);
|
| }
|
|
|
| /**
|
| @@ -64,17 +70,12 @@ class _ElementEventStreamImpl<T extends Event> extends _EventStream<T>
|
| */
|
| class _ElementListEventStreamImpl<T extends Event> extends Stream<T>
|
| implements ElementStream<T> {
|
| - final _StreamPool _pool;
|
| - Stream<T> _stream;
|
| -
|
| - _ElementListEventStreamImpl(targetList, eventType, useCapture) :
|
| - _pool = new _StreamPool.broadcast() {
|
| - for (Element target in targetList) {
|
| - var stream = new _EventStream(target, eventType, useCapture);
|
| - _pool.add(stream);
|
| - }
|
| - _stream = _pool.stream;
|
| - }
|
| + final Iterable<Element> _targetList;
|
| + final bool _useCapture;
|
| + final String _eventType;
|
| +
|
| + _ElementListEventStreamImpl(
|
| + this._targetList, this._eventType, this._useCapture);
|
|
|
| Stream<T> matches(String selector) => this.where(
|
| (event) => event.target.matchesWithAncestors(selector)).map((e) {
|
| @@ -82,16 +83,30 @@ class _ElementListEventStreamImpl<T extends Event> extends Stream<T>
|
| return e;
|
| });
|
|
|
| - // Delegate all regular Stream behavor to our wrapped Stream.
|
| + // Delegate all regular Stream behavior to a wrapped Stream.
|
| StreamSubscription<T> listen(void onData(T event),
|
| { Function onError,
|
| void onDone(),
|
| - bool cancelOnError}) =>
|
| - _stream.listen(onData, onError: onError, onDone: onDone,
|
| + bool cancelOnError}) {
|
| + var pool = new _StreamPool.broadcast();
|
| + for (var target in _targetList) {
|
| + pool.add(new _EventStream(target, _eventType, _useCapture));
|
| + }
|
| + return pool.stream.listen(onData, onError: onError, onDone: onDone,
|
| cancelOnError: cancelOnError);
|
| + }
|
| +
|
| + StreamSubscription<T> capture(void onData(T event)) {
|
| + var pool = new _StreamPool.broadcast();
|
| + for (var target in _targetList) {
|
| + pool.add(new _EventStream(target, _eventType, true));
|
| + }
|
| + return pool.stream.listen(onData);
|
| + }
|
| +
|
| Stream<T> asBroadcastStream({void onListen(StreamSubscription subscription),
|
| void onCancel(StreamSubscription subscription)})
|
| - => _stream;
|
| + => this;
|
| bool get isBroadcast => true;
|
| }
|
|
|
|
|