| 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 part of html_common; | 5 part of html_common; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * An indexable collection of a node's direct descendants in the document tree, | 8 * An indexable collection of a node's direct descendants in the document tree, |
| 9 * filtered so that only elements are in the collection. | 9 * filtered so that only elements are in the collection. |
| 10 */ | 10 */ |
| 11 class FilteredElementList extends ListBase<Element> implements NodeListWrapper { | 11 class FilteredElementList extends ListBase<Element> implements NodeListWrapper { |
| 12 final Node _node; | 12 final Node _node; |
| 13 final List<Node> _childNodes; | 13 final List<Node> _childNodes; |
| 14 | 14 |
| 15 /** | 15 /** |
| 16 * Creates a collection of the elements that descend from a node. | 16 * Creates a collection of the elements that descend from a node. |
| 17 * | 17 * |
| 18 * Example usage: | 18 * Example usage: |
| 19 * | 19 * |
| 20 * var filteredElements = new FilteredElementList(query("#container")); | 20 * var filteredElements = new FilteredElementList(query("#container")); |
| 21 * // filteredElements is [a, b, c]. | 21 * // filteredElements is [a, b, c]. |
| 22 */ | 22 */ |
| 23 FilteredElementList(Node node) | 23 FilteredElementList(Node node) |
| 24 : _childNodes = node.nodes, | 24 : _childNodes = node.nodes, |
| 25 _node = node; | 25 _node = node; |
| 26 | 26 |
| 27 // We can't memoize this, since it's possible that children will be messed | 27 // We can't memoize this, since it's possible that children will be messed |
| 28 // with externally to this class. | 28 // with externally to this class. |
| 29 Iterable<Element> get _iterable => | 29 Iterable<Element> get _iterable => _childNodes |
| 30 _childNodes.where((n) => n is Element).map/*<Element>*/((n) => n as Elemen
t); | 30 .where((n) => n is Element) |
| 31 .map/*<Element>*/((n) => n as Element); |
| 31 List<Element> get _filtered => | 32 List<Element> get _filtered => |
| 32 new List<Element>.from(_iterable, growable: false); | 33 new List<Element>.from(_iterable, growable: false); |
| 33 | 34 |
| 34 void forEach(void f(Element element)) { | 35 void forEach(void f(Element element)) { |
| 35 // This cannot use the iterator, because operations during iteration might | 36 // This cannot use the iterator, because operations during iteration might |
| 36 // modify the collection, e.g. addAll might append a node to another parent. | 37 // modify the collection, e.g. addAll might append a node to another parent. |
| 37 _filtered.forEach(f); | 38 _filtered.forEach(f); |
| 38 } | 39 } |
| 39 | 40 |
| 40 void operator []=(int index, Element value) { | 41 void operator []=(int index, Element value) { |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 } | 142 } |
| 142 | 143 |
| 143 int get length => _iterable.length; | 144 int get length => _iterable.length; |
| 144 Element operator [](int index) => _iterable.elementAt(index); | 145 Element operator [](int index) => _iterable.elementAt(index); |
| 145 // This cannot use the iterator, because operations during iteration might | 146 // This cannot use the iterator, because operations during iteration might |
| 146 // modify the collection, e.g. addAll might append a node to another parent. | 147 // modify the collection, e.g. addAll might append a node to another parent. |
| 147 Iterator<Element> get iterator => _filtered.iterator; | 148 Iterator<Element> get iterator => _filtered.iterator; |
| 148 | 149 |
| 149 List<Node> get rawList => _node.childNodes; | 150 List<Node> get rawList => _node.childNodes; |
| 150 } | 151 } |
| OLD | NEW |