mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-12-17 08:48:58 +00:00
Add legacy document.createEvent and event.initEvent
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
This commit is contained in:
@@ -81,6 +81,15 @@ pub const Document = struct {
|
|||||||
return try parser.documentGetDoctype(self);
|
return try parser.documentGetDoctype(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn _createEvent(_: *parser.Document, eventCstr: []const u8) !*parser.Event {
|
||||||
|
// TODO: for now only "Event" constructor is supported
|
||||||
|
// see table on https://dom.spec.whatwg.org/#dom-document-createevent $2
|
||||||
|
if (std.ascii.eqlIgnoreCase(eventCstr, "Event") or std.ascii.eqlIgnoreCase(eventCstr, "Events")) {
|
||||||
|
return try parser.eventCreate();
|
||||||
|
}
|
||||||
|
return parser.DOMError.NotSupported;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn _getElementById(self: *parser.Document, id: []const u8) !?ElementUnion {
|
pub fn _getElementById(self: *parser.Document, id: []const u8) !?ElementUnion {
|
||||||
const e = try parser.documentGetElementById(self, id) orelse return null;
|
const e = try parser.documentGetElementById(self, id) orelse return null;
|
||||||
return try Element.toInterface(e);
|
return try Element.toInterface(e);
|
||||||
|
|||||||
@@ -78,6 +78,19 @@ pub const Event = struct {
|
|||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
|
|
||||||
|
pub fn _initEvent(
|
||||||
|
self: *parser.Event,
|
||||||
|
eventType: []const u8,
|
||||||
|
bubbles: ?bool,
|
||||||
|
cancelable: ?bool,
|
||||||
|
) !void {
|
||||||
|
const opts = EventInit{
|
||||||
|
.bubbles = bubbles orelse false,
|
||||||
|
.cancelable = cancelable orelse false,
|
||||||
|
};
|
||||||
|
return try parser.eventInit(self, eventType, opts);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn _stopPropagation(self: *parser.Event) !void {
|
pub fn _stopPropagation(self: *parser.Event) !void {
|
||||||
return try parser.eventStopPropagation(self);
|
return try parser.eventStopPropagation(self);
|
||||||
}
|
}
|
||||||
@@ -170,4 +183,19 @@ pub fn testExecFn(
|
|||||||
.{ .src = "nb", .ex = "1" }, // will be 2 if event was not stopped at first content event listener
|
.{ .src = "nb", .ex = "1" }, // will be 2 if event was not stopped at first content event listener
|
||||||
};
|
};
|
||||||
try checkCases(js_env, &stop_immediate);
|
try checkCases(js_env, &stop_immediate);
|
||||||
|
|
||||||
|
var legacy = [_]Case{
|
||||||
|
.{ .src = "nb = 0", .ex = "0" },
|
||||||
|
.{ .src =
|
||||||
|
\\content.addEventListener('legacy',
|
||||||
|
\\function(e) {
|
||||||
|
\\evt = e; nb = nb + 1;
|
||||||
|
\\})
|
||||||
|
, .ex = "undefined" },
|
||||||
|
.{ .src = "let evtLegacy = document.createEvent('Event')", .ex = "undefined" },
|
||||||
|
.{ .src = "evtLegacy.initEvent('legacy')", .ex = "undefined" },
|
||||||
|
.{ .src = "content.dispatchEvent(evtLegacy)", .ex = "true" },
|
||||||
|
.{ .src = "nb", .ex = "1" },
|
||||||
|
};
|
||||||
|
try checkCases(js_env, &legacy);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user