Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /// The Dart HTML library. | 1 /// The Dart HTML library. |
| 2 library dart.dom.html; | 2 library dart.dom.html; |
| 3 | 3 |
| 4 import 'dart:async'; | 4 import 'dart:async'; |
| 5 import 'dart:collection'; | 5 import 'dart:collection'; |
| 6 import 'dart:_collection-dev' hide Symbol; | 6 import 'dart:_collection-dev' hide Symbol; |
| 7 import 'dart:html_common'; | 7 import 'dart:html_common'; |
| 8 import 'dart:indexed_db'; | 8 import 'dart:indexed_db'; |
| 9 import 'dart:isolate'; | 9 import 'dart:isolate'; |
| 10 import 'dart:json' as json; | 10 import 'dart:json' as json; |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 420 @DomName('HTMLAreaElement.target') | 420 @DomName('HTMLAreaElement.target') |
| 421 @DocsEditable | 421 @DocsEditable |
| 422 String target; | 422 String target; |
| 423 } | 423 } |
| 424 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 424 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 425 // for details. All rights reserved. Use of this source code is governed by a | 425 // for details. All rights reserved. Use of this source code is governed by a |
| 426 // BSD-style license that can be found in the LICENSE file. | 426 // BSD-style license that can be found in the LICENSE file. |
| 427 | 427 |
| 428 | 428 |
| 429 @DocsEditable | 429 @DocsEditable |
| 430 @DomName('Attr') | |
| 431 class Attr extends Node native "Attr" { | |
| 432 } | |
| 433 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| 434 // for details. All rights reserved. Use of this source code is governed by a | |
| 435 // BSD-style license that can be found in the LICENSE file. | |
| 436 | |
| 437 | |
| 438 @DocsEditable | |
| 439 @DomName('HTMLAudioElement') | 430 @DomName('HTMLAudioElement') |
| 440 class AudioElement extends MediaElement native "HTMLAudioElement" { | 431 class AudioElement extends MediaElement native "HTMLAudioElement" { |
| 441 | 432 |
| 442 @DomName('HTMLAudioElement.HTMLAudioElement') | 433 @DomName('HTMLAudioElement.HTMLAudioElement') |
| 443 @DocsEditable | 434 @DocsEditable |
| 444 factory AudioElement([String src]) { | 435 factory AudioElement([String src]) { |
| 445 if (?src) { | 436 if (?src) { |
| 446 return AudioElement._create_1(src); | 437 return AudioElement._create_1(src); |
| 447 } | 438 } |
| 448 return AudioElement._create_2(); | 439 return AudioElement._create_2(); |
| (...skipping 7186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7635 * [x-tags]: http://x-tags.org/ | 7626 * [x-tags]: http://x-tags.org/ |
| 7636 */ | 7627 */ |
| 7637 // Note: return type is `dynamic` for convenience to suppress warnings when | 7628 // Note: return type is `dynamic` for convenience to suppress warnings when |
| 7638 // members of the component are used. The actual type is a subtype of Element. | 7629 // members of the component are used. The actual type is a subtype of Element. |
| 7639 get xtag => _xtag != null ? _xtag : this; | 7630 get xtag => _xtag != null ? _xtag : this; |
| 7640 | 7631 |
| 7641 void set xtag(Element value) { | 7632 void set xtag(Element value) { |
| 7642 _xtag = value; | 7633 _xtag = value; |
| 7643 } | 7634 } |
| 7644 | 7635 |
| 7636 @DomName('Element.localName') | |
| 7637 @DocsEditable | |
| 7638 String get localName => $dom_localName; | |
| 7639 | |
| 7640 @DomName('Element.namespaceUri') | |
| 7641 @DocsEditable | |
| 7642 String get namespaceUri => $dom_namespaceUri; | |
| 7643 | |
| 7644 String toString() => localName; | |
| 7645 | |
| 7645 /** | 7646 /** |
| 7646 * Scrolls this element into view. | 7647 * Scrolls this element into view. |
| 7647 * | 7648 * |
| 7648 * Only one of of the alignment options may be specified at a time. | 7649 * Only one of of the alignment options may be specified at a time. |
| 7649 * | 7650 * |
| 7650 * If no options are specified then this will attempt to scroll the minimum | 7651 * If no options are specified then this will attempt to scroll the minimum |
| 7651 * amount needed to bring the element into view. | 7652 * amount needed to bring the element into view. |
| 7652 * | 7653 * |
| 7653 * Note that alignCenter is currently only supported on WebKit platforms. If | 7654 * Note that alignCenter is currently only supported on WebKit platforms. If |
| 7654 * alignCenter is specified but not supported then this will fall back to | 7655 * alignCenter is specified but not supported then this will fall back to |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7689 return 'wheel'; | 7690 return 'wheel'; |
| 7690 } else if (JS('bool', '#.onmousewheel !== undefined', e)) { | 7691 } else if (JS('bool', '#.onmousewheel !== undefined', e)) { |
| 7691 // Chrome & IE | 7692 // Chrome & IE |
| 7692 return 'mousewheel'; | 7693 return 'mousewheel'; |
| 7693 } else { | 7694 } else { |
| 7694 // Firefox | 7695 // Firefox |
| 7695 return 'DOMMouseScroll'; | 7696 return 'DOMMouseScroll'; |
| 7696 } | 7697 } |
| 7697 } | 7698 } |
| 7698 | 7699 |
| 7699 @DomName('Element.webkitTransitionEndEvent') | 7700 @DomName('Element.transitionEndEvent') |
| 7700 static const EventStreamProvider<TransitionEvent> transitionEndEvent = | 7701 static const EventStreamProvider<TransitionEvent> transitionEndEvent = |
| 7701 const _CustomEventStreamProvider<TransitionEvent>( | 7702 const _CustomEventStreamProvider<TransitionEvent>( |
| 7702 Element._determineTransitionEventType); | 7703 Element._determineTransitionEventType); |
| 7703 | 7704 |
| 7704 static String _determineTransitionEventType(EventTarget e) { | 7705 static String _determineTransitionEventType(EventTarget e) { |
| 7705 // Unfortunately the normal 'ontransitionend' style checks don't work here. | 7706 // Unfortunately the normal 'ontransitionend' style checks don't work here. |
| 7706 if (Device.isWebKit) { | 7707 if (Device.isWebKit) { |
| 7707 return 'webkitTransitionEnd'; | 7708 return 'webkitTransitionEnd'; |
| 7708 } else if (Device.isOpera) { | 7709 } else if (Device.isOpera) { |
| 7709 return 'oTransitionEnd'; | 7710 return 'oTransitionEnd'; |
| (...skipping 1137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8847 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features | 8848 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features |
| 8848 @Experimental | 8849 @Experimental |
| 8849 Stream<TouchEvent> get onTouchMove => touchMoveEvent.forTarget(this); | 8850 Stream<TouchEvent> get onTouchMove => touchMoveEvent.forTarget(this); |
| 8850 | 8851 |
| 8851 @DomName('Element.ontouchstart') | 8852 @DomName('Element.ontouchstart') |
| 8852 @DocsEditable | 8853 @DocsEditable |
| 8853 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features | 8854 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features |
| 8854 @Experimental | 8855 @Experimental |
| 8855 Stream<TouchEvent> get onTouchStart => touchStartEvent.forTarget(this); | 8856 Stream<TouchEvent> get onTouchStart => touchStartEvent.forTarget(this); |
| 8856 | 8857 |
| 8857 @DomName('Element.onwebkitTransitionEnd') | 8858 @DomName('Element.ontransitionend') |
| 8858 @DocsEditable | 8859 @DocsEditable |
| 8859 @SupportedBrowser(SupportedBrowser.CHROME) | 8860 @SupportedBrowser(SupportedBrowser.CHROME) |
| 8860 @SupportedBrowser(SupportedBrowser.FIREFOX) | 8861 @SupportedBrowser(SupportedBrowser.FIREFOX) |
| 8861 @SupportedBrowser(SupportedBrowser.IE, '10') | 8862 @SupportedBrowser(SupportedBrowser.IE, '10') |
| 8862 @SupportedBrowser(SupportedBrowser.SAFARI) | 8863 @SupportedBrowser(SupportedBrowser.SAFARI) |
| 8863 @deprecated | |
| 8864 Stream<TransitionEvent> get onTransitionEnd => transitionEndEvent.forTarget(th is); | 8864 Stream<TransitionEvent> get onTransitionEnd => transitionEndEvent.forTarget(th is); |
| 8865 | 8865 |
| 8866 @DomName('Element.onwebkitfullscreenchange') | 8866 @DomName('Element.onwebkitfullscreenchange') |
| 8867 @DocsEditable | 8867 @DocsEditable |
| 8868 // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html | 8868 // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html |
| 8869 @Experimental | 8869 @Experimental |
| 8870 Stream<Event> get onFullscreenChange => fullscreenChangeEvent.forTarget(this); | 8870 Stream<Event> get onFullscreenChange => fullscreenChangeEvent.forTarget(this); |
| 8871 | 8871 |
| 8872 @DomName('Element.onwebkitfullscreenerror') | 8872 @DomName('Element.onwebkitfullscreenerror') |
| 8873 @DocsEditable | 8873 @DocsEditable |
| (...skipping 6948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 15822 } else { | 15822 } else { |
| 15823 for (var node in newNodes) { | 15823 for (var node in newNodes) { |
| 15824 this.insertBefore(node, refChild); | 15824 this.insertBefore(node, refChild); |
| 15825 } | 15825 } |
| 15826 } | 15826 } |
| 15827 } | 15827 } |
| 15828 | 15828 |
| 15829 /** | 15829 /** |
| 15830 * Print out a String representation of this Node. | 15830 * Print out a String representation of this Node. |
| 15831 */ | 15831 */ |
| 15832 String toString() => localName == null ? | 15832 String toString() => nodeValue == null ? super.toString() : nodeValue; |
| 15833 (nodeValue == null ? super.toString() : nodeValue) : localName; | |
| 15834 | 15833 |
| 15835 /** | 15834 /** |
| 15836 * Binds the attribute [name] to the [path] of the [model]. | 15835 * Binds the attribute [name] to the [path] of the [model]. |
| 15837 * Path is a String of accessors such as `foo.bar.baz`. | 15836 * Path is a String of accessors such as `foo.bar.baz`. |
| 15838 */ | 15837 */ |
| 15839 @Experimental | 15838 @Experimental |
| 15840 void bind(String name, model, String path) { | 15839 void bind(String name, model, String path) { |
| 15841 // TODO(jmesserly): should we throw instead? | 15840 // TODO(jmesserly): should we throw instead? |
| 15842 window.console.error('Unhandled binding to Node: ' | 15841 window.console.error('Unhandled binding to Node: ' |
| 15843 '$this $name $model $path'); | 15842 '$this $name $model $path'); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 15918 @JSName('firstChild') | 15917 @JSName('firstChild') |
| 15919 @DomName('Node.firstChild') | 15918 @DomName('Node.firstChild') |
| 15920 @DocsEditable | 15919 @DocsEditable |
| 15921 final Node $dom_firstChild; | 15920 final Node $dom_firstChild; |
| 15922 | 15921 |
| 15923 @JSName('lastChild') | 15922 @JSName('lastChild') |
| 15924 @DomName('Node.lastChild') | 15923 @DomName('Node.lastChild') |
| 15925 @DocsEditable | 15924 @DocsEditable |
| 15926 final Node $dom_lastChild; | 15925 final Node $dom_lastChild; |
| 15927 | 15926 |
| 15927 @JSName('localName') | |
| 15928 @DomName('Node.localName') | 15928 @DomName('Node.localName') |
| 15929 @DocsEditable | 15929 @DocsEditable |
| 15930 // http://dom.spec.whatwg.org/#dom-node-localname | 15930 // http://dom.spec.whatwg.org/#dom-node-localname |
| 15931 @deprecated // deprecated | 15931 @deprecated // deprecated |
| 15932 final String localName; | 15932 final String $dom_localName; |
| 15933 | 15933 |
| 15934 @JSName('namespaceURI') | 15934 @JSName('namespaceURI') |
| 15935 @DomName('Node.namespaceURI') | 15935 @DomName('Node.namespaceURI') |
| 15936 @DocsEditable | 15936 @DocsEditable |
| 15937 // http://dom.spec.whatwg.org/#dom-node-namespaceuri | 15937 // http://dom.spec.whatwg.org/#dom-node-namespaceuri |
| 15938 @deprecated // deprecated | 15938 @deprecated // deprecated |
| 15939 final String $dom_namespaceUri; | 15939 final String $dom_namespaceUri; |
| 15940 | 15940 |
| 15941 @JSName('nextSibling') | 15941 @JSName('nextSibling') |
| 15942 @DomName('Node.nextSibling') | 15942 @DomName('Node.nextSibling') |
| (...skipping 7270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 23213 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features | 23213 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features |
| 23214 @Experimental | 23214 @Experimental |
| 23215 Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this); | 23215 Stream<TouchEvent> get onTouchMove => Element.touchMoveEvent.forTarget(this); |
| 23216 | 23216 |
| 23217 @DomName('Window.ontouchstart') | 23217 @DomName('Window.ontouchstart') |
| 23218 @DocsEditable | 23218 @DocsEditable |
| 23219 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features | 23219 // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features |
| 23220 @Experimental | 23220 @Experimental |
| 23221 Stream<TouchEvent> get onTouchStart => Element.touchStartEvent.forTarget(this) ; | 23221 Stream<TouchEvent> get onTouchStart => Element.touchStartEvent.forTarget(this) ; |
| 23222 | 23222 |
| 23223 @DomName('Window.ontransitionend') | |
| 23224 @DocsEditable | |
| 23225 Stream<TransitionEvent> get onTransitionEnd => Element.transitionEndEvent.forT arget(this); | |
| 23226 | |
| 23223 @DomName('Window.onunload') | 23227 @DomName('Window.onunload') |
| 23224 @DocsEditable | 23228 @DocsEditable |
| 23225 Stream<Event> get onUnload => unloadEvent.forTarget(this); | 23229 Stream<Event> get onUnload => unloadEvent.forTarget(this); |
| 23226 | 23230 |
| 23227 @DomName('Window.onwebkitAnimationEnd') | 23231 @DomName('Window.onwebkitAnimationEnd') |
| 23228 @DocsEditable | 23232 @DocsEditable |
| 23229 @Experimental // untriaged | 23233 @Experimental // untriaged |
| 23230 Stream<AnimationEvent> get onAnimationEnd => animationEndEvent.forTarget(this) ; | 23234 Stream<AnimationEvent> get onAnimationEnd => animationEndEvent.forTarget(this) ; |
| 23231 | 23235 |
| 23232 @DomName('Window.onwebkitAnimationIteration') | 23236 @DomName('Window.onwebkitAnimationIteration') |
| 23233 @DocsEditable | 23237 @DocsEditable |
| 23234 @Experimental // untriaged | 23238 @Experimental // untriaged |
| 23235 Stream<AnimationEvent> get onAnimationIteration => animationIterationEvent.for Target(this); | 23239 Stream<AnimationEvent> get onAnimationIteration => animationIterationEvent.for Target(this); |
| 23236 | 23240 |
| 23237 @DomName('Window.onwebkitAnimationStart') | 23241 @DomName('Window.onwebkitAnimationStart') |
| 23238 @DocsEditable | 23242 @DocsEditable |
| 23239 @Experimental // untriaged | 23243 @Experimental // untriaged |
| 23240 Stream<AnimationEvent> get onAnimationStart => animationStartEvent.forTarget(t his); | 23244 Stream<AnimationEvent> get onAnimationStart => animationStartEvent.forTarget(t his); |
| 23241 | 23245 |
| 23242 @DomName('Window.onwebkitTransitionEnd') | |
| 23243 @DocsEditable | |
| 23244 @deprecated | |
| 23245 Stream<TransitionEvent> get onTransitionEnd => Element.transitionEndEvent.forT arget(this); | |
| 23246 | |
| 23247 | 23246 |
| 23248 @DomName('DOMWindow.beforeunloadEvent') | 23247 @DomName('DOMWindow.beforeunloadEvent') |
| 23249 @DocsEditable | 23248 @DocsEditable |
| 23250 static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent = | 23249 static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent = |
| 23251 const _BeforeUnloadEventStreamProvider('beforeunload'); | 23250 const _BeforeUnloadEventStreamProvider('beforeunload'); |
| 23252 | 23251 |
| 23253 @DomName('DOMWindow.onbeforeunload') | 23252 @DomName('DOMWindow.onbeforeunload') |
| 23254 @DocsEditable | 23253 @DocsEditable |
| 23255 Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this); | 23254 Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this); |
| 23256 } | 23255 } |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 23611 @DomName('XSLTProcessor.transformToFragment') | 23610 @DomName('XSLTProcessor.transformToFragment') |
| 23612 @DocsEditable | 23611 @DocsEditable |
| 23613 DocumentFragment transformToFragment(Node source, Document docVal) native; | 23612 DocumentFragment transformToFragment(Node source, Document docVal) native; |
| 23614 } | 23613 } |
| 23615 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 23614 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 23616 // for details. All rights reserved. Use of this source code is governed by a | 23615 // for details. All rights reserved. Use of this source code is governed by a |
| 23617 // BSD-style license that can be found in the LICENSE file. | 23616 // BSD-style license that can be found in the LICENSE file. |
| 23618 | 23617 |
| 23619 | 23618 |
| 23620 @DocsEditable | 23619 @DocsEditable |
| 23620 @DomName('Attr') | |
| 23621 class _Attr extends Node native "Attr" { | |
| 23622 | |
| 23623 @DomName('Attr.isId') | |
| 23624 @DocsEditable | |
| 23625 final bool isId; | |
| 23626 | |
| 23627 @DomName('Attr.name') | |
| 23628 @DocsEditable | |
| 23629 final String name; | |
| 23630 | |
| 23631 @DomName('Attr.ownerElement') | |
| 23632 @DocsEditable | |
| 23633 @deprecated // deprecated | |
| 23634 final Element ownerElement; | |
| 23635 | |
| 23636 @DomName('Attr.specified') | |
| 23637 @DocsEditable | |
| 23638 @deprecated // deprecated | |
|
Emily Fortuna
2013/05/29 20:20:43
nit, but why have the comment that says the same t
blois
2013/05/29 20:28:22
This is a byproduct of the generation of the annot
Emily Fortuna
2013/05/29 20:31:44
I remember. It's just a little odd in this case. N
| |
| 23639 final bool specified; | |
| 23640 | |
| 23641 @DomName('Attr.value') | |
| 23642 @DocsEditable | |
| 23643 String value; | |
| 23644 } | |
| 23645 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| 23646 // for details. All rights reserved. Use of this source code is governed by a | |
| 23647 // BSD-style license that can be found in the LICENSE file. | |
| 23648 | |
| 23649 | |
| 23650 @DocsEditable | |
| 23621 @DomName('CSSPrimitiveValue') | 23651 @DomName('CSSPrimitiveValue') |
| 23622 // http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface | 23652 // http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface |
| 23623 @deprecated // deprecated | 23653 @deprecated // deprecated |
| 23624 abstract class _CSSPrimitiveValue extends _CSSValue native "CSSPrimitiveValue" { | 23654 abstract class _CSSPrimitiveValue extends _CSSValue native "CSSPrimitiveValue" { |
| 23625 } | 23655 } |
| 23626 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 23656 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 23627 // for details. All rights reserved. Use of this source code is governed by a | 23657 // for details. All rights reserved. Use of this source code is governed by a |
| 23628 // BSD-style license that can be found in the LICENSE file. | 23658 // BSD-style license that can be found in the LICENSE file. |
| 23629 | 23659 |
| 23630 | 23660 |
| (...skipping 1219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 24850 f(key, value); | 24880 f(key, value); |
| 24851 } | 24881 } |
| 24852 } | 24882 } |
| 24853 | 24883 |
| 24854 Iterable<String> get keys { | 24884 Iterable<String> get keys { |
| 24855 // TODO: generate a lazy collection instead. | 24885 // TODO: generate a lazy collection instead. |
| 24856 var attributes = _element.$dom_attributes; | 24886 var attributes = _element.$dom_attributes; |
| 24857 var keys = new List<String>(); | 24887 var keys = new List<String>(); |
| 24858 for (int i = 0, len = attributes.length; i < len; i++) { | 24888 for (int i = 0, len = attributes.length; i < len; i++) { |
| 24859 if (_matches(attributes[i])) { | 24889 if (_matches(attributes[i])) { |
| 24860 keys.add(attributes[i].localName); | 24890 keys.add(attributes[i].name); |
|
Emily Fortuna
2013/05/29 20:20:43
I don't understand this change. I don't see a "nam
blois
2013/05/29 20:28:22
This is iterating through the attributes (type is
Emily Fortuna
2013/05/29 20:31:44
I get that, but I don't see the name field here in
blois
2013/05/29 21:42:06
Yep, the change section preceeding this one in thi
Emily Fortuna
2013/05/29 22:27:43
(facepalm) Duh!
| |
| 24861 } | 24891 } |
| 24862 } | 24892 } |
| 24863 return keys; | 24893 return keys; |
| 24864 } | 24894 } |
| 24865 | 24895 |
| 24866 Iterable<String> get values { | 24896 Iterable<String> get values { |
| 24867 // TODO: generate a lazy collection instead. | 24897 // TODO: generate a lazy collection instead. |
| 24868 var attributes = _element.$dom_attributes; | 24898 var attributes = _element.$dom_attributes; |
| 24869 var values = new List<String>(); | 24899 var values = new List<String>(); |
| 24870 for (int i = 0, len = attributes.length; i < len; i++) { | 24900 for (int i = 0, len = attributes.length; i < len; i++) { |
| (...skipping 4427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 29298 _position = nextPosition; | 29328 _position = nextPosition; |
| 29299 return true; | 29329 return true; |
| 29300 } | 29330 } |
| 29301 _current = null; | 29331 _current = null; |
| 29302 _position = _array.length; | 29332 _position = _array.length; |
| 29303 return false; | 29333 return false; |
| 29304 } | 29334 } |
| 29305 | 29335 |
| 29306 T get current => _current; | 29336 T get current => _current; |
| 29307 } | 29337 } |
| OLD | NEW |