| 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 html; | 5 part of html; |
| 6 | 6 |
| 7 // TODO(jacobr): use _Lists.dart to remove some of the duplicated | 7 // TODO(jacobr): use _Lists.dart to remove some of the duplicated |
| 8 // functionality. | 8 // functionality. |
| 9 class _ChildrenElementList implements List { | 9 class _ChildrenElementList implements List { |
| 10 // Raw Element. | 10 // Raw Element. |
| 11 final Element _element; | 11 final Element _element; |
| 12 final HtmlCollection _childElements; | 12 final HtmlCollection _childElements; |
| 13 | 13 |
| 14 _ChildrenElementList._wrap(Element element) | 14 _ChildrenElementList._wrap(Element element) |
| 15 : _childElements = element.$dom_children, | 15 : _childElements = element.$dom_children, |
| 16 _element = element; | 16 _element = element; |
| 17 | 17 |
| 18 List<Element> toList() { | 18 List<Element> toList() { |
| 19 final output = new List<Element>.fixedLength(_childElements.length); | 19 final output = new List<Element>.fixedLength(_childElements.length); |
| 20 for (int i = 0, len = _childElements.length; i < len; i++) { | 20 for (int i = 0, len = _childElements.length; i < len; i++) { |
| 21 output[i] = _childElements[i]; | 21 output[i] = _childElements[i]; |
| 22 } | 22 } |
| 23 return output; | 23 return output; |
| 24 } | 24 } |
| 25 | 25 |
| 26 Set<Element> toSet() { | 26 Set<Element> toSet() { |
| 27 final output = new Set<Element>(_childElements.length); | 27 final output = new Set<Element>(); |
| 28 for (int i = 0, len = _childElements.length; i < len; i++) { | 28 for (int i = 0, len = _childElements.length; i < len; i++) { |
| 29 output.add(_childElements[i]); | 29 output.add(_childElements[i]); |
| 30 } | 30 } |
| 31 return output; | 31 return output; |
| 32 } | 32 } |
| 33 | 33 |
| 34 bool contains(Element element) => _childElements.contains(element); | 34 bool contains(Element element) => _childElements.contains(element); |
| 35 | 35 |
| 36 void forEach(void f(Element element)) { | 36 void forEach(void f(Element element)) { |
| 37 for (Element element in _childElements) { | 37 for (Element element in _childElements) { |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 if (result == null) throw new StateError("No elements"); | 203 if (result == null) throw new StateError("No elements"); |
| 204 return result; | 204 return result; |
| 205 } | 205 } |
| 206 | 206 |
| 207 Element get single { | 207 Element get single { |
| 208 if (length > 1) throw new StateError("More than one element"); | 208 if (length > 1) throw new StateError("More than one element"); |
| 209 return first; | 209 return first; |
| 210 } | 210 } |
| 211 | 211 |
| 212 Element min([int compare(Element a, Element b)]) { | 212 Element min([int compare(Element a, Element b)]) { |
| 213 return _Collections.minInList(this, compare); | 213 return Collections.min(this, compare); |
| 214 } | 214 } |
| 215 | 215 |
| 216 Element max([int compare(Element a, Element b)]) { | 216 Element max([int compare(Element a, Element b)]) { |
| 217 return _Collections.maxInList(this, compare); | 217 return Collections.max(this, compare); |
| 218 } | 218 } |
| 219 } | 219 } |
| 220 | 220 |
| 221 // TODO(jacobr): this is an inefficient implementation but it is hard to see | 221 // TODO(jacobr): this is an inefficient implementation but it is hard to see |
| 222 // a better option given that we cannot quite force NodeList to be an | 222 // a better option given that we cannot quite force NodeList to be an |
| 223 // ElementList as there are valid cases where a NodeList JavaScript object | 223 // ElementList as there are valid cases where a NodeList JavaScript object |
| 224 // contains Node objects that are not Elements. | 224 // contains Node objects that are not Elements. |
| 225 class _FrozenElementList implements List { | 225 class _FrozenElementList implements List { |
| 226 final List<Node> _nodeList; | 226 final List<Node> _nodeList; |
| 227 | 227 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 | 262 |
| 263 bool any(bool f(Element element)) { | 263 bool any(bool f(Element element)) { |
| 264 for(Element element in this) { | 264 for(Element element in this) { |
| 265 if (f(element)) { | 265 if (f(element)) { |
| 266 return true; | 266 return true; |
| 267 } | 267 } |
| 268 }; | 268 }; |
| 269 return false; | 269 return false; |
| 270 } | 270 } |
| 271 | 271 |
| 272 List<Element> toList() => new List<Element>.from(this); |
| 273 Set<Element> toSet() => new Set<Element>.from(this); |
| 274 |
| 272 List<Element> take(int n) { | 275 List<Element> take(int n) { |
| 273 return new ListView<Element>(this, 0, n); | 276 return new ListView<Element>(this, 0, n); |
| 274 } | 277 } |
| 275 | 278 |
| 276 Iterable<Element> takeWhile(bool test(T value)) { | 279 Iterable<Element> takeWhile(bool test(Element value)) { |
| 277 return new TakeWhileIterable<Element>(this, test); | 280 return new TakeWhileIterable<Element>(this, test); |
| 278 } | 281 } |
| 279 | 282 |
| 280 List<Element> skip(int n) { | 283 List<Element> skip(int n) { |
| 281 return new ListView<Element>(this, n, null); | 284 return new ListView<Element>(this, n, null); |
| 282 } | 285 } |
| 283 | 286 |
| 284 Iterable<Element> skipWhile(bool test(T value)) { | 287 Iterable<Element> skipWhile(bool test(Element value)) { |
| 285 return new SkipWhileIterable<Element>(this, test); | 288 return new SkipWhileIterable<Element>(this, test); |
| 286 } | 289 } |
| 287 | 290 |
| 288 Element firstMatching(bool test(Element value), {Element orElse()}) { | 291 Element firstMatching(bool test(Element value), {Element orElse()}) { |
| 289 return Collections.firstMatching(this, test, orElse); | 292 return Collections.firstMatching(this, test, orElse); |
| 290 } | 293 } |
| 291 | 294 |
| 292 Element lastMatching(bool test(Element value), {Element orElse()}) { | 295 Element lastMatching(bool test(Element value), {Element orElse()}) { |
| 293 return Collections.lastMatchingInList(this, test, orElse); | 296 return Collections.lastMatchingInList(this, test, orElse); |
| 294 } | 297 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 throw new UnsupportedError(''); | 374 throw new UnsupportedError(''); |
| 372 } | 375 } |
| 373 | 376 |
| 374 Element get first => _nodeList.first; | 377 Element get first => _nodeList.first; |
| 375 | 378 |
| 376 Element get last => _nodeList.last; | 379 Element get last => _nodeList.last; |
| 377 | 380 |
| 378 Element get single => _nodeList.single; | 381 Element get single => _nodeList.single; |
| 379 | 382 |
| 380 Element min([int compare(Element a, Element b)]) { | 383 Element min([int compare(Element a, Element b)]) { |
| 381 return _Collections.minInList(this, compare); | 384 return Collections.min(this, compare); |
| 382 } | 385 } |
| 383 | 386 |
| 384 Element max([int compare(Element a, Element b)]) { | 387 Element max([int compare(Element a, Element b)]) { |
| 385 return _Collections.maxInList(this, compare); | 388 return Collections.max(this, compare); |
| 386 } | 389 } |
| 387 } | 390 } |
| 388 | 391 |
| 389 class _FrozenElementListIterator implements Iterator<Element> { | 392 class _FrozenElementListIterator implements Iterator<Element> { |
| 390 final _FrozenElementList _list; | 393 final _FrozenElementList _list; |
| 391 int _index = -1; | 394 int _index = -1; |
| 392 Element _current; | 395 Element _current; |
| 393 | 396 |
| 394 _FrozenElementListIterator(this._list); | 397 _FrozenElementListIterator(this._list); |
| 395 | 398 |
| (...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 897 $if DART2JS | 900 $if DART2JS |
| 898 // Optimization to improve performance until the dart2js compiler inlines this | 901 // Optimization to improve performance until the dart2js compiler inlines this |
| 899 // method. | 902 // method. |
| 900 static dynamic createElement_tag(String tag) => | 903 static dynamic createElement_tag(String tag) => |
| 901 JS('Element', 'document.createElement(#)', tag); | 904 JS('Element', 'document.createElement(#)', tag); |
| 902 $else | 905 $else |
| 903 static Element createElement_tag(String tag) => | 906 static Element createElement_tag(String tag) => |
| 904 document.$dom_createElement(tag); | 907 document.$dom_createElement(tag); |
| 905 $endif | 908 $endif |
| 906 } | 909 } |
| OLD | NEW |