Index: dart/tools/dom/templates/html/impl/impl_Window.darttemplate |
=================================================================== |
--- dart/tools/dom/templates/html/impl/impl_Window.darttemplate (revision 29785) |
+++ dart/tools/dom/templates/html/impl/impl_Window.darttemplate (working copy) |
@@ -271,13 +271,18 @@ |
static bool get supportsPointConversions => _DomPoint.supported; |
$!MEMBERS |
+ /** |
+ * Static factory designed to expose `beforeunload` events to event |
+ * handlers that are not necessarily instances of [Window]. |
+ * |
+ * See [EventStreamProvider] for usage information. |
+ */ |
@DomName('Window.beforeunloadEvent') |
- @DocsEditable() |
static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent = |
const _BeforeUnloadEventStreamProvider('beforeunload'); |
+ /// Stream of `beforeunload` events handled by this [Window]. |
@DomName('Window.onbeforeunload') |
- @DocsEditable() |
Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this); |
void moveTo(Point p) { |
@@ -292,6 +297,7 @@ |
$endif |
} |
+$if DART2JS |
class _BeforeUnloadEvent extends _WrappedEvent implements BeforeUnloadEvent { |
String _returnValue; |
@@ -301,15 +307,14 @@ |
void set returnValue(String value) { |
_returnValue = value; |
-$if DART2JS |
// FF and IE use the value as the return value, Chrome will return this from |
// the event callback function. |
if (JS('bool', '("returnValue" in #)', wrapped)) { |
JS('void', '#.returnValue = #', wrapped, value); |
} |
-$endif |
} |
} |
+$endif |
class _BeforeUnloadEventStreamProvider implements |
EventStreamProvider<BeforeUnloadEvent> { |
@@ -318,8 +323,10 @@ |
const _BeforeUnloadEventStreamProvider(this._eventType); |
Stream<BeforeUnloadEvent> forTarget(EventTarget e, {bool useCapture: false}) { |
+ var stream = new _EventStream(e, _eventType, useCapture); |
+$if DART2JS |
var controller = new StreamController(sync: true); |
- var stream = new _EventStream(e, _eventType, useCapture); |
+ |
stream.listen((event) { |
var wrapped = new _BeforeUnloadEvent(event); |
controller.add(wrapped); |
@@ -327,6 +334,9 @@ |
}); |
return controller.stream; |
+$else |
+ return stream; |
+$endif |
} |
String getEventType(EventTarget target) { |