diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h')
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/CSSSupportsRule.h | 47 |
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; } + +} |