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

Side by Side Diff: client/html/src/NodeWrappingImplementation.dart

Issue 9271019: Make NodeList methods return NodeLists rather than List<Node>. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 11 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 | « client/html/src/NodeList.dart ('k') | client/tests/client/html/NodeTests.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) 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 class _ChildrenNodeList implements NodeList { 5 class _ChildrenNodeList implements NodeList {
6 // Raw node. 6 // Raw node.
7 final _node; 7 final _node;
8 final _childNodes; 8 final _childNodes;
9 9
10 _ChildrenNodeList._wrap(var node) 10 _ChildrenNodeList._wrap(var node)
11 : _childNodes = node.childNodes, 11 : _childNodes = node.childNodes,
12 _node = node; 12 _node = node;
13 13
14 List<Node> _toList() { 14 List<Node> _toList() {
15 final output = new List(_childNodes.length); 15 final output = new List(_childNodes.length);
16 for (int i = 0, len = _childNodes.length; i < len; i++) { 16 for (int i = 0, len = _childNodes.length; i < len; i++) {
17 output[i] = LevelDom.wrapNode(_childNodes[i]); 17 output[i] = LevelDom.wrapNode(_childNodes[i]);
18 } 18 }
19 return output; 19 return output;
20 } 20 }
21 21
22 Node get first() { 22 Node get first() {
23 return LevelDom.wrapNode(_node.firstChild); 23 return LevelDom.wrapNode(_node.firstChild);
24 } 24 }
25 25
26 void forEach(void f(Node element)) => _toList().forEach(f); 26 void forEach(void f(Node element)) => _toList().forEach(f);
27 27
28 Collection map(f(Node element)) => _toList().map(f); 28 Collection map(f(Node element)) => _toList().map(f);
29 29
30 Collection<Node> filter(bool f(Node element)) => _toList().filter(f); 30 NodeList filter(bool f(Node element)) => new _NodeList(_toList().filter(f));
31 31
32 bool every(bool f(Node element)) { 32 bool every(bool f(Node element)) {
33 for(Node element in this) { 33 for(Node element in this) {
34 if (!f(element)) { 34 if (!f(element)) {
35 return false; 35 return false;
36 } 36 }
37 }; 37 };
38 return true; 38 return true;
39 } 39 }
40 40
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 void setRange(int start, int length, List from, [int startFrom = 0]) => 100 void setRange(int start, int length, List from, [int startFrom = 0]) =>
101 Lists.setRange(this, start, length, from, startFrom); 101 Lists.setRange(this, start, length, from, startFrom);
102 102
103 void removeRange(int start, int length) => 103 void removeRange(int start, int length) =>
104 Lists.removeRange(this, start, length, (i) => this[i].remove()); 104 Lists.removeRange(this, start, length, (i) => this[i].remove());
105 105
106 void insertRange(int start, int length, [initialValue = null]) { 106 void insertRange(int start, int length, [initialValue = null]) {
107 throw const NotImplementedException(); 107 throw const NotImplementedException();
108 } 108 }
109 109
110 List getRange(int start, int length) => Lists.getRange(this, start, length); 110 NodeList getRange(int start, int length) =>
111 new _NodeList(Lists.getRange(this, start, length));
111 112
112 int indexOf(Node element, [int start = 0]) { 113 int indexOf(Node element, [int start = 0]) {
113 return Lists.indexOf(this, element, start, this.length); 114 return Lists.indexOf(this, element, start, this.length);
114 } 115 }
115 116
116 int lastIndexOf(Node element, [int start = null]) { 117 int lastIndexOf(Node element, [int start = null]) {
117 if (start === null) start = length - 1; 118 if (start === null) start = length - 1;
118 return Lists.lastIndexOf(this, element, start); 119 return Lists.lastIndexOf(this, element, start);
119 } 120 }
120 121
121 void clear() { 122 void clear() {
122 _node.textContent = ''; 123 _node.textContent = '';
123 } 124 }
124 125
125 Node removeLast() { 126 Node removeLast() {
126 final last = this.last(); 127 final last = this.last();
127 if (last != null) { 128 if (last != null) {
128 _node.removeChild(LevelDom.unwrap(last)); 129 _node.removeChild(LevelDom.unwrap(last));
129 } 130 }
130 return last; 131 return last;
131 } 132 }
132 133
133 Node last() { 134 Node last() {
134 return LevelDom.wrapNode(_node.lastChild); 135 return LevelDom.wrapNode(_node.lastChild);
135 } 136 }
136 } 137 }
137 138
139 // TODO(nweiz): when all implementations we target have the same name for the
140 // coreimpl implementation of List<Node>, extend that rather than wrapping.
141 class _NodeList implements NodeList {
142 List<Node> _list;
143
144 _NodeList(List<Node> this._list);
145
146 Iterator<Node> iterator() => _list.iterator();
147
148 void forEach(void f(Node element)) => _list.forEach(f);
149
150 Collection map(f(Node element)) => _list.map(f);
151
152 NodeList filter(bool f(Node element)) => new _NodeList(_list.filter(f));
153
154 bool every(bool f(Node element)) => _list.every(f);
155
156 bool some(bool f(Node element)) => _list.some(f);
157
158 bool isEmpty() => _list.isEmpty();
159
160 int get length() => _list.length;
161
162 Node operator [](int index) => _list[index];
163
164 void operator []=(int index, Node value) { _list[index] = value; }
165
166 void set length(int newLength) { _list.length = newLength; }
167
168 void add(Node value) => _list.add(value);
169
170 void addLast(Node value) => _list.addLast(value);
171
172 void addAll(Collection<Node> collection) => _list.addAll(collection);
173
174 void sort(int compare(Node a, Node b)) => _list.sort(compare);
175
176 int indexOf(Node element, [int start = 0]) => _list.indexOf(element, start);
177
178 int lastIndexOf(Node element, [int start = 0]) =>
179 _list.lastIndexOf(element, start);
180
181 void clear() => _list.clear();
182
183 Node removeLast() => _list.removeLast();
184
185 Node last() => _list.last();
186
187 NodeList getRange(int start, int length) =>
188 new _NodeList(_list.getRange(start, length));
189
190 void setRange(int start, int length, List<Node> from, [int startFrom = 0]) =>
191 _list.setRange(start, length, from, startFrom);
192
193 void removeRange(int start, int length) => _list.removeRange(start, length);
194
195 void insertRange(int start, int length, [Node initialValue = null]) =>
196 _list.insertRange(start, length, initialValue);
197
198 Node get first() => _list[0];
199 }
200
138 class NodeWrappingImplementation extends EventTargetWrappingImplementation imple ments Node { 201 class NodeWrappingImplementation extends EventTargetWrappingImplementation imple ments Node {
139 NodeList _nodes; 202 NodeList _nodes;
140 203
141 NodeWrappingImplementation._wrap(ptr) : super._wrap(ptr); 204 NodeWrappingImplementation._wrap(ptr) : super._wrap(ptr);
142 205
143 void set nodes(Collection<Node> value) { 206 void set nodes(Collection<Node> value) {
144 // Copy list first since we don't want liveness during iteration. 207 // Copy list first since we don't want liveness during iteration.
145 List copy = new List.from(value); 208 List copy = new List.from(value);
146 nodes.clear(); 209 nodes.clear();
147 nodes.addAll(copy); 210 nodes.addAll(copy);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 // array. 261 // array.
199 Node insertBefore(Node newChild, Node refChild) { 262 Node insertBefore(Node newChild, Node refChild) {
200 return LevelDom.wrapNode(_ptr.insertBefore( 263 return LevelDom.wrapNode(_ptr.insertBefore(
201 LevelDom.unwrap(newChild), LevelDom.unwrap(refChild))); 264 LevelDom.unwrap(newChild), LevelDom.unwrap(refChild)));
202 } 265 }
203 266
204 Node clone(bool deep) { 267 Node clone(bool deep) {
205 return LevelDom.wrapNode(_ptr.cloneNode(deep)); 268 return LevelDom.wrapNode(_ptr.cloneNode(deep));
206 } 269 }
207 } 270 }
OLDNEW
« no previous file with comments | « client/html/src/NodeList.dart ('k') | client/tests/client/html/NodeTests.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698