From ef756b0c9683f7d0201acb01421664f99100fd47 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Tue, 28 Jul 2026 11:23:32 +0800 Subject: [PATCH] design: add explicit Proto declaration to every type This is groundwork for eventually removing the _proto: *X` field from some types (in order to save 8 bytes per, e.g. Node). For now, all `_proto: *X` fields are untouched, BUT, all compile-time chain walking now happens against this new declaration. --- src/browser/Factory.zig | 9 +++------ src/browser/js/Caller.zig | 6 +++--- src/browser/js/Local.zig | 14 ++++--------- src/browser/js/Snapshot.zig | 7 ++----- src/browser/js/bridge.zig | 13 ++++-------- src/browser/reflect.zig | 13 ++++++++++++ src/browser/webapi/AbortSignal.zig | 2 ++ src/browser/webapi/BroadcastChannel.zig | 2 ++ src/browser/webapi/CData.zig | 20 ++++++++++--------- src/browser/webapi/DOMMatrix.zig | 2 ++ src/browser/webapi/DOMPoint.zig | 2 ++ src/browser/webapi/DOMRect.zig | 2 ++ .../webapi/DedicatedWorkerGlobalScope.zig | 2 ++ src/browser/webapi/Document.zig | 2 ++ src/browser/webapi/DocumentFragment.zig | 2 ++ src/browser/webapi/DocumentType.zig | 2 ++ src/browser/webapi/Element.zig | 2 ++ src/browser/webapi/File.zig | 2 ++ src/browser/webapi/FileReader.zig | 2 ++ src/browser/webapi/HTMLDocument.zig | 2 ++ src/browser/webapi/MessagePort.zig | 2 ++ src/browser/webapi/Node.zig | 2 ++ src/browser/webapi/Notification.zig | 2 ++ src/browser/webapi/Performance.zig | 4 ++++ src/browser/webapi/Range.zig | 2 ++ src/browser/webapi/Screen.zig | 4 ++++ src/browser/webapi/ShadowRoot.zig | 2 ++ src/browser/webapi/SharedWorker.zig | 2 ++ .../webapi/SharedWorkerGlobalScope.zig | 2 ++ src/browser/webapi/StaticRange.zig | 2 ++ src/browser/webapi/VisualViewport.zig | 2 ++ src/browser/webapi/Window.zig | 2 ++ src/browser/webapi/Worker.zig | 2 ++ src/browser/webapi/WorkerGlobalScope.zig | 2 ++ src/browser/webapi/XMLDocument.zig | 2 ++ src/browser/webapi/cdata/CDATASection.zig | 2 ++ src/browser/webapi/cdata/Comment.zig | 2 ++ .../webapi/cdata/ProcessingInstruction.zig | 2 ++ src/browser/webapi/cdata/Text.zig | 2 ++ .../HTMLFormControlsCollection.zig | 2 ++ .../collections/HTMLOptionsCollection.zig | 2 ++ .../webapi/collections/RadioNodeList.zig | 2 ++ src/browser/webapi/css/CSSStyleProperties.zig | 2 ++ src/browser/webapi/css/CSSStyleRule.zig | 2 ++ src/browser/webapi/css/FontFaceSet.zig | 2 ++ src/browser/webapi/css/MediaQueryList.zig | 2 ++ src/browser/webapi/element/Attribute.zig | 2 ++ src/browser/webapi/element/Html.zig | 2 ++ src/browser/webapi/element/Svg.zig | 2 ++ src/browser/webapi/element/html/Anchor.zig | 2 ++ src/browser/webapi/element/html/Area.zig | 2 ++ src/browser/webapi/element/html/Audio.zig | 2 ++ src/browser/webapi/element/html/BR.zig | 2 ++ src/browser/webapi/element/html/Base.zig | 2 ++ src/browser/webapi/element/html/Body.zig | 2 ++ src/browser/webapi/element/html/Button.zig | 2 ++ src/browser/webapi/element/html/Canvas.zig | 2 ++ src/browser/webapi/element/html/Custom.zig | 2 ++ src/browser/webapi/element/html/DList.zig | 2 ++ src/browser/webapi/element/html/Data.zig | 2 ++ src/browser/webapi/element/html/DataList.zig | 2 ++ src/browser/webapi/element/html/Details.zig | 2 ++ src/browser/webapi/element/html/Dialog.zig | 2 ++ src/browser/webapi/element/html/Directory.zig | 2 ++ src/browser/webapi/element/html/Div.zig | 2 ++ src/browser/webapi/element/html/Embed.zig | 2 ++ src/browser/webapi/element/html/FieldSet.zig | 2 ++ src/browser/webapi/element/html/Font.zig | 2 ++ src/browser/webapi/element/html/Form.zig | 2 ++ src/browser/webapi/element/html/FrameSet.zig | 2 ++ src/browser/webapi/element/html/Generic.zig | 2 ++ src/browser/webapi/element/html/HR.zig | 2 ++ src/browser/webapi/element/html/Head.zig | 2 ++ src/browser/webapi/element/html/Heading.zig | 2 ++ src/browser/webapi/element/html/Html.zig | 2 ++ src/browser/webapi/element/html/IFrame.zig | 2 ++ src/browser/webapi/element/html/Image.zig | 2 ++ src/browser/webapi/element/html/Input.zig | 2 ++ src/browser/webapi/element/html/LI.zig | 2 ++ src/browser/webapi/element/html/Label.zig | 2 ++ src/browser/webapi/element/html/Legend.zig | 2 ++ src/browser/webapi/element/html/Link.zig | 2 ++ src/browser/webapi/element/html/Map.zig | 2 ++ src/browser/webapi/element/html/Marquee.zig | 2 ++ src/browser/webapi/element/html/Media.zig | 2 ++ src/browser/webapi/element/html/Meta.zig | 2 ++ src/browser/webapi/element/html/Meter.zig | 2 ++ src/browser/webapi/element/html/Mod.zig | 2 ++ src/browser/webapi/element/html/OL.zig | 2 ++ src/browser/webapi/element/html/Object.zig | 2 ++ src/browser/webapi/element/html/OptGroup.zig | 2 ++ src/browser/webapi/element/html/Option.zig | 2 ++ src/browser/webapi/element/html/Output.zig | 2 ++ src/browser/webapi/element/html/Paragraph.zig | 2 ++ src/browser/webapi/element/html/Param.zig | 2 ++ src/browser/webapi/element/html/Picture.zig | 2 ++ src/browser/webapi/element/html/Pre.zig | 2 ++ src/browser/webapi/element/html/Progress.zig | 2 ++ src/browser/webapi/element/html/Quote.zig | 2 ++ src/browser/webapi/element/html/Script.zig | 2 ++ src/browser/webapi/element/html/Select.zig | 2 ++ src/browser/webapi/element/html/Slot.zig | 2 ++ src/browser/webapi/element/html/Source.zig | 2 ++ src/browser/webapi/element/html/Span.zig | 2 ++ src/browser/webapi/element/html/Style.zig | 2 ++ src/browser/webapi/element/html/Table.zig | 2 ++ .../webapi/element/html/TableCaption.zig | 2 ++ src/browser/webapi/element/html/TableCell.zig | 2 ++ src/browser/webapi/element/html/TableCol.zig | 2 ++ src/browser/webapi/element/html/TableRow.zig | 2 ++ .../webapi/element/html/TableSection.zig | 2 ++ src/browser/webapi/element/html/Template.zig | 2 ++ src/browser/webapi/element/html/TextArea.zig | 2 ++ src/browser/webapi/element/html/Time.zig | 2 ++ src/browser/webapi/element/html/Title.zig | 2 ++ src/browser/webapi/element/html/Track.zig | 2 ++ src/browser/webapi/element/html/UL.zig | 2 ++ src/browser/webapi/element/html/Unknown.zig | 2 ++ src/browser/webapi/element/html/Video.zig | 2 ++ src/browser/webapi/element/svg/A.zig | 2 ++ src/browser/webapi/element/svg/Circle.zig | 2 ++ src/browser/webapi/element/svg/ClipPath.zig | 2 ++ src/browser/webapi/element/svg/Defs.zig | 2 ++ src/browser/webapi/element/svg/Desc.zig | 2 ++ src/browser/webapi/element/svg/Ellipse.zig | 2 ++ .../webapi/element/svg/ForeignObject.zig | 2 ++ src/browser/webapi/element/svg/G.zig | 2 ++ src/browser/webapi/element/svg/Generic.zig | 2 ++ src/browser/webapi/element/svg/Geometry.zig | 2 ++ .../webapi/element/svg/GradientElement.zig | 2 ++ src/browser/webapi/element/svg/Graphics.zig | 2 ++ src/browser/webapi/element/svg/Image.zig | 2 ++ src/browser/webapi/element/svg/Line.zig | 2 ++ .../webapi/element/svg/LinearGradient.zig | 2 ++ src/browser/webapi/element/svg/Marker.zig | 2 ++ src/browser/webapi/element/svg/Mask.zig | 2 ++ src/browser/webapi/element/svg/Metadata.zig | 2 ++ src/browser/webapi/element/svg/Path.zig | 2 ++ src/browser/webapi/element/svg/Pattern.zig | 2 ++ src/browser/webapi/element/svg/Polygon.zig | 2 ++ src/browser/webapi/element/svg/Polyline.zig | 2 ++ .../webapi/element/svg/RadialGradient.zig | 2 ++ src/browser/webapi/element/svg/Rect.zig | 2 ++ src/browser/webapi/element/svg/Stop.zig | 2 ++ src/browser/webapi/element/svg/Svg.zig | 2 ++ src/browser/webapi/element/svg/Switch.zig | 2 ++ src/browser/webapi/element/svg/Symbol.zig | 2 ++ src/browser/webapi/element/svg/TSpan.zig | 2 ++ src/browser/webapi/element/svg/Text.zig | 2 ++ .../webapi/element/svg/TextContent.zig | 2 ++ src/browser/webapi/element/svg/TextPath.zig | 2 ++ .../webapi/element/svg/TextPositioning.zig | 2 ++ src/browser/webapi/element/svg/Title.zig | 2 ++ src/browser/webapi/element/svg/Use.zig | 2 ++ src/browser/webapi/element/svg/View.zig | 2 ++ .../webapi/event/BeforeUnloadEvent.zig | 2 ++ src/browser/webapi/event/CloseEvent.zig | 2 ++ src/browser/webapi/event/CompositionEvent.zig | 2 ++ .../webapi/event/CookieChangeEvent.zig | 2 ++ src/browser/webapi/event/CustomEvent.zig | 2 ++ .../webapi/event/DeviceMotionEvent.zig | 2 ++ .../webapi/event/DeviceOrientationEvent.zig | 2 ++ src/browser/webapi/event/DragEvent.zig | 2 ++ src/browser/webapi/event/ErrorEvent.zig | 2 ++ src/browser/webapi/event/FocusEvent.zig | 2 ++ src/browser/webapi/event/FormDataEvent.zig | 2 ++ src/browser/webapi/event/GamepadEvent.zig | 2 ++ src/browser/webapi/event/HashChangeEvent.zig | 2 ++ src/browser/webapi/event/InputEvent.zig | 2 ++ src/browser/webapi/event/KeyboardEvent.zig | 2 ++ src/browser/webapi/event/MessageEvent.zig | 2 ++ src/browser/webapi/event/MouseEvent.zig | 2 ++ .../NavigationCurrentEntryChangeEvent.zig | 2 ++ .../webapi/event/PageTransitionEvent.zig | 2 ++ src/browser/webapi/event/PointerEvent.zig | 2 ++ src/browser/webapi/event/PopStateEvent.zig | 2 ++ src/browser/webapi/event/ProgressEvent.zig | 2 ++ .../webapi/event/PromiseRejectionEvent.zig | 2 ++ src/browser/webapi/event/StorageEvent.zig | 2 ++ src/browser/webapi/event/SubmitEvent.zig | 2 ++ src/browser/webapi/event/TextEvent.zig | 2 ++ src/browser/webapi/event/ToggleEvent.zig | 2 ++ src/browser/webapi/event/TouchEvent.zig | 2 ++ src/browser/webapi/event/UIEvent.zig | 2 ++ src/browser/webapi/event/WheelEvent.zig | 2 ++ src/browser/webapi/media/TextTrackCue.zig | 2 ++ src/browser/webapi/media/VTTCue.zig | 2 ++ src/browser/webapi/navigation/Navigation.zig | 2 ++ .../navigation/NavigationHistoryEntry.zig | 2 ++ src/browser/webapi/net/EventSource.zig | 2 ++ src/browser/webapi/net/WebSocket.zig | 2 ++ src/browser/webapi/net/XMLHttpRequest.zig | 2 ++ .../webapi/net/XMLHttpRequestEventTarget.zig | 2 ++ .../webapi/net/XMLHttpRequestUpload.zig | 2 ++ src/browser/webapi/storage/CookieStore.zig | 2 ++ .../webapi/storage/idb/IDBCursorWithValue.zig | 2 ++ .../webapi/storage/idb/IDBDatabase.zig | 2 ++ src/browser/webapi/storage/idb/IDBRequest.zig | 2 ++ .../webapi/storage/idb/IDBTransaction.zig | 2 ++ .../storage/idb/IDBVersionChangeEvent.zig | 2 ++ 200 files changed, 430 insertions(+), 42 deletions(-) diff --git a/src/browser/Factory.zig b/src/browser/Factory.zig index 77b94708e..8066be305 100644 --- a/src/browser/Factory.zig +++ b/src/browser/Factory.zig @@ -380,10 +380,7 @@ fn svgPrototypeTypes(comptime Child: type) []const type { var T = Child; while (T != EventTarget) { - if (!@hasField(T, "_proto")) { - @compileError(@typeName(T) ++ " does not lead to EventTarget through _proto"); - } - T = reflect.Struct(@FieldType(T, "_proto")); + T = reflect.Proto(T) orelse @compileError(@typeName(T) ++ " does not lead to EventTarget through Proto"); types = &[_]type{T} ++ types; } @@ -425,7 +422,7 @@ pub fn destroy(self: *Factory, value: anytype) void { } } - if (comptime @hasField(S, "_proto")) { + if (comptime reflect.Proto(S) != null) { self.destroyChain(value, 0, std.mem.Alignment.@"1"); } else { self.destroyStandalone(value); @@ -451,7 +448,7 @@ fn destroyChain( const new_size = current_size + @sizeOf(S); const new_align = std.mem.Alignment.max(old_align, std.mem.Alignment.of(S)); - if (@hasField(S, "_proto")) { + if (comptime reflect.Proto(S) != null) { self.destroyChain(value._proto, new_size, new_align); } else { // no proto so this is the head of the chain. diff --git a/src/browser/js/Caller.zig b/src/browser/js/Caller.zig index 6444152cb..b59ea4368 100644 --- a/src/browser/js/Caller.zig +++ b/src/browser/js/Caller.zig @@ -22,6 +22,7 @@ const string = @import("../../string.zig"); const Page = @import("../Page.zig"); const Frame = @import("../Frame.zig"); +const reflect = @import("../reflect.zig"); const js = @import("js.zig"); const Local = @import("Local.zig"); @@ -547,15 +548,14 @@ fn errorLocal(comptime T: type, local: *const Local, info: anytype) Local { }; } -// Upcast a Node-descendant instance to *Node by walking the _proto chain. +// Upcast a Node-descendant instance to *Node by walking the Proto chain. // Not every node type defines an asNode() helper (e.g. Comment, Text), but // inheritsOrIs guarantees Node is in the chain fn protoNode(comptime T: type, instance: *T) *@import("../webapi/Node.zig") { if (T == @import("../webapi/Node.zig")) { return instance; } - const Proto = @typeInfo(std.meta.fieldInfo(T, ._proto).type).pointer.child; - return protoNode(Proto, instance._proto); + return protoNode(reflect.Proto(T).?, instance._proto); } fn handleError(comptime T: type, comptime F: type, local: *const Local, err: anyerror, info: anytype) void { diff --git a/src/browser/js/Local.zig b/src/browser/js/Local.zig index c5ae2713e..16710f82c 100644 --- a/src/browser/js/Local.zig +++ b/src/browser/js/Local.zig @@ -25,6 +25,7 @@ const Page = @import("../Page.zig"); const js = @import("js.zig"); const bridge = @import("bridge.zig"); +const reflect = @import("../reflect.zig"); const Caller = @import("Caller.zig"); const Context = @import("Context.zig"); const Isolate = @import("Isolate.zig"); @@ -1380,12 +1381,7 @@ fn findFinalizerType(comptime T: type) ?type { if (@hasDecl(S, "acquireRef")) { return S; } - if (@hasField(S, "_proto")) { - const ProtoPtr = std.meta.fieldInfo(S, ._proto).type; - const ProtoChild = @typeInfo(ProtoPtr).pointer.child; - return findFinalizerType(ProtoChild); - } - return null; + return findFinalizerType(reflect.Proto(S) orelse return null); } // Generate a function that follows the _proto pointer chain to get to the finalizer type @@ -1398,10 +1394,8 @@ fn finalizerPtrGetter(comptime T: type, comptime FT: type) *const fn (*T) *FT { } }.get; } - if (@hasField(S, "_proto")) { - const ProtoPtr = std.meta.fieldInfo(S, ._proto).type; - const ProtoChild = @typeInfo(ProtoPtr).pointer.child; - const childGetter = comptime finalizerPtrGetter(ProtoChild, FT); + if (reflect.Proto(S)) |P| { + const childGetter = comptime finalizerPtrGetter(P, FT); return struct { fn get(v: *T) *FT { return childGetter(v._proto); diff --git a/src/browser/js/Snapshot.zig b/src/browser/js/Snapshot.zig index bebd89a65..06b7d52de 100644 --- a/src/browser/js/Snapshot.zig +++ b/src/browser/js/Snapshot.zig @@ -21,6 +21,7 @@ const lp = @import("lightpanda"); const js = @import("js.zig"); const bridge = @import("bridge.zig"); +const reflect = @import("../reflect.zig"); // Not ideal, but its children have special constructor rules (can be extended // can't be instantiated). And rather than coming up with a generic definition @@ -693,11 +694,7 @@ fn protoIndexLookup(comptime JsApi: type) ?u16 { @setEvalBranchQuota(100_000); comptime { const T = JsApi.bridge.type; - if (!@hasField(T, "_proto")) { - return null; - } - const Ptr = std.meta.fieldInfo(T, ._proto).type; - const F = @typeInfo(Ptr).pointer.child; + const F = reflect.Proto(T) orelse return null; // Look up in the provided API list for (JsApis, 0..) |Api, i| { if (Api == F.JsApi) { diff --git a/src/browser/js/bridge.zig b/src/browser/js/bridge.zig index 9129ed80a..f0000c1a1 100644 --- a/src/browser/js/bridge.zig +++ b/src/browser/js/bridge.zig @@ -20,6 +20,7 @@ const std = @import("std"); const lp = @import("lightpanda"); const Frame = @import("../Frame.zig"); +const reflect = @import("../reflect.zig"); const js = @import("js.zig"); const Caller = @import("Caller.zig"); @@ -805,10 +806,7 @@ fn prototypeChainLength(comptime T: type) usize { // Given a Type, gets its prototype Type (if any) fn PrototypeType(comptime T: type) ?type { - if (!@hasField(T, "_proto")) { - return null; - } - return Struct(std.meta.fieldInfo(T, ._proto).type); + return reflect.Proto(T); } fn flattenTypes(comptime Types: []const type) [countFlattenedTypes(Types)]type { @@ -1305,7 +1303,7 @@ pub const JsApis = blk: { break :blk base ++ [_]type{@import("../webapi/WebDriver.zig").JsApi}; }; -// Whether Child is Ancestor or inherits from it, following the _proto chain. +// Whether Child is Ancestor or inherits from it, following the Proto chain. pub fn inheritsOrIs(comptime Child: type, comptime Ancestor: type) bool { comptime { const target = Ancestor.bridge.type; @@ -1314,10 +1312,7 @@ pub fn inheritsOrIs(comptime Child: type, comptime Ancestor: type) bool { if (T == target) { return true; } - if (!@hasField(T, "_proto")) { - return false; - } - T = @typeInfo(std.meta.fieldInfo(T, ._proto).type).pointer.child; + T = reflect.Proto(T) orelse return false; } } } diff --git a/src/browser/reflect.zig b/src/browser/reflect.zig index d1bd30c23..c4bf6f062 100644 --- a/src/browser/reflect.zig +++ b/src/browser/reflect.zig @@ -16,6 +16,19 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +// The prototype ("parent") type of T, as declared by its `pub const Proto`. +// This decl is the single source of truth for prototype-chain discovery; +// a `_proto` field, where one exists, is only storage and must agree. +pub fn Proto(comptime T: type) ?type { + if (!@hasDecl(T, "Proto")) { + return null; + } + if (@hasField(T, "_proto") and @FieldType(T, "_proto") != *T.Proto) { + @compileError(@typeName(T) ++ ": _proto field and Proto decl disagree"); + } + return T.Proto; +} + // Gets the Parent of child. // HtmlElement.of(script) -> *HTMLElement pub fn Struct(comptime T: type) type { diff --git a/src/browser/webapi/AbortSignal.zig b/src/browser/webapi/AbortSignal.zig index 3059be2d0..5e3fcf95d 100644 --- a/src/browser/webapi/AbortSignal.zig +++ b/src/browser/webapi/AbortSignal.zig @@ -31,6 +31,8 @@ const Execution = js.Execution; const AbortSignal = @This(); +pub const Proto = EventTarget; + const Dependend = union(enum) { signal: *AbortSignal, model_context_tool: *ModelContextTool, diff --git a/src/browser/webapi/BroadcastChannel.zig b/src/browser/webapi/BroadcastChannel.zig index 457c5323b..d6d252fa3 100644 --- a/src/browser/webapi/BroadcastChannel.zig +++ b/src/browser/webapi/BroadcastChannel.zig @@ -29,6 +29,8 @@ const Execution = js.Execution; const BroadcastChannel = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _exec: *Execution, _name: lp.String, diff --git a/src/browser/webapi/CData.zig b/src/browser/webapi/CData.zig index ca29617e4..9458ff4bf 100644 --- a/src/browser/webapi/CData.zig +++ b/src/browser/webapi/CData.zig @@ -32,10 +32,21 @@ const String = lp.String; const CData = @This(); +pub const Proto = Node; + _type: Type, _proto: *Node, _data: String = .empty, +pub const Type = union(enum) { + text: Text, + comment: Comment, + // This should be under Text, but that would require storing a _type union + // in text, which would add 8 bytes to every text node. + cdata_section: CDATASection, + processing_instruction: *ProcessingInstruction, +}; + /// Count UTF-16 code units in a UTF-8 string. /// 4-byte UTF-8 sequences (codepoints >= U+10000) produce 2 UTF-16 code units (surrogate pair), /// everything else produces 1. @@ -180,15 +191,6 @@ fn utf16RangeToUtf8(data: []const u8, utf16_start: usize, utf16_end: usize) !str return .{ .start = start, .end = i }; } -pub const Type = union(enum) { - text: Text, - comment: Comment, - // This should be under Text, but that would require storing a _type union - // in text, which would add 8 bytes to every text node. - cdata_section: CDATASection, - processing_instruction: *ProcessingInstruction, -}; - pub fn asNode(self: *CData) *Node { return self._proto; } diff --git a/src/browser/webapi/DOMMatrix.zig b/src/browser/webapi/DOMMatrix.zig index 1e375c5f9..8f915020c 100644 --- a/src/browser/webapi/DOMMatrix.zig +++ b/src/browser/webapi/DOMMatrix.zig @@ -24,6 +24,8 @@ const RO = @import("DOMMatrixReadOnly.zig"); const DOMMatrix = @This(); +pub const Proto = RO; + _proto: *RO, pub fn init(init_: ?js.Value, exec: *const js.Execution) !*DOMMatrix { diff --git a/src/browser/webapi/DOMPoint.zig b/src/browser/webapi/DOMPoint.zig index d9356d3f2..02055669f 100644 --- a/src/browser/webapi/DOMPoint.zig +++ b/src/browser/webapi/DOMPoint.zig @@ -22,6 +22,8 @@ const RO = @import("DOMPointReadOnly.zig"); const DOMPoint = @This(); +pub const Proto = RO; + _proto: *RO, pub fn init(x_: ?f64, y_: ?f64, z_: ?f64, w_: ?f64, exec: *const js.Execution) !*DOMPoint { diff --git a/src/browser/webapi/DOMRect.zig b/src/browser/webapi/DOMRect.zig index 00eee6b1c..50d8af5e1 100644 --- a/src/browser/webapi/DOMRect.zig +++ b/src/browser/webapi/DOMRect.zig @@ -26,6 +26,8 @@ pub const Data = RO.Data; const DOMRect = @This(); +pub const Proto = RO; + _proto: *RO, pub fn init(x_: ?f64, y_: ?f64, width_: ?f64, height_: ?f64, exec: *const js.Execution) !*DOMRect { diff --git a/src/browser/webapi/DedicatedWorkerGlobalScope.zig b/src/browser/webapi/DedicatedWorkerGlobalScope.zig index d34c20645..90e07154e 100644 --- a/src/browser/webapi/DedicatedWorkerGlobalScope.zig +++ b/src/browser/webapi/DedicatedWorkerGlobalScope.zig @@ -37,6 +37,8 @@ const Allocator = std.mem.Allocator; const DedicatedWorkerGlobalScope = @This(); +pub const Proto = WorkerGlobalScope; + _proto: *WorkerGlobalScope, _worker: *Worker, _closed: bool = false, diff --git a/src/browser/webapi/Document.zig b/src/browser/webapi/Document.zig index aaef3fce4..367ba2e87 100644 --- a/src/browser/webapi/Document.zig +++ b/src/browser/webapi/Document.zig @@ -50,6 +50,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const Document = @This(); +pub const Proto = Node; + _type: Type, _proto: *Node, _frame: ?*Frame = null, diff --git a/src/browser/webapi/DocumentFragment.zig b/src/browser/webapi/DocumentFragment.zig index 05dc17a8c..2580ca815 100644 --- a/src/browser/webapi/DocumentFragment.zig +++ b/src/browser/webapi/DocumentFragment.zig @@ -28,6 +28,8 @@ const Selector = @import("selector/Selector.zig"); const DocumentFragment = @This(); +pub const Proto = Node; + _type: Type, _proto: *Node, diff --git a/src/browser/webapi/DocumentType.zig b/src/browser/webapi/DocumentType.zig index 670ca01d0..b04df318b 100644 --- a/src/browser/webapi/DocumentType.zig +++ b/src/browser/webapi/DocumentType.zig @@ -25,6 +25,8 @@ const Node = @import("Node.zig"); const DocumentType = @This(); +pub const Proto = Node; + _proto: *Node, _name: []const u8, _public_id: []const u8, diff --git a/src/browser/webapi/Element.zig b/src/browser/webapi/Element.zig index 665b9402c..1769d37d6 100644 --- a/src/browser/webapi/Element.zig +++ b/src/browser/webapi/Element.zig @@ -46,6 +46,8 @@ const String = lp.String; const Element = @This(); +pub const Proto = Node; + pub const DatasetLookup = std.AutoHashMapUnmanaged(*Element, *DOMStringMap); pub const StyleLookup = std.AutoHashMapUnmanaged(*Element, *CSSStyleProperties); pub const ClassListLookup = std.AutoHashMapUnmanaged(*Element, *collections.DOMTokenList); diff --git a/src/browser/webapi/File.zig b/src/browser/webapi/File.zig index 6a8b8958a..6ebab3eeb 100644 --- a/src/browser/webapi/File.zig +++ b/src/browser/webapi/File.zig @@ -26,6 +26,8 @@ const Blob = @import("Blob.zig"); const File = @This(); +pub const Proto = Blob; + _proto: *Blob, _name: []const u8, _last_modified: i64, diff --git a/src/browser/webapi/FileReader.zig b/src/browser/webapi/FileReader.zig index 543997d44..1c0098bdc 100644 --- a/src/browser/webapi/FileReader.zig +++ b/src/browser/webapi/FileReader.zig @@ -33,6 +33,8 @@ const Allocator = std.mem.Allocator; /// https://developer.mozilla.org/en-US/docs/Web/API/FileReader const FileReader = @This(); +pub const Proto = EventTarget; + _rc: lp.RC = .{}, _exec: *Execution, _proto: *EventTarget, diff --git a/src/browser/webapi/HTMLDocument.zig b/src/browser/webapi/HTMLDocument.zig index 08befb559..1ad5814c8 100644 --- a/src/browser/webapi/HTMLDocument.zig +++ b/src/browser/webapi/HTMLDocument.zig @@ -28,6 +28,8 @@ const collections = @import("collections.zig"); const HTMLDocument = @This(); +pub const Proto = Document; + _proto: *Document, _document_type: ?*DocumentType = null, diff --git a/src/browser/webapi/MessagePort.zig b/src/browser/webapi/MessagePort.zig index 773f869f2..59b8740f9 100644 --- a/src/browser/webapi/MessagePort.zig +++ b/src/browser/webapi/MessagePort.zig @@ -29,6 +29,8 @@ const Execution = js.Execution; const MessagePort = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, // The context this port lives in. The two ends of an entangled pair can be in diff --git a/src/browser/webapi/Node.zig b/src/browser/webapi/Node.zig index 2519df1a6..98a397f09 100644 --- a/src/browser/webapi/Node.zig +++ b/src/browser/webapi/Node.zig @@ -42,6 +42,8 @@ pub const AssignedSlotLookup = std.AutoHashMapUnmanaged(*Node, *Element.Html.Slo const Node = @This(); +pub const Proto = EventTarget; + _type: Type, _proto: *EventTarget, _parent: ?*Node = null, diff --git a/src/browser/webapi/Notification.zig b/src/browser/webapi/Notification.zig index 83b64a14b..2660fdb6b 100644 --- a/src/browser/webapi/Notification.zig +++ b/src/browser/webapi/Notification.zig @@ -29,6 +29,8 @@ const Allocator = std.mem.Allocator; const Notification = @This(); +pub const Proto = EventTarget; + _rc: lp.RC = .{}, _arena: Allocator, _proto: *EventTarget, diff --git a/src/browser/webapi/Performance.zig b/src/browser/webapi/Performance.zig index 8ba0c85ec..0d1ba01b5 100644 --- a/src/browser/webapi/Performance.zig +++ b/src/browser/webapi/Performance.zig @@ -444,6 +444,8 @@ pub const Entry = struct { }; pub const Mark = struct { + pub const Proto = Entry; + _proto: *Entry, _detail: ?js.Value.Global, @@ -489,6 +491,8 @@ pub const Mark = struct { }; pub const Measure = struct { + pub const Proto = Entry; + _proto: *Entry, _detail: ?js.Value.Global, diff --git a/src/browser/webapi/Range.zig b/src/browser/webapi/Range.zig index 9339fde76..b7c18609b 100644 --- a/src/browser/webapi/Range.zig +++ b/src/browser/webapi/Range.zig @@ -31,6 +31,8 @@ const String = lp.String; const Range = @This(); +pub const Proto = AbstractRange; + _proto: *AbstractRange, pub fn init(frame: *Frame) !*Range { diff --git a/src/browser/webapi/Screen.zig b/src/browser/webapi/Screen.zig index e8ee3b8bb..8b266b0c5 100644 --- a/src/browser/webapi/Screen.zig +++ b/src/browser/webapi/Screen.zig @@ -29,6 +29,8 @@ pub fn registerTypes() []const type { const Screen = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _orientation: ?*Orientation = null, @@ -72,6 +74,8 @@ pub const JsApi = struct { }; pub const Orientation = struct { + pub const Proto = EventTarget; + _proto: *EventTarget, pub fn init(frame: *Frame) !*Orientation { diff --git a/src/browser/webapi/ShadowRoot.zig b/src/browser/webapi/ShadowRoot.zig index d54cb6b02..d2ea005b3 100644 --- a/src/browser/webapi/ShadowRoot.zig +++ b/src/browser/webapi/ShadowRoot.zig @@ -26,6 +26,8 @@ const Element = @import("Element.zig"); const ShadowRoot = @This(); +pub const Proto = DocumentFragment; + pub const Mode = enum { open, closed, diff --git a/src/browser/webapi/SharedWorker.zig b/src/browser/webapi/SharedWorker.zig index 991175480..78844d369 100644 --- a/src/browser/webapi/SharedWorker.zig +++ b/src/browser/webapi/SharedWorker.zig @@ -45,6 +45,8 @@ const log = lp.log; const SharedWorker = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _port: *MessagePort, _on_error: ?js.Function.Global = null, diff --git a/src/browser/webapi/SharedWorkerGlobalScope.zig b/src/browser/webapi/SharedWorkerGlobalScope.zig index ad3456fb3..d105b5d84 100644 --- a/src/browser/webapi/SharedWorkerGlobalScope.zig +++ b/src/browser/webapi/SharedWorkerGlobalScope.zig @@ -36,6 +36,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const SharedWorkerGlobalScope = @This(); +pub const Proto = WorkerGlobalScope; + _proto: *WorkerGlobalScope, _arena: Allocator, diff --git a/src/browser/webapi/StaticRange.zig b/src/browser/webapi/StaticRange.zig index 87c6f4293..823ca4241 100644 --- a/src/browser/webapi/StaticRange.zig +++ b/src/browser/webapi/StaticRange.zig @@ -24,6 +24,8 @@ const AbstractRange = @import("AbstractRange.zig"); const StaticRange = @This(); +pub const Proto = AbstractRange; + // The boundary points and `collapsed` accessor live on the shared AbstractRange // prototype. Unlike Range, a StaticRange is *static*: the factory keeps it out // of the frame's live-range list, so DOM mutations never move its boundaries. diff --git a/src/browser/webapi/VisualViewport.zig b/src/browser/webapi/VisualViewport.zig index 569726f3f..6caaf5bd0 100644 --- a/src/browser/webapi/VisualViewport.zig +++ b/src/browser/webapi/VisualViewport.zig @@ -22,6 +22,8 @@ const EventTarget = @import("EventTarget.zig"); const VisualViewport = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, pub fn asEventTarget(self: *VisualViewport) *EventTarget { diff --git a/src/browser/webapi/Window.zig b/src/browser/webapi/Window.zig index 4680e9293..cc4207408 100644 --- a/src/browser/webapi/Window.zig +++ b/src/browser/webapi/Window.zig @@ -64,6 +64,8 @@ pub fn registerTypes() []const type { const Window = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _frame: *Frame, _document: *Document, diff --git a/src/browser/webapi/Worker.zig b/src/browser/webapi/Worker.zig index 9b15e0ab9..f4370b93d 100644 --- a/src/browser/webapi/Worker.zig +++ b/src/browser/webapi/Worker.zig @@ -36,6 +36,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const Worker = @This(); +pub const Proto = EventTarget; + pub const WorkerType = enum { classic, module, diff --git a/src/browser/webapi/WorkerGlobalScope.zig b/src/browser/webapi/WorkerGlobalScope.zig index 1fff908b6..8610156e1 100644 --- a/src/browser/webapi/WorkerGlobalScope.zig +++ b/src/browser/webapi/WorkerGlobalScope.zig @@ -57,6 +57,8 @@ const Allocator = std.mem.Allocator; const WorkerGlobalScope = @This(); +pub const Proto = EventTarget; + _type: Type, _frame: *Frame, _is_module: bool, diff --git a/src/browser/webapi/XMLDocument.zig b/src/browser/webapi/XMLDocument.zig index 26f1b733b..1b8890fa4 100644 --- a/src/browser/webapi/XMLDocument.zig +++ b/src/browser/webapi/XMLDocument.zig @@ -23,6 +23,8 @@ const Node = @import("Node.zig"); const XMLDocument = @This(); +pub const Proto = Document; + _proto: *Document, pub fn asDocument(self: *XMLDocument) *Document { diff --git a/src/browser/webapi/cdata/CDATASection.zig b/src/browser/webapi/cdata/CDATASection.zig index 9a9d9e08c..ed638c172 100644 --- a/src/browser/webapi/cdata/CDATASection.zig +++ b/src/browser/webapi/cdata/CDATASection.zig @@ -22,6 +22,8 @@ const Text = @import("Text.zig"); const CDATASection = @This(); +pub const Proto = Text; + _proto: *Text, pub const JsApi = struct { diff --git a/src/browser/webapi/cdata/Comment.zig b/src/browser/webapi/cdata/Comment.zig index a77a1c57f..0ceb91c04 100644 --- a/src/browser/webapi/cdata/Comment.zig +++ b/src/browser/webapi/cdata/Comment.zig @@ -23,6 +23,8 @@ const CData = @import("../CData.zig"); const Comment = @This(); +pub const Proto = CData; + _proto: *CData, pub fn init(str: ?js.NullableString, frame: *Frame) !*Comment { diff --git a/src/browser/webapi/cdata/ProcessingInstruction.zig b/src/browser/webapi/cdata/ProcessingInstruction.zig index 97024d4ed..3c57238f6 100644 --- a/src/browser/webapi/cdata/ProcessingInstruction.zig +++ b/src/browser/webapi/cdata/ProcessingInstruction.zig @@ -22,6 +22,8 @@ const CData = @import("../CData.zig"); const ProcessingInstruction = @This(); +pub const Proto = CData; + _proto: *CData, _target: []const u8, diff --git a/src/browser/webapi/cdata/Text.zig b/src/browser/webapi/cdata/Text.zig index 1682d916e..91300f850 100644 --- a/src/browser/webapi/cdata/Text.zig +++ b/src/browser/webapi/cdata/Text.zig @@ -27,6 +27,8 @@ const slotting = @import("../element/slotting.zig"); const Text = @This(); +pub const Proto = CData; + _proto: *CData, pub fn init(str: ?js.NullableString, frame: *Frame) !*Text { diff --git a/src/browser/webapi/collections/HTMLFormControlsCollection.zig b/src/browser/webapi/collections/HTMLFormControlsCollection.zig index ce03f9581..3a2bd5951 100644 --- a/src/browser/webapi/collections/HTMLFormControlsCollection.zig +++ b/src/browser/webapi/collections/HTMLFormControlsCollection.zig @@ -30,6 +30,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const HTMLFormControlsCollection = @This(); +pub const Proto = HTMLCollection; + _proto: *HTMLCollection, // The refcount lives on the proto, but anchoring the finalizer here lets diff --git a/src/browser/webapi/collections/HTMLOptionsCollection.zig b/src/browser/webapi/collections/HTMLOptionsCollection.zig index 0af002107..123d56214 100644 --- a/src/browser/webapi/collections/HTMLOptionsCollection.zig +++ b/src/browser/webapi/collections/HTMLOptionsCollection.zig @@ -25,6 +25,8 @@ const HTMLCollection = @import("HTMLCollection.zig"); const HTMLOptionsCollection = @This(); +pub const Proto = HTMLCollection; + _proto: *HTMLCollection, _select: *@import("../element/html/Select.zig"), diff --git a/src/browser/webapi/collections/RadioNodeList.zig b/src/browser/webapi/collections/RadioNodeList.zig index daee407d8..2b0ee2dda 100644 --- a/src/browser/webapi/collections/RadioNodeList.zig +++ b/src/browser/webapi/collections/RadioNodeList.zig @@ -29,6 +29,8 @@ const HTMLFormControlsCollection = @import("HTMLFormControlsCollection.zig"); const RadioNodeList = @This(); +pub const Proto = NodeList; + _proto: *NodeList, _name: []const u8, _form_collection: *HTMLFormControlsCollection, diff --git a/src/browser/webapi/css/CSSStyleProperties.zig b/src/browser/webapi/css/CSSStyleProperties.zig index 726a22695..79fe583f7 100644 --- a/src/browser/webapi/css/CSSStyleProperties.zig +++ b/src/browser/webapi/css/CSSStyleProperties.zig @@ -25,6 +25,8 @@ const CSSStyleDeclaration = @import("CSSStyleDeclaration.zig"); const CSSStyleProperties = @This(); +pub const Proto = CSSStyleDeclaration; + _proto: *CSSStyleDeclaration, pub fn init(element: ?*Element, is_computed: bool, frame: *Frame) !*CSSStyleProperties { diff --git a/src/browser/webapi/css/CSSStyleRule.zig b/src/browser/webapi/css/CSSStyleRule.zig index f28f0d011..1fbe265b1 100644 --- a/src/browser/webapi/css/CSSStyleRule.zig +++ b/src/browser/webapi/css/CSSStyleRule.zig @@ -6,6 +6,8 @@ const CSSStyleProperties = @import("CSSStyleProperties.zig"); const CSSStyleRule = @This(); +pub const Proto = CSSRule; + _proto: *CSSRule, _selector_text: []const u8 = "", _style: ?*CSSStyleProperties = null, diff --git a/src/browser/webapi/css/FontFaceSet.zig b/src/browser/webapi/css/FontFaceSet.zig index 26da28227..83fd40c62 100644 --- a/src/browser/webapi/css/FontFaceSet.zig +++ b/src/browser/webapi/css/FontFaceSet.zig @@ -32,6 +32,8 @@ const Allocator = std.mem.Allocator; const FontFaceSet = @This(); +pub const Proto = EventTarget; + _rc: lp.RC = .{}, _proto: *EventTarget, _arena: Allocator, diff --git a/src/browser/webapi/css/MediaQueryList.zig b/src/browser/webapi/css/MediaQueryList.zig index 1dc02509c..4d0c2097e 100644 --- a/src/browser/webapi/css/MediaQueryList.zig +++ b/src/browser/webapi/css/MediaQueryList.zig @@ -24,6 +24,8 @@ const MediaQuery = @import("../../css/MediaQuery.zig"); const MediaQueryList = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _media: []const u8, diff --git a/src/browser/webapi/element/Attribute.zig b/src/browser/webapi/element/Attribute.zig index c2023a1ef..f9553bd24 100644 --- a/src/browser/webapi/element/Attribute.zig +++ b/src/browser/webapi/element/Attribute.zig @@ -41,6 +41,8 @@ pub fn registerTypes() []const type { pub const Attribute = @This(); +pub const Proto = Node; + _proto: *Node, _name: String, _value: String, diff --git a/src/browser/webapi/element/Html.zig b/src/browser/webapi/element/Html.zig index 9e190f465..1522cd8d5 100644 --- a/src/browser/webapi/element/Html.zig +++ b/src/browser/webapi/element/Html.zig @@ -103,6 +103,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const HtmlElement = @This(); +pub const Proto = Element; + _type: Type, _proto: *Element, diff --git a/src/browser/webapi/element/Svg.zig b/src/browser/webapi/element/Svg.zig index 56728991f..0103e43cd 100644 --- a/src/browser/webapi/element/Svg.zig +++ b/src/browser/webapi/element/Svg.zig @@ -41,6 +41,8 @@ pub const Stop = @import("svg/Stop.zig"); const String = lp.String; const Svg = @This(); + +pub const Proto = Element; _type: Type, _proto: *Element, _tag_name: String, // Svg elements are case-preserving diff --git a/src/browser/webapi/element/html/Anchor.zig b/src/browser/webapi/element/html/Anchor.zig index 95cbf9b04..5e0b22d95 100644 --- a/src/browser/webapi/element/html/Anchor.zig +++ b/src/browser/webapi/element/html/Anchor.zig @@ -26,6 +26,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Anchor = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *Anchor) *Element { diff --git a/src/browser/webapi/element/html/Area.zig b/src/browser/webapi/element/html/Area.zig index 02b01a708..5f4378f49 100644 --- a/src/browser/webapi/element/html/Area.zig +++ b/src/browser/webapi/element/html/Area.zig @@ -26,6 +26,8 @@ const HtmlElement = @import("../Html.zig"); const Area = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Area) *Element { diff --git a/src/browser/webapi/element/html/Audio.zig b/src/browser/webapi/element/html/Audio.zig index 88a41e384..2c9f807c3 100644 --- a/src/browser/webapi/element/html/Audio.zig +++ b/src/browser/webapi/element/html/Audio.zig @@ -29,6 +29,8 @@ const String = lp.String; const Audio = @This(); +pub const Proto = Media; + _proto: *Media, pub fn constructor(maybe_url: ?String, frame: *Frame) !*Media { diff --git a/src/browser/webapi/element/html/BR.zig b/src/browser/webapi/element/html/BR.zig index e6dcbd4aa..36808c6f9 100644 --- a/src/browser/webapi/element/html/BR.zig +++ b/src/browser/webapi/element/html/BR.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const BR = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *BR) *Element { diff --git a/src/browser/webapi/element/html/Base.zig b/src/browser/webapi/element/html/Base.zig index 3e25dc8f4..9575c4ee6 100644 --- a/src/browser/webapi/element/html/Base.zig +++ b/src/browser/webapi/element/html/Base.zig @@ -8,6 +8,8 @@ const HtmlElement = @import("../Html.zig"); const Base = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Base) *Element { diff --git a/src/browser/webapi/element/html/Body.zig b/src/browser/webapi/element/html/Body.zig index 4101261cd..70b5ecec4 100644 --- a/src/browser/webapi/element/html/Body.zig +++ b/src/browser/webapi/element/html/Body.zig @@ -29,6 +29,8 @@ const String = lp.String; const Body = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Body) *Element { diff --git a/src/browser/webapi/element/html/Button.zig b/src/browser/webapi/element/html/Button.zig index 48426a5df..db0adef6d 100644 --- a/src/browser/webapi/element/html/Button.zig +++ b/src/browser/webapi/element/html/Button.zig @@ -32,6 +32,8 @@ const popover = @import("../popover.zig"); const Button = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, _custom_validity: ?[]const u8 = null, _validity: ?*ValidityState = null, diff --git a/src/browser/webapi/element/html/Canvas.zig b/src/browser/webapi/element/html/Canvas.zig index 775afa65f..9ba26fa0d 100644 --- a/src/browser/webapi/element/html/Canvas.zig +++ b/src/browser/webapi/element/html/Canvas.zig @@ -30,6 +30,8 @@ const OffscreenCanvas = @import("../../canvas/OffscreenCanvas.zig"); const Execution = js.Execution; const Canvas = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, _cached: ?DrawingContext = null, diff --git a/src/browser/webapi/element/html/Custom.zig b/src/browser/webapi/element/html/Custom.zig index a74bcd9da..44124872b 100644 --- a/src/browser/webapi/element/html/Custom.zig +++ b/src/browser/webapi/element/html/Custom.zig @@ -33,6 +33,8 @@ const log = lp.log; const String = lp.String; const Custom = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, _tag_name: String, _definition: ?*CustomElementDefinition, diff --git a/src/browser/webapi/element/html/DList.zig b/src/browser/webapi/element/html/DList.zig index 12a223c32..89a932ad3 100644 --- a/src/browser/webapi/element/html/DList.zig +++ b/src/browser/webapi/element/html/DList.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const DList = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *DList) *Element { diff --git a/src/browser/webapi/element/html/Data.zig b/src/browser/webapi/element/html/Data.zig index ba41d3c71..1f12fee46 100644 --- a/src/browser/webapi/element/html/Data.zig +++ b/src/browser/webapi/element/html/Data.zig @@ -25,6 +25,8 @@ const HtmlElement = @import("../Html.zig"); const Data = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Data) *Element { diff --git a/src/browser/webapi/element/html/DataList.zig b/src/browser/webapi/element/html/DataList.zig index 3bbc3ba63..009968a83 100644 --- a/src/browser/webapi/element/html/DataList.zig +++ b/src/browser/webapi/element/html/DataList.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const DataList = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *DataList) *Element { diff --git a/src/browser/webapi/element/html/Details.zig b/src/browser/webapi/element/html/Details.zig index 9cad69d35..bf5ec2f49 100644 --- a/src/browser/webapi/element/html/Details.zig +++ b/src/browser/webapi/element/html/Details.zig @@ -7,6 +7,8 @@ const HtmlElement = @import("../Html.zig"); const Details = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Details) *Element { diff --git a/src/browser/webapi/element/html/Dialog.zig b/src/browser/webapi/element/html/Dialog.zig index 951983cda..556fcda98 100644 --- a/src/browser/webapi/element/html/Dialog.zig +++ b/src/browser/webapi/element/html/Dialog.zig @@ -8,6 +8,8 @@ const HtmlElement = @import("../Html.zig"); const Dialog = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Dialog) *Element { diff --git a/src/browser/webapi/element/html/Directory.zig b/src/browser/webapi/element/html/Directory.zig index e0c488e7f..5606556ba 100644 --- a/src/browser/webapi/element/html/Directory.zig +++ b/src/browser/webapi/element/html/Directory.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const Directory = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Directory) *Element { diff --git a/src/browser/webapi/element/html/Div.zig b/src/browser/webapi/element/html/Div.zig index 0fe21d950..5c0ad8d08 100644 --- a/src/browser/webapi/element/html/Div.zig +++ b/src/browser/webapi/element/html/Div.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Div = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *Div) *Element { diff --git a/src/browser/webapi/element/html/Embed.zig b/src/browser/webapi/element/html/Embed.zig index 250524e0f..ffa9ea7ce 100644 --- a/src/browser/webapi/element/html/Embed.zig +++ b/src/browser/webapi/element/html/Embed.zig @@ -23,6 +23,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Embed = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *Embed) *Element { diff --git a/src/browser/webapi/element/html/FieldSet.zig b/src/browser/webapi/element/html/FieldSet.zig index c7cb512bf..1384e25e7 100644 --- a/src/browser/webapi/element/html/FieldSet.zig +++ b/src/browser/webapi/element/html/FieldSet.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const FieldSet = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *FieldSet) *Element { diff --git a/src/browser/webapi/element/html/Font.zig b/src/browser/webapi/element/html/Font.zig index fe0a7bea2..e0496781b 100644 --- a/src/browser/webapi/element/html/Font.zig +++ b/src/browser/webapi/element/html/Font.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const Font = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Font) *Element { diff --git a/src/browser/webapi/element/html/Form.zig b/src/browser/webapi/element/html/Form.zig index 7d0c6e220..05e8cbbf1 100644 --- a/src/browser/webapi/element/html/Form.zig +++ b/src/browser/webapi/element/html/Form.zig @@ -31,6 +31,8 @@ pub const Select = @import("Select.zig"); pub const TextArea = @import("TextArea.zig"); const Form = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, // Prevents submission of the form while we're in the process of submitting diff --git a/src/browser/webapi/element/html/FrameSet.zig b/src/browser/webapi/element/html/FrameSet.zig index 2643580a4..8a1116158 100644 --- a/src/browser/webapi/element/html/FrameSet.zig +++ b/src/browser/webapi/element/html/FrameSet.zig @@ -11,6 +11,8 @@ const String = lp.String; const FrameSet = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *FrameSet) *Element { diff --git a/src/browser/webapi/element/html/Generic.zig b/src/browser/webapi/element/html/Generic.zig index 637f5ff4c..7d20713ff 100644 --- a/src/browser/webapi/element/html/Generic.zig +++ b/src/browser/webapi/element/html/Generic.zig @@ -27,6 +27,8 @@ const HtmlElement = @import("../Html.zig"); const String = lp.String; const Generic = @This(); + +pub const Proto = HtmlElement; _tag_name: String, _tag: Element.Tag, _proto: *HtmlElement, diff --git a/src/browser/webapi/element/html/HR.zig b/src/browser/webapi/element/html/HR.zig index 231e0b1ae..5d6e4e6cb 100644 --- a/src/browser/webapi/element/html/HR.zig +++ b/src/browser/webapi/element/html/HR.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const HR = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *HR) *Element { diff --git a/src/browser/webapi/element/html/Head.zig b/src/browser/webapi/element/html/Head.zig index 5bb081630..344842493 100644 --- a/src/browser/webapi/element/html/Head.zig +++ b/src/browser/webapi/element/html/Head.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Head = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *Head) *Element { diff --git a/src/browser/webapi/element/html/Heading.zig b/src/browser/webapi/element/html/Heading.zig index d0844fe3b..ff9a704a0 100644 --- a/src/browser/webapi/element/html/Heading.zig +++ b/src/browser/webapi/element/html/Heading.zig @@ -27,6 +27,8 @@ const HtmlElement = @import("../Html.zig"); const String = lp.String; const Heading = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, _tag_name: String, _tag: Element.Tag, diff --git a/src/browser/webapi/element/html/Html.zig b/src/browser/webapi/element/html/Html.zig index 94fa2c333..c5e1eeebe 100644 --- a/src/browser/webapi/element/html/Html.zig +++ b/src/browser/webapi/element/html/Html.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Html = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *Html) *Element { diff --git a/src/browser/webapi/element/html/IFrame.zig b/src/browser/webapi/element/html/IFrame.zig index e2e139049..5c31f08a9 100644 --- a/src/browser/webapi/element/html/IFrame.zig +++ b/src/browser/webapi/element/html/IFrame.zig @@ -30,6 +30,8 @@ const DOMTokenList = @import("../../collections.zig").DOMTokenList; const HtmlElement = @import("../Html.zig"); const IFrame = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, _src: []const u8 = "", _executed: bool = false, diff --git a/src/browser/webapi/element/html/Image.zig b/src/browser/webapi/element/html/Image.zig index dd75052b0..09b67c1da 100644 --- a/src/browser/webapi/element/html/Image.zig +++ b/src/browser/webapi/element/html/Image.zig @@ -6,6 +6,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Image = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn constructor(w_: ?u32, h_: ?u32, frame: *Frame) !*Image { diff --git a/src/browser/webapi/element/html/Input.zig b/src/browser/webapi/element/html/Input.zig index 7731bf387..1dd0797f2 100644 --- a/src/browser/webapi/element/html/Input.zig +++ b/src/browser/webapi/element/html/Input.zig @@ -38,6 +38,8 @@ const String = lp.String; const Input = @This(); +pub const Proto = HtmlElement; + pub const Type = enum { text, password, diff --git a/src/browser/webapi/element/html/LI.zig b/src/browser/webapi/element/html/LI.zig index ee7a66a2d..1a20fba6f 100644 --- a/src/browser/webapi/element/html/LI.zig +++ b/src/browser/webapi/element/html/LI.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const LI = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *LI) *Element { diff --git a/src/browser/webapi/element/html/Label.zig b/src/browser/webapi/element/html/Label.zig index 5b31aa01e..e144b7922 100644 --- a/src/browser/webapi/element/html/Label.zig +++ b/src/browser/webapi/element/html/Label.zig @@ -8,6 +8,8 @@ const TreeWalker = @import("../../TreeWalker.zig"); const Label = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Label) *Element { diff --git a/src/browser/webapi/element/html/Legend.zig b/src/browser/webapi/element/html/Legend.zig index 71f379ab5..ad96c6d57 100644 --- a/src/browser/webapi/element/html/Legend.zig +++ b/src/browser/webapi/element/html/Legend.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const Legend = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Legend) *Element { diff --git a/src/browser/webapi/element/html/Link.zig b/src/browser/webapi/element/html/Link.zig index fcd221d42..688dc0188 100644 --- a/src/browser/webapi/element/html/Link.zig +++ b/src/browser/webapi/element/html/Link.zig @@ -27,6 +27,8 @@ const DOMTokenList = @import("../../collections.zig").DOMTokenList; const HtmlElement = @import("../Html.zig"); const Link = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, // Cached CSSStyleSheet for an external `rel=stylesheet` once // `Frame.loadExternalStylesheet` has registered it. Re-fetches (href diff --git a/src/browser/webapi/element/html/Map.zig b/src/browser/webapi/element/html/Map.zig index 5814558e0..9a47af65a 100644 --- a/src/browser/webapi/element/html/Map.zig +++ b/src/browser/webapi/element/html/Map.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const Map = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Map) *Element { diff --git a/src/browser/webapi/element/html/Marquee.zig b/src/browser/webapi/element/html/Marquee.zig index 74c1d6b55..328620eea 100644 --- a/src/browser/webapi/element/html/Marquee.zig +++ b/src/browser/webapi/element/html/Marquee.zig @@ -8,6 +8,8 @@ const HtmlElement = @import("../Html.zig"); const Marquee = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Marquee) *Element { diff --git a/src/browser/webapi/element/html/Media.zig b/src/browser/webapi/element/html/Media.zig index 808e23742..0e62557ed 100644 --- a/src/browser/webapi/element/html/Media.zig +++ b/src/browser/webapi/element/html/Media.zig @@ -30,6 +30,8 @@ const MediaError = @import("../../media/MediaError.zig"); const Media = @This(); +pub const Proto = HtmlElement; + pub const ReadyState = enum(u16) { HAVE_NOTHING = 0, HAVE_METADATA = 1, diff --git a/src/browser/webapi/element/html/Meta.zig b/src/browser/webapi/element/html/Meta.zig index 6dceae348..e32cfe4fd 100644 --- a/src/browser/webapi/element/html/Meta.zig +++ b/src/browser/webapi/element/html/Meta.zig @@ -23,6 +23,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Meta = @This(); + +pub const Proto = HtmlElement; // Because we have a JsApi.Meta, "Meta" can be ambiguous in some scopes. // Create a different alias we can use when in such ambiguous cases. const MetaElement = Meta; diff --git a/src/browser/webapi/element/html/Meter.zig b/src/browser/webapi/element/html/Meter.zig index d68d1d769..95ea139b2 100644 --- a/src/browser/webapi/element/html/Meter.zig +++ b/src/browser/webapi/element/html/Meter.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const Meter = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Meter) *Element { diff --git a/src/browser/webapi/element/html/Mod.zig b/src/browser/webapi/element/html/Mod.zig index 595cce83b..96287a2d7 100644 --- a/src/browser/webapi/element/html/Mod.zig +++ b/src/browser/webapi/element/html/Mod.zig @@ -9,6 +9,8 @@ const String = lp.String; const Mod = @This(); +pub const Proto = HtmlElement; + _tag_name: String, _tag: Element.Tag, _proto: *HtmlElement, diff --git a/src/browser/webapi/element/html/OL.zig b/src/browser/webapi/element/html/OL.zig index 8adc24507..527a619e5 100644 --- a/src/browser/webapi/element/html/OL.zig +++ b/src/browser/webapi/element/html/OL.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const OL = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *OL) *Element { diff --git a/src/browser/webapi/element/html/Object.zig b/src/browser/webapi/element/html/Object.zig index 624f9e8af..f6c609b28 100644 --- a/src/browser/webapi/element/html/Object.zig +++ b/src/browser/webapi/element/html/Object.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const Object = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Object) *Element { diff --git a/src/browser/webapi/element/html/OptGroup.zig b/src/browser/webapi/element/html/OptGroup.zig index cf9610503..2c55c9d33 100644 --- a/src/browser/webapi/element/html/OptGroup.zig +++ b/src/browser/webapi/element/html/OptGroup.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const OptGroup = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *OptGroup) *Element { diff --git a/src/browser/webapi/element/html/Option.zig b/src/browser/webapi/element/html/Option.zig index e677a44b0..300b70410 100644 --- a/src/browser/webapi/element/html/Option.zig +++ b/src/browser/webapi/element/html/Option.zig @@ -30,6 +30,8 @@ const String = lp.String; const Option = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, _value: ?[]const u8 = null, _selected: bool = false, diff --git a/src/browser/webapi/element/html/Output.zig b/src/browser/webapi/element/html/Output.zig index 449f84ec6..ea7fdb815 100644 --- a/src/browser/webapi/element/html/Output.zig +++ b/src/browser/webapi/element/html/Output.zig @@ -27,6 +27,8 @@ const HtmlElement = @import("../Html.zig"); const Output = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Output) *Element { diff --git a/src/browser/webapi/element/html/Paragraph.zig b/src/browser/webapi/element/html/Paragraph.zig index 0822703a6..0bda49ec5 100644 --- a/src/browser/webapi/element/html/Paragraph.zig +++ b/src/browser/webapi/element/html/Paragraph.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Paragraph = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *Paragraph) *Element { diff --git a/src/browser/webapi/element/html/Param.zig b/src/browser/webapi/element/html/Param.zig index b7cb9d476..316e9b251 100644 --- a/src/browser/webapi/element/html/Param.zig +++ b/src/browser/webapi/element/html/Param.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const Param = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Param) *Element { diff --git a/src/browser/webapi/element/html/Picture.zig b/src/browser/webapi/element/html/Picture.zig index ddc7039cd..15aaa866a 100644 --- a/src/browser/webapi/element/html/Picture.zig +++ b/src/browser/webapi/element/html/Picture.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const Picture = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Picture) *Element { diff --git a/src/browser/webapi/element/html/Pre.zig b/src/browser/webapi/element/html/Pre.zig index eb10ce536..3e0f7fd0c 100644 --- a/src/browser/webapi/element/html/Pre.zig +++ b/src/browser/webapi/element/html/Pre.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const Pre = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Pre) *Element { diff --git a/src/browser/webapi/element/html/Progress.zig b/src/browser/webapi/element/html/Progress.zig index aa460f02e..65a0084fb 100644 --- a/src/browser/webapi/element/html/Progress.zig +++ b/src/browser/webapi/element/html/Progress.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const Progress = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Progress) *Element { diff --git a/src/browser/webapi/element/html/Quote.zig b/src/browser/webapi/element/html/Quote.zig index 2213099a6..01fd8b3f8 100644 --- a/src/browser/webapi/element/html/Quote.zig +++ b/src/browser/webapi/element/html/Quote.zig @@ -10,6 +10,8 @@ const String = lp.String; const Quote = @This(); +pub const Proto = HtmlElement; + _tag_name: String, _tag: Element.Tag, _proto: *HtmlElement, diff --git a/src/browser/webapi/element/html/Script.zig b/src/browser/webapi/element/html/Script.zig index 72ca44a38..a3ade13ac 100644 --- a/src/browser/webapi/element/html/Script.zig +++ b/src/browser/webapi/element/html/Script.zig @@ -26,6 +26,8 @@ const HtmlElement = @import("../Html.zig"); const Script = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, _src: []const u8 = "", _executed: bool = false, diff --git a/src/browser/webapi/element/html/Select.zig b/src/browser/webapi/element/html/Select.zig index efe8cffa9..0f5e03c4c 100644 --- a/src/browser/webapi/element/html/Select.zig +++ b/src/browser/webapi/element/html/Select.zig @@ -30,6 +30,8 @@ pub const Option = @import("Option.zig"); const Select = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, _selected_index_set: bool = false, _custom_validity: ?[]const u8 = null, diff --git a/src/browser/webapi/element/html/Slot.zig b/src/browser/webapi/element/html/Slot.zig index 0f4921f59..8f844ca95 100644 --- a/src/browser/webapi/element/html/Slot.zig +++ b/src/browser/webapi/element/html/Slot.zig @@ -9,6 +9,8 @@ const slotting = @import("../slotting.zig"); const Slot = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, // DOM spec "assigned nodes". Maintained by slotting.assignSlottables; always // empty while the slot isn't in a shadow tree. diff --git a/src/browser/webapi/element/html/Source.zig b/src/browser/webapi/element/html/Source.zig index 189aec5a0..42f98db16 100644 --- a/src/browser/webapi/element/html/Source.zig +++ b/src/browser/webapi/element/html/Source.zig @@ -7,6 +7,8 @@ const HtmlElement = @import("../Html.zig"); const Source = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Source) *Element { diff --git a/src/browser/webapi/element/html/Span.zig b/src/browser/webapi/element/html/Span.zig index 8ba4fec3c..ed72ef338 100644 --- a/src/browser/webapi/element/html/Span.zig +++ b/src/browser/webapi/element/html/Span.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const Span = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Span) *Element { diff --git a/src/browser/webapi/element/html/Style.zig b/src/browser/webapi/element/html/Style.zig index 811c8d691..96c929820 100644 --- a/src/browser/webapi/element/html/Style.zig +++ b/src/browser/webapi/element/html/Style.zig @@ -25,6 +25,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const Style = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, _sheet: ?*CSSStyleSheet = null, diff --git a/src/browser/webapi/element/html/Table.zig b/src/browser/webapi/element/html/Table.zig index ccecf8d94..0cb95c98b 100644 --- a/src/browser/webapi/element/html/Table.zig +++ b/src/browser/webapi/element/html/Table.zig @@ -7,6 +7,8 @@ const collections = @import("../../collections.zig"); const Table = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Table) *Element { diff --git a/src/browser/webapi/element/html/TableCaption.zig b/src/browser/webapi/element/html/TableCaption.zig index 22aece938..21ab27558 100644 --- a/src/browser/webapi/element/html/TableCaption.zig +++ b/src/browser/webapi/element/html/TableCaption.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const TableCaption = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *TableCaption) *Element { diff --git a/src/browser/webapi/element/html/TableCell.zig b/src/browser/webapi/element/html/TableCell.zig index 680ac5721..db78c4759 100644 --- a/src/browser/webapi/element/html/TableCell.zig +++ b/src/browser/webapi/element/html/TableCell.zig @@ -11,6 +11,8 @@ const String = lp.String; const TableCell = @This(); +pub const Proto = HtmlElement; + _tag_name: String, _tag: Element.Tag, _proto: *HtmlElement, diff --git a/src/browser/webapi/element/html/TableCol.zig b/src/browser/webapi/element/html/TableCol.zig index 455fb6ede..15bbdc321 100644 --- a/src/browser/webapi/element/html/TableCol.zig +++ b/src/browser/webapi/element/html/TableCol.zig @@ -9,6 +9,8 @@ const String = lp.String; const TableCol = @This(); +pub const Proto = HtmlElement; + _tag_name: String, _tag: Element.Tag, _proto: *HtmlElement, diff --git a/src/browser/webapi/element/html/TableRow.zig b/src/browser/webapi/element/html/TableRow.zig index 9b63fd806..fd8ea4b73 100644 --- a/src/browser/webapi/element/html/TableRow.zig +++ b/src/browser/webapi/element/html/TableRow.zig @@ -7,6 +7,8 @@ const collections = @import("../../collections.zig"); const TableRow = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *TableRow) *Element { diff --git a/src/browser/webapi/element/html/TableSection.zig b/src/browser/webapi/element/html/TableSection.zig index 05024b490..dfa73b194 100644 --- a/src/browser/webapi/element/html/TableSection.zig +++ b/src/browser/webapi/element/html/TableSection.zig @@ -11,6 +11,8 @@ const String = lp.String; const TableSection = @This(); +pub const Proto = HtmlElement; + _tag_name: String, _tag: Element.Tag, _proto: *HtmlElement, diff --git a/src/browser/webapi/element/html/Template.zig b/src/browser/webapi/element/html/Template.zig index 6d1f9b80c..5473dcfbd 100644 --- a/src/browser/webapi/element/html/Template.zig +++ b/src/browser/webapi/element/html/Template.zig @@ -32,6 +32,8 @@ const String = lp.String; const Template = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, _content: *DocumentFragment, diff --git a/src/browser/webapi/element/html/TextArea.zig b/src/browser/webapi/element/html/TextArea.zig index 319126148..6d9f1e3a0 100644 --- a/src/browser/webapi/element/html/TextArea.zig +++ b/src/browser/webapi/element/html/TextArea.zig @@ -31,6 +31,8 @@ const ValidityState = @import("ValidityState.zig"); const TextArea = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, _value: ?[]const u8 = null, diff --git a/src/browser/webapi/element/html/Time.zig b/src/browser/webapi/element/html/Time.zig index 40915d59c..e005249da 100644 --- a/src/browser/webapi/element/html/Time.zig +++ b/src/browser/webapi/element/html/Time.zig @@ -6,6 +6,8 @@ const HtmlElement = @import("../Html.zig"); const Time = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Time) *Element { diff --git a/src/browser/webapi/element/html/Title.zig b/src/browser/webapi/element/html/Title.zig index e1ebc8456..467c572f1 100644 --- a/src/browser/webapi/element/html/Title.zig +++ b/src/browser/webapi/element/html/Title.zig @@ -5,6 +5,8 @@ const HtmlElement = @import("../Html.zig"); const Title = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, pub fn asElement(self: *Title) *Element { diff --git a/src/browser/webapi/element/html/Track.zig b/src/browser/webapi/element/html/Track.zig index c6d16751f..513291e51 100644 --- a/src/browser/webapi/element/html/Track.zig +++ b/src/browser/webapi/element/html/Track.zig @@ -29,6 +29,8 @@ const String = lp.String; const Track = @This(); +pub const Proto = HtmlElement; + _proto: *HtmlElement, _kind: String, _ready_state: ReadyState, diff --git a/src/browser/webapi/element/html/UL.zig b/src/browser/webapi/element/html/UL.zig index 24df0f245..447e0f11f 100644 --- a/src/browser/webapi/element/html/UL.zig +++ b/src/browser/webapi/element/html/UL.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const HtmlElement = @import("../Html.zig"); const UL = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, pub fn asElement(self: *UL) *Element { diff --git a/src/browser/webapi/element/html/Unknown.zig b/src/browser/webapi/element/html/Unknown.zig index 4a841c507..33e1a0c63 100644 --- a/src/browser/webapi/element/html/Unknown.zig +++ b/src/browser/webapi/element/html/Unknown.zig @@ -27,6 +27,8 @@ const HtmlElement = @import("../Html.zig"); const String = lp.String; const Unknown = @This(); + +pub const Proto = HtmlElement; _proto: *HtmlElement, _tag_name: String, diff --git a/src/browser/webapi/element/html/Video.zig b/src/browser/webapi/element/html/Video.zig index 4ba703a2e..4daff3160 100644 --- a/src/browser/webapi/element/html/Video.zig +++ b/src/browser/webapi/element/html/Video.zig @@ -25,6 +25,8 @@ const Media = @import("Media.zig"); const Video = @This(); +pub const Proto = Media; + _proto: *Media, pub fn asMedia(self: *Video) *Media { diff --git a/src/browser/webapi/element/svg/A.zig b/src/browser/webapi/element/svg/A.zig index 9cad91395..0ce9f09d6 100644 --- a/src/browser/webapi/element/svg/A.zig +++ b/src/browser/webapi/element/svg/A.zig @@ -27,6 +27,8 @@ const DOMTokenList = @import("../../collections.zig").DOMTokenList; const Graphics = @import("Graphics.zig"); const A = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *A) *Element { diff --git a/src/browser/webapi/element/svg/Circle.zig b/src/browser/webapi/element/svg/Circle.zig index 089e44b06..e14cf41cf 100644 --- a/src/browser/webapi/element/svg/Circle.zig +++ b/src/browser/webapi/element/svg/Circle.zig @@ -26,6 +26,8 @@ const Geometry = @import("Geometry.zig"); const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const Circle = @This(); + +pub const Proto = Geometry; _proto: *Geometry, pub fn asElement(self: *Circle) *Element { diff --git a/src/browser/webapi/element/svg/ClipPath.zig b/src/browser/webapi/element/svg/ClipPath.zig index cf7835229..152fb3895 100644 --- a/src/browser/webapi/element/svg/ClipPath.zig +++ b/src/browser/webapi/element/svg/ClipPath.zig @@ -28,6 +28,8 @@ const AnimatedTransformList = @import("../../svg/AnimatedTransformList.zig"); const Svg = @import("../Svg.zig"); const ClipPath = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *ClipPath) *Element { diff --git a/src/browser/webapi/element/svg/Defs.zig b/src/browser/webapi/element/svg/Defs.zig index ba3f85cce..ec3a15e30 100644 --- a/src/browser/webapi/element/svg/Defs.zig +++ b/src/browser/webapi/element/svg/Defs.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Graphics = @import("Graphics.zig"); const Defs = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *Defs) *Element { diff --git a/src/browser/webapi/element/svg/Desc.zig b/src/browser/webapi/element/svg/Desc.zig index 0ce39857c..9c87fc62e 100644 --- a/src/browser/webapi/element/svg/Desc.zig +++ b/src/browser/webapi/element/svg/Desc.zig @@ -22,6 +22,8 @@ const Element = @import("../../Element.zig"); const Svg = @import("../Svg.zig"); const Desc = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *Desc) *Element { diff --git a/src/browser/webapi/element/svg/Ellipse.zig b/src/browser/webapi/element/svg/Ellipse.zig index c42a46a7c..8f2266407 100644 --- a/src/browser/webapi/element/svg/Ellipse.zig +++ b/src/browser/webapi/element/svg/Ellipse.zig @@ -26,6 +26,8 @@ const Geometry = @import("Geometry.zig"); const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const Ellipse = @This(); + +pub const Proto = Geometry; _proto: *Geometry, pub fn asElement(self: *Ellipse) *Element { diff --git a/src/browser/webapi/element/svg/ForeignObject.zig b/src/browser/webapi/element/svg/ForeignObject.zig index aa1d6db2e..4004e0212 100644 --- a/src/browser/webapi/element/svg/ForeignObject.zig +++ b/src/browser/webapi/element/svg/ForeignObject.zig @@ -29,6 +29,8 @@ const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const Graphics = @import("Graphics.zig"); const ForeignObject = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *ForeignObject) *Element { diff --git a/src/browser/webapi/element/svg/G.zig b/src/browser/webapi/element/svg/G.zig index 26a264173..529fc7438 100644 --- a/src/browser/webapi/element/svg/G.zig +++ b/src/browser/webapi/element/svg/G.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Graphics = @import("Graphics.zig"); const G = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *G) *Element { diff --git a/src/browser/webapi/element/svg/Generic.zig b/src/browser/webapi/element/svg/Generic.zig index 86af4455e..f7c453f8c 100644 --- a/src/browser/webapi/element/svg/Generic.zig +++ b/src/browser/webapi/element/svg/Generic.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Svg = @import("../Svg.zig"); const Generic = @This(); + +pub const Proto = Svg; _proto: *Svg, _tag: Element.Tag, diff --git a/src/browser/webapi/element/svg/Geometry.zig b/src/browser/webapi/element/svg/Geometry.zig index b4338f689..2a3018e87 100644 --- a/src/browser/webapi/element/svg/Geometry.zig +++ b/src/browser/webapi/element/svg/Geometry.zig @@ -38,6 +38,8 @@ pub const Polygon = @import("Polygon.zig"); pub const Polyline = @import("Polyline.zig"); const Geometry = @This(); + +pub const Proto = Graphics; _proto: *Graphics, _type: Type, diff --git a/src/browser/webapi/element/svg/GradientElement.zig b/src/browser/webapi/element/svg/GradientElement.zig index 0b133d052..ef581da9d 100644 --- a/src/browser/webapi/element/svg/GradientElement.zig +++ b/src/browser/webapi/element/svg/GradientElement.zig @@ -32,6 +32,8 @@ pub const LinearGradient = @import("LinearGradient.zig"); pub const RadialGradient = @import("RadialGradient.zig"); const GradientElement = @This(); + +pub const Proto = Svg; _proto: *Svg, _type: Type, diff --git a/src/browser/webapi/element/svg/Graphics.zig b/src/browser/webapi/element/svg/Graphics.zig index 084395078..78c4e9f9e 100644 --- a/src/browser/webapi/element/svg/Graphics.zig +++ b/src/browser/webapi/element/svg/Graphics.zig @@ -42,6 +42,8 @@ pub const TextContent = @import("TextContent.zig"); pub const Geometry = @import("Geometry.zig"); const Graphics = @This(); + +pub const Proto = SvgElement; _proto: *SvgElement, _type: Type, diff --git a/src/browser/webapi/element/svg/Image.zig b/src/browser/webapi/element/svg/Image.zig index 73a36abac..a01218444 100644 --- a/src/browser/webapi/element/svg/Image.zig +++ b/src/browser/webapi/element/svg/Image.zig @@ -26,6 +26,8 @@ const AnimatedString = @import("../../svg/AnimatedString.zig"); const Graphics = @import("Graphics.zig"); const Image = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *Image) *Element { diff --git a/src/browser/webapi/element/svg/Line.zig b/src/browser/webapi/element/svg/Line.zig index 139b421f1..d47e72b3c 100644 --- a/src/browser/webapi/element/svg/Line.zig +++ b/src/browser/webapi/element/svg/Line.zig @@ -26,6 +26,8 @@ const Geometry = @import("Geometry.zig"); const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const Line = @This(); + +pub const Proto = Geometry; _proto: *Geometry, pub fn asElement(self: *Line) *Element { diff --git a/src/browser/webapi/element/svg/LinearGradient.zig b/src/browser/webapi/element/svg/LinearGradient.zig index b52b8ec5b..7a92e803e 100644 --- a/src/browser/webapi/element/svg/LinearGradient.zig +++ b/src/browser/webapi/element/svg/LinearGradient.zig @@ -27,6 +27,8 @@ const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const GradientElement = @import("GradientElement.zig"); const LinearGradient = @This(); + +pub const Proto = GradientElement; _proto: *GradientElement, pub fn asElement(self: *LinearGradient) *Element { diff --git a/src/browser/webapi/element/svg/Marker.zig b/src/browser/webapi/element/svg/Marker.zig index 0af753726..73209cd7d 100644 --- a/src/browser/webapi/element/svg/Marker.zig +++ b/src/browser/webapi/element/svg/Marker.zig @@ -28,6 +28,8 @@ const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const Svg = @import("../Svg.zig"); const Marker = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *Marker) *Element { diff --git a/src/browser/webapi/element/svg/Mask.zig b/src/browser/webapi/element/svg/Mask.zig index f124c7dd7..92dde0a64 100644 --- a/src/browser/webapi/element/svg/Mask.zig +++ b/src/browser/webapi/element/svg/Mask.zig @@ -28,6 +28,8 @@ const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const Svg = @import("../Svg.zig"); const Mask = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *Mask) *Element { diff --git a/src/browser/webapi/element/svg/Metadata.zig b/src/browser/webapi/element/svg/Metadata.zig index ec1085c84..434e0ec1f 100644 --- a/src/browser/webapi/element/svg/Metadata.zig +++ b/src/browser/webapi/element/svg/Metadata.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Svg = @import("../Svg.zig"); const Metadata = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *Metadata) *Element { diff --git a/src/browser/webapi/element/svg/Path.zig b/src/browser/webapi/element/svg/Path.zig index 9308449fd..15d4d79c0 100644 --- a/src/browser/webapi/element/svg/Path.zig +++ b/src/browser/webapi/element/svg/Path.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Geometry = @import("Geometry.zig"); const Path = @This(); + +pub const Proto = Geometry; _proto: *Geometry, pub fn asElement(self: *Path) *Element { diff --git a/src/browser/webapi/element/svg/Pattern.zig b/src/browser/webapi/element/svg/Pattern.zig index 5940de529..639812707 100644 --- a/src/browser/webapi/element/svg/Pattern.zig +++ b/src/browser/webapi/element/svg/Pattern.zig @@ -30,6 +30,8 @@ const AnimatedTransformList = @import("../../svg/AnimatedTransformList.zig"); const Svg = @import("../Svg.zig"); const Pattern = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *Pattern) *Element { diff --git a/src/browser/webapi/element/svg/Polygon.zig b/src/browser/webapi/element/svg/Polygon.zig index 9d55797e4..dac7e8741 100644 --- a/src/browser/webapi/element/svg/Polygon.zig +++ b/src/browser/webapi/element/svg/Polygon.zig @@ -26,6 +26,8 @@ const Geometry = @import("Geometry.zig"); const PointList = @import("../../svg/PointList.zig"); const Polygon = @This(); + +pub const Proto = Geometry; _proto: *Geometry, pub fn asElement(self: *Polygon) *Element { diff --git a/src/browser/webapi/element/svg/Polyline.zig b/src/browser/webapi/element/svg/Polyline.zig index 6ac253167..a4e267af8 100644 --- a/src/browser/webapi/element/svg/Polyline.zig +++ b/src/browser/webapi/element/svg/Polyline.zig @@ -26,6 +26,8 @@ const Geometry = @import("Geometry.zig"); const PointList = @import("../../svg/PointList.zig"); const Polyline = @This(); + +pub const Proto = Geometry; _proto: *Geometry, pub fn asElement(self: *Polyline) *Element { diff --git a/src/browser/webapi/element/svg/RadialGradient.zig b/src/browser/webapi/element/svg/RadialGradient.zig index 110be6d0d..041ad36fc 100644 --- a/src/browser/webapi/element/svg/RadialGradient.zig +++ b/src/browser/webapi/element/svg/RadialGradient.zig @@ -27,6 +27,8 @@ const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const GradientElement = @import("GradientElement.zig"); const RadialGradient = @This(); + +pub const Proto = GradientElement; _proto: *GradientElement, pub fn asElement(self: *RadialGradient) *Element { diff --git a/src/browser/webapi/element/svg/Rect.zig b/src/browser/webapi/element/svg/Rect.zig index d841e39a0..99d0a1e8c 100644 --- a/src/browser/webapi/element/svg/Rect.zig +++ b/src/browser/webapi/element/svg/Rect.zig @@ -24,6 +24,8 @@ const Geometry = @import("Geometry.zig"); const AnimatedLength = @import("../../svg/AnimatedLength.zig"); const Rect = @This(); + +pub const Proto = Geometry; _proto: *Geometry, pub fn asElement(self: *Rect) *Element { diff --git a/src/browser/webapi/element/svg/Stop.zig b/src/browser/webapi/element/svg/Stop.zig index 8389bd72d..845c9f863 100644 --- a/src/browser/webapi/element/svg/Stop.zig +++ b/src/browser/webapi/element/svg/Stop.zig @@ -27,6 +27,8 @@ const AnimatedNumber = @import("../../svg/AnimatedNumber.zig"); const Svg = @import("../Svg.zig"); const Stop = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *Stop) *Element { diff --git a/src/browser/webapi/element/svg/Svg.zig b/src/browser/webapi/element/svg/Svg.zig index 17d3db27e..b0d9d88ed 100644 --- a/src/browser/webapi/element/svg/Svg.zig +++ b/src/browser/webapi/element/svg/Svg.zig @@ -37,6 +37,8 @@ const AnimatedPreserveAspectRatio = @import("../../svg/AnimatedPreserveAspectRat const Graphics = @import("Graphics.zig"); const Svg = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *Svg) *Element { diff --git a/src/browser/webapi/element/svg/Switch.zig b/src/browser/webapi/element/svg/Switch.zig index 4e3059eaa..2c528b32d 100644 --- a/src/browser/webapi/element/svg/Switch.zig +++ b/src/browser/webapi/element/svg/Switch.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Graphics = @import("Graphics.zig"); const Switch = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *Switch) *Element { diff --git a/src/browser/webapi/element/svg/Symbol.zig b/src/browser/webapi/element/svg/Symbol.zig index 0737e54ca..c0793c9c4 100644 --- a/src/browser/webapi/element/svg/Symbol.zig +++ b/src/browser/webapi/element/svg/Symbol.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Graphics = @import("Graphics.zig"); const Symbol = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *Symbol) *Element { diff --git a/src/browser/webapi/element/svg/TSpan.zig b/src/browser/webapi/element/svg/TSpan.zig index 3e38329f0..a2021df02 100644 --- a/src/browser/webapi/element/svg/TSpan.zig +++ b/src/browser/webapi/element/svg/TSpan.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const TextPositioning = @import("TextPositioning.zig"); const TSpan = @This(); + +pub const Proto = TextPositioning; _proto: *TextPositioning, pub fn asElement(self: *TSpan) *Element { diff --git a/src/browser/webapi/element/svg/Text.zig b/src/browser/webapi/element/svg/Text.zig index 0ea469066..bc4ed94b2 100644 --- a/src/browser/webapi/element/svg/Text.zig +++ b/src/browser/webapi/element/svg/Text.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const TextPositioning = @import("TextPositioning.zig"); const Text = @This(); + +pub const Proto = TextPositioning; _proto: *TextPositioning, pub fn asElement(self: *Text) *Element { diff --git a/src/browser/webapi/element/svg/TextContent.zig b/src/browser/webapi/element/svg/TextContent.zig index 57322d707..0c5a6f3cc 100644 --- a/src/browser/webapi/element/svg/TextContent.zig +++ b/src/browser/webapi/element/svg/TextContent.zig @@ -33,6 +33,8 @@ pub const TextPositioning = @import("TextPositioning.zig"); pub const TextPath = @import("TextPath.zig"); const TextContent = @This(); + +pub const Proto = Graphics; _proto: *Graphics, _type: Type, diff --git a/src/browser/webapi/element/svg/TextPath.zig b/src/browser/webapi/element/svg/TextPath.zig index 258365ef6..627bb4605 100644 --- a/src/browser/webapi/element/svg/TextPath.zig +++ b/src/browser/webapi/element/svg/TextPath.zig @@ -29,6 +29,8 @@ const AnimatedString = @import("../../svg/AnimatedString.zig"); const TextContent = @import("TextContent.zig"); const TextPath = @This(); + +pub const Proto = TextContent; _proto: *TextContent, pub fn asElement(self: *TextPath) *Element { diff --git a/src/browser/webapi/element/svg/TextPositioning.zig b/src/browser/webapi/element/svg/TextPositioning.zig index 9209e060f..7d67d3829 100644 --- a/src/browser/webapi/element/svg/TextPositioning.zig +++ b/src/browser/webapi/element/svg/TextPositioning.zig @@ -27,6 +27,8 @@ pub const Text = @import("Text.zig"); pub const TSpan = @import("TSpan.zig"); const TextPositioning = @This(); + +pub const Proto = TextContent; _proto: *TextContent, _type: Type, diff --git a/src/browser/webapi/element/svg/Title.zig b/src/browser/webapi/element/svg/Title.zig index 6f9f0daa9..65660827e 100644 --- a/src/browser/webapi/element/svg/Title.zig +++ b/src/browser/webapi/element/svg/Title.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Svg = @import("../Svg.zig"); const Title = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *Title) *Element { diff --git a/src/browser/webapi/element/svg/Use.zig b/src/browser/webapi/element/svg/Use.zig index fc49f7517..8aa3b253f 100644 --- a/src/browser/webapi/element/svg/Use.zig +++ b/src/browser/webapi/element/svg/Use.zig @@ -26,6 +26,8 @@ const AnimatedString = @import("../../svg/AnimatedString.zig"); const Graphics = @import("Graphics.zig"); const Use = @This(); + +pub const Proto = Graphics; _proto: *Graphics, pub fn asElement(self: *Use) *Element { diff --git a/src/browser/webapi/element/svg/View.zig b/src/browser/webapi/element/svg/View.zig index 204577613..5554fced4 100644 --- a/src/browser/webapi/element/svg/View.zig +++ b/src/browser/webapi/element/svg/View.zig @@ -24,6 +24,8 @@ const Element = @import("../../Element.zig"); const Svg = @import("../Svg.zig"); const View = @This(); + +pub const Proto = Svg; _proto: *Svg, pub fn asElement(self: *View) *Element { diff --git a/src/browser/webapi/event/BeforeUnloadEvent.zig b/src/browser/webapi/event/BeforeUnloadEvent.zig index 4c1372cf6..32acac2a2 100644 --- a/src/browser/webapi/event/BeforeUnloadEvent.zig +++ b/src/browser/webapi/event/BeforeUnloadEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://html.spec.whatwg.org/multipage/browsing-the-web.html#the-beforeunloadevent-interface const BeforeUnloadEvent = @This(); +pub const Proto = Event; + _proto: *Event, _return_value: []const u8 = "", diff --git a/src/browser/webapi/event/CloseEvent.zig b/src/browser/webapi/event/CloseEvent.zig index a9f0726d5..da534f155 100644 --- a/src/browser/webapi/event/CloseEvent.zig +++ b/src/browser/webapi/event/CloseEvent.zig @@ -26,6 +26,8 @@ const String = lp.String; const Allocator = std.mem.Allocator; const CloseEvent = @This(); + +pub const Proto = Event; _proto: *Event, _code: u16 = 1000, _reason: []const u8 = "", diff --git a/src/browser/webapi/event/CompositionEvent.zig b/src/browser/webapi/event/CompositionEvent.zig index 93493d418..9db47912d 100644 --- a/src/browser/webapi/event/CompositionEvent.zig +++ b/src/browser/webapi/event/CompositionEvent.zig @@ -28,6 +28,8 @@ const String = lp.String; const CompositionEvent = @This(); +pub const Proto = UIEvent; + _proto: *UIEvent, _data: []const u8 = "", diff --git a/src/browser/webapi/event/CookieChangeEvent.zig b/src/browser/webapi/event/CookieChangeEvent.zig index f8bf56d3a..6714a705d 100644 --- a/src/browser/webapi/event/CookieChangeEvent.zig +++ b/src/browser/webapi/event/CookieChangeEvent.zig @@ -32,6 +32,8 @@ const Allocator = std.mem.Allocator; // https://developer.mozilla.org/en-US/docs/Web/API/CookieChangeEvent const CookieChangeEvent = @This(); +pub const Proto = Event; + _proto: *Event, _changed: []CookieStore.CookieListItem, _deleted: []CookieStore.CookieListItem, diff --git a/src/browser/webapi/event/CustomEvent.zig b/src/browser/webapi/event/CustomEvent.zig index 61f96e941..c901ac2fe 100644 --- a/src/browser/webapi/event/CustomEvent.zig +++ b/src/browser/webapi/event/CustomEvent.zig @@ -29,6 +29,8 @@ const Allocator = std.mem.Allocator; const CustomEvent = @This(); +pub const Proto = Event; + _proto: *Event, _detail: ?js.Value.Global = null, _arena: Allocator, diff --git a/src/browser/webapi/event/DeviceMotionEvent.zig b/src/browser/webapi/event/DeviceMotionEvent.zig index 6da445f79..73e8ac2c9 100644 --- a/src/browser/webapi/event/DeviceMotionEvent.zig +++ b/src/browser/webapi/event/DeviceMotionEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://w3c.github.io/deviceorientation/#devicemotionevent const DeviceMotionEvent = @This(); +pub const Proto = Event; + _proto: *Event, _interval: f64 = 0, diff --git a/src/browser/webapi/event/DeviceOrientationEvent.zig b/src/browser/webapi/event/DeviceOrientationEvent.zig index 267611c85..1fc778654 100644 --- a/src/browser/webapi/event/DeviceOrientationEvent.zig +++ b/src/browser/webapi/event/DeviceOrientationEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://w3c.github.io/deviceorientation/#deviceorientationevent const DeviceOrientationEvent = @This(); +pub const Proto = Event; + _proto: *Event, _alpha: ?f64 = null, _beta: ?f64 = null, diff --git a/src/browser/webapi/event/DragEvent.zig b/src/browser/webapi/event/DragEvent.zig index bbca62c9d..dbd9190be 100644 --- a/src/browser/webapi/event/DragEvent.zig +++ b/src/browser/webapi/event/DragEvent.zig @@ -31,6 +31,8 @@ const String = lp.String; const DragEvent = @This(); +pub const Proto = MouseEvent; + _proto: *MouseEvent, _data_transfer: ?*DataTransfer, diff --git a/src/browser/webapi/event/ErrorEvent.zig b/src/browser/webapi/event/ErrorEvent.zig index 672422f10..9378ac1ad 100644 --- a/src/browser/webapi/event/ErrorEvent.zig +++ b/src/browser/webapi/event/ErrorEvent.zig @@ -29,6 +29,8 @@ const Allocator = std.mem.Allocator; const ErrorEvent = @This(); +pub const Proto = Event; + _proto: *Event, _message: []const u8 = "", _filename: []const u8 = "", diff --git a/src/browser/webapi/event/FocusEvent.zig b/src/browser/webapi/event/FocusEvent.zig index d76d8447e..e202a1981 100644 --- a/src/browser/webapi/event/FocusEvent.zig +++ b/src/browser/webapi/event/FocusEvent.zig @@ -31,6 +31,8 @@ const Allocator = std.mem.Allocator; const FocusEvent = @This(); +pub const Proto = UIEvent; + _proto: *UIEvent, _related_target: ?*EventTarget = null, diff --git a/src/browser/webapi/event/FormDataEvent.zig b/src/browser/webapi/event/FormDataEvent.zig index 3aa681319..8a87041c6 100644 --- a/src/browser/webapi/event/FormDataEvent.zig +++ b/src/browser/webapi/event/FormDataEvent.zig @@ -32,6 +32,8 @@ const Allocator = std.mem.Allocator; /// https://developer.mozilla.org/en-US/docs/Web/API/FormDataEvent const FormDataEvent = @This(); +pub const Proto = Event; + _proto: *Event, _form_data: ?*FormData = null, diff --git a/src/browser/webapi/event/GamepadEvent.zig b/src/browser/webapi/event/GamepadEvent.zig index 62fe4f75c..8062eb181 100644 --- a/src/browser/webapi/event/GamepadEvent.zig +++ b/src/browser/webapi/event/GamepadEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://w3c.github.io/gamepad/#gamepadevent-interface const GamepadEvent = @This(); +pub const Proto = Event; + _proto: *Event, const GamepadEventOptions = struct {}; diff --git a/src/browser/webapi/event/HashChangeEvent.zig b/src/browser/webapi/event/HashChangeEvent.zig index 0c3d5b5d5..2226fd859 100644 --- a/src/browser/webapi/event/HashChangeEvent.zig +++ b/src/browser/webapi/event/HashChangeEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://developer.mozilla.org/en-US/docs/Web/API/HashChangeEvent const HashChangeEvent = @This(); +pub const Proto = Event; + _proto: *Event, _old_url: []const u8, _new_url: []const u8, diff --git a/src/browser/webapi/event/InputEvent.zig b/src/browser/webapi/event/InputEvent.zig index f942c161e..a4d181023 100644 --- a/src/browser/webapi/event/InputEvent.zig +++ b/src/browser/webapi/event/InputEvent.zig @@ -32,6 +32,8 @@ const Allocator = std.mem.Allocator; const InputEvent = @This(); +pub const Proto = UIEvent; + _proto: *UIEvent, _data: ?[]const u8, _data_transfer: ?*DataTransfer = null, diff --git a/src/browser/webapi/event/KeyboardEvent.zig b/src/browser/webapi/event/KeyboardEvent.zig index 5c66cde3d..c55847b7d 100644 --- a/src/browser/webapi/event/KeyboardEvent.zig +++ b/src/browser/webapi/event/KeyboardEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; const KeyboardEvent = @This(); +pub const Proto = UIEvent; + _proto: *UIEvent, _key: Key, _code: []const u8, diff --git a/src/browser/webapi/event/MessageEvent.zig b/src/browser/webapi/event/MessageEvent.zig index 4631384b0..24394f6e2 100644 --- a/src/browser/webapi/event/MessageEvent.zig +++ b/src/browser/webapi/event/MessageEvent.zig @@ -32,6 +32,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const MessageEvent = @This(); +pub const Proto = Event; + _proto: *Event, _data: ?Data = null, _origin: []const u8 = "", diff --git a/src/browser/webapi/event/MouseEvent.zig b/src/browser/webapi/event/MouseEvent.zig index 819d6fe9c..02c1a3d8e 100644 --- a/src/browser/webapi/event/MouseEvent.zig +++ b/src/browser/webapi/event/MouseEvent.zig @@ -33,6 +33,8 @@ const Allocator = std.mem.Allocator; const MouseEvent = @This(); +pub const Proto = UIEvent; + pub const MouseButton = enum(u8) { main = 0, auxiliary = 1, diff --git a/src/browser/webapi/event/NavigationCurrentEntryChangeEvent.zig b/src/browser/webapi/event/NavigationCurrentEntryChangeEvent.zig index bc93ad7c8..2514f6237 100644 --- a/src/browser/webapi/event/NavigationCurrentEntryChangeEvent.zig +++ b/src/browser/webapi/event/NavigationCurrentEntryChangeEvent.zig @@ -31,6 +31,8 @@ const Allocator = std.mem.Allocator; const NavigationCurrentEntryChangeEvent = @This(); +pub const Proto = Event; + _proto: *Event, _from: *NavigationHistoryEntry, _navigation_type: ?NavigationType, diff --git a/src/browser/webapi/event/PageTransitionEvent.zig b/src/browser/webapi/event/PageTransitionEvent.zig index 6f029d2af..0b991ed2d 100644 --- a/src/browser/webapi/event/PageTransitionEvent.zig +++ b/src/browser/webapi/event/PageTransitionEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://developer.mozilla.org/en-US/docs/Web/API/PageTransitionEvent const PageTransitionEvent = @This(); +pub const Proto = Event; + _proto: *Event, _persisted: bool, diff --git a/src/browser/webapi/event/PointerEvent.zig b/src/browser/webapi/event/PointerEvent.zig index d1c082798..cefc6da6b 100644 --- a/src/browser/webapi/event/PointerEvent.zig +++ b/src/browser/webapi/event/PointerEvent.zig @@ -29,6 +29,8 @@ const String = lp.String; const PointerEvent = @This(); +pub const Proto = MouseEvent; + const PointerType = enum { empty, mouse, diff --git a/src/browser/webapi/event/PopStateEvent.zig b/src/browser/webapi/event/PopStateEvent.zig index 958cb0fb6..cc5b91e83 100644 --- a/src/browser/webapi/event/PopStateEvent.zig +++ b/src/browser/webapi/event/PopStateEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://developer.mozilla.org/en-US/docs/Web/API/PopStateEvent const PopStateEvent = @This(); +pub const Proto = Event; + _proto: *Event, _state: ?[]const u8, diff --git a/src/browser/webapi/event/ProgressEvent.zig b/src/browser/webapi/event/ProgressEvent.zig index 6e3573009..a27e25db0 100644 --- a/src/browser/webapi/event/ProgressEvent.zig +++ b/src/browser/webapi/event/ProgressEvent.zig @@ -26,6 +26,8 @@ const String = lp.String; const Allocator = std.mem.Allocator; const ProgressEvent = @This(); + +pub const Proto = Event; _proto: *Event, _total: usize = 0, _loaded: usize = 0, diff --git a/src/browser/webapi/event/PromiseRejectionEvent.zig b/src/browser/webapi/event/PromiseRejectionEvent.zig index a622a5d49..658249f5b 100644 --- a/src/browser/webapi/event/PromiseRejectionEvent.zig +++ b/src/browser/webapi/event/PromiseRejectionEvent.zig @@ -26,6 +26,8 @@ const String = lp.String; const PromiseRejectionEvent = @This(); +pub const Proto = Event; + _proto: *Event, _reason: ?js.Value.Global = null, _promise: ?js.Promise.Global = null, diff --git a/src/browser/webapi/event/StorageEvent.zig b/src/browser/webapi/event/StorageEvent.zig index bb299a2b9..345db5fde 100644 --- a/src/browser/webapi/event/StorageEvent.zig +++ b/src/browser/webapi/event/StorageEvent.zig @@ -30,6 +30,8 @@ const Allocator = std.mem.Allocator; // https://html.spec.whatwg.org/multipage/webstorage.html#the-storageevent-interface const StorageEvent = @This(); +pub const Proto = Event; + _proto: *Event, _key: ?[]const u8 = null, _old_value: ?[]const u8 = null, diff --git a/src/browser/webapi/event/SubmitEvent.zig b/src/browser/webapi/event/SubmitEvent.zig index e38e5900a..559f88360 100644 --- a/src/browser/webapi/event/SubmitEvent.zig +++ b/src/browser/webapi/event/SubmitEvent.zig @@ -31,6 +31,8 @@ const Allocator = std.mem.Allocator; /// https://developer.mozilla.org/en-US/docs/Web/API/SubmitEvent const SubmitEvent = @This(); +pub const Proto = Event; + _proto: *Event, _submitter: ?*HtmlElement, diff --git a/src/browser/webapi/event/TextEvent.zig b/src/browser/webapi/event/TextEvent.zig index f03cdd0dc..96c549213 100644 --- a/src/browser/webapi/event/TextEvent.zig +++ b/src/browser/webapi/event/TextEvent.zig @@ -28,6 +28,8 @@ const String = lp.String; const TextEvent = @This(); +pub const Proto = UIEvent; + _proto: *UIEvent, _data: []const u8 = "", diff --git a/src/browser/webapi/event/ToggleEvent.zig b/src/browser/webapi/event/ToggleEvent.zig index 917341975..5067d375d 100644 --- a/src/browser/webapi/event/ToggleEvent.zig +++ b/src/browser/webapi/event/ToggleEvent.zig @@ -31,6 +31,8 @@ const Allocator = std.mem.Allocator; /// https://html.spec.whatwg.org/multipage/popover.html#toggleevent const ToggleEvent = @This(); +pub const Proto = Event; + _proto: *Event, _old_state: []const u8 = "", _new_state: []const u8 = "", diff --git a/src/browser/webapi/event/TouchEvent.zig b/src/browser/webapi/event/TouchEvent.zig index f15da08b7..2f063ad32 100644 --- a/src/browser/webapi/event/TouchEvent.zig +++ b/src/browser/webapi/event/TouchEvent.zig @@ -32,6 +32,8 @@ const Allocator = std.mem.Allocator; // There is no touch input source: the touch lists are always empty. const TouchEvent = @This(); +pub const Proto = UIEvent; + _proto: *UIEvent, _alt_key: bool = false, _meta_key: bool = false, diff --git a/src/browser/webapi/event/UIEvent.zig b/src/browser/webapi/event/UIEvent.zig index 72e8fc795..a44766a43 100644 --- a/src/browser/webapi/event/UIEvent.zig +++ b/src/browser/webapi/event/UIEvent.zig @@ -28,6 +28,8 @@ const String = lp.String; const UIEvent = @This(); +pub const Proto = Event; + _type: Type, _proto: *Event, _detail: u32 = 0, diff --git a/src/browser/webapi/event/WheelEvent.zig b/src/browser/webapi/event/WheelEvent.zig index 89d5bef5f..6433591f1 100644 --- a/src/browser/webapi/event/WheelEvent.zig +++ b/src/browser/webapi/event/WheelEvent.zig @@ -29,6 +29,8 @@ const String = lp.String; const WheelEvent = @This(); +pub const Proto = MouseEvent; + _proto: *MouseEvent, _delta_x: f64, _delta_y: f64, diff --git a/src/browser/webapi/media/TextTrackCue.zig b/src/browser/webapi/media/TextTrackCue.zig index 50421d283..5147f7df2 100644 --- a/src/browser/webapi/media/TextTrackCue.zig +++ b/src/browser/webapi/media/TextTrackCue.zig @@ -23,6 +23,8 @@ const EventTarget = @import("../EventTarget.zig"); const TextTrackCue = @This(); +pub const Proto = EventTarget; + _type: Type, _proto: *EventTarget, _id: []const u8 = "", diff --git a/src/browser/webapi/media/VTTCue.zig b/src/browser/webapi/media/VTTCue.zig index d3324504d..4e6cf03d1 100644 --- a/src/browser/webapi/media/VTTCue.zig +++ b/src/browser/webapi/media/VTTCue.zig @@ -23,6 +23,8 @@ const TextTrackCue = @import("TextTrackCue.zig"); const VTTCue = @This(); +pub const Proto = TextTrackCue; + _proto: *TextTrackCue, _text: []const u8 = "", _region: ?js.Object.Global = null, diff --git a/src/browser/webapi/navigation/Navigation.zig b/src/browser/webapi/navigation/Navigation.zig index 92dadef58..82dcf3a4f 100644 --- a/src/browser/webapi/navigation/Navigation.zig +++ b/src/browser/webapi/navigation/Navigation.zig @@ -31,6 +31,8 @@ const log = lp.log; // https://developer.mozilla.org/en-US/docs/Web/API/Navigation const Navigation = @This(); +pub const Proto = EventTarget; + const NavigationKind = @import("root.zig").NavigationKind; const NavigationActivation = @import("NavigationActivation.zig"); const NavigationTransition = @import("root.zig").NavigationTransition; diff --git a/src/browser/webapi/navigation/NavigationHistoryEntry.zig b/src/browser/webapi/navigation/NavigationHistoryEntry.zig index 36aea19fb..841c1c3c1 100644 --- a/src/browser/webapi/navigation/NavigationHistoryEntry.zig +++ b/src/browser/webapi/navigation/NavigationHistoryEntry.zig @@ -26,6 +26,8 @@ const js = @import("../../js/js.zig"); const NavigationHistoryEntry = @This(); +pub const Proto = EventTarget; + // https://developer.mozilla.org/en-US/docs/Web/API/NavigationHistoryEntry _proto: *EventTarget, _id: []const u8, diff --git a/src/browser/webapi/net/EventSource.zig b/src/browser/webapi/net/EventSource.zig index 8b167b6f0..45845960d 100644 --- a/src/browser/webapi/net/EventSource.zig +++ b/src/browser/webapi/net/EventSource.zig @@ -39,6 +39,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; // https://html.spec.whatwg.org/multipage/server-sent-events.html const EventSource = @This(); +pub const Proto = EventTarget; + _rc: lp.RC = .{}, _exec: *const Execution, _proto: *EventTarget, diff --git a/src/browser/webapi/net/WebSocket.zig b/src/browser/webapi/net/WebSocket.zig index 8e9b9f5c2..4830fcdc7 100644 --- a/src/browser/webapi/net/WebSocket.zig +++ b/src/browser/webapi/net/WebSocket.zig @@ -40,6 +40,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const WebSocket = @This(); +pub const Proto = EventTarget; + _rc: lp.RC = .{}, _exec: *const Execution, _proto: *EventTarget, diff --git a/src/browser/webapi/net/XMLHttpRequest.zig b/src/browser/webapi/net/XMLHttpRequest.zig index 630a39a30..19d30a42e 100644 --- a/src/browser/webapi/net/XMLHttpRequest.zig +++ b/src/browser/webapi/net/XMLHttpRequest.zig @@ -43,6 +43,8 @@ const Allocator = std.mem.Allocator; const IS_DEBUG = @import("builtin").mode == .Debug; const XMLHttpRequest = @This(); + +pub const Proto = XMLHttpRequestEventTarget; _rc: lp.RC = .{}, _exec: *const Execution, _proto: *XMLHttpRequestEventTarget, diff --git a/src/browser/webapi/net/XMLHttpRequestEventTarget.zig b/src/browser/webapi/net/XMLHttpRequestEventTarget.zig index 275586e19..1948e02dd 100644 --- a/src/browser/webapi/net/XMLHttpRequestEventTarget.zig +++ b/src/browser/webapi/net/XMLHttpRequestEventTarget.zig @@ -26,6 +26,8 @@ const Execution = js.Execution; const XMLHttpRequestEventTarget = @This(); +pub const Proto = EventTarget; + _type: Type, _proto: *EventTarget, _on_abort: ?js.Function.Global = null, diff --git a/src/browser/webapi/net/XMLHttpRequestUpload.zig b/src/browser/webapi/net/XMLHttpRequestUpload.zig index 84b440159..ceb90fea5 100644 --- a/src/browser/webapi/net/XMLHttpRequestUpload.zig +++ b/src/browser/webapi/net/XMLHttpRequestUpload.zig @@ -32,6 +32,8 @@ const XMLHttpRequestEventTarget = @import("XMLHttpRequestEventTarget.zig"); // htmx) can call addEventListener on it without throwing. const XMLHttpRequestUpload = @This(); +pub const Proto = XMLHttpRequestEventTarget; + _proto: *XMLHttpRequestEventTarget, _xhr: *XMLHttpRequest, diff --git a/src/browser/webapi/storage/CookieStore.zig b/src/browser/webapi/storage/CookieStore.zig index 54bed460d..d6ff17bd3 100644 --- a/src/browser/webapi/storage/CookieStore.zig +++ b/src/browser/webapi/storage/CookieStore.zig @@ -34,6 +34,8 @@ const String = lp.String; // https://developer.mozilla.org/en-US/docs/Web/API/CookieStore const CookieStore = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _on_change: ?js.Function.Global = null, _exec: ?*Execution = null, diff --git a/src/browser/webapi/storage/idb/IDBCursorWithValue.zig b/src/browser/webapi/storage/idb/IDBCursorWithValue.zig index aee1bf1cc..69de483bc 100644 --- a/src/browser/webapi/storage/idb/IDBCursorWithValue.zig +++ b/src/browser/webapi/storage/idb/IDBCursorWithValue.zig @@ -24,6 +24,8 @@ const Execution = js.Execution; const IDBCursorWithValue = @This(); +pub const Proto = IDBCursor; + _proto: *IDBCursor, pub fn init(cursor: *IDBCursor) !*IDBCursorWithValue { diff --git a/src/browser/webapi/storage/idb/IDBDatabase.zig b/src/browser/webapi/storage/idb/IDBDatabase.zig index 736d95c03..baf050bf3 100644 --- a/src/browser/webapi/storage/idb/IDBDatabase.zig +++ b/src/browser/webapi/storage/idb/IDBDatabase.zig @@ -37,6 +37,8 @@ const Allocator = std.mem.Allocator; const IDBDatabase = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _exec: *Execution, _engine: *Engine, diff --git a/src/browser/webapi/storage/idb/IDBRequest.zig b/src/browser/webapi/storage/idb/IDBRequest.zig index 7c18f3838..2d3ec81f5 100644 --- a/src/browser/webapi/storage/idb/IDBRequest.zig +++ b/src/browser/webapi/storage/idb/IDBRequest.zig @@ -42,6 +42,8 @@ const FunctionSetter = idb.FunctionSetter; const IDBRequest = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _op: Operation = .none, _error: ?anyerror = null, diff --git a/src/browser/webapi/storage/idb/IDBTransaction.zig b/src/browser/webapi/storage/idb/IDBTransaction.zig index d58e617ea..747f0a0f1 100644 --- a/src/browser/webapi/storage/idb/IDBTransaction.zig +++ b/src/browser/webapi/storage/idb/IDBTransaction.zig @@ -41,6 +41,8 @@ const IS_DEBUG = @import("builtin").mode == .Debug; const IDBTransaction = @This(); +pub const Proto = EventTarget; + _proto: *EventTarget, _exec: *Execution, _db: *IDBDatabase, diff --git a/src/browser/webapi/storage/idb/IDBVersionChangeEvent.zig b/src/browser/webapi/storage/idb/IDBVersionChangeEvent.zig index 119dfc9de..948d742a7 100644 --- a/src/browser/webapi/storage/idb/IDBVersionChangeEvent.zig +++ b/src/browser/webapi/storage/idb/IDBVersionChangeEvent.zig @@ -29,6 +29,8 @@ const Execution = js.Execution; const IDBVersionChangeEvent = @This(); +pub const Proto = Event; + _proto: *Event, _old_version: u64, _new_version: ?u64,