From fada732b33b937f66097eb7c5c355d1453315cfb Mon Sep 17 00:00:00 2001 From: Muki Kiboigo Date: Mon, 19 May 2025 07:33:24 -0700 Subject: [PATCH] add NodeFilter --- src/browser/dom/dom.zig | 2 ++ src/browser/dom/node_filter.zig | 52 +++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/browser/dom/node_filter.zig diff --git a/src/browser/dom/dom.zig b/src/browser/dom/dom.zig index b6029392..0b998063 100644 --- a/src/browser/dom/dom.zig +++ b/src/browser/dom/dom.zig @@ -27,6 +27,7 @@ const MutationObserver = @import("mutation_observer.zig"); const IntersectionObserver = @import("intersection_observer.zig"); const DOMParser = @import("dom_parser.zig").DOMParser; const TreeWalker = @import("tree_walker.zig").TreeWalker; +const NodeFilter = @import("node_filter.zig").NodeFilter; pub const Interfaces = .{ DOMException, @@ -41,4 +42,5 @@ pub const Interfaces = .{ IntersectionObserver.Interfaces, DOMParser, TreeWalker, + NodeFilter, }; diff --git a/src/browser/dom/node_filter.zig b/src/browser/dom/node_filter.zig new file mode 100644 index 00000000..c7cc896d --- /dev/null +++ b/src/browser/dom/node_filter.zig @@ -0,0 +1,52 @@ +// Copyright (C) 2023-2024 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 std = @import("std"); + +pub const NodeFilter = struct { + pub const _FILTER_ACCEPT: u16 = 1; + pub const _FILTER_REJECT: u16 = 2; + pub const _FILTER_SKIP: u16 = 3; + pub const _SHOW_ALL: u32 = std.math.maxInt(u32); + pub const _SHOW_ELEMENT: u32 = 0b1; + pub const _SHOW_ATTRIBUTE: u32 = 0b10; + pub const _SHOW_TEXT: u32 = 0b100; + pub const _SHOW_CDATA_SECTION: u32 = 0b1000; + pub const _SHOW_ENTITY_REFERENCE: u32 = 0b10000; + pub const _SHOW_ENTITY: u32 = 0b100000; + pub const _SHOW_PROCESSING_INSTRUCTION: u32 = 0b1000000; + pub const _SHOW_COMMENT: u32 = 0b10000000; + pub const _SHOW_DOCUMENT: u32 = 0b100000000; + pub const _SHOW_DOCUMENT_TYPE: u32 = 0b1000000000; + pub const _SHOW_DOCUMENT_FRAGMENT: u32 = 0b10000000000; + pub const _SHOW_NOTATION: u32 = 0b100000000000; +}; + +const testing = @import("../../testing.zig"); +test "Browser.DOM.NodeFilter" { + var runner = try testing.jsRunner(testing.tracking_allocator, .{}); + defer runner.deinit(); + + try runner.testCases(&.{ + .{ "NodeFilter.FILTER_ACCEPT", "1" }, + .{ "NodeFilter.FILTER_REJECT", "2" }, + .{ "NodeFilter.FILTER_SKIP", "3" }, + .{ "NodeFilter.SHOW_ALL", "4294967295" }, + .{ "NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT", "129" }, + }, .{}); +}