From 6b0b54ec38eceea02f26f24bad68843de10b8e6c Mon Sep 17 00:00:00 2001 From: Tomi Saarinen Date: Tue, 14 Apr 2020 20:58:34 +0300 Subject: [PATCH 1/2] Support adding beforeunload event listener tests and comment fix comment --- src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re | 5 +++++ src/Webapi/Dom/Webapi__Dom__Window.re | 2 ++ tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re | 1 + tests/Webapi/Dom/Webapi__Dom__Window__test.re | 2 ++ 4 files changed, 10 insertions(+) diff --git a/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re b/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re index 180c80a8..eb879bf2 100644 --- a/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re +++ b/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re @@ -6,3 +6,8 @@ include Webapi__Dom__Event.Impl({ type nonrec t = t; }); [@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "BeforeUnloadEvent"; [@bs.get] external returnValue : t => string = ""; +/** + * returnValue cannot be unset because BS cannot (afaik) bind `delete e['returnValue'];` + * Setting the value to undefined does not cause expected behavior. + */ +[@bs.set] external setReturnValue: (t, string) => unit = "returnValue"; diff --git a/src/Webapi/Dom/Webapi__Dom__Window.re b/src/Webapi/Dom/Webapi__Dom__Window.re index a7eb609d..dcf4912b 100644 --- a/src/Webapi/Dom/Webapi__Dom__Window.re +++ b/src/Webapi/Dom/Webapi__Dom__Window.re @@ -94,6 +94,8 @@ module Impl = (T: {type t;}) => { [@bs.send.pipe : t_window] external addPopStateEventListener : ([@bs.as "popstate"] _, Dom.popStateEvent => unit) => unit = "addEventListener"; [@bs.send.pipe : t_window] external removePopStateEventListener : ([@bs.as "popstate"] _, Dom.popStateEvent => unit) => unit= "removeEventListener"; + [@bs.send.pipe : t_window] external addBeforeUnloadEventListener : ([@bs.as "beforeunload"] _, Dom.beforeUnloadEvent => unit) => unit = "addEventListener"; + [@bs.send.pipe : t_window] external removeBeforeUnloadEventListener : ([@bs.as "beforeunload"] _, Dom.beforeUnloadEvent => unit) => unit= "removeEventListener"; [@bs.set] external setOnLoad : (t_window, unit => unit) => unit = "onload"; /* use addEventListener instead? */ }; diff --git a/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re b/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re index d4b08d85..16c18792 100644 --- a/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re +++ b/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re @@ -21,3 +21,4 @@ stopPropagation(event); /* BeforeUnloadEvent */ let _ = returnValue(event); +setReturnValue(event, "Test"); \ No newline at end of file diff --git a/tests/Webapi/Dom/Webapi__Dom__Window__test.re b/tests/Webapi/Dom/Webapi__Dom__Window__test.re index 57d495d5..93b2c181 100644 --- a/tests/Webapi/Dom/Webapi__Dom__Window__test.re +++ b/tests/Webapi/Dom/Webapi__Dom__Window__test.re @@ -70,5 +70,7 @@ let _ = Window.resizeTo(120, 300, window); let _ = Window.scroll(0.0, 0.0, window); let _ = Window.scrollBy(10.0, (-10.0), window); let _ = Window.scrollTo(120.5, 300.3, window); +Window.addBeforeUnloadEventListener((_: BeforeUnloadEvent.t) => (), window); +Window.removeBeforeUnloadEventListener((_: BeforeUnloadEvent.t) => (), window); Window.stop(window); Window.setOnLoad(window, () => print_endline("load")); From 606b863a625022f7b07ad34b598b1a6df6821cf1 Mon Sep 17 00:00:00 2001 From: Tomi Saarinen Date: Tue, 22 Sep 2020 14:13:08 +0300 Subject: [PATCH 2/2] move returnValue to Event, remove duplicate from BeforeUnloadEvent --- src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re | 9 +-------- src/Webapi/Dom/Webapi__Dom__Event.re | 4 ++++ tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re | 4 +--- tests/Webapi/Dom/Webapi__Dom__Event__test.re | 3 +++ 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re b/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re index eb879bf2..ff63d2a8 100644 --- a/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re +++ b/src/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent.re @@ -3,11 +3,4 @@ type t = Dom.beforeUnloadEvent; include Webapi__Dom__Event.Impl({ type nonrec t = t; }); [@bs.new] external make : string => t = "BeforeUnloadEvent"; -[@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "BeforeUnloadEvent"; - -[@bs.get] external returnValue : t => string = ""; -/** - * returnValue cannot be unset because BS cannot (afaik) bind `delete e['returnValue'];` - * Setting the value to undefined does not cause expected behavior. - */ -[@bs.set] external setReturnValue: (t, string) => unit = "returnValue"; +[@bs.new] external makeWithOptions : (string, Js.t({..})) => t = "BeforeUnloadEvent"; \ No newline at end of file diff --git a/src/Webapi/Dom/Webapi__Dom__Event.re b/src/Webapi/Dom/Webapi__Dom__Event.re index 7f7ccae0..974b1223 100644 --- a/src/Webapi/Dom/Webapi__Dom__Event.re +++ b/src/Webapi/Dom/Webapi__Dom__Event.re @@ -5,6 +5,7 @@ module Impl = (T: {type t;}) => { [@bs.get] external currentTarget : T.t => Dom.eventTarget = ""; [@bs.get] external defaultPrevented : T.t => bool = ""; [@bs.get] external eventPhase : T.t => int /* eventPhase enum */ = ""; + [@bs.get] external returnValue : T.t => string = ""; let eventPhase: T.t => Webapi__Dom__Types.EventPhase.t = (self) => Webapi__Dom__Types.EventPhase.decode(eventPhase(self)); @@ -17,6 +18,9 @@ module Impl = (T: {type t;}) => { [@bs.send.pipe : T.t] external preventDefault : unit = ""; [@bs.send.pipe : T.t] external stopImmediatePropagation : unit = ""; [@bs.send.pipe : T.t] external stopPropagation : unit = ""; + + [@bs.set] external setReturnValue: (T.t, string) => unit = "returnValue"; + let deleteReturnValue: T.t => unit = [%raw {| event => delete event['returnValue'] |}]; }; type t = Dom.event; diff --git a/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re b/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re index 16c18792..bba22b58 100644 --- a/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re +++ b/tests/Webapi/Dom/Webapi__Dom__BeforeUnloadEvent__test.re @@ -14,11 +14,9 @@ let _ = target(event); let _ = timeStamp(event); let _ = type_(event); let _ = isTrusted(event); +let _ = returnValue(event); preventDefault(event); stopImmediatePropagation(event); stopPropagation(event); - -/* BeforeUnloadEvent */ -let _ = returnValue(event); setReturnValue(event, "Test"); \ No newline at end of file diff --git a/tests/Webapi/Dom/Webapi__Dom__Event__test.re b/tests/Webapi/Dom/Webapi__Dom__Event__test.re index fd4832fb..20f79fee 100644 --- a/tests/Webapi/Dom/Webapi__Dom__Event__test.re +++ b/tests/Webapi/Dom/Webapi__Dom__Event__test.re @@ -14,7 +14,10 @@ let _ = target(event); let _ = timeStamp(event); let _ = type_(event); let _ = isTrusted(event); +let _ = returnValue(event); preventDefault(event); stopImmediatePropagation(event); stopPropagation(event); +setReturnValue(event, "Test"); +deleteReturnValue(event); \ No newline at end of file