| 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 @DocsEditable() | 7 @DocsEditable() |
| 8 $if DART2JS | 8 $if DART2JS |
| 9 $(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS native "Wind
ow,DOMWindow" { | 9 $(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS native "Wind
ow,DOMWindow" { |
| 10 $else | 10 $else |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 return new Point(result.x, result.y); | 264 return new Point(result.x, result.y); |
| 265 } | 265 } |
| 266 | 266 |
| 267 /** | 267 /** |
| 268 * Checks whether [convertPointFromNodeToPage] and | 268 * Checks whether [convertPointFromNodeToPage] and |
| 269 * [convertPointFromPageToNode] are supported on the current platform. | 269 * [convertPointFromPageToNode] are supported on the current platform. |
| 270 */ | 270 */ |
| 271 static bool get supportsPointConversions => _DomPoint.supported; | 271 static bool get supportsPointConversions => _DomPoint.supported; |
| 272 $!MEMBERS | 272 $!MEMBERS |
| 273 | 273 |
| 274 /** |
| 275 * Static factory designed to expose `beforeunload` events to event |
| 276 * handlers that are not necessarily instances of [Window]. |
| 277 * |
| 278 * See [EventStreamProvider] for usage information. |
| 279 */ |
| 274 @DomName('Window.beforeunloadEvent') | 280 @DomName('Window.beforeunloadEvent') |
| 275 @DocsEditable() | |
| 276 static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent = | 281 static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent = |
| 277 const _BeforeUnloadEventStreamProvider('beforeunload'); | 282 const _BeforeUnloadEventStreamProvider('beforeunload'); |
| 278 | 283 |
| 284 /// Stream of `beforeunload` events handled by this [Window]. |
| 279 @DomName('Window.onbeforeunload') | 285 @DomName('Window.onbeforeunload') |
| 280 @DocsEditable() | |
| 281 Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this); | 286 Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this); |
| 282 | 287 |
| 283 void moveTo(Point p) { | 288 void moveTo(Point p) { |
| 284 _moveTo(p.x, p.y); | 289 _moveTo(p.x, p.y); |
| 285 } | 290 } |
| 286 | 291 |
| 287 $if DART2JS | 292 $if DART2JS |
| 288 int get scrollX => JS('bool', '("scrollX" in #)', this) ? JS('int', | 293 int get scrollX => JS('bool', '("scrollX" in #)', this) ? JS('int', |
| 289 '#.scrollX', this) : document.documentElement.scrollLeft; | 294 '#.scrollX', this) : document.documentElement.scrollLeft; |
| 290 int get scrollY => JS('bool', '("scrollY" in #)', this) ? JS('int', | 295 int get scrollY => JS('bool', '("scrollY" in #)', this) ? JS('int', |
| 291 '#.scrollY', this) : document.documentElement.scrollTop; | 296 '#.scrollY', this) : document.documentElement.scrollTop; |
| 292 $endif | 297 $endif |
| 293 } | 298 } |
| 294 | 299 |
| 300 $if DART2JS |
| 295 class _BeforeUnloadEvent extends _WrappedEvent implements BeforeUnloadEvent { | 301 class _BeforeUnloadEvent extends _WrappedEvent implements BeforeUnloadEvent { |
| 296 String _returnValue; | 302 String _returnValue; |
| 297 | 303 |
| 298 _BeforeUnloadEvent(Event base): super(base); | 304 _BeforeUnloadEvent(Event base): super(base); |
| 299 | 305 |
| 300 String get returnValue => _returnValue; | 306 String get returnValue => _returnValue; |
| 301 | 307 |
| 302 void set returnValue(String value) { | 308 void set returnValue(String value) { |
| 303 _returnValue = value; | 309 _returnValue = value; |
| 304 $if DART2JS | |
| 305 // FF and IE use the value as the return value, Chrome will return this from | 310 // FF and IE use the value as the return value, Chrome will return this from |
| 306 // the event callback function. | 311 // the event callback function. |
| 307 if (JS('bool', '("returnValue" in #)', wrapped)) { | 312 if (JS('bool', '("returnValue" in #)', wrapped)) { |
| 308 JS('void', '#.returnValue = #', wrapped, value); | 313 JS('void', '#.returnValue = #', wrapped, value); |
| 309 } | 314 } |
| 310 $endif | |
| 311 } | 315 } |
| 312 } | 316 } |
| 317 $endif |
| 313 | 318 |
| 314 class _BeforeUnloadEventStreamProvider implements | 319 class _BeforeUnloadEventStreamProvider implements |
| 315 EventStreamProvider<BeforeUnloadEvent> { | 320 EventStreamProvider<BeforeUnloadEvent> { |
| 316 final String _eventType; | 321 final String _eventType; |
| 317 | 322 |
| 318 const _BeforeUnloadEventStreamProvider(this._eventType); | 323 const _BeforeUnloadEventStreamProvider(this._eventType); |
| 319 | 324 |
| 320 Stream<BeforeUnloadEvent> forTarget(EventTarget e, {bool useCapture: false}) { | 325 Stream<BeforeUnloadEvent> forTarget(EventTarget e, {bool useCapture: false}) { |
| 326 var stream = new _EventStream(e, _eventType, useCapture); |
| 327 $if DART2JS |
| 321 var controller = new StreamController(sync: true); | 328 var controller = new StreamController(sync: true); |
| 322 var stream = new _EventStream(e, _eventType, useCapture); | 329 |
| 323 stream.listen((event) { | 330 stream.listen((event) { |
| 324 var wrapped = new _BeforeUnloadEvent(event); | 331 var wrapped = new _BeforeUnloadEvent(event); |
| 325 controller.add(wrapped); | 332 controller.add(wrapped); |
| 326 return wrapped.returnValue; | 333 return wrapped.returnValue; |
| 327 }); | 334 }); |
| 328 | 335 |
| 329 return controller.stream; | 336 return controller.stream; |
| 337 $else |
| 338 return stream; |
| 339 $endif |
| 330 } | 340 } |
| 331 | 341 |
| 332 String getEventType(EventTarget target) { | 342 String getEventType(EventTarget target) { |
| 333 return _eventType; | 343 return _eventType; |
| 334 } | 344 } |
| 335 } | 345 } |
| OLD | NEW |