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

Side by Side Diff: tools/dom/templates/html/impl/impl_Element.darttemplate

Issue 802603002: Simplify _FrozenElementList (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years 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 | « sdk/lib/html/dartium/html_dartium.dart ('k') | no next file » | 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) 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 class _ChildrenElementList extends ListBase<Element> 7 class _ChildrenElementList extends ListBase<Element>
8 implements NodeListWrapper { 8 implements NodeListWrapper {
9 // Raw Element. 9 // Raw Element.
10 final Element _element; 10 final Element _element;
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 * in this element, in pixels, regardless of this element's box-sizing 246 * in this element, in pixels, regardless of this element's box-sizing
247 * property. Unlike [getBoundingClientRect], the dimensions of this rectangle 247 * property. Unlike [getBoundingClientRect], the dimensions of this rectangle
248 * will return the same numerical height if the element is hidden or not. This 248 * will return the same numerical height if the element is hidden or not. This
249 * can be used to retrieve jQuery's `outerHeight` value for an element. 249 * can be used to retrieve jQuery's `outerHeight` value for an element.
250 */ 250 */
251 @Experimental() 251 @Experimental()
252 CssRect get marginEdge; 252 CssRect get marginEdge;
253 $!STREAM_GETTER_SIGNATURES 253 $!STREAM_GETTER_SIGNATURES
254 } 254 }
255 255
256 // TODO(jacobr): this is an inefficient implementation but it is hard to see 256 // Wrapper over an immutable NodeList to make it implement ElementList.
257 // a better option given that we cannot quite force NodeList to be an 257 //
258 // ElementList as there are valid cases where a NodeList JavaScript object 258 // Clients are {`Document`, `DocumentFragment`}.`querySelectorAll` which are
259 // contains Node objects that are not Elements. 259 // declared to return `ElementList`. This provides all the static analysis
260 class _FrozenElementList<T extends Element> extends ListBase<T> 260 // benefit so there is no need for this class have a constrained type parameter.
261 implements ElementList<T>, NodeListWrapper { 261 //
262 class _FrozenElementList extends ListBase
263 implements ElementList, NodeListWrapper {
262 final List<Node> _nodeList; 264 final List<Node> _nodeList;
263 // The subset of _nodeList that are Elements.
264 List<Element> _elementList;
265 265
266 _FrozenElementList._wrap(this._nodeList) { 266 _FrozenElementList._wrap(this._nodeList);
267 _elementList = _nodeList.where((e) => e is Element).toList();
268 }
269 267
270 int get length => _nodeList.length; 268 int get length => _nodeList.length;
271 269
272 Element operator [](int index) => _nodeList[index]; 270 Element operator [](int index) => _nodeList[index];
273 271
274 void operator []=(int index, Element value) { 272 void operator []=(int index, Element value) {
275 throw new UnsupportedError('Cannot modify list'); 273 throw new UnsupportedError('Cannot modify list');
276 } 274 }
277 275
278 void set length(int newLength) { 276 void set length(int newLength) {
279 throw new UnsupportedError('Cannot modify list'); 277 throw new UnsupportedError('Cannot modify list');
280 } 278 }
281 279
282 void sort([Comparator<Element> compare]) { 280 void sort([Comparator<Element> compare]) {
283 throw new UnsupportedError('Cannot sort list'); 281 throw new UnsupportedError('Cannot sort list');
284 } 282 }
285 283
286 void shuffle([Random random]) { 284 void shuffle([Random random]) {
287 throw new UnsupportedError('Cannot shuffle list'); 285 throw new UnsupportedError('Cannot shuffle list');
288 } 286 }
289 287
290 Element get first => _nodeList.first; 288 Element get first => _nodeList.first;
291 289
292 Element get last => _nodeList.last; 290 Element get last => _nodeList.last;
293 291
294 Element get single => _nodeList.single; 292 Element get single => _nodeList.single;
295 293
296 CssClassSet get classes => new _MultiElementCssClassSet(_elementList); 294 CssClassSet get classes => new _MultiElementCssClassSet(this);
297 295
298 CssStyleDeclarationBase get style => 296 CssStyleDeclarationBase get style =>
299 new _CssStyleDeclarationSet(_elementList); 297 new _CssStyleDeclarationSet(this);
300 298
301 void set classes(Iterable<String> value) { 299 void set classes(Iterable<String> value) {
302 _elementList.forEach((e) => e.classes = value); 300 _nodeList.forEach((e) => e.classes = value);
303 } 301 }
304 302
305 CssRect get contentEdge => new _ContentCssListRect(_elementList); 303 CssRect get contentEdge => new _ContentCssListRect(this);
306 304
307 CssRect get paddingEdge => _elementList.first.paddingEdge; 305 CssRect get paddingEdge => this.first.paddingEdge;
308 306
309 CssRect get borderEdge => _elementList.first.borderEdge; 307 CssRect get borderEdge => this.first.borderEdge;
310 308
311 CssRect get marginEdge => _elementList.first.marginEdge; 309 CssRect get marginEdge => this.first.marginEdge;
312 310
313 List<Node> get rawList => _nodeList; 311 List<Node> get rawList => _nodeList;
314 312
315 $!ELEMENT_STREAM_GETTERS 313 $!ELEMENT_STREAM_GETTERS
316 } 314 }
317 315
318 @DocsEditable() 316 @DocsEditable()
319 $(ANNOTATIONS)$(NATIVESPEC)abstract class $CLASSNAME$EXTENDS$IMPLEMENTS { 317 $(ANNOTATIONS)$(NATIVESPEC)abstract class $CLASSNAME$EXTENDS$IMPLEMENTS {
320 318
321 /** 319 /**
(...skipping 1160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1482 const ScrollAlignment._internal(this._value); 1480 const ScrollAlignment._internal(this._value);
1483 toString() => 'ScrollAlignment.$_value'; 1481 toString() => 'ScrollAlignment.$_value';
1484 1482
1485 /// Attempt to align the element to the top of the scrollable area. 1483 /// Attempt to align the element to the top of the scrollable area.
1486 static const TOP = const ScrollAlignment._internal('TOP'); 1484 static const TOP = const ScrollAlignment._internal('TOP');
1487 /// Attempt to center the element in the scrollable area. 1485 /// Attempt to center the element in the scrollable area.
1488 static const CENTER = const ScrollAlignment._internal('CENTER'); 1486 static const CENTER = const ScrollAlignment._internal('CENTER');
1489 /// Attempt to align the element to the bottom of the scrollable area. 1487 /// Attempt to align the element to the bottom of the scrollable area.
1490 static const BOTTOM = const ScrollAlignment._internal('BOTTOM'); 1488 static const BOTTOM = const ScrollAlignment._internal('BOTTOM');
1491 } 1489 }
OLDNEW
« no previous file with comments | « sdk/lib/html/dartium/html_dartium.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698