Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(222)

Side by Side Diff: pkg/web_components/lib/created_watcher.dart

Issue 319263002: Add "created-watcher" to the web_components package. This was adapted from (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
Jennifer Messerly 2014/06/09 17:28:48 2014?
Siggi Cherem (dart-lang) 2014/06/09 19:29:01 Done.
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 /// Provides notifications whenever a Javascript Custom Elements is created.
6 /// This will not work unless `created_watcher.js` is loaded.
7 library web_components.created_watcher;
8
9 import 'dart:async' show Stream, StreamController;
10 import 'dart:html' show document, Element;
11 import 'dart:js' show JsObject, JsFunction;
12
13 final _doc = new JsObject.fromBrowserObject(document);
14 int _sequenceId = 0;
15
16 /// Returns whether [watch] is supported, which requires to have
17 /// `created_watcher.js` already loaded in the page.
18 bool get isSupported => _doc.hasProperty('registerElementCreatedWatcher');
19
20 /// Watches when Javascript custom elements named [tagName] are created and
21 /// provides a reference to the created element in a broadcast stream.
22 Stream<Element> watch(String tagName, {String extendsTag}) {
Jennifer Messerly 2014/06/09 17:28:48 extendsTag looks unused -- remove?
Siggi Cherem (dart-lang) 2014/06/09 19:29:02 Now that we call the upgrader, we do need it :)
23 if (!isSupported) {
24 throw new UnsupportedError("Couldn't find `registerElementCreatedWatcher`. "
Jennifer Messerly 2014/06/09 17:28:48 document.registerElementCreatedWatcher
Siggi Cherem (dart-lang) 2014/06/09 19:29:02 Done.
25 "Please make sure that `packages/web_components/created_watcher.js` is "
26 "loaded and available before calling this function.");
27 }
28
29 var id = _sequenceId++;
30 var controller = new StreamController<Element>.broadcast(sync: true,
Jennifer Messerly 2014/06/09 17:28:48 eeek, this gives me a bad feeling. It feels like m
Siggi Cherem (dart-lang) 2014/06/09 19:29:01 Done. Given the changes we made, I plan to rename
Jennifer Messerly 2014/06/09 19:33:52 yeah sounds good to me. another idea is interop.da
31 onCancel: () =>
32 _doc.callMethod('unregisterElementCreatedWatcher', [tagName, id]));
33 _doc.callMethod('registerElementCreatedWatcher',
34 [tagName, id, controller.add]);
35 return controller.stream;
36 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698