From db46f47b96dfb19abc8906eb65192071d86ecd25 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Sat, 14 Feb 2026 17:11:29 +0800 Subject: [PATCH] Add HTMLDListElement Fix names for ol and ul elements --- src/browser/Page.zig | 4 +- src/browser/js/bridge.zig | 1 + src/browser/webapi/Element.zig | 3 ++ .../webapi/css/CSSStyleDeclaration.zig | 2 +- src/browser/webapi/element/Html.zig | 2 + src/browser/webapi/element/html/DList.zig | 42 +++++++++++++++++++ src/browser/webapi/element/html/OL.zig | 2 +- src/browser/webapi/element/html/UL.zig | 2 +- 8 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 src/browser/webapi/element/html/DList.zig diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 11af409e..3fa7f860 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -1575,10 +1575,10 @@ pub fn createElementNS(self: *Page, namespace: Element.Namespace, name: []const .{ ._proto = undefined, ._tag_name = String.init(undefined, "dd", .{}) catch unreachable, ._tag = .dd }, ), asUint("dl") => return self.createHtmlElementT( - Element.Html.Generic, + Element.Html.DList, namespace, attribute_iterator, - .{ ._proto = undefined, ._tag_name = String.init(undefined, "dl", .{}) catch unreachable, ._tag = .dl }, + .{ ._proto = undefined }, ), asUint("dt") => return self.createHtmlElementT( Element.Html.Generic, diff --git a/src/browser/js/bridge.zig b/src/browser/js/bridge.zig index 1334172b..f8e57f34 100644 --- a/src/browser/js/bridge.zig +++ b/src/browser/js/bridge.zig @@ -811,6 +811,7 @@ pub const JsApis = flattenTypes(&.{ @import("../webapi/element/html/DataList.zig"), @import("../webapi/element/html/Dialog.zig"), @import("../webapi/element/html/Directory.zig"), + @import("../webapi/element/html/DList.zig"), @import("../webapi/element/html/Div.zig"), @import("../webapi/element/html/Embed.zig"), @import("../webapi/element/html/FieldSet.zig"), diff --git a/src/browser/webapi/Element.zig b/src/browser/webapi/Element.zig index 3d8dbbd0..b97c7eb5 100644 --- a/src/browser/webapi/Element.zig +++ b/src/browser/webapi/Element.zig @@ -210,6 +210,7 @@ pub fn getTagNameLower(self: *const Element) []const u8 { .dialog => "dialog", .directory => "dir", .div => "div", + .dl => "dl", .embed => "embed", .fieldset => "fieldset", .font => "font", @@ -287,6 +288,7 @@ pub fn getTagNameSpec(self: *const Element, buf: []u8) []const u8 { .dialog => "DIALOG", .directory => "DIR", .div => "DIV", + .dl => "DL", .embed => "EMBED", .fieldset => "FIELDSET", .font => "FONT", @@ -1275,6 +1277,7 @@ pub fn getTag(self: *const Element) Tag { .area => .area, .base => .base, .div => .div, + .dl => .dl, .embed => .embed, .form => .form, .p => .p, diff --git a/src/browser/webapi/css/CSSStyleDeclaration.zig b/src/browser/webapi/css/CSSStyleDeclaration.zig index fd6217eb..8380b6f3 100644 --- a/src/browser/webapi/css/CSSStyleDeclaration.zig +++ b/src/browser/webapi/css/CSSStyleDeclaration.zig @@ -218,7 +218,7 @@ fn getDefaultDisplay(element: *const Element) []const u8 { .html => |html| { return switch (html._type) { .anchor, .br, .span, .label, .time, .font, .mod, .quote => "inline", - .body, .div, .p, .heading, .form, .button, .canvas, .dialog, .embed, .head, .html, .hr, .iframe, .img, .input, .li, .link, .meta, .ol, .option, .script, .select, .slot, .style, .template, .textarea, .title, .ul, .media, .area, .base, .datalist, .directory, .fieldset, .legend, .map, .meter, .object, .optgroup, .output, .param, .picture, .pre, .progress, .source, .table, .table_caption, .table_cell, .table_col, .table_row, .table_section, .track => "block", + .body, .div, .dl, .p, .heading, .form, .button, .canvas, .dialog, .embed, .head, .html, .hr, .iframe, .img, .input, .li, .link, .meta, .ol, .option, .script, .select, .slot, .style, .template, .textarea, .title, .ul, .media, .area, .base, .datalist, .directory, .fieldset, .legend, .map, .meter, .object, .optgroup, .output, .param, .picture, .pre, .progress, .source, .table, .table_caption, .table_cell, .table_col, .table_row, .table_section, .track => "block", .generic, .custom, .unknown, .data => blk: { const tag = element.getTagNameLower(); if (isInlineTag(tag)) break :blk "inline"; diff --git a/src/browser/webapi/element/Html.zig b/src/browser/webapi/element/Html.zig index ab393abe..43417bdb 100644 --- a/src/browser/webapi/element/Html.zig +++ b/src/browser/webapi/element/Html.zig @@ -42,6 +42,7 @@ pub const DataList = @import("html/DataList.zig"); pub const Dialog = @import("html/Dialog.zig"); pub const Directory = @import("html/Directory.zig"); pub const Div = @import("html/Div.zig"); +pub const DList = @import("html/DList.zig"); pub const Embed = @import("html/Embed.zig"); pub const FieldSet = @import("html/FieldSet.zig"); pub const Font = @import("html/Font.zig"); @@ -119,6 +120,7 @@ pub const Type = union(enum) { dialog: *Dialog, directory: *Directory, div: *Div, + dl: *DList, embed: *Embed, fieldset: *FieldSet, font: *Font, diff --git a/src/browser/webapi/element/html/DList.zig b/src/browser/webapi/element/html/DList.zig new file mode 100644 index 00000000..12a223c3 --- /dev/null +++ b/src/browser/webapi/element/html/DList.zig @@ -0,0 +1,42 @@ +// Copyright (C) 2023-2026 Lightpanda (Selecy SAS) +// +// Francis Bouvier +// Pierre Tachoire +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +const js = @import("../../../js/js.zig"); +const Node = @import("../../Node.zig"); +const Element = @import("../../Element.zig"); +const HtmlElement = @import("../Html.zig"); + +const DList = @This(); +_proto: *HtmlElement, + +pub fn asElement(self: *DList) *Element { + return self._proto._proto; +} +pub fn asNode(self: *DList) *Node { + return self.asElement().asNode(); +} + +pub const JsApi = struct { + pub const bridge = js.Bridge(DList); + + pub const Meta = struct { + pub const name = "HTMLDListElement"; + pub const prototype_chain = bridge.prototypeChain(); + pub var class_id: bridge.ClassId = undefined; + }; +}; diff --git a/src/browser/webapi/element/html/OL.zig b/src/browser/webapi/element/html/OL.zig index 844205d1..09f5eeaa 100644 --- a/src/browser/webapi/element/html/OL.zig +++ b/src/browser/webapi/element/html/OL.zig @@ -35,7 +35,7 @@ pub const JsApi = struct { pub const bridge = js.Bridge(OL); pub const Meta = struct { - pub const name = "HTMLOLElement"; + pub const name = "HTMLOListElement"; pub const prototype_chain = bridge.prototypeChain(); pub var class_id: bridge.ClassId = undefined; }; diff --git a/src/browser/webapi/element/html/UL.zig b/src/browser/webapi/element/html/UL.zig index 14bd69a2..24df0f24 100644 --- a/src/browser/webapi/element/html/UL.zig +++ b/src/browser/webapi/element/html/UL.zig @@ -35,7 +35,7 @@ pub const JsApi = struct { pub const bridge = js.Bridge(UL); pub const Meta = struct { - pub const name = "HTMLULElement"; + pub const name = "HTMLUListElement"; pub const prototype_chain = bridge.prototypeChain(); pub var class_id: bridge.ClassId = undefined; };