From 4c50b2af1a2eb20936090e5422395c110b1c6136 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Mon, 25 Mar 2024 17:55:30 +0100 Subject: [PATCH] css: implement legend siblings check for :disabled --- src/css/selector.zig | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/css/selector.zig b/src/css/selector.zig index fbe782d3..b5779899 100644 --- a/src/css/selector.zig +++ b/src/css/selector.zig @@ -508,14 +508,26 @@ pub const Selector = union(enum) { }; } + fn hasLegendInPreviousSiblings(n: anytype) anyerror!bool { + var c = try n.prevSibling(); + while (c != null) { + const ctag = try c.?.tag(); + if (std.ascii.eqlIgnoreCase("legend", ctag)) return true; + c = try c.?.prevSibling(); + } + return false; + } + fn inDisabledFieldset(n: anytype) anyerror!bool { const p = try n.parent(); if (p == null) return false; + const ntag = try n.tag(); const ptag = try p.?.tag(); if (std.ascii.eqlIgnoreCase("fieldset", ptag) and - try p.?.attr("disabled") != null) + try p.?.attr("disabled") != null and + (!std.ascii.eqlIgnoreCase("legend", ntag) or try hasLegendInPreviousSiblings(n))) { return true; }