Index: pkg/element_created/lib/element_created.dart |
diff --git a/pkg/element_created/lib/element_created.dart b/pkg/element_created/lib/element_created.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..eb384705e734b9394b19c61cd55d486d2cc4b5f3 |
--- /dev/null |
+++ b/pkg/element_created/lib/element_created.dart |
@@ -0,0 +1,41 @@ |
+library element_created; |
+ |
+import 'dart:js' as js; |
+import 'dart:async'; |
+import 'dart:html' as dom; |
+ |
+Stream<dom.Element> watch(String tagName, {String extendsTag}) { |
+ var controller = new StreamController<dom.Element>(sync:true); |
+ var params = { |
+ 'createdCallback': new js.JsFunction.withThis((self) { |
+ controller.add(self); |
+ }), |
+ }; |
+ if (extendsTag != null) { |
+ params['extends'] = extendsTag; |
+ } |
+ new js.JsObject.fromBrowserObject(dom.document) |
+ .callMethod('registerElementCreatedWatcher', [ |
+ tagName, new js.JsObject.jsify(params)]); |
+ |
+ return controller.stream; |
+} |
+ |
+bool get supported { |
+ if (js.context == null) return true; |
+ |
+ return new js.JsObject.fromBrowserObject(dom.document) |
+ .hasProperty('registerElementCreatedWatcher'); |
+} |
+ |
+Future ready = () { |
+ if (supported) { |
+ return new Future.value(true); |
+ } |
+ var script = new dom.ScriptElement() |
+ ..src = '/packages/element_created/element_created.js'; |
+ |
+ var future = script.onLoad.first; |
+ dom.document.head.append(script); |
+ return future; |
+}(); |