Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 * Copyright (c) 2021, the SerenityOS developers.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include <AK/NonnullRefPtr.h>
11#include <LibWeb/CSS/CSSRule.h>
12#include <LibWeb/CSS/CSSStyleDeclaration.h>
13#include <LibWeb/CSS/Selector.h>
14
15namespace Web::CSS {
16
17class CSSStyleRule final : public CSSRule {
18 WEB_PLATFORM_OBJECT(CSSStyleRule, CSSRule);
19
20public:
21 static WebIDL::ExceptionOr<JS::NonnullGCPtr<CSSStyleRule>> create(JS::Realm&, Vector<NonnullRefPtr<Selector>>&&, CSSStyleDeclaration&);
22
23 virtual ~CSSStyleRule() override = default;
24
25 Vector<NonnullRefPtr<Selector>> const& selectors() const { return m_selectors; }
26 CSSStyleDeclaration const& declaration() const { return m_declaration; }
27
28 virtual Type type() const override { return Type::Style; };
29
30 DeprecatedString selector_text() const;
31 void set_selector_text(StringView);
32
33 CSSStyleDeclaration* style();
34
35private:
36 CSSStyleRule(JS::Realm&, Vector<NonnullRefPtr<Selector>>&&, CSSStyleDeclaration&);
37
38 virtual JS::ThrowCompletionOr<void> initialize(JS::Realm&) override;
39 virtual void visit_edges(Cell::Visitor&) override;
40 virtual DeprecatedString serialized() const override;
41
42 Vector<NonnullRefPtr<Selector>> m_selectors;
43 CSSStyleDeclaration& m_declaration;
44};
45
46template<>
47inline bool CSSRule::fast_is<CSSStyleRule>() const { return type() == CSSRule::Type::Style; }
48
49}