Merge pull request #76 from Browsercore/domdoc-getter

dom document getters
This commit is contained in:
Francis Bouvier
2023-11-24 09:46:02 +01:00
committed by GitHub
2 changed files with 78 additions and 0 deletions

View File

@@ -29,6 +29,48 @@ pub const Document = struct {
// JS funcs // JS funcs
// -------- // --------
// //
pub fn get_documentElement(self: *parser.Document) ElementUnion {
const e = parser.documentGetDocumentElement(self);
return Element.toInterface(e);
}
pub fn get_documentURI(self: *parser.Document) []const u8 {
return parser.documentGetDocumentURI(self);
}
// TODO should be get_URL but in this case, document.URL is indefined.
pub fn get_url(self: *parser.Document) []const u8 {
return get_documentURI(self);
}
// TODO implement contentType
pub fn get_contentType(self: *parser.Document) []const u8 {
_ = self;
return "text/html";
}
// TODO implement compactMode
pub fn get_compatMode(self: *parser.Document) []const u8 {
_ = self;
return "CSS1Compat";
}
// TODO implement characterSet
pub fn get_characterSet(self: *parser.Document) []const u8 {
_ = self;
return "UTF-8";
}
// alias of get_characterSet
pub fn get_charset(self: *parser.Document) []const u8 {
return get_characterSet(self);
}
// alias of get_characterSet
pub fn get_inputEncoding(self: *parser.Document) []const u8 {
return get_characterSet(self);
}
pub fn get_doctype(self: *parser.Document) ?*parser.DocumentType { pub fn get_doctype(self: *parser.Document) ?*parser.DocumentType {
return parser.documentGetDoctype(self); return parser.documentGetDoctype(self);
} }
@@ -112,6 +154,36 @@ pub fn testExecFn(
}; };
try checkCases(js_env, &getElementsByClassName); try checkCases(js_env, &getElementsByClassName);
var getDocumentElement = [_]Case{
.{ .src = "let e = document.documentElement", .ex = "undefined" },
.{ .src = "e.localName", .ex = "html" },
};
try checkCases(js_env, &getDocumentElement);
var getCharacterSet = [_]Case{
.{ .src = "document.characterSet", .ex = "UTF-8" },
.{ .src = "document.charset", .ex = "UTF-8" },
.{ .src = "document.inputEncoding", .ex = "UTF-8" },
};
try checkCases(js_env, &getCharacterSet);
var getCompatMode = [_]Case{
.{ .src = "document.compatMode", .ex = "CSS1Compat" },
};
try checkCases(js_env, &getCompatMode);
var getContentType = [_]Case{
.{ .src = "document.contentType", .ex = "text/html" },
};
try checkCases(js_env, &getContentType);
var getDocumentURI = [_]Case{
.{ .src = "document.documentURI", .ex = "about:blank" },
// TODO should be document.URL
.{ .src = "document.url", .ex = "about:blank" },
};
try checkCases(js_env, &getDocumentURI);
const tags = comptime parser.Tag.all(); const tags = comptime parser.Tag.all();
comptime var createElements: [(tags.len) * 2]Case = undefined; comptime var createElements: [(tags.len) * 2]Case = undefined;
inline for (tags, 0..) |tag, i| { inline for (tags, 0..) |tag, i| {

View File

@@ -794,6 +794,12 @@ pub inline fn documentGetDocumentElement(doc: *Document) *Element {
return elem.?; return elem.?;
} }
pub inline fn documentGetDocumentURI(doc: *Document) []const u8 {
var s: ?*String = undefined;
_ = documentVtable(doc).dom_document_get_uri.?(doc, &s);
return stringToData(s.?);
}
pub inline fn documentCreateElement(doc: *Document, tag_name: []const u8) *Element { pub inline fn documentCreateElement(doc: *Document, tag_name: []const u8) *Element {
var elem: ?*Element = undefined; var elem: ?*Element = undefined;
_ = documentVtable(doc).dom_document_create_element.?(doc, stringFromData(tag_name), &elem); _ = documentVtable(doc).dom_document_create_element.?(doc, stringFromData(tag_name), &elem);