OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * Polyfill script for custom elements. To use this script, your app must | 6 * Polyfill script for custom elements. To use this script, your app must |
7 * create a CustomElementsManager with the appropriate lookup function before | 7 * create a CustomElementsManager with the appropriate lookup function before |
8 * doing any DOM queries or modifications. | 8 * doing any DOM queries or modifications. |
9 * Currently, all custom elements must be registered with the polyfill. To | 9 * Currently, all custom elements must be registered with the polyfill. To |
10 * register custom elements, provide the appropriate lookup function to your | 10 * register custom elements, provide the appropriate lookup function to your |
(...skipping 11 matching lines...) Expand all Loading... |
22 | 22 |
23 #source('list_map.dart'); | 23 #source('list_map.dart'); |
24 | 24 |
25 // typedefs | 25 // typedefs |
26 typedef WebComponent WebComponentFactory (ShadowRoot shadowRoot, Element elt); | 26 typedef WebComponent WebComponentFactory (ShadowRoot shadowRoot, Element elt); |
27 typedef WebComponentFactory RegistryLookupFunction(String tagName); | 27 typedef WebComponentFactory RegistryLookupFunction(String tagName); |
28 | 28 |
29 // Globals | 29 // Globals |
30 const int REQUEST_DONE = 4; | 30 const int REQUEST_DONE = 4; |
31 CustomElementsManager _manager; | 31 CustomElementsManager _manager; |
32 CustomElementsManager get manager() => _manager; | 32 CustomElementsManager get manager => _manager; |
33 | 33 |
34 void initializeComponents(RegistryLookupFunction lookup) { | 34 void initializeComponents(RegistryLookupFunction lookup) { |
35 _manager = new CustomElementsManager._internal(lookup); | 35 _manager = new CustomElementsManager._internal(lookup); |
36 manager._loadComponents(); | 36 manager._loadComponents(); |
37 } | 37 } |
38 | 38 |
39 /** A Dart wrapper for a web component. */ | 39 /** A Dart wrapper for a web component. */ |
40 abstract class WebComponent { | 40 abstract class WebComponent { |
41 /** The web component element wrapped by this class. */ | 41 /** The web component element wrapped by this class. */ |
42 abstract Element get element(); | 42 abstract Element get element; |
43 | 43 |
44 /** Invoked when this component gets created. */ | 44 /** Invoked when this component gets created. */ |
45 abstract void created(); | 45 abstract void created(); |
46 | 46 |
47 /** Invoked when this component gets inserted in the DOM tree. */ | 47 /** Invoked when this component gets inserted in the DOM tree. */ |
48 abstract void inserted(); | 48 abstract void inserted(); |
49 | 49 |
50 /** Invoked when any attribute of the component is modified. */ | 50 /** Invoked when any attribute of the component is modified. */ |
51 abstract void attributeChanged( | 51 abstract void attributeChanged( |
52 String name, String oldValue, String newValue); | 52 String name, String oldValue, String newValue); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 } | 226 } |
227 } | 227 } |
228 | 228 |
229 bool _hasShadowRoot; | 229 bool _hasShadowRoot; |
230 | 230 |
231 /** | 231 /** |
232 * True if the browser supports the [ShadowRoot] element and it is enabled. | 232 * True if the browser supports the [ShadowRoot] element and it is enabled. |
233 * See the [Shadow DOM spec](http://www.w3.org/TR/shadow-dom/) for more | 233 * See the [Shadow DOM spec](http://www.w3.org/TR/shadow-dom/) for more |
234 * information about the ShadowRoot. | 234 * information about the ShadowRoot. |
235 */ | 235 */ |
236 bool get hasShadowRoot() { | 236 bool get hasShadowRoot { |
237 if (_hasShadowRoot == null) { | 237 if (_hasShadowRoot == null) { |
238 try { | 238 try { |
239 // TODO(jmesserly): it'd be nice if we could check this without causing | 239 // TODO(jmesserly): it'd be nice if we could check this without causing |
240 // an exception to be thrown. | 240 // an exception to be thrown. |
241 new ShadowRoot(new DivElement()); | 241 new ShadowRoot(new DivElement()); |
242 _hasShadowRoot = true; | 242 _hasShadowRoot = true; |
243 } catch (e) { | 243 } catch (e) { |
244 _hasShadowRoot = false; | 244 _hasShadowRoot = false; |
245 // Hide <template> elements. | 245 // Hide <template> elements. |
246 // TODO(jmesserly): This is a workaround because we don't distribute | 246 // TODO(jmesserly): This is a workaround because we don't distribute |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 } | 338 } |
339 }); | 339 }); |
340 attributeObserver.observe(e, attributes: true, attributeOldValue: true); | 340 attributeObserver.observe(e, attributes: true, attributeOldValue: true); |
341 | 341 |
342 // Listen for all insertions and deletions on the DOM so that we can | 342 // Listen for all insertions and deletions on the DOM so that we can |
343 // catch custom elements being inserted and call the appropriate callbacks. | 343 // catch custom elements being inserted and call the appropriate callbacks. |
344 manager.initializeInsertedRemovedCallbacks(shadowRoot); | 344 manager.initializeInsertedRemovedCallbacks(shadowRoot); |
345 return newCustomElement; | 345 return newCustomElement; |
346 } | 346 } |
347 } | 347 } |
OLD | NEW |