Chromium Code Reviews| Index: tools/dom/src/EventStreamProvider.dart |
| diff --git a/tools/dom/src/EventStreamProvider.dart b/tools/dom/src/EventStreamProvider.dart |
| index 55bf8b90ae93e96a1a43d6fd1f35721ea6209177..00fd48f6772875ded7038bc61e9a393398cac7df 100644 |
| --- a/tools/dom/src/EventStreamProvider.dart |
| +++ b/tools/dom/src/EventStreamProvider.dart |
| @@ -52,7 +52,9 @@ class _ElementEventStreamImpl<T extends Event> extends _EventStream<T> |
| super(target, eventType, useCapture); |
| Stream<T> matches(String selector) => |
| - this.where((event) => event.target.matchesWithAncestors(selector)); |
| + new _MatchingStream( |
| + this.where((event) => event.target.matchesWithAncestors(selector)), |
| + selector); |
| } |
| /** |
| @@ -74,7 +76,9 @@ class _ElementListEventStreamImpl<T extends Event> extends Stream<T> |
| } |
| Stream<T> matches(String selector) => |
|
blois
2013/10/09 22:25:44
how about =>
this.where((event) => event.target.ma
Emily Fortuna
2013/10/09 22:39:18
Good point. fixed.
|
| - this.where((event) => event.target.matchesWithAncestors(selector)); |
| + new _MatchingStream( |
| + this.where((event) => event.target.matchesWithAncestors(selector)), |
| + selector); |
| // Delegate all regular Stream behavor to our wrapped Stream. |
| StreamSubscription<T> listen(void onData(T event), |
| @@ -90,6 +94,27 @@ class _ElementListEventStreamImpl<T extends Event> extends Stream<T> |
| } |
| /** |
| + * A stream that keeps track of what CSS selectors it used to collect element |
| + * events for event delegation. |
| + */ |
| +class _MatchingStream<T extends Event> extends Stream<T> { |
| + Stream<T> _stream; |
| + String selector; |
| + |
| + _MatchingStream(Stream this._stream, String this.selector); |
| + |
| + // Delegate all regular Stream behavor to our wrapped Stream. |
| + StreamSubscription<T> listen(void onData(T event), |
| + { void onError(error), |
| + void onDone(), |
| + bool cancelOnError}) => |
| + _stream.listen((e) { e._selector = selector; return onData(e); }, |
| + onError: onError, |
| + onDone: onDone, |
| + cancelOnError: cancelOnError); |
| +} |
| + |
| +/** |
| * A stream of custom events, which enables the user to "fire" (add) their own |
| * custom events to a stream. |
| */ |