Serenity Operating System
at master 49 lines 1.5 kB view raw
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}