| 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;
|
| +}();
|
|
|