| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 part of $LIBRARYNAME; | 5 part of $LIBRARYNAME; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Lazy implementation of the child nodes of an element that does not request | 8 * Lazy implementation of the child nodes of an element that does not request |
| 9 * the actual child nodes of an element until strictly necessary greatly | 9 * the actual child nodes of an element until strictly necessary greatly |
| 10 * improving performance for the typical cases where it is not required. | 10 * improving performance for the typical cases where it is not required. |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 var result = this[index]; | 107 var result = this[index]; |
| 108 if (result != null) { | 108 if (result != null) { |
| 109 _this._removeChild(result); | 109 _this._removeChild(result); |
| 110 } | 110 } |
| 111 return result; | 111 return result; |
| 112 } | 112 } |
| 113 | 113 |
| 114 bool remove(Object object) { | 114 bool remove(Object object) { |
| 115 if (object is! Node) return false; | 115 if (object is! Node) return false; |
| 116 Node node = object; | 116 Node node = object; |
| 117 $if JSINTEROP |
| 118 // We aren't preserving identity of nodes in JSINTEROP mode |
| 119 if (_this != node.parentNode) return false; |
| 120 $else |
| 117 if (!identical(_this, node.parentNode)) return false; | 121 if (!identical(_this, node.parentNode)) return false; |
| 122 $endif |
| 118 _this._removeChild(node); | 123 _this._removeChild(node); |
| 119 return true; | 124 return true; |
| 120 } | 125 } |
| 121 | 126 |
| 122 void _filter(bool test(Node node), bool removeMatching) { | 127 void _filter(bool test(Node node), bool removeMatching) { |
| 123 // This implementation of removeWhere/retainWhere is more efficient | 128 // This implementation of removeWhere/retainWhere is more efficient |
| 124 // than the default in ListBase. Child nodes can be removed in constant | 129 // than the default in ListBase. Child nodes can be removed in constant |
| 125 // time. | 130 // time. |
| 126 Node child = _this.firstChild; | 131 Node child = _this.firstChild; |
| 127 while (child != null) { | 132 while (child != null) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 | 176 |
| 172 void fillRange(int start, int end, [Node fill]) { | 177 void fillRange(int start, int end, [Node fill]) { |
| 173 throw new UnsupportedError("Cannot fillRange on Node list"); | 178 throw new UnsupportedError("Cannot fillRange on Node list"); |
| 174 } | 179 } |
| 175 // -- end List<Node> mixins. | 180 // -- end List<Node> mixins. |
| 176 | 181 |
| 177 // TODO(jacobr): benchmark whether this is more efficient or whether caching | 182 // TODO(jacobr): benchmark whether this is more efficient or whether caching |
| 178 // a local copy of childNodes is more efficient. | 183 // a local copy of childNodes is more efficient. |
| 179 int get length => _this.childNodes.length; | 184 int get length => _this.childNodes.length; |
| 180 | 185 |
| 181 void set length(int value) { | 186 set length(int value) { |
| 182 throw new UnsupportedError( | 187 throw new UnsupportedError( |
| 183 "Cannot set length on immutable List."); | 188 "Cannot set length on immutable List."); |
| 184 } | 189 } |
| 185 | 190 |
| 186 Node operator[](int index) => _this.childNodes[index]; | 191 Node operator[](int index) => _this.childNodes[index]; |
| 187 | 192 |
| 188 List<Node> get rawList => _this.childNodes; | 193 List<Node> get rawList => _this.childNodes; |
| 189 } | 194 } |
| 190 | 195 |
| 191 | 196 |
| 192 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
{ | 197 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS
{ |
| 193 | 198 |
| 194 // Custom element created callback. | 199 // Custom element created callback. |
| 195 Node._created() : super._created(); | 200 Node._created() : super._created(); |
| 196 | 201 |
| 197 /** | 202 /** |
| 198 * A modifiable list of this node's children. | 203 * A modifiable list of this node's children. |
| 199 */ | 204 */ |
| 200 List<Node> get nodes { | 205 List<Node> get nodes { |
| 201 return new _ChildNodeListLazy(this); | 206 return new _ChildNodeListLazy(this); |
| 202 } | 207 } |
| 203 | 208 |
| 204 void set nodes(Iterable<Node> value) { | 209 set nodes(Iterable<Node> value) { |
| 205 // Copy list first since we don't want liveness during iteration. | 210 // Copy list first since we don't want liveness during iteration. |
| 206 // TODO(jacobr): there is a better way to do this. | 211 // TODO(jacobr): there is a better way to do this. |
| 207 List copy = new List.from(value); | 212 List copy = new List.from(value); |
| 208 text = ''; | 213 text = ''; |
| 209 for (Node node in copy) { | 214 for (Node node in copy) { |
| 210 append(node); | 215 append(node); |
| 211 } | 216 } |
| 212 } | 217 } |
| 213 | 218 |
| 214 /** | 219 /** |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 } | 275 } |
| 271 | 276 |
| 272 /** | 277 /** |
| 273 * Print out a String representation of this Node. | 278 * Print out a String representation of this Node. |
| 274 */ | 279 */ |
| 275 String toString() { | 280 String toString() { |
| 276 String value = nodeValue; // Fetch DOM Node property once. | 281 String value = nodeValue; // Fetch DOM Node property once. |
| 277 return value == null ? super.toString() : value; | 282 return value == null ? super.toString() : value; |
| 278 } | 283 } |
| 279 | 284 |
| 280 $if JSINTEROP | 285 $if DARTIUM |
| 281 List<Node> _childNodes; | |
| 282 | |
| 283 /** | 286 /** |
| 284 * A list of this node's children. | 287 * A list of this node's children. |
| 285 * | 288 * |
| 286 * ## Other resources | 289 * ## Other resources |
| 287 * | 290 * |
| 288 * * [Node.childNodes] | 291 * * [Node.childNodes] |
| 289 * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes) | 292 * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes) |
| 290 * from MDN. | 293 * from MDN. |
| 291 */ | 294 */ |
| 292 @DomName('Node.childNodes') | 295 @DomName('Node.childNodes') |
| 293 @DocsEditable() | 296 @DocsEditable() |
| 294 List<Node> get childNodes { | 297 List<Node> get childNodes => wrap_jso(_blink.BlinkNode.instance.childNodes_Get
ter_(unwrap_jso(this))); |
| 295 if (_childNodes == null) { | |
| 296 List<Node> nodes = new List<Node>(); | |
| 297 var jsCollection = _blink.BlinkNode.instance.childNodes_Getter_(unwrap_js
o(this)); | |
| 298 var collectionLen = jsCollection['length']; | |
| 299 for (var i = 0; i < collectionLen; i++) { | |
| 300 nodes.add(wrap_jso(jsCollection.callMethod('item', [i]))); | |
| 301 } | |
| 302 _childNodes = nodes; | |
| 303 } | |
| 304 return _childNodes; | |
| 305 } | |
| 306 $else | 298 $else |
| 307 $if DARTIUM | |
| 308 /** | 299 /** |
| 309 * A list of this node's children. | 300 * A list of this node's children. |
| 310 * | 301 * |
| 311 * ## Other resources | |
| 312 * | |
| 313 * * [Node.childNodes] | |
| 314 * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes) | |
| 315 * from MDN. | |
| 316 */ | |
| 317 @DomName('Node.childNodes') | |
| 318 @DocsEditable() | |
| 319 List<Node> get childNodes => _blink.BlinkNode.instance.childNodes_Getter_(this
); | |
| 320 $else | |
| 321 /** | |
| 322 * A list of this node's children. | |
| 323 * | |
| 324 * ## Other resources | 302 * ## Other resources |
| 325 * | 303 * |
| 326 * * [Node.childNodes] | 304 * * [Node.childNodes] |
| 327 * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes) | 305 * (https://developer.mozilla.org/en-US/docs/Web/API/Node.childNodes) |
| 328 * from MDN. | 306 * from MDN. |
| 329 */ | 307 */ |
| 330 @DomName('Node.childNodes') | 308 @DomName('Node.childNodes') |
| 331 @DocsEditable() | 309 @DocsEditable() |
| 332 @Returns('NodeList') | |
| 333 @Creates('NodeList') | |
| 334 final List<Node> childNodes; | 310 final List<Node> childNodes; |
| 335 | 311 |
| 336 $endif | |
| 337 $endif | 312 $endif |
| 338 $!MEMBERS | 313 $!MEMBERS |
| 339 } | 314 } |
| OLD | NEW |