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

Side by Side Diff: pkg/custom_element/lib/custom_element.dart

Issue 24149003: Port of github.com/polymer/polymer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 * Custom DOM elements. 6 * Custom DOM elements.
7 * 7 *
8 * This library provides access to the Polymer project's 8 * This library provides access to the Polymer project's
9 * [Custom Elements] 9 * [Custom Elements]
10 * (http://www.polymer-project.org/platform/custom-elements.html) 10 * (http://www.polymer-project.org/platform/custom-elements.html)
11 * API, which lets you define your own elements. With custom elements, you 11 * API, which lets you define your own elements. With custom elements, you
12 * associate code with custom tag names, and then use those custom tag names 12 * associate code with custom tag names, and then use those custom tag names
13 * as you would any standard tag. For more information, see the 13 * as you would any standard tag. For more information, see the
14 * [Polymer.dart homepage](https://www.dartlang.org/polymer-dart/) and its 14 * [Polymer.dart homepage](https://www.dartlang.org/polymer-dart/) and its
15 * [custom element example] 15 * [custom element example]
16 * (https://www.dartlang.org/polymer-dart/#custom-elements). 16 * (https://www.dartlang.org/polymer-dart/#custom-elements).
17 */ 17 */
18 library custom_element; 18 library custom_element;
19 19
20 import 'dart:async'; 20 import 'dart:async';
21 import 'dart:html'; 21 import 'dart:html';
22 import 'package:mdv/mdv.dart' as mdv; 22 import 'package:mdv/mdv.dart' as mdv;
23 import 'package:meta/meta.dart'; 23 import 'package:meta/meta.dart';
24 import 'src/custom_tag_name.dart'; 24 import 'src/custom_tag_name.dart';
25 25
26 part 'src/attribute_map.dart';
27
26 // TODO(jmesserly): replace with a real custom element polyfill. 28 // TODO(jmesserly): replace with a real custom element polyfill.
27 // This is just something temporary. 29 // This is just something temporary.
28 /** 30 /**
29 * *Warning*: this implementation is a work in progress. It only implements 31 * *Warning*: this implementation is a work in progress. It only implements
30 * the specification partially. 32 * the specification partially.
31 * 33 *
32 * Registers a custom HTML element with [localName] and the associated 34 * Registers a custom HTML element with [localName] and the associated
33 * constructor. This will ensure the element is detected and 35 * constructor. This will ensure the element is detected and
34 * 36 *
35 * See the specification at: 37 * See the specification at:
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 * interface, it also provides lifecycle methods: 110 * interface, it also provides lifecycle methods:
109 * - [created] 111 * - [created]
110 * - [inserted] 112 * - [inserted]
111 * - [attributeChanged] 113 * - [attributeChanged]
112 * - [removed] 114 * - [removed]
113 */ 115 */
114 class CustomElement implements Element { 116 class CustomElement implements Element {
115 /** The web component element wrapped by this class. */ 117 /** The web component element wrapped by this class. */
116 Element _host; 118 Element _host;
117 List _shadowRoots; 119 List _shadowRoots;
120 _AttributeMap _attributes;
118 121
119 /** 122 /**
120 * Shadow roots generated by dwc for each custom element, indexed by the 123 * Shadow roots generated by dwc for each custom element, indexed by the
121 * custom element tag name. 124 * custom element tag name.
122 */ 125 */
123 Map<String, dynamic> _generatedRoots = {}; 126 Map<String, dynamic> _generatedRoots = {};
124 127
125 /** 128 /**
126 * Temporary property until components extend [Element]. An element can 129 * Temporary property until components extend [Element]. An element can
127 * only be associated with one host, and it is an error to use a web component 130 * only be associated with one host, and it is an error to use a web component
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 * Note that [root] will be a [ShadowRoot] if the browser supports Shadow DOM. 174 * Note that [root] will be a [ShadowRoot] if the browser supports Shadow DOM.
172 */ 175 */
173 void created() {} 176 void created() {}
174 177
175 /** Invoked when this component gets inserted in the DOM tree. */ 178 /** Invoked when this component gets inserted in the DOM tree. */
176 void inserted() {} 179 void inserted() {}
177 180
178 /** Invoked when this component is removed from the DOM tree. */ 181 /** Invoked when this component is removed from the DOM tree. */
179 void removed() {} 182 void removed() {}
180 183
181 // TODO(jmesserly): how do we implement this efficiently?
182 // See https://github.com/dart-lang/web-ui/issues/37
183 /** Invoked when any attribute of the component is modified. */ 184 /** Invoked when any attribute of the component is modified. */
184 void attributeChanged(String name, String oldValue, String newValue) {} 185 void attributeChanged(String name, String oldValue) {}
185 186
186 get model => host.model; 187 get model => host.model;
187 188
188 void set model(newModel) { 189 void set model(newModel) {
189 host.model = newModel; 190 host.model = newModel;
190 } 191 }
191 192
192 get templateInstance => host.templateInstance; 193 get templateInstance => host.templateInstance;
193 get isTemplate => host.isTemplate; 194 get isTemplate => host.isTemplate;
194 get ref => host.ref; 195 get ref => host.ref;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 bool contains(Node other) => host.contains(other); 262 bool contains(Node other) => host.contains(other);
262 263
263 bool hasChildNodes() => host.hasChildNodes(); 264 bool hasChildNodes() => host.hasChildNodes();
264 265
265 Node insertBefore(Node newChild, Node refChild) => 266 Node insertBefore(Node newChild, Node refChild) =>
266 host.insertBefore(newChild, refChild); 267 host.insertBefore(newChild, refChild);
267 268
268 Node insertAllBefore(Iterable<Node> newChild, Node refChild) => 269 Node insertAllBefore(Iterable<Node> newChild, Node refChild) =>
269 host.insertAllBefore(newChild, refChild); 270 host.insertAllBefore(newChild, refChild);
270 271
271 Map<String, String> get attributes => host.attributes; 272 Map<String, String> get attributes {
273 if (_attributes == null) _attributes = new _AttributeMap(this);
274 return _attributes;
275 }
272 set attributes(Map<String, String> value) { 276 set attributes(Map<String, String> value) {
273 host.attributes = value; 277 (attributes as _AttributeMap)._replaceAll(value);
274 } 278 }
275 279
276 List<Element> get elements => host.children; 280 List<Element> get elements => host.children;
277 281
278 set elements(List<Element> value) { 282 set elements(List<Element> value) {
279 host.children = value; 283 host.children = value;
280 } 284 }
281 285
282 List<Element> get children => host.children; 286 List<Element> get children => host.children;
283 287
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 for (var removed in record.removedNodes) { 643 for (var removed in record.removedNodes) {
640 if (identical(node, removed)) { 644 if (identical(node, removed)) {
641 observer.disconnect(); 645 observer.disconnect();
642 element.removed(); 646 element.removed();
643 return; 647 return;
644 } 648 }
645 } 649 }
646 } 650 }
647 }).observe(element.parentNode, childList: true); 651 }).observe(element.parentNode, childList: true);
648 } 652 }
OLDNEW
« no previous file with comments | « no previous file | pkg/custom_element/lib/src/attribute_map.dart » ('j') | pkg/observe/lib/src/bind_property.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698