Bläddra i källkod

LibWeb: Add CSSRuleList

"The CSSRuleList interface represents an ordered collection of CSS style
rules." - https://www.w3.org/TR/cssom-1/#the-cssrulelist-interface
Sam Atkins 3 år sedan
förälder
incheckning
97a78cdd28

+ 1 - 0
Userland/Libraries/LibWeb/CMakeLists.txt

@@ -14,6 +14,7 @@ set(SOURCES
     Bindings/Wrappable.cpp
     CSS/CSSImportRule.cpp
     CSS/CSSRule.cpp
+    CSS/CSSRuleList.cpp
     CSS/CSSStyleDeclaration.cpp
     CSS/CSSStyleRule.cpp
     CSS/CSSStyleSheet.cpp

+ 20 - 0
Userland/Libraries/LibWeb/CSS/CSSRuleList.cpp

@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibWeb/CSS/CSSRuleList.h>
+
+namespace Web::CSS {
+
+CSSRuleList::CSSRuleList(NonnullRefPtrVector<CSSRule>&& rules)
+    : m_rules(rules)
+{
+}
+
+CSSRuleList::~CSSRuleList()
+{
+}
+
+}

+ 44 - 0
Userland/Libraries/LibWeb/CSS/CSSRuleList.h

@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/Iterator.h>
+#include <AK/NonnullRefPtrVector.h>
+#include <AK/RefCounted.h>
+#include <AK/RefPtr.h>
+#include <LibWeb/CSS/CSSRule.h>
+#include <LibWeb/Forward.h>
+
+namespace Web::CSS {
+
+class CSSRuleList {
+public:
+    explicit CSSRuleList(NonnullRefPtrVector<CSSRule>&&);
+    virtual ~CSSRuleList();
+
+    RefPtr<CSSRule> item(size_t index) const
+    {
+        if (index >= length())
+            return nullptr;
+        return m_rules[index];
+    }
+    size_t length() const { return m_rules.size(); }
+
+    using ConstIterator = AK::SimpleIterator<AK::NonnullPtrVector<NonnullRefPtr<CSSRule>> const, CSSRule const>;
+    using Iterator = AK::SimpleIterator<AK::NonnullPtrVector<NonnullRefPtr<CSSRule>>, CSSRule>;
+
+    ConstIterator const begin() const { return m_rules.begin(); }
+    Iterator begin() { return m_rules.begin(); }
+
+    ConstIterator const end() const { return m_rules.end(); }
+    Iterator end() { return m_rules.end(); }
+
+private:
+    NonnullRefPtrVector<CSSRule> m_rules;
+};
+
+}

+ 4 - 0
Userland/Libraries/LibWeb/CSS/CSSRuleList.idl

@@ -0,0 +1,4 @@
+interface CSSRuleList {
+    getter CSSRule? item(unsigned long index);
+    readonly attribute unsigned long length;
+};