| Index: pkg/custom_element/lib/custom_element.dart
|
| diff --git a/pkg/custom_element/lib/custom_element.dart b/pkg/custom_element/lib/custom_element.dart
|
| index b4225eee9eb7d3e2c22571eaaecb279e712e39e7..acabe007768493b465deec40deedd26a5f73c579 100644
|
| --- a/pkg/custom_element/lib/custom_element.dart
|
| +++ b/pkg/custom_element/lib/custom_element.dart
|
| @@ -22,95 +22,16 @@ import 'dart:html';
|
| import 'package:meta/meta.dart';
|
| import 'src/custom_tag_name.dart';
|
|
|
| -part 'src/attribute_map.dart';
|
| -
|
| -// TODO(jmesserly): replace with a real custom element polyfill.
|
| -// This is just something temporary.
|
| -/**
|
| - * *Warning*: this implementation is a work in progress. It only implements
|
| - * the specification partially.
|
| - *
|
| - * Registers a custom HTML element with [localName] and the associated
|
| - * constructor. This will ensure the element is detected and
|
| - *
|
| - * See the specification at:
|
| - * <https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html>
|
| - */
|
| -void registerCustomElement(String localName, CustomElement create()) {
|
| - if (_customElements == null) {
|
| - _customElements = {};
|
| - // TODO(jmesserly): use MutationObserver to watch for inserts?
|
| - }
|
| -
|
| - if (!isCustomTag(localName)) {
|
| - throw new ArgumentError('$localName is not a valid custom element name, '
|
| - 'it should have at least one dash and not be a reserved name.');
|
| - }
|
| -
|
| - if (_customElements.containsKey(localName)) {
|
| - throw new ArgumentError('custom element $localName already registered.');
|
| - }
|
| -
|
| - // TODO(jmesserly): validate this is a valid tag name, not a selector.
|
| - _customElements[localName] = create;
|
| -
|
| - // Initialize elements already on the page.
|
| - for (var query in [localName, '[is=$localName]']) {
|
| - for (var element in document.queryAll(query)) {
|
| - _initCustomElement(element, create);
|
| - }
|
| - }
|
| -}
|
| -
|
| /**
|
| - * Creates a new element and returns it. If the [localName] has been registered
|
| - * with [registerCustomElement], it will create the custom element.
|
| + * *Deprecated* -- do not use. Extend [HtmlElement] and use
|
| + * [document.register] instead. If running on a browser without native
|
| + * document.register, you can add the polyfill script to your page:
|
| *
|
| - * This is similar to `new Element.tag` in Dart and `document.createElement`
|
| - * in JavaScript.
|
| + * <script src="packages/custom_element/custom-elements.debug.js"></script>
|
| *
|
| - * *Warning*: this API is temporary until [dart:html] supports custom elements.
|
| - */
|
| -Element createElement(String localName) =>
|
| - initCustomElements(new Element.tag(localName));
|
| -
|
| -/**
|
| - * Similar to `new Element.html`, but automatically creates registed custom
|
| - * elements.
|
| - * *Warning*: this API is temporary until [dart:html] supports custom elements.
|
| - */
|
| -Element createElementFromHtml(String html) =>
|
| - initCustomElements(new Element.html(html));
|
| -
|
| -/**
|
| - * Initialize any registered custom elements recursively in the [node] tree.
|
| - * For convenience this returns the [node] instance.
|
| - *
|
| - * *Warning*: this API is temporary until [dart:html] supports custom elements.
|
| - */
|
| -Node initCustomElements(Node node) {
|
| - for (var c = node.firstChild; c != null; c = c.nextNode) {
|
| - initCustomElements(c);
|
| - }
|
| - if (node is Element) {
|
| - var ctor = _customElements[(node as Element).localName];
|
| - if (ctor == null) {
|
| - var attr = (node as Element).attributes['is'];
|
| - if (attr != null) ctor = _customElements[attr];
|
| - }
|
| - if (ctor != null) _initCustomElement(node, ctor);
|
| - }
|
| - return node;
|
| -}
|
| -
|
| -/**
|
| - * The base class for all Dart web components. In addition to the [Element]
|
| - * interface, it also provides lifecycle methods:
|
| - * - [created]
|
| - * - [inserted]
|
| - * - [attributeChanged]
|
| - * - [removed]
|
| + * You can also use "custom-elements.min.js" for the minified version.
|
| */
|
| +// This is only used by Dart Web UI.
|
| class CustomElement implements Element {
|
| /** The web component element wrapped by this class. */
|
| Element _host;
|
| @@ -608,47 +529,3 @@ class CustomElement implements Element {
|
| throw new UnsupportedError('onMouseWheel is not supported');
|
| }
|
| }
|
| -
|
| -
|
| -Map<String, Function> _customElements;
|
| -
|
| -void _initCustomElement(Element node, CustomElement ctor()) {
|
| - CustomElement element = ctor();
|
| - element.host = node;
|
| -
|
| - // TODO(jmesserly): replace lifecycle stuff with a proper polyfill.
|
| - element.created();
|
| -
|
| - _registerLifecycleInsert(element);
|
| -}
|
| -
|
| -void _registerLifecycleInsert(CustomElement element) {
|
| - scheduleMicrotask(() {
|
| - // TODO(jmesserly): bottom up or top down insert?
|
| - var node = element.host;
|
| -
|
| - // TODO(jmesserly): need a better check to see if the node has been removed.
|
| - if (node.parentNode == null) return;
|
| -
|
| - _registerLifecycleRemove(element);
|
| - element.inserted();
|
| - });
|
| -}
|
| -
|
| -void _registerLifecycleRemove(CustomElement element) {
|
| - // TODO(jmesserly): need fallback or polyfill for MutationObserver.
|
| - if (!MutationObserver.supported) return;
|
| -
|
| - new MutationObserver((records, observer) {
|
| - var node = element.host;
|
| - for (var record in records) {
|
| - for (var removed in record.removedNodes) {
|
| - if (identical(node, removed)) {
|
| - observer.disconnect();
|
| - element.removed();
|
| - return;
|
| - }
|
| - }
|
| - }
|
| - }).observe(element.parentNode, childList: true);
|
| -}
|
|
|