@@ -21,55 +21,57 @@ const std = @import("std");
2121const Page = @import ("../page.zig" ).Page ;
2222const StyleSheet = @import ("stylesheet.zig" ).StyleSheet ;
2323
24- const CSSRule = @import ("css_rule .zig" ).CSSRule ;
24+ const CSSRuleList = @import ("css_rule_list .zig" ).CSSRuleList ;
2525const CSSImportRule = @import ("css_rule.zig" ).CSSImportRule ;
2626
2727pub const CSSStyleSheet = struct {
2828 pub const prototype = * StyleSheet ;
2929
30- // TODO: For now, we won't parse any rules.
31- css_rules : std .ArrayListUnmanaged ([]const u8 ),
32-
33- // TODO: Support owner_rule here.
30+ css_rules : * CSSRuleList ,
31+ owner_rule : ? * CSSImportRule ,
3432
3533 const CSSStyleSheetOpts = struct {
36- base_url : ? []const u8 ,
34+ base_url : ? []const u8 = null ,
3735 // TODO: Suupport media
3836 disabled : bool = false ,
3937 };
4038
41- pub fn constructor (_opts : ? CSSStyleSheetOpts ) CSSStyleSheet {
39+ pub fn constructor (_opts : ? CSSStyleSheetOpts , page : * Page ) ! CSSStyleSheet {
4240 const opts = _opts orelse CSSStyleSheetOpts {};
4341 _ = opts ;
4442
45- return .{ .css_rules = .empty , .owner_rule = null };
43+ const arena = page .arena ;
44+ const rules = try arena .create (CSSRuleList );
45+ rules .* = .constructor ();
46+
47+ return .{ .css_rules = rules , .owner_rule = null };
4648 }
4749
4850 pub fn get_ownerRule (_ : * CSSStyleSheet ) ? * CSSImportRule {
4951 return null ;
5052 }
5153
52- pub fn get_cssRules (self : * CSSStyleSheet ) * std . ArrayListUnmanaged ([] const u8 ) {
54+ pub fn get_cssRules (self : * CSSStyleSheet ) * CSSRuleList {
5355 return self .css_rules ;
5456 }
5557
5658 pub fn _insertRule (self : * CSSStyleSheet , rule : []const u8 , _index : ? usize , page : * Page ) ! usize {
5759 const index = _index orelse 0 ;
58- if (index > self .css_rules .items .len ) {
60+ if (index > self .css_rules .list . items .len ) {
5961 return error .IndexSize ;
6062 }
6163
6264 const arena = page .arena ;
63- try self .css_rules .insert (arena , index , arena .dupe (u8 , rule ));
65+ try self .css_rules .list . insert (arena , index , try arena .dupe (u8 , rule ));
6466 return index ;
6567 }
6668
6769 pub fn _deleteRule (self : * CSSStyleSheet , index : usize ) ! void {
68- if (index > self .css_rules .items .len ) {
70+ if (index > self .css_rules .list . items .len ) {
6971 return error .IndexSize ;
7072 }
7173
72- _ = self .css_rules .orderedRemove (index );
74+ _ = self .css_rules .list . orderedRemove (index );
7375 }
7476};
7577
@@ -79,6 +81,12 @@ test "Browser.CSS.StyleSheet" {
7981 defer runner .deinit ();
8082
8183 try runner .testCases (&.{
82- .{ "let css = new CSSStylesheet()" , "" },
84+ .{ "let css = new CSSStyleSheet()" , "undefined" },
85+ .{ "css instanceof CSSStyleSheet" , "true" },
86+ .{ "css.cssRules.length" , "0" },
87+ .{ "css.ownerRule" , "null" },
88+ .{ "let index1 = css.insertRule('body { color: red; }', 0)" , "undefined" },
89+ .{ "index1" , "0" },
90+ .{ "css.cssRules.length" , "1" },
8391 }, .{});
8492}
0 commit comments