|
@@ -6,16 +6,19 @@
|
|
|
|
|
|
#pragma once
|
|
#pragma once
|
|
|
|
|
|
|
|
+#include <AK/Function.h>
|
|
#include <AK/NonnullRefPtrVector.h>
|
|
#include <AK/NonnullRefPtrVector.h>
|
|
#include <AK/TypeCasts.h>
|
|
#include <AK/TypeCasts.h>
|
|
-#include <LibWeb/CSS/CSSImportRule.h>
|
|
|
|
#include <LibWeb/CSS/CSSRule.h>
|
|
#include <LibWeb/CSS/CSSRule.h>
|
|
#include <LibWeb/CSS/CSSRuleList.h>
|
|
#include <LibWeb/CSS/CSSRuleList.h>
|
|
|
|
+#include <LibWeb/CSS/CSSStyleRule.h>
|
|
#include <LibWeb/CSS/StyleSheet.h>
|
|
#include <LibWeb/CSS/StyleSheet.h>
|
|
#include <LibWeb/Loader/Resource.h>
|
|
#include <LibWeb/Loader/Resource.h>
|
|
|
|
|
|
namespace Web::CSS {
|
|
namespace Web::CSS {
|
|
|
|
|
|
|
|
+class CSSImportRule;
|
|
|
|
+
|
|
class CSSStyleSheet final : public StyleSheet {
|
|
class CSSStyleSheet final : public StyleSheet {
|
|
public:
|
|
public:
|
|
using WrapperType = Bindings::CSSStyleSheetWrapper;
|
|
using WrapperType = Bindings::CSSStyleSheetWrapper;
|
|
@@ -42,37 +45,8 @@ public:
|
|
DOM::ExceptionOr<void> remove_rule(unsigned index);
|
|
DOM::ExceptionOr<void> remove_rule(unsigned index);
|
|
DOM::ExceptionOr<void> delete_rule(unsigned index);
|
|
DOM::ExceptionOr<void> delete_rule(unsigned index);
|
|
|
|
|
|
- template<typename Callback>
|
|
|
|
- void for_each_effective_style_rule(Callback callback) const
|
|
|
|
- {
|
|
|
|
- for (auto& rule : *m_rules)
|
|
|
|
- if (rule.type() == CSSRule::Type::Style) {
|
|
|
|
- callback(verify_cast<CSSStyleRule>(rule));
|
|
|
|
- } else if (rule.type() == CSSRule::Type::Import) {
|
|
|
|
- const auto& import_rule = verify_cast<CSSImportRule>(rule);
|
|
|
|
- if (import_rule.has_import_result())
|
|
|
|
- import_rule.loaded_style_sheet()->for_each_effective_style_rule(callback);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template<typename Callback>
|
|
|
|
- bool for_first_not_loaded_import_rule(Callback callback)
|
|
|
|
- {
|
|
|
|
- for (auto& rule : *m_rules)
|
|
|
|
- if (rule.type() == CSSRule::Type::Import) {
|
|
|
|
- auto& import_rule = verify_cast<CSSImportRule>(rule);
|
|
|
|
- if (!import_rule.has_import_result()) {
|
|
|
|
- callback(import_rule);
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (import_rule.loaded_style_sheet()->for_first_not_loaded_import_rule(callback)) {
|
|
|
|
- return true;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
|
|
+ void for_each_effective_style_rule(Function<void(CSSStyleRule const&)> const& callback) const;
|
|
|
|
+ bool for_first_not_loaded_import_rule(Function<void(CSSImportRule&)> const& callback);
|
|
|
|
|
|
private:
|
|
private:
|
|
explicit CSSStyleSheet(NonnullRefPtrVector<CSSRule>);
|
|
explicit CSSStyleSheet(NonnullRefPtrVector<CSSRule>);
|