Skip to content

Commit 501b3ca

Browse files
Add legacy document.createEvent and event.initEvent
Signed-off-by: Francis Bouvier <[email protected]>
1 parent ce3c533 commit 501b3ca

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/dom/document.zig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ pub const Document = struct {
8181
return try parser.documentGetDoctype(self);
8282
}
8383

84+
pub fn _createEvent(_: *parser.Document, eventCstr: []const u8) !*parser.Event {
85+
// TODO: for now only "Event" constructor is supported
86+
// see table on https://dom.spec.whatwg.org/#dom-document-createevent $2
87+
if (std.ascii.eqlIgnoreCase(eventCstr, "Event") or std.ascii.eqlIgnoreCase(eventCstr, "Events")) {
88+
return try parser.eventCreate();
89+
}
90+
return parser.DOMError.NotSupported;
91+
}
92+
8493
pub fn _getElementById(self: *parser.Document, id: []const u8) !?ElementUnion {
8594
const e = try parser.documentGetElementById(self, id) orelse return null;
8695
return try Element.toInterface(e);

src/events/event.zig

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,19 @@ pub const Event = struct {
7878

7979
// Methods
8080

81+
pub fn _initEvent(
82+
self: *parser.Event,
83+
eventType: []const u8,
84+
bubbles: ?bool,
85+
cancelable: ?bool,
86+
) !void {
87+
const opts = EventInit{
88+
.bubbles = bubbles orelse false,
89+
.cancelable = cancelable orelse false,
90+
};
91+
return try parser.eventInit(self, eventType, opts);
92+
}
93+
8194
pub fn _stopPropagation(self: *parser.Event) !void {
8295
return try parser.eventStopPropagation(self);
8396
}
@@ -170,4 +183,19 @@ pub fn testExecFn(
170183
.{ .src = "nb", .ex = "1" }, // will be 2 if event was not stopped at first content event listener
171184
};
172185
try checkCases(js_env, &stop_immediate);
186+
187+
var legacy = [_]Case{
188+
.{ .src = "nb = 0", .ex = "0" },
189+
.{ .src =
190+
\\content.addEventListener('legacy',
191+
\\function(e) {
192+
\\evt = e; nb = nb + 1;
193+
\\})
194+
, .ex = "undefined" },
195+
.{ .src = "let evtLegacy = document.createEvent('Event')", .ex = "undefined" },
196+
.{ .src = "evtLegacy.initEvent('legacy')", .ex = "undefined" },
197+
.{ .src = "content.dispatchEvent(evtLegacy)", .ex = "true" },
198+
.{ .src = "nb", .ex = "1" },
199+
};
200+
try checkCases(js_env, &legacy);
173201
}

0 commit comments

Comments
 (0)