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

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: rebase 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
« no previous file with comments | « no previous file | pkg/custom_element/lib/src/attribute_map.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 /** Invoked when this component gets inserted in the DOM tree. */ 181 /** Invoked when this component gets inserted in the DOM tree. */
179 void inserted() {} 182 void inserted() {}
180 @deprecated 183 @deprecated
181 void enteredView() {} 184 void enteredView() {}
182 185
183 /** Invoked when this component is removed from the DOM tree. */ 186 /** Invoked when this component is removed from the DOM tree. */
184 void removed() {} 187 void removed() {}
185 @deprecated 188 @deprecated
186 void leftView() {} 189 void leftView() {}
187 190
188 // TODO(jmesserly): how do we implement this efficiently?
189 // See https://github.com/dart-lang/web-ui/issues/37
190 /** Invoked when any attribute of the component is modified. */ 191 /** Invoked when any attribute of the component is modified. */
191 void attributeChanged(String name, String oldValue, String newValue) {} 192 void attributeChanged(String name, String oldValue) {}
192 193
193 get model => host.model; 194 get model => host.model;
194 195
195 void set model(newModel) { 196 void set model(newModel) {
196 host.model = newModel; 197 host.model = newModel;
197 } 198 }
198 199
199 get templateInstance => host.templateInstance; 200 get templateInstance => host.templateInstance;
200 get isTemplate => host.isTemplate; 201 get isTemplate => host.isTemplate;
201 get ref => host.ref; 202 get ref => host.ref;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 bool contains(Node other) => host.contains(other); 269 bool contains(Node other) => host.contains(other);
269 270
270 bool hasChildNodes() => host.hasChildNodes(); 271 bool hasChildNodes() => host.hasChildNodes();
271 272
272 Node insertBefore(Node newChild, Node refChild) => 273 Node insertBefore(Node newChild, Node refChild) =>
273 host.insertBefore(newChild, refChild); 274 host.insertBefore(newChild, refChild);
274 275
275 Node insertAllBefore(Iterable<Node> newChild, Node refChild) => 276 Node insertAllBefore(Iterable<Node> newChild, Node refChild) =>
276 host.insertAllBefore(newChild, refChild); 277 host.insertAllBefore(newChild, refChild);
277 278
278 Map<String, String> get attributes => host.attributes; 279 Map<String, String> get attributes {
280 if (_attributes == null) _attributes = new _AttributeMap(this);
281 return _attributes;
282 }
279 set attributes(Map<String, String> value) { 283 set attributes(Map<String, String> value) {
280 host.attributes = value; 284 (attributes as _AttributeMap)._replaceAll(value);
281 } 285 }
282 286
283 List<Element> get elements => host.children; 287 List<Element> get elements => host.children;
284 288
285 set elements(List<Element> value) { 289 set elements(List<Element> value) {
286 host.children = value; 290 host.children = value;
287 } 291 }
288 292
289 List<Element> get children => host.children; 293 List<Element> get children => host.children;
290 294
(...skipping 21 matching lines...) Expand all
312 => host.getComputedStyle(pseudoElement); 316 => host.getComputedStyle(pseudoElement);
313 317
314 Element clone(bool deep) => host.clone(deep); 318 Element clone(bool deep) => host.clone(deep);
315 319
316 Element get parent => host.parent; 320 Element get parent => host.parent;
317 321
318 Node get parentNode => host.parentNode; 322 Node get parentNode => host.parentNode;
319 323
320 String get nodeValue => host.nodeValue; 324 String get nodeValue => host.nodeValue;
321 325
322 @deprecated 326 Events get on => host.on;
323 // TODO(sigmund): restore the old return type and call host.on when
324 // dartbug.com/8131 is fixed.
325 dynamic get on { throw new UnsupportedError('on is deprecated'); }
326 327
327 String get contentEditable => host.contentEditable; 328 String get contentEditable => host.contentEditable;
328 set contentEditable(String v) { host.contentEditable = v; } 329 set contentEditable(String v) { host.contentEditable = v; }
329 330
330 String get dir => host.dir; 331 String get dir => host.dir;
331 set dir(String v) { host.dir = v; } 332 set dir(String v) { host.dir = v; }
332 333
333 bool get draggable => host.draggable; 334 bool get draggable => host.draggable;
334 set draggable(bool v) { host.draggable = v; } 335 set draggable(bool v) { host.draggable = v; }
335 336
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 for (var removed in record.removedNodes) { 647 for (var removed in record.removedNodes) {
647 if (identical(node, removed)) { 648 if (identical(node, removed)) {
648 observer.disconnect(); 649 observer.disconnect();
649 element.removed(); 650 element.removed();
650 return; 651 return;
651 } 652 }
652 } 653 }
653 } 654 }
654 }).observe(element.parentNode, childList: true); 655 }).observe(element.parentNode, childList: true);
655 } 656 }
OLDNEW
« no previous file with comments | « no previous file | pkg/custom_element/lib/src/attribute_map.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698