@@ -35,6 +35,9 @@ pub const EventTarget = struct {
3535 pub const Self = parser .EventTarget ;
3636 pub const Exception = DOMException ;
3737
38+ // Extend libdom event target for pure zig struct.
39+ base : parser.EventTargetTBase = parser.EventTargetTBase {},
40+
3841 pub fn toInterface (e : * parser.Event , et : * parser.EventTarget , page : * Page ) ! Union {
3942 // libdom assumes that all event targets are libdom nodes. They are not.
4043
@@ -63,6 +66,11 @@ pub const EventTarget = struct {
6366
6467 // JS funcs
6568 // --------
69+ pub fn constructor (page : * Page ) ! * parser.EventTarget {
70+ const et = try page .arena .create (EventTarget );
71+ return @ptrCast (& et .base );
72+ }
73+
6674 pub fn _addEventListener (
6775 self : * parser.EventTarget ,
6876 typ : []const u8 ,
@@ -128,6 +136,10 @@ test "Browser.DOM.EventTarget" {
128136 var runner = try testing .jsRunner (testing .tracking_allocator , .{});
129137 defer runner .deinit ();
130138
139+ try runner .testCases (&.{
140+ .{ "new EventTarget()" , "[object EventTarget]" },
141+ }, .{});
142+
131143 try runner .testCases (&.{
132144 .{ "let content = document.getElementById('content')" , "undefined" },
133145 .{ "let para = document.getElementById('para')" , "undefined" },
0 commit comments