@@ -43,6 +43,8 @@ const fetchFn = @import("../fetch/fetch.zig").fetch;
4343
4444const storage = @import ("../storage/storage.zig" );
4545
46+ const DirectEventHandler = @import ("../events/event.zig" ).DirectEventHandler ;
47+
4648// https://dom.spec.whatwg.org/#interface-window-extensions
4749// https://html.spec.whatwg.org/multipage/nav-history-apis.html#window
4850pub const Window = struct {
@@ -69,6 +71,7 @@ pub const Window = struct {
6971 scroll_x : u32 = 0 ,
7072 scroll_y : u32 = 0 ,
7173 onload_callback : ? js.Function = null ,
74+ onpopstate_callback : ? js.Function = null ,
7275
7376 pub fn create (target : ? []const u8 , navigator : ? Navigator ) ! Window {
7477 var fbs = std .io .fixedBufferStream ("" );
@@ -110,31 +113,17 @@ pub const Window = struct {
110113
111114 /// Sets `onload_callback`.
112115 pub fn set_onload (self : * Window , maybe_listener : ? EventHandler.Listener , page : * Page ) ! void {
113- const event_target = parser .toEventTarget (Window , self );
114- const event_type = "load" ;
115-
116- // Check if we have a listener set.
117- if (self .onload_callback ) | callback | {
118- const listener = try parser .eventTargetHasListener (event_target , event_type , false , callback .id );
119- std .debug .assert (listener != null );
120- try parser .eventTargetRemoveEventListener (event_target , event_type , listener .? , false );
121- }
122-
123- if (maybe_listener ) | listener | {
124- switch (listener ) {
125- // If an object is given as listener, do nothing.
126- .object = > {},
127- .function = > | callback | {
128- _ = try EventHandler .register (page .arena , event_target , event_type , listener , null ) orelse unreachable ;
129- self .onload_callback = callback ;
116+ try DirectEventHandler (Window , self , "load" , maybe_listener , & self .onload_callback , page .arena );
117+ }
130118
131- return ;
132- },
133- }
134- }
119+ /// Returns `onpopstate_callback`.
120+ pub fn get_onpopstate ( self : * const Window ) ? js.Function {
121+ return self . onpopstate_callback ;
122+ }
135123
136- // Just unset the listener.
137- self .onload_callback = null ;
124+ /// Sets `onpopstate_callback`.
125+ pub fn set_onpopstate (self : * Window , maybe_listener : ? EventHandler.Listener , page : * Page ) ! void {
126+ try DirectEventHandler (Window , self , "popstate" , maybe_listener , & self .onpopstate_callback , page .arena );
138127 }
139128
140129 pub fn get_window (self : * Window ) * Window {
0 commit comments