Chromium Code Reviews| 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 $LIBRARYNAME; | 5 part of $LIBRARYNAME; |
| 6 | 6 |
| 7 class _ChildrenElementList extends ListBase<Element> { | 7 class _ChildrenElementList extends ListBase<Element> { |
| 8 // Raw Element. | 8 // Raw Element. |
| 9 final Element _element; | 9 final Element _element; |
| 10 final HtmlCollection _childElements; | 10 final HtmlCollection _childElements; |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 237 * border + margin box in this list. | 237 * border + margin box in this list. |
| 238 * | 238 * |
| 239 * This returns a rectangle with the dimenions actually available for content | 239 * This returns a rectangle with the dimenions actually available for content |
| 240 * in this element, in pixels, regardless of this element's box-sizing | 240 * in this element, in pixels, regardless of this element's box-sizing |
| 241 * property. Unlike [getBoundingClientRect], the dimensions of this rectangle | 241 * property. Unlike [getBoundingClientRect], the dimensions of this rectangle |
| 242 * will return the same numerical height if the element is hidden or not. This | 242 * will return the same numerical height if the element is hidden or not. This |
| 243 * can be used to retrieve jQuery's `outerHeight` value for an element. | 243 * can be used to retrieve jQuery's `outerHeight` value for an element. |
| 244 */ | 244 */ |
| 245 @Experimental() | 245 @Experimental() |
| 246 CssRect get marginEdge; | 246 CssRect get marginEdge; |
| 247 | |
| 248 @DomName('Element.onabort') | |
| 249 ElementStream<Event> get onAbort; | |
| 250 @DomName('Element.onbeforecopy') | |
|
blois
2013/08/08 00:12:11
Is it necessary to do all events? I'm worried abou
Emily Fortuna
2013/08/09 00:22:06
Now with autogeneration!
| |
| 251 ElementStream<Event> get onBeforeCopy; | |
| 252 @DomName('Element.onbeforecut') | |
| 253 ElementStream<Event> get onBeforeCut; | |
| 254 @DomName('Element.onbeforepaste') | |
| 255 ElementStream<Event> get onBeforePaste; | |
| 256 @DomName('Element.onblur') | |
| 257 ElementStream<Event> get onBlur; | |
| 258 @DomName('Element.onchange') | |
| 259 ElementStream<Event> get onChange; | |
| 260 @DomName('Element.onclick') | |
| 261 ElementStream<MouseEvent> get onClick; | |
| 262 @DomName('Element.oncontextmenu') | |
| 263 ElementStream<MouseEvent> get onContextMenu; | |
| 264 @DomName('Element.oncopy') | |
| 265 ElementStream<Event> get onCopy; | |
| 266 @DomName('Element.oncut') | |
| 267 ElementStream<Event> get onCut; | |
| 268 @DomName('Element.ondblclick') | |
| 269 ElementStream<Event> get onDoubleClick; | |
| 270 @DomName('Element.ondrag') | |
| 271 ElementStream<MouseEvent> get onDrag; | |
| 272 @DomName('Element.ondragend') | |
| 273 ElementStream<MouseEvent> get onDragEnd; | |
| 274 @DomName('Element.ondragenter') | |
| 275 ElementStream<MouseEvent> get onDragEnter; | |
| 276 @DomName('Element.ondragleave') | |
| 277 ElementStream<MouseEvent> get onDragLeave; | |
| 278 @DomName('Element.ondragover') | |
| 279 ElementStream<MouseEvent> get onDragOver; | |
| 280 @DomName('Element.ondragstart') | |
| 281 ElementStream<MouseEvent> get onDragStart; | |
| 282 @DomName('Element.ondrop') | |
| 283 ElementStream<MouseEvent> get onDrop; | |
| 284 @DomName('Element.onerror') | |
| 285 ElementStream<Event> get onError; | |
| 286 @DomName('Element.onfocus') | |
| 287 ElementStream<Event> get onFocus; | |
| 288 @DomName('Element.oninput') | |
| 289 ElementStream<Event> get onInput; | |
| 290 @DomName('Element.oninvalid') | |
| 291 ElementStream<Event> get onInvalid; | |
| 292 @DomName('Element.onkeydown') | |
| 293 ElementStream<KeyboardEvent> get onKeyDown; | |
| 294 @DomName('Element.onkeypress') | |
| 295 ElementStream<KeyboardEvent> get onKeyPress; | |
| 296 @DomName('Element.onkeyup') | |
| 297 ElementStream<KeyboardEvent> get onKeyUp; | |
| 298 @DomName('Element.onload') | |
| 299 ElementStream<Event> get onLoad; | |
| 300 @DomName('Element.onmousedown') | |
| 301 ElementStream<MouseEvent> get onMouseDown; | |
| 302 @DomName('Element.onmousemove') | |
| 303 ElementStream<MouseEvent> get onMouseMove; | |
| 304 @DomName('Element.onmouseout') | |
| 305 ElementStream<MouseEvent> get onMouseOut; | |
| 306 @DomName('Element.onmouseover') | |
| 307 ElementStream<MouseEvent> get onMouseOver; | |
| 308 @DomName('Element.onmouseup') | |
| 309 ElementStream<MouseEvent> get onMouseUp; | |
| 310 @DomName('Element.onmousewheel') | |
| 311 ElementStream<WheelEvent> get onMouseWheel; | |
| 312 @DomName('Element.onpaste') | |
| 313 ElementStream<Event> get onPaste; | |
| 314 @DomName('Element.onreset') | |
| 315 ElementStream<Event> get onReset; | |
| 316 @DomName('Element.onscroll') | |
| 317 ElementStream<Event> get onScroll; | |
| 318 @DomName('Element.onsearch') | |
| 319 ElementStream<Event> get onSearch; | |
| 320 @DomName('Element.onselect') | |
| 321 ElementStream<Event> get onSelect; | |
| 322 @DomName('Element.onselectstart') | |
| 323 ElementStream<Event> get onSelectStart; | |
| 324 @DomName('Element.onsubmit') | |
| 325 ElementStream<Event> get onSubmit; | |
| 326 @DomName('Element.ontouchcancel') | |
| 327 ElementStream<TouchEvent> get onTouchCancel; | |
| 328 @DomName('Element.ontouchend') | |
| 329 ElementStream<TouchEvent> get onTouchEnd; | |
| 330 @DomName('Element.ontouchenter') | |
| 331 ElementStream<TouchEvent> get onTouchEnter; | |
| 332 @DomName('Element.ontouchleave') | |
| 333 ElementStream<TouchEvent> get onTouchLeave; | |
| 334 @DomName('Element.ontouchmove') | |
| 335 ElementStream<TouchEvent> get onTouchMove; | |
| 336 @DomName('Element.ontouchl') | |
| 337 ElementStream<TouchEvent> get onTouchStart; | |
| 338 @DomName('Element.ontransitionend') | |
| 339 @SupportedBrowser(SupportedBrowser.CHROME) | |
| 340 @SupportedBrowser(SupportedBrowser.FIREFOX) | |
| 341 @SupportedBrowser(SupportedBrowser.IE, '10') | |
| 342 @SupportedBrowser(SupportedBrowser.SAFARI) | |
| 343 ElementStream<TransitionEvent> get onTransitionEnd; | |
| 344 @DomName('Element.onwebkitfullscreenchange') | |
| 345 ElementStream<Event> get onFullscreenChange; | |
| 346 @DomName('Element.onwebkitfullscreenerror') | |
| 347 ElementStream<Event> get onFullscreenError; | |
| 247 } | 348 } |
| 248 | 349 |
| 249 // TODO(jacobr): this is an inefficient implementation but it is hard to see | 350 // TODO(jacobr): this is an inefficient implementation but it is hard to see |
| 250 // a better option given that we cannot quite force NodeList to be an | 351 // a better option given that we cannot quite force NodeList to be an |
| 251 // ElementList as there are valid cases where a NodeList JavaScript object | 352 // ElementList as there are valid cases where a NodeList JavaScript object |
| 252 // contains Node objects that are not Elements. | 353 // contains Node objects that are not Elements. |
| 253 class _FrozenElementList<T extends Element> extends ListBase<T> implements Eleme ntList { | 354 class _FrozenElementList<T extends Element> extends ListBase<T> implements Eleme ntList { |
| 254 final List<Node> _nodeList; | 355 final List<Node> _nodeList; |
| 255 // The subset of _nodeList that are Elements. | 356 // The subset of _nodeList that are Elements. |
| 256 List<Element> _elementList; | 357 List<Element> _elementList; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 290 _elementList.forEach((e) => e.classes = value); | 391 _elementList.forEach((e) => e.classes = value); |
| 291 } | 392 } |
| 292 | 393 |
| 293 CssRect get contentEdge => new _ContentCssListRect(_elementList); | 394 CssRect get contentEdge => new _ContentCssListRect(_elementList); |
| 294 | 395 |
| 295 CssRect get paddingEdge => _elementList.first.paddingEdge; | 396 CssRect get paddingEdge => _elementList.first.paddingEdge; |
| 296 | 397 |
| 297 CssRect get borderEdge => _elementList.first.borderEdge; | 398 CssRect get borderEdge => _elementList.first.borderEdge; |
| 298 | 399 |
| 299 CssRect get marginEdge => _elementList.first.marginEdge; | 400 CssRect get marginEdge => _elementList.first.marginEdge; |
| 401 | |
| 402 ElementStream<Event> get onAbort => | |
| 403 Element.abortEvent._forElementTargetList(this); | |
| 404 ElementStream<Event> get onBeforeCopy => | |
| 405 Element.beforeCopyEvent._forElementTargetList(this); | |
| 406 ElementStream<Event> get onBeforeCut => | |
| 407 Element.beforeCutEvent._forElementTargetList(this); | |
| 408 ElementStream<Event> get onBeforePaste => | |
| 409 Element.beforePasteEvent._forElementTargetList(this); | |
| 410 ElementStream<Event> get onBlur => | |
| 411 Element.blurEvent._forElementTargetList(this); | |
| 412 ElementStream<Event> get onChange => | |
| 413 Element.changeEvent._forElementTargetList(this); | |
| 414 ElementStream<MouseEvent> get onClick => | |
| 415 Element.clickEvent._forElementTargetList(this); | |
| 416 ElementStream<MouseEvent> get onContextMenu => | |
| 417 Element.contextMenuEvent._forElementTargetList(this); | |
| 418 ElementStream<Event> get onCopy => | |
| 419 Element.copyEvent._forElementTargetList(this); | |
| 420 ElementStream<Event> get onCut => | |
| 421 Element.cutEvent._forElementTargetList(this); | |
| 422 ElementStream<Event> get onDoubleClick => | |
| 423 Element.doubleClickEvent._forElementTargetList(this); | |
| 424 ElementStream<MouseEvent> get onDrag => | |
| 425 Element.dragEvent._forElementTargetList(this); | |
| 426 ElementStream<MouseEvent> get onDragEnd => | |
| 427 Element.dragEndEvent._forElementTargetList(this); | |
| 428 ElementStream<MouseEvent> get onDragEnter => | |
| 429 Element.dragEnterEvent._forElementTargetList(this); | |
| 430 ElementStream<MouseEvent> get onDragLeave => | |
| 431 Element.dragLeaveEvent._forElementTargetList(this); | |
| 432 ElementStream<MouseEvent> get onDragOver => | |
| 433 Element.dragOverEvent._forElementTargetList(this); | |
| 434 ElementStream<MouseEvent> get onDragStart => | |
| 435 Element.dragStartEvent._forElementTargetList(this); | |
| 436 ElementStream<MouseEvent> get onDrop => | |
| 437 Element.dropEvent._forElementTargetList(this); | |
| 438 ElementStream<Event> get onError => | |
| 439 Element.errorEvent._forElementTargetList(this); | |
| 440 ElementStream<Event> get onFocus => | |
| 441 Element.focusEvent._forElementTargetList(this); | |
| 442 ElementStream<Event> get onInput => | |
| 443 Element.inputEvent._forElementTargetList(this); | |
| 444 ElementStream<Event> get onInvalid => | |
| 445 Element.invalidEvent._forElementTargetList(this); | |
| 446 ElementStream<KeyboardEvent> get onKeyDown => | |
| 447 Element.keyDownEvent._forElementTargetList(this); | |
| 448 ElementStream<KeyboardEvent> get onKeyPress => | |
| 449 Element.keyPressEvent._forElementTargetList(this); | |
| 450 ElementStream<KeyboardEvent> get onKeyUp => | |
| 451 Element.keyUpEvent._forElementTargetList(this); | |
| 452 ElementStream<Event> get onLoad => | |
| 453 Element.loadEvent._forElementTargetList(this); | |
| 454 ElementStream<MouseEvent> get onMouseDown => | |
| 455 Element.mouseDownEvent._forElementTargetList(this); | |
| 456 ElementStream<MouseEvent> get onMouseMove => | |
| 457 Element.mouseMoveEvent._forElementTargetList(this); | |
| 458 ElementStream<MouseEvent> get onMouseOut => | |
| 459 Element.mouseOutEvent._forElementTargetList(this); | |
| 460 ElementStream<MouseEvent> get onMouseOver => | |
| 461 Element.mouseOverEvent._forElementTargetList(this); | |
| 462 ElementStream<MouseEvent> get onMouseUp => | |
| 463 Element.mouseUpEvent._forElementTargetList(this); | |
| 464 ElementStream<WheelEvent> get onMouseWheel => | |
| 465 Element.mouseWheelEvent._forElementTargetList(this); | |
| 466 ElementStream<Event> get onPaste => | |
| 467 Element.pasteEvent._forElementTargetList(this); | |
| 468 ElementStream<Event> get onReset => | |
| 469 Element.resetEvent._forElementTargetList(this); | |
| 470 ElementStream<Event> get onScroll => | |
| 471 Element.scrollEvent._forElementTargetList(this); | |
| 472 ElementStream<Event> get onSearch => | |
| 473 Element.searchEvent._forElementTargetList(this); | |
| 474 ElementStream<Event> get onSelect => | |
| 475 Element.selectEvent._forElementTargetList(this); | |
| 476 ElementStream<Event> get onSelectStart => | |
| 477 Element.selectStartEvent._forElementTargetList(this); | |
| 478 ElementStream<Event> get onSubmit => | |
| 479 Element.submitEvent._forElementTargetList(this); | |
| 480 ElementStream<TouchEvent> get onTouchCancel => | |
| 481 Element.touchCancelEvent._forElementTargetList(this); | |
| 482 ElementStream<TouchEvent> get onTouchEnd => | |
| 483 Element.touchEndEvent._forElementTargetList(this); | |
| 484 ElementStream<TouchEvent> get onTouchEnter => | |
| 485 Element.touchEnterEvent._forElementTargetList(this); | |
| 486 ElementStream<TouchEvent> get onTouchLeave => | |
| 487 Element.touchLeaveEvent._forElementTargetList(this); | |
| 488 ElementStream<TouchEvent> get onTouchMove => | |
| 489 Element.touchMoveEvent._forElementTargetList(this); | |
| 490 ElementStream<TouchEvent> get onTouchStart => | |
| 491 Element.touchStartEvent._forElementTargetList(this); | |
| 492 ElementStream<TransitionEvent> get onTransitionEnd => | |
| 493 Element.transitionEndEvent._forElementTargetList(this); | |
| 494 ElementStream<Event> get onFullscreenChange => | |
| 495 Element.fullscreenChangeEvent._forElementTargetList(this); | |
| 496 ElementStream<Event> get onFullscreenError => | |
| 497 Element.fullscreenErrorEvent._forElementTargetList(this); | |
| 300 } | 498 } |
| 301 | 499 |
| 302 /** | 500 /** |
| 303 * An abstract class, which all HTML elements extend. | 501 * An abstract class, which all HTML elements extend. |
| 304 */ | 502 */ |
| 305 $(ANNOTATIONS)abstract class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC { | 503 $(ANNOTATIONS)abstract class $CLASSNAME$EXTENDS$IMPLEMENTS$NATIVESPEC { |
| 306 | 504 |
| 307 /** | 505 /** |
| 308 * Creates an HTML element from a valid fragment of HTML. | 506 * Creates an HTML element from a valid fragment of HTML. |
| 309 * | 507 * |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 868 case 'afterend': | 1066 case 'afterend': |
| 869 this.parentNode.insertBefore(node, this.nextNode); | 1067 this.parentNode.insertBefore(node, this.nextNode); |
| 870 break; | 1068 break; |
| 871 default: | 1069 default: |
| 872 throw new ArgumentError("Invalid position ${where}"); | 1070 throw new ArgumentError("Invalid position ${where}"); |
| 873 } | 1071 } |
| 874 } | 1072 } |
| 875 | 1073 |
| 876 /** | 1074 /** |
| 877 * Checks if this element matches the CSS selectors. | 1075 * Checks if this element matches the CSS selectors. |
| 1076 * | |
| 1077 * If `includeAncestors` is true, we examine all of this element's parent | |
| 1078 * elements and also return true if any of its parent elements matches | |
| 1079 * `selectors`. | |
| 878 */ | 1080 */ |
| 879 @Experimental() | 1081 @Experimental() |
| 880 bool matches(String selectors) { | 1082 bool matches(String selectors, [includeAncestors = false]) { |
|
blois
2013/08/08 00:12:11
This API should become an inlined native API, I'm
Emily Fortuna
2013/08/09 00:22:06
Where is there information about it becoming an in
| |
| 881 if (JS('bool', '!!#.matches', this)) { | 1083 var elem = this; |
| 882 return JS('bool', '#.matches(#)', this, selectors); | 1084 do { |
| 883 } else if (JS('bool', '!!#.webkitMatchesSelector', this)) { | 1085 bool matches = false; |
| 884 return JS('bool', '#.webkitMatchesSelector(#)', this, selectors); | 1086 if (JS('bool', '!!#.matches', elem)) { |
| 885 } else if (JS('bool', '!!#.mozMatchesSelector', this)) { | 1087 matches = JS('bool', '#.matches(#)', elem, selectors); |
| 886 return JS('bool', '#.mozMatchesSelector(#)', this, selectors); | 1088 } else if (JS('bool', '!!#.webkitMatchesSelector', elem)) { |
| 887 } else if (JS('bool', '!!#.msMatchesSelector', this)) { | 1089 matches = JS('bool', '#.webkitMatchesSelector(#)', elem, selectors); |
| 888 return JS('bool', '#.msMatchesSelector(#)', this, selectors); | 1090 } else if (JS('bool', '!!#.mozMatchesSelector', elem)) { |
| 889 } | 1091 matches = JS('bool', '#.mozMatchesSelector(#)', elem, selectors); |
| 890 throw new UnsupportedError("Not supported on this platform"); | 1092 } else if (JS('bool', '!!#.msMatchesSelector', elem)) { |
| 1093 matches = JS('bool', '#.msMatchesSelector(#)', elem, selectors); | |
| 1094 } else { | |
| 1095 throw new UnsupportedError("Not supported on this platform"); | |
| 1096 } | |
| 1097 if (matches) return true; | |
| 1098 elem = elem.parent; | |
| 1099 } while(includeAncestors && elem != null); | |
| 1100 return false; | |
| 891 } | 1101 } |
| 892 $else | 1102 $else |
| 893 $endif | 1103 $endif |
| 894 | 1104 |
| 895 $if DART2JS | 1105 $if DART2JS |
| 896 @Creates('Null') // Set from Dart code; does not instantiate a native type. | 1106 @Creates('Null') // Set from Dart code; does not instantiate a native type. |
| 897 $endif | 1107 $endif |
| 898 Element _templateInstanceRef; | 1108 Element _templateInstanceRef; |
| 899 | 1109 |
| 900 // Note: only used if `this is! TemplateElement` | 1110 // Note: only used if `this is! TemplateElement` |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1296 const ScrollAlignment._internal(this._value); | 1506 const ScrollAlignment._internal(this._value); |
| 1297 toString() => 'ScrollAlignment.$_value'; | 1507 toString() => 'ScrollAlignment.$_value'; |
| 1298 | 1508 |
| 1299 /// Attempt to align the element to the top of the scrollable area. | 1509 /// Attempt to align the element to the top of the scrollable area. |
| 1300 static const TOP = const ScrollAlignment._internal('TOP'); | 1510 static const TOP = const ScrollAlignment._internal('TOP'); |
| 1301 /// Attempt to center the element in the scrollable area. | 1511 /// Attempt to center the element in the scrollable area. |
| 1302 static const CENTER = const ScrollAlignment._internal('CENTER'); | 1512 static const CENTER = const ScrollAlignment._internal('CENTER'); |
| 1303 /// Attempt to align the element to the bottom of the scrollable area. | 1513 /// Attempt to align the element to the bottom of the scrollable area. |
| 1304 static const BOTTOM = const ScrollAlignment._internal('BOTTOM'); | 1514 static const BOTTOM = const ScrollAlignment._internal('BOTTOM'); |
| 1305 } | 1515 } |
| OLD | NEW |