summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h')
-rw-r--r--Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h b/Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h
new file mode 100644
index 0000000000..890fb563cf
--- /dev/null
+++ b/Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/NonnullRefPtr.h>
+#include <AK/NonnullRefPtrVector.h>
+#include <LibWeb/CSS/CSSConditionRule.h>
+#include <LibWeb/CSS/CSSRule.h>
+#include <LibWeb/CSS/Supports.h>
+#include <LibWeb/Forward.h>
+
+namespace Web::CSS {
+
+// https://www.w3.org/TR/css-conditional-3/#the-csssupportsrule-interface
+class CSSSupportsRule final : public CSSConditionRule {
+ AK_MAKE_NONCOPYABLE(CSSSupportsRule);
+ AK_MAKE_NONMOVABLE(CSSSupportsRule);
+
+public:
+ static NonnullRefPtr<CSSSupportsRule> create(NonnullRefPtr<Supports>&& supports, NonnullRefPtrVector<CSSRule>&& rules)
+ {
+ return adopt_ref(*new CSSSupportsRule(move(supports), move(rules)));
+ }
+
+ ~CSSSupportsRule();
+
+ virtual StringView class_name() const override { return "CSSSupportsRule"; };
+ virtual Type type() const override { return Type::Supports; };
+
+ String condition_text() const override;
+ void set_condition_text(String) override;
+ virtual bool condition_matches() const override { return m_supports->matches(); }
+
+private:
+ explicit CSSSupportsRule(NonnullRefPtr<Supports>&&, NonnullRefPtrVector<CSSRule>&&);
+
+ NonnullRefPtr<Supports> m_supports;
+};
+
+template<>
+inline bool CSSRule::fast_is<CSSSupportsRule>() const { return type() == CSSRule::Type::Supports; }
+
+}