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

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

Issue 9655009: Remove files that have already been ported or do not need to be ported. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 9 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/html/src/Notification.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 class _ChildrenNodeList implements NodeList {
6 // Raw node.
7 final _node;
8 final _childNodes;
9
10 _ChildrenNodeList._wrap(var node)
11 : _childNodes = node.childNodes,
12 _node = node;
13
14 List<Node> _toList() {
15 final output = new List(_childNodes.length);
16 for (int i = 0, len = _childNodes.length; i < len; i++) {
17 output[i] = LevelDom.wrapNode(_childNodes[i]);
18 }
19 return output;
20 }
21
22 Node get first() {
23 return LevelDom.wrapNode(_node.firstChild);
24 }
25
26 void forEach(void f(Node element)) => _toList().forEach(f);
27
28 Collection map(f(Node element)) => _toList().map(f);
29
30 NodeList filter(bool f(Node element)) => new _NodeList(_toList().filter(f));
31
32 bool every(bool f(Node element)) {
33 for(Node element in this) {
34 if (!f(element)) {
35 return false;
36 }
37 };
38 return true;
39 }
40
41 bool some(bool f(Node element)) {
42 for(Node element in this) {
43 if (f(element)) {
44 return true;
45 }
46 };
47 return false;
48 }
49
50 /** @domName Node.hasChildNodes */
51 bool isEmpty() {
52 return !_node.hasChildNodes();
53 }
54
55 int get length() {
56 return _childNodes.length;
57 }
58
59 Node operator [](int index) {
60 return LevelDom.wrapNode(_childNodes[index]);
61 }
62
63 void operator []=(int index, Node value) {
64 _node.replaceChild(LevelDom.unwrap(value), _childNodes[index]);
65 }
66
67 void set length(int newLength) {
68 throw new UnsupportedOperationException('');
69 }
70
71 /** @domName Node.appendChild */
72 Node add(Node value) {
73 _node.appendChild(LevelDom.unwrap(value));
74 return value;
75 }
76
77 Node addLast(Node value) {
78 _node.appendChild(LevelDom.unwrap(value));
79 return value;
80 }
81
82 Iterator<Node> iterator() {
83 return _toList().iterator();
84 }
85
86 void addAll(Collection<Node> collection) {
87 for (Node node in collection) {
88 _node.appendChild(LevelDom.unwrap(node));
89 }
90 }
91
92 void sort(int compare(Node a, Node b)) {
93 throw const UnsupportedOperationException('TODO(jacobr): should we impl?');
94 }
95
96 void copyFrom(List<Object> src, int srcStart, int dstStart, int count) {
97 throw 'Not impl yet. todo(jacobr)';
98 }
99
100 void setRange(int start, int length, List from, [int startFrom = 0]) =>
101 Lists.setRange(this, start, length, from, startFrom);
102
103 void removeRange(int start, int length) =>
104 Lists.removeRange(this, start, length, (i) => this[i].remove());
105
106 void insertRange(int start, int length, [initialValue = null]) {
107 throw const NotImplementedException();
108 }
109
110 NodeList getRange(int start, int length) =>
111 new _NodeList(Lists.getRange(this, start, length));
112
113 int indexOf(Node element, [int start = 0]) {
114 return Lists.indexOf(this, element, start, this.length);
115 }
116
117 int lastIndexOf(Node element, [int start = null]) {
118 if (start === null) start = length - 1;
119 return Lists.lastIndexOf(this, element, start);
120 }
121
122 void clear() {
123 _node.textContent = '';
124 }
125
126 Node removeLast() {
127 final last = this.last();
128 if (last != null) {
129 _node.removeChild(LevelDom.unwrap(last));
130 }
131 return last;
132 }
133
134 Node last() {
135 return LevelDom.wrapNode(_node.lastChild);
136 }
137 }
138
139 // TODO(nweiz): when all implementations we target have the same name for the
140 // coreimpl implementation of List<E>, extend that rather than wrapping.
141 class _ListWrapper<E> implements List<E> {
142 List<E> _list;
143
144 _ListWrapper(List<E> this._list);
145
146 Iterator<E> iterator() => _list.iterator();
147
148 void forEach(void f(E element)) => _list.forEach(f);
149
150 Collection map(f(E element)) => _list.map(f);
151
152 List<E> filter(bool f(E element)) => _list.filter(f);
153
154 bool every(bool f(E element)) => _list.every(f);
155
156 bool some(bool f(E element)) => _list.some(f);
157
158 bool isEmpty() => _list.isEmpty();
159
160 int get length() => _list.length;
161
162 E operator [](int index) => _list[index];
163
164 void operator []=(int index, E value) { _list[index] = value; }
165
166 void set length(int newLength) { _list.length = newLength; }
167
168 void add(E value) => _list.add(value);
169
170 void addLast(E value) => _list.addLast(value);
171
172 void addAll(Collection<E> collection) => _list.addAll(collection);
173
174 void sort(int compare(E a, E b)) => _list.sort(compare);
175
176 int indexOf(E element, [int start = 0]) => _list.indexOf(element, start);
177
178 int lastIndexOf(E element, [int start = 0]) =>
179 _list.lastIndexOf(element, start);
180
181 void clear() => _list.clear();
182
183 E removeLast() => _list.removeLast();
184
185 E last() => _list.last();
186
187 List<E> getRange(int start, int length) => _list.getRange(start, length);
188
189 void setRange(int start, int length, List<E> from, [int startFrom = 0]) =>
190 _list.setRange(start, length, from, startFrom);
191
192 void removeRange(int start, int length) => _list.removeRange(start, length);
193
194 void insertRange(int start, int length, [E initialValue = null]) =>
195 _list.insertRange(start, length, initialValue);
196
197 E get first() => _list[0];
198 }
199
200 class _NodeList extends _ListWrapper<Node> implements NodeList {
201 _NodeList(List<Node> list) : super(list);
202
203 NodeList filter(bool f(Node element)) => new _NodeList(super.filter(f));
204
205 NodeList getRange(int start, int length) =>
206 new _NodeList(super.getRange(start, length));
207 }
208
209 class NodeWrappingImplementation extends EventTargetWrappingImplementation imple ments Node {
210 NodeList _nodes;
211
212 NodeWrappingImplementation._wrap(ptr) : super._wrap(ptr);
213
214 void set nodes(Collection<Node> value) {
215 // Copy list first since we don't want liveness during iteration.
216 List copy = new List.from(value);
217 nodes.clear();
218 nodes.addAll(copy);
219 }
220
221 NodeList get nodes() {
222 if (_nodes === null) {
223 _nodes = new _ChildrenNodeList._wrap(_ptr);
224 }
225 return _nodes;
226 }
227
228 Node get nextNode() => LevelDom.wrapNode(_ptr.nextSibling);
229
230 Document get document() => LevelDom.wrapDocument(_ptr.ownerDocument);
231
232 Node get parent() => LevelDom.wrapNode(_ptr.parentNode);
233
234 Node get previousNode() => LevelDom.wrapNode(_ptr.previousSibling);
235
236 String get text() => _ptr.textContent;
237
238 void set text(String value) { _ptr.textContent = value; }
239
240 // New methods implemented.
241 Node replaceWith(Node otherNode) {
242 try {
243 _ptr.parentNode.replaceChild(LevelDom.unwrap(otherNode), _ptr);
244 } catch(var e) {
245 // TODO(jacobr): what should we return on failure?
246 }
247 return this;
248 }
249
250 Node remove() {
251 // TODO(jacobr): should we throw an exception if parent is already null?
252 if (_ptr.parentNode !== null) {
253 _ptr.parentNode.removeChild(_ptr);
254 }
255 return this;
256 }
257
258 /** @domName contains */
259 bool contains(Node otherNode) {
260 // TODO: Feature detect and use built in.
261 while (otherNode != null && otherNode != this) {
262 otherNode = otherNode.parent;
263 }
264 return otherNode == this;
265 }
266
267 // TODO(jacobr): remove when/if List supports a method similar to
268 // insertBefore or we switch NodeList to implement LinkedList rather than
269 // array.
270 Node insertBefore(Node newChild, Node refChild) {
271 return LevelDom.wrapNode(_ptr.insertBefore(
272 LevelDom.unwrap(newChild), LevelDom.unwrap(refChild)));
273 }
274
275 Node clone(bool deep) {
276 return LevelDom.wrapNode(_ptr.cloneNode(deep));
277 }
278 }
OLDNEW
« no previous file with comments | « client/html/src/NodeList.dart ('k') | client/html/src/Notification.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698