mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
LibWeb: Wrap PseudoElements stored in SimpleSelector in a class
No functional impact intended. This is just a more complicated way of writing what we have now. The goal of this commit is so that we are able to store the 'name' of a pseudo element for use in serializing 'unknown -webkit- pseudo-elements', see: https://www.w3.org/TR/selectors-4/#compat This is quite awkward, as in pretty much all cases just the selector type enum is enough, but we will need to cache the name for serializing these unknown selectors. I can't figure out any reason why we would need this name anywhere else in the engine, so pretty much everywhere is still just passing around this raw enum. But this change will allow us to easily store the name inside of this new struct for when it is needed for serialization, once those webkit unknown elements are supported by our engine.
This commit is contained in:
parent
08920b7a34
commit
83758d4cdd
Notes:
sideshowbarker
2024-07-17 00:37:23 +09:00
Author: https://github.com/shannonbooth Commit: https://github.com/SerenityOS/serenity/commit/83758d4cdd Pull-request: https://github.com/SerenityOS/serenity/pull/22251 Issue: https://github.com/SerenityOS/serenity/issues/21959 Reviewed-by: https://github.com/AtkinsSJ ✅ Reviewed-by: https://github.com/kalenikaliaksandr ✅
32 changed files with 196 additions and 174 deletions
|
@ -6596,7 +6596,7 @@ bool Parser::has_ignored_vendor_prefix(StringView string)
|
|||
return true;
|
||||
}
|
||||
|
||||
NonnullRefPtr<StyleValue> Parser::resolve_unresolved_style_value(Badge<StyleComputer>, ParsingContext const& context, DOM::Element& element, Optional<Selector::PseudoElement> pseudo_element, PropertyID property_id, UnresolvedStyleValue const& unresolved)
|
||||
NonnullRefPtr<StyleValue> Parser::resolve_unresolved_style_value(Badge<StyleComputer>, ParsingContext const& context, DOM::Element& element, Optional<Selector::PseudoElement::Type> pseudo_element, PropertyID property_id, UnresolvedStyleValue const& unresolved)
|
||||
{
|
||||
// Unresolved always contains a var() or attr(), unless it is a custom property's value, in which case we shouldn't be trying
|
||||
// to produce a different StyleValue from it.
|
||||
|
@ -6651,7 +6651,7 @@ private:
|
|||
bool m_marked { false };
|
||||
};
|
||||
|
||||
NonnullRefPtr<StyleValue> Parser::resolve_unresolved_style_value(DOM::Element& element, Optional<Selector::PseudoElement> pseudo_element, PropertyID property_id, UnresolvedStyleValue const& unresolved)
|
||||
NonnullRefPtr<StyleValue> Parser::resolve_unresolved_style_value(DOM::Element& element, Optional<Selector::PseudoElement::Type> pseudo_element, PropertyID property_id, UnresolvedStyleValue const& unresolved)
|
||||
{
|
||||
TokenStream unresolved_values_without_variables_expanded { unresolved.values() };
|
||||
Vector<ComponentValue> values_with_variables_expanded;
|
||||
|
@ -6672,7 +6672,7 @@ NonnullRefPtr<StyleValue> Parser::resolve_unresolved_style_value(DOM::Element& e
|
|||
return UnsetStyleValue::the();
|
||||
}
|
||||
|
||||
static RefPtr<StyleValue const> get_custom_property(DOM::Element const& element, Optional<CSS::Selector::PseudoElement> pseudo_element, FlyString const& custom_property_name)
|
||||
static RefPtr<StyleValue const> get_custom_property(DOM::Element const& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, FlyString const& custom_property_name)
|
||||
{
|
||||
if (pseudo_element.has_value()) {
|
||||
if (auto it = element.custom_properties(pseudo_element).find(custom_property_name.to_string()); it != element.custom_properties(pseudo_element).end())
|
||||
|
@ -6686,7 +6686,7 @@ static RefPtr<StyleValue const> get_custom_property(DOM::Element const& element,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
bool Parser::expand_variables(DOM::Element& element, Optional<Selector::PseudoElement> pseudo_element, StringView property_name, HashMap<FlyString, NonnullRefPtr<PropertyDependencyNode>>& dependencies, TokenStream<ComponentValue>& source, Vector<ComponentValue>& dest)
|
||||
bool Parser::expand_variables(DOM::Element& element, Optional<Selector::PseudoElement::Type> pseudo_element, StringView property_name, HashMap<FlyString, NonnullRefPtr<PropertyDependencyNode>>& dependencies, TokenStream<ComponentValue>& source, Vector<ComponentValue>& dest)
|
||||
{
|
||||
// Arbitrary large value chosen to avoid the billion-laughs attack.
|
||||
// https://www.w3.org/TR/css-variables-1/#long-variables
|
||||
|
|
|
@ -69,7 +69,7 @@ public:
|
|||
|
||||
Optional<ComponentValue> parse_as_component_value();
|
||||
|
||||
static NonnullRefPtr<StyleValue> resolve_unresolved_style_value(Badge<StyleComputer>, ParsingContext const&, DOM::Element&, Optional<CSS::Selector::PseudoElement>, PropertyID, UnresolvedStyleValue const&);
|
||||
static NonnullRefPtr<StyleValue> resolve_unresolved_style_value(Badge<StyleComputer>, ParsingContext const&, DOM::Element&, Optional<CSS::Selector::PseudoElement::Type>, PropertyID, UnresolvedStyleValue const&);
|
||||
|
||||
[[nodiscard]] LengthOrCalculated parse_as_sizes_attribute();
|
||||
|
||||
|
@ -293,8 +293,8 @@ private:
|
|||
Optional<Supports::InParens> parse_supports_in_parens(TokenStream<ComponentValue>&);
|
||||
Optional<Supports::Feature> parse_supports_feature(TokenStream<ComponentValue>&);
|
||||
|
||||
NonnullRefPtr<StyleValue> resolve_unresolved_style_value(DOM::Element&, Optional<Selector::PseudoElement>, PropertyID, UnresolvedStyleValue const&);
|
||||
bool expand_variables(DOM::Element&, Optional<Selector::PseudoElement>, StringView property_name, HashMap<FlyString, NonnullRefPtr<PropertyDependencyNode>>& dependencies, TokenStream<ComponentValue>& source, Vector<ComponentValue>& dest);
|
||||
NonnullRefPtr<StyleValue> resolve_unresolved_style_value(DOM::Element&, Optional<Selector::PseudoElement::Type>, PropertyID, UnresolvedStyleValue const&);
|
||||
bool expand_variables(DOM::Element&, Optional<Selector::PseudoElement::Type>, StringView property_name, HashMap<FlyString, NonnullRefPtr<PropertyDependencyNode>>& dependencies, TokenStream<ComponentValue>& source, Vector<ComponentValue>& dest);
|
||||
bool expand_unresolved_values(DOM::Element&, StringView property_name, TokenStream<ComponentValue>& source, Vector<ComponentValue>& dest);
|
||||
bool substitute_attr_function(DOM::Element& element, StringView property_name, Function const& attr_function, Vector<ComponentValue>& dest);
|
||||
|
||||
|
|
|
@ -354,7 +354,7 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
|||
auto pseudo_name = name_token.token().ident();
|
||||
|
||||
// Note: We allow the "ignored" -webkit prefix here for -webkit-progress-bar/-webkit-progress-bar
|
||||
if (auto pseudo_element = pseudo_element_from_string(pseudo_name); pseudo_element.has_value()) {
|
||||
if (auto pseudo_element = Selector::PseudoElement::from_string(pseudo_name); pseudo_element.has_value()) {
|
||||
return Selector::SimpleSelector {
|
||||
.type = Selector::SimpleSelector::Type::PseudoElement,
|
||||
.value = pseudo_element.release_value()
|
||||
|
@ -395,12 +395,12 @@ Parser::ParseErrorOr<Selector::SimpleSelector> Parser::parse_pseudo_simple_selec
|
|||
|
||||
// Single-colon syntax allowed for ::after, ::before, ::first-letter and ::first-line for compatibility.
|
||||
// https://www.w3.org/TR/selectors/#pseudo-element-syntax
|
||||
if (auto pseudo_element = pseudo_element_from_string(pseudo_name); pseudo_element.has_value()) {
|
||||
switch (pseudo_element.value()) {
|
||||
case Selector::PseudoElement::After:
|
||||
case Selector::PseudoElement::Before:
|
||||
case Selector::PseudoElement::FirstLetter:
|
||||
case Selector::PseudoElement::FirstLine:
|
||||
if (auto pseudo_element = Selector::PseudoElement::from_string(pseudo_name); pseudo_element.has_value()) {
|
||||
switch (pseudo_element.value().type()) {
|
||||
case Selector::PseudoElement::Type::After:
|
||||
case Selector::PseudoElement::Type::Before:
|
||||
case Selector::PseudoElement::Type::FirstLetter:
|
||||
case Selector::PseudoElement::Type::FirstLine:
|
||||
return Selector::SimpleSelector {
|
||||
.type = Selector::SimpleSelector::Type::PseudoElement,
|
||||
.value = pseudo_element.value()
|
||||
|
|
|
@ -346,7 +346,7 @@ String Selector::serialize() const
|
|||
// append "::" followed by the name of the pseudo-element, to s.
|
||||
if (compound_selector.simple_selectors.last().type == Selector::SimpleSelector::Type::PseudoElement) {
|
||||
s.append("::"sv);
|
||||
s.append(pseudo_element_name(compound_selector.simple_selectors.last().pseudo_element()));
|
||||
s.append(compound_selector.simple_selectors.last().pseudo_element().name());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -361,34 +361,69 @@ String serialize_a_group_of_selectors(Vector<NonnullRefPtr<Selector>> const& sel
|
|||
return MUST(String::join(", "sv, selectors));
|
||||
}
|
||||
|
||||
Optional<Selector::PseudoElement> pseudo_element_from_string(StringView name)
|
||||
StringView Selector::PseudoElement::name(Selector::PseudoElement::Type pseudo_element)
|
||||
{
|
||||
switch (pseudo_element) {
|
||||
case Selector::PseudoElement::Type::Before:
|
||||
return "before"sv;
|
||||
case Selector::PseudoElement::Type::After:
|
||||
return "after"sv;
|
||||
case Selector::PseudoElement::Type::FirstLine:
|
||||
return "first-line"sv;
|
||||
case Selector::PseudoElement::Type::FirstLetter:
|
||||
return "first-letter"sv;
|
||||
case Selector::PseudoElement::Type::Marker:
|
||||
return "marker"sv;
|
||||
case Selector::PseudoElement::Type::MeterBar:
|
||||
return "-webkit-meter-bar"sv;
|
||||
case Selector::PseudoElement::Type::MeterEvenLessGoodValue:
|
||||
return "-webkit-meter-even-less-good-value"sv;
|
||||
case Selector::PseudoElement::Type::MeterOptimumValue:
|
||||
return "-webkit-meter-optimum-value"sv;
|
||||
case Selector::PseudoElement::Type::MeterSuboptimumValue:
|
||||
return "-webkit-meter-suboptimum-value"sv;
|
||||
case Selector::PseudoElement::Type::ProgressBar:
|
||||
return "-webkit-progress-bar"sv;
|
||||
case Selector::PseudoElement::Type::ProgressValue:
|
||||
return "-webkit-progress-value"sv;
|
||||
case Selector::PseudoElement::Type::Placeholder:
|
||||
return "placeholder"sv;
|
||||
case Selector::PseudoElement::Type::Selection:
|
||||
return "selection"sv;
|
||||
case Selector::PseudoElement::Type::PseudoElementCount:
|
||||
break;
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
Optional<Selector::PseudoElement> Selector::PseudoElement::from_string(FlyString const& name)
|
||||
{
|
||||
if (name.equals_ignoring_ascii_case("after"sv)) {
|
||||
return Selector::PseudoElement::After;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::After };
|
||||
} else if (name.equals_ignoring_ascii_case("before"sv)) {
|
||||
return Selector::PseudoElement::Before;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::Before };
|
||||
} else if (name.equals_ignoring_ascii_case("first-letter"sv)) {
|
||||
return Selector::PseudoElement::FirstLetter;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::FirstLetter };
|
||||
} else if (name.equals_ignoring_ascii_case("first-line"sv)) {
|
||||
return Selector::PseudoElement::FirstLine;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::FirstLine };
|
||||
} else if (name.equals_ignoring_ascii_case("marker"sv)) {
|
||||
return Selector::PseudoElement::Marker;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::Marker };
|
||||
} else if (name.equals_ignoring_ascii_case("-webkit-meter-bar"sv)) {
|
||||
return Selector::PseudoElement::MeterBar;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::MeterBar };
|
||||
} else if (name.equals_ignoring_ascii_case("-webkit-meter-even-less-good-value"sv)) {
|
||||
return Selector::PseudoElement::MeterEvenLessGoodValue;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::MeterEvenLessGoodValue };
|
||||
} else if (name.equals_ignoring_ascii_case("-webkit-meter-optimum-value"sv)) {
|
||||
return Selector::PseudoElement::MeterOptimumValue;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::MeterOptimumValue };
|
||||
} else if (name.equals_ignoring_ascii_case("-webkit-meter-suboptimum-value"sv)) {
|
||||
return Selector::PseudoElement::MeterSuboptimumValue;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::MeterSuboptimumValue };
|
||||
} else if (name.equals_ignoring_ascii_case("-webkit-progress-bar"sv)) {
|
||||
return Selector::PseudoElement::ProgressBar;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::ProgressBar };
|
||||
} else if (name.equals_ignoring_ascii_case("-webkit-progress-value"sv)) {
|
||||
return Selector::PseudoElement::ProgressValue;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::ProgressValue };
|
||||
} else if (name.equals_ignoring_ascii_case("placeholder"sv)) {
|
||||
return Selector::PseudoElement::Placeholder;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::Placeholder };
|
||||
} else if (name.equals_ignoring_ascii_case("selection"sv)) {
|
||||
return Selector::PseudoElement::Selection;
|
||||
return Selector::PseudoElement { Selector::PseudoElement::Type::Selection };
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
|
|
@ -21,23 +21,47 @@ using SelectorList = Vector<NonnullRefPtr<class Selector>>;
|
|||
// This is a <complex-selector> in the spec. https://www.w3.org/TR/selectors-4/#complex
|
||||
class Selector : public RefCounted<Selector> {
|
||||
public:
|
||||
enum class PseudoElement {
|
||||
Before,
|
||||
After,
|
||||
FirstLine,
|
||||
FirstLetter,
|
||||
Marker,
|
||||
MeterBar,
|
||||
MeterEvenLessGoodValue,
|
||||
MeterOptimumValue,
|
||||
MeterSuboptimumValue,
|
||||
ProgressValue,
|
||||
ProgressBar,
|
||||
Placeholder,
|
||||
Selection,
|
||||
class PseudoElement {
|
||||
public:
|
||||
enum class Type {
|
||||
Before,
|
||||
After,
|
||||
FirstLine,
|
||||
FirstLetter,
|
||||
Marker,
|
||||
MeterBar,
|
||||
MeterEvenLessGoodValue,
|
||||
MeterOptimumValue,
|
||||
MeterSuboptimumValue,
|
||||
ProgressValue,
|
||||
ProgressBar,
|
||||
Placeholder,
|
||||
Selection,
|
||||
|
||||
// Keep this last.
|
||||
PseudoElementCount,
|
||||
// Keep this last.
|
||||
PseudoElementCount,
|
||||
};
|
||||
|
||||
explicit PseudoElement(Type type)
|
||||
: m_type(type)
|
||||
{
|
||||
}
|
||||
|
||||
constexpr bool operator==(PseudoElement const&) const = default;
|
||||
|
||||
static Optional<PseudoElement> from_string(FlyString const&);
|
||||
|
||||
static StringView name(Selector::PseudoElement::Type pseudo_element);
|
||||
|
||||
StringView name() const
|
||||
{
|
||||
return name(m_type);
|
||||
}
|
||||
|
||||
Type type() const { return m_type; }
|
||||
|
||||
private:
|
||||
Type m_type;
|
||||
};
|
||||
|
||||
struct SimpleSelector {
|
||||
|
@ -208,43 +232,6 @@ private:
|
|||
Optional<Selector::PseudoElement> m_pseudo_element;
|
||||
};
|
||||
|
||||
constexpr StringView pseudo_element_name(Selector::PseudoElement pseudo_element)
|
||||
{
|
||||
switch (pseudo_element) {
|
||||
case Selector::PseudoElement::Before:
|
||||
return "before"sv;
|
||||
case Selector::PseudoElement::After:
|
||||
return "after"sv;
|
||||
case Selector::PseudoElement::FirstLine:
|
||||
return "first-line"sv;
|
||||
case Selector::PseudoElement::FirstLetter:
|
||||
return "first-letter"sv;
|
||||
case Selector::PseudoElement::Marker:
|
||||
return "marker"sv;
|
||||
case Selector::PseudoElement::MeterBar:
|
||||
return "-webkit-meter-bar"sv;
|
||||
case Selector::PseudoElement::MeterEvenLessGoodValue:
|
||||
return "-webkit-meter-even-less-good-value"sv;
|
||||
case Selector::PseudoElement::MeterOptimumValue:
|
||||
return "-webkit-meter-optimum-value"sv;
|
||||
case Selector::PseudoElement::MeterSuboptimumValue:
|
||||
return "-webkit-meter-suboptimum-value"sv;
|
||||
case Selector::PseudoElement::ProgressBar:
|
||||
return "-webkit-progress-bar"sv;
|
||||
case Selector::PseudoElement::ProgressValue:
|
||||
return "-webkit-progress-value"sv;
|
||||
case Selector::PseudoElement::Placeholder:
|
||||
return "placeholder"sv;
|
||||
case Selector::PseudoElement::Selection:
|
||||
return "selection"sv;
|
||||
case Selector::PseudoElement::PseudoElementCount:
|
||||
break;
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
Optional<Selector::PseudoElement> pseudo_element_from_string(StringView);
|
||||
|
||||
String serialize_a_group_of_selectors(Vector<NonnullRefPtr<Selector>> const& selectors);
|
||||
|
||||
}
|
||||
|
|
|
@ -640,10 +640,10 @@ static inline bool matches(CSS::Selector const& selector, Optional<CSS::CSSStyle
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
bool matches(CSS::Selector const& selector, Optional<CSS::CSSStyleSheet const&> style_sheet_for_rule, DOM::Element const& element, Optional<CSS::Selector::PseudoElement> pseudo_element, JS::GCPtr<DOM::ParentNode const> scope)
|
||||
bool matches(CSS::Selector const& selector, Optional<CSS::CSSStyleSheet const&> style_sheet_for_rule, DOM::Element const& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, JS::GCPtr<DOM::ParentNode const> scope)
|
||||
{
|
||||
VERIFY(!selector.compound_selectors().is_empty());
|
||||
if (pseudo_element.has_value() && selector.pseudo_element() != pseudo_element)
|
||||
if (pseudo_element.has_value() && selector.pseudo_element().has_value() && selector.pseudo_element().value().type() != pseudo_element)
|
||||
return false;
|
||||
if (!pseudo_element.has_value() && selector.pseudo_element().has_value())
|
||||
return false;
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
|
||||
namespace Web::SelectorEngine {
|
||||
|
||||
bool matches(CSS::Selector const&, Optional<CSS::CSSStyleSheet const&> style_sheet_for_rule, DOM::Element const&, Optional<CSS::Selector::PseudoElement> = {}, JS::GCPtr<DOM::ParentNode const> scope = {});
|
||||
bool matches(CSS::Selector const&, Optional<CSS::CSSStyleSheet const&> style_sheet_for_rule, DOM::Element const&, Optional<CSS::Selector::PseudoElement::Type> = {}, JS::GCPtr<DOM::ParentNode const> scope = {});
|
||||
|
||||
}
|
||||
|
|
|
@ -77,8 +77,8 @@ struct Traits<Web::CSS::FontFaceKey> : public DefaultTraits<Web::CSS::FontFaceKe
|
|||
|
||||
namespace Web::CSS {
|
||||
|
||||
static DOM::Element const* element_to_inherit_style_from(DOM::Element const*, Optional<CSS::Selector::PseudoElement>);
|
||||
static NonnullRefPtr<StyleValue const> get_inherit_value(JS::Realm& initial_value_context_realm, CSS::PropertyID, DOM::Element const*, Optional<CSS::Selector::PseudoElement>);
|
||||
static DOM::Element const* element_to_inherit_style_from(DOM::Element const*, Optional<CSS::Selector::PseudoElement::Type>);
|
||||
static NonnullRefPtr<StyleValue const> get_inherit_value(JS::Realm& initial_value_context_realm, CSS::PropertyID, DOM::Element const*, Optional<CSS::Selector::PseudoElement::Type>);
|
||||
|
||||
StyleComputer::StyleComputer(DOM::Document& document)
|
||||
: m_document(document)
|
||||
|
@ -297,7 +297,7 @@ StyleComputer::RuleCache const& StyleComputer::rule_cache_for_cascade_origin(Cas
|
|||
return true;
|
||||
}
|
||||
|
||||
Vector<MatchingRule> StyleComputer::collect_matching_rules(DOM::Element const& element, CascadeOrigin cascade_origin, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
Vector<MatchingRule> StyleComputer::collect_matching_rules(DOM::Element const& element, CascadeOrigin cascade_origin, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
auto const& rule_cache = rule_cache_for_cascade_origin(cascade_origin);
|
||||
|
||||
|
@ -653,7 +653,7 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope
|
|||
set_longhand_property(property_id, value);
|
||||
}
|
||||
|
||||
void StyleComputer::set_all_properties(DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element, StyleProperties& style, StyleValue const& value, DOM::Document& document, CSS::CSSStyleDeclaration const* declaration, StyleProperties::PropertyValues const& properties_for_revert) const
|
||||
void StyleComputer::set_all_properties(DOM::Element& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, StyleProperties& style, StyleValue const& value, DOM::Document& document, CSS::CSSStyleDeclaration const* declaration, StyleProperties::PropertyValues const& properties_for_revert) const
|
||||
{
|
||||
for (auto i = to_underlying(CSS::first_longhand_property_id); i <= to_underlying(CSS::last_longhand_property_id); ++i) {
|
||||
auto property_id = (CSS::PropertyID)i;
|
||||
|
@ -681,7 +681,7 @@ void StyleComputer::set_all_properties(DOM::Element& element, Optional<CSS::Sele
|
|||
}
|
||||
}
|
||||
|
||||
void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element, Vector<MatchingRule> const& matching_rules, CascadeOrigin cascade_origin, Important important) const
|
||||
void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, Vector<MatchingRule> const& matching_rules, CascadeOrigin cascade_origin, Important important) const
|
||||
{
|
||||
auto properties_for_revert = style.properties();
|
||||
|
||||
|
@ -724,7 +724,7 @@ void StyleComputer::cascade_declarations(StyleProperties& style, DOM::Element& e
|
|||
}
|
||||
}
|
||||
|
||||
static ErrorOr<void> cascade_custom_properties(DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element, Vector<MatchingRule> const& matching_rules)
|
||||
static ErrorOr<void> cascade_custom_properties(DOM::Element& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, Vector<MatchingRule> const& matching_rules)
|
||||
{
|
||||
size_t needed_capacity = 0;
|
||||
for (auto const& matching_rule : matching_rules)
|
||||
|
@ -1222,7 +1222,7 @@ void StyleComputer::ensure_animation_timer() const
|
|||
}
|
||||
|
||||
// https://www.w3.org/TR/css-cascade/#cascading
|
||||
ErrorOr<void> StyleComputer::compute_cascaded_values(StyleProperties& style, DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element, bool& did_match_any_pseudo_element_rules, ComputeStyleMode mode) const
|
||||
ErrorOr<void> StyleComputer::compute_cascaded_values(StyleProperties& style, DOM::Element& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, bool& did_match_any_pseudo_element_rules, ComputeStyleMode mode) const
|
||||
{
|
||||
// First, we collect all the CSS rules whose selectors match `element`:
|
||||
MatchingRuleSet matching_rule_set;
|
||||
|
@ -1459,7 +1459,7 @@ ErrorOr<void> StyleComputer::compute_cascaded_values(StyleProperties& style, DOM
|
|||
return {};
|
||||
}
|
||||
|
||||
DOM::Element const* element_to_inherit_style_from(DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element)
|
||||
DOM::Element const* element_to_inherit_style_from(DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element)
|
||||
{
|
||||
// Pseudo-elements treat their originating element as their parent.
|
||||
DOM::Element const* parent_element = nullptr;
|
||||
|
@ -1471,7 +1471,7 @@ DOM::Element const* element_to_inherit_style_from(DOM::Element const* element, O
|
|||
return parent_element;
|
||||
}
|
||||
|
||||
NonnullRefPtr<StyleValue const> get_inherit_value(JS::Realm& initial_value_context_realm, CSS::PropertyID property_id, DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element)
|
||||
NonnullRefPtr<StyleValue const> get_inherit_value(JS::Realm& initial_value_context_realm, CSS::PropertyID property_id, DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element)
|
||||
{
|
||||
auto* parent_element = element_to_inherit_style_from(element, pseudo_element);
|
||||
|
||||
|
@ -1480,7 +1480,7 @@ NonnullRefPtr<StyleValue const> get_inherit_value(JS::Realm& initial_value_conte
|
|||
return parent_element->computed_css_values()->property(property_id);
|
||||
}
|
||||
|
||||
void StyleComputer::compute_defaulted_property_value(StyleProperties& style, DOM::Element const* element, CSS::PropertyID property_id, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
void StyleComputer::compute_defaulted_property_value(StyleProperties& style, DOM::Element const* element, CSS::PropertyID property_id, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
// FIXME: If we don't know the correct initial value for a property, we fall back to InitialStyleValue.
|
||||
|
||||
|
@ -1517,7 +1517,7 @@ void StyleComputer::compute_defaulted_property_value(StyleProperties& style, DOM
|
|||
}
|
||||
|
||||
// https://www.w3.org/TR/css-cascade/#defaulting
|
||||
void StyleComputer::compute_defaulted_values(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
void StyleComputer::compute_defaulted_values(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
// Walk the list of all known CSS properties and:
|
||||
// - Add them to `style` if they are missing.
|
||||
|
@ -1645,7 +1645,7 @@ RefPtr<Gfx::FontCascadeList const> StyleComputer::font_matching_algorithm(FontFa
|
|||
return {};
|
||||
}
|
||||
|
||||
RefPtr<Gfx::FontCascadeList const> StyleComputer::compute_font_for_style_values(DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element, StyleValue const& font_family, StyleValue const& font_size, StyleValue const& font_style, StyleValue const& font_weight, StyleValue const& font_stretch, int math_depth) const
|
||||
RefPtr<Gfx::FontCascadeList const> StyleComputer::compute_font_for_style_values(DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, StyleValue const& font_family, StyleValue const& font_size, StyleValue const& font_style, StyleValue const& font_weight, StyleValue const& font_stretch, int math_depth) const
|
||||
{
|
||||
auto* parent_element = element_to_inherit_style_from(element, pseudo_element);
|
||||
|
||||
|
@ -1898,7 +1898,7 @@ RefPtr<Gfx::FontCascadeList const> StyleComputer::compute_font_for_style_values(
|
|||
return font_list;
|
||||
}
|
||||
|
||||
void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
// To compute the font, first ensure that we've defaulted the relevant CSS font properties.
|
||||
// FIXME: This should be more sophisticated.
|
||||
|
@ -1937,7 +1937,7 @@ Gfx::Font const& StyleComputer::initial_font() const
|
|||
return StyleProperties::font_fallback(false, false);
|
||||
}
|
||||
|
||||
CSSPixels StyleComputer::parent_or_root_element_line_height(DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
CSSPixels StyleComputer::parent_or_root_element_line_height(DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
auto* parent_element = element_to_inherit_style_from(element, pseudo_element);
|
||||
if (!parent_element)
|
||||
|
@ -1954,7 +1954,7 @@ CSSPixels StyleComputer::parent_or_root_element_line_height(DOM::Element const*
|
|||
return computed_values->line_height(viewport_rect(), parent_font_metrics, m_root_element_font_metrics);
|
||||
}
|
||||
|
||||
void StyleComputer::absolutize_values(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
void StyleComputer::absolutize_values(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
auto parent_or_root_line_height = parent_or_root_element_line_height(element, pseudo_element);
|
||||
|
||||
|
@ -1996,7 +1996,7 @@ enum class BoxTypeTransformation {
|
|||
Inlinify,
|
||||
};
|
||||
|
||||
static BoxTypeTransformation required_box_type_transformation(StyleProperties const& style, DOM::Element const& element, Optional<CSS::Selector::PseudoElement> const& pseudo_element)
|
||||
static BoxTypeTransformation required_box_type_transformation(StyleProperties const& style, DOM::Element const& element, Optional<CSS::Selector::PseudoElement::Type> const& pseudo_element)
|
||||
{
|
||||
// NOTE: We never blockify <br> elements. They are always inline.
|
||||
// There is currently no way to express in CSS how a <br> element really behaves.
|
||||
|
@ -2024,7 +2024,7 @@ static BoxTypeTransformation required_box_type_transformation(StyleProperties co
|
|||
}
|
||||
|
||||
// https://drafts.csswg.org/css-display/#transformations
|
||||
void StyleComputer::transform_box_type_if_needed(StyleProperties& style, DOM::Element const& element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
void StyleComputer::transform_box_type_if_needed(StyleProperties& style, DOM::Element const& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
// 2.7. Automatic Box Type Transformations
|
||||
|
||||
|
@ -2118,18 +2118,18 @@ NonnullRefPtr<StyleProperties> StyleComputer::create_document_style() const
|
|||
return style;
|
||||
}
|
||||
|
||||
ErrorOr<NonnullRefPtr<StyleProperties>> StyleComputer::compute_style(DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
ErrorOr<NonnullRefPtr<StyleProperties>> StyleComputer::compute_style(DOM::Element& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
auto style = TRY(compute_style_impl(element, move(pseudo_element), ComputeStyleMode::Normal));
|
||||
return style.release_nonnull();
|
||||
}
|
||||
|
||||
ErrorOr<RefPtr<StyleProperties>> StyleComputer::compute_pseudo_element_style_if_needed(DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
ErrorOr<RefPtr<StyleProperties>> StyleComputer::compute_pseudo_element_style_if_needed(DOM::Element& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
return compute_style_impl(element, move(pseudo_element), ComputeStyleMode::CreatePseudoElementStyleIfNeeded);
|
||||
}
|
||||
|
||||
ErrorOr<RefPtr<StyleProperties>> StyleComputer::compute_style_impl(DOM::Element& element, Optional<CSS::Selector::PseudoElement> pseudo_element, ComputeStyleMode mode) const
|
||||
ErrorOr<RefPtr<StyleProperties>> StyleComputer::compute_style_impl(DOM::Element& element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, ComputeStyleMode mode) const
|
||||
{
|
||||
build_rule_cache_if_needed();
|
||||
|
||||
|
@ -2408,7 +2408,7 @@ void StyleComputer::load_fonts_from_sheet(CSSStyleSheet const& sheet)
|
|||
}
|
||||
}
|
||||
|
||||
void StyleComputer::compute_math_depth(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
void StyleComputer::compute_math_depth(StyleProperties& style, DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
// https://w3c.github.io/mathml-core/#propdef-math-depth
|
||||
|
||||
|
|
|
@ -52,8 +52,8 @@ public:
|
|||
|
||||
NonnullRefPtr<StyleProperties> create_document_style() const;
|
||||
|
||||
ErrorOr<NonnullRefPtr<StyleProperties>> compute_style(DOM::Element&, Optional<CSS::Selector::PseudoElement> = {}) const;
|
||||
ErrorOr<RefPtr<StyleProperties>> compute_pseudo_element_style_if_needed(DOM::Element&, Optional<CSS::Selector::PseudoElement>) const;
|
||||
ErrorOr<NonnullRefPtr<StyleProperties>> compute_style(DOM::Element&, Optional<CSS::Selector::PseudoElement::Type> = {}) const;
|
||||
ErrorOr<RefPtr<StyleProperties>> compute_pseudo_element_style_if_needed(DOM::Element&, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
|
||||
// https://www.w3.org/TR/css-cascade/#origin
|
||||
enum class CascadeOrigin {
|
||||
|
@ -64,7 +64,7 @@ public:
|
|||
Transition,
|
||||
};
|
||||
|
||||
Vector<MatchingRule> collect_matching_rules(DOM::Element const&, CascadeOrigin, Optional<CSS::Selector::PseudoElement>) const;
|
||||
Vector<MatchingRule> collect_matching_rules(DOM::Element const&, CascadeOrigin, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
|
||||
void invalidate_rule_cache();
|
||||
|
||||
|
@ -74,7 +74,7 @@ public:
|
|||
|
||||
void load_fonts_from_sheet(CSSStyleSheet const&);
|
||||
|
||||
RefPtr<Gfx::FontCascadeList const> compute_font_for_style_values(DOM::Element const* element, Optional<CSS::Selector::PseudoElement> pseudo_element, StyleValue const& font_family, StyleValue const& font_size, StyleValue const& font_style, StyleValue const& font_weight, StyleValue const& font_stretch, int math_depth = 0) const;
|
||||
RefPtr<Gfx::FontCascadeList const> compute_font_for_style_values(DOM::Element const* element, Optional<CSS::Selector::PseudoElement::Type> pseudo_element, StyleValue const& font_family, StyleValue const& font_size, StyleValue const& font_style, StyleValue const& font_weight, StyleValue const& font_stretch, int math_depth = 0) const;
|
||||
|
||||
struct AnimationKey {
|
||||
CSS::CSSStyleDeclaration const* source_declaration;
|
||||
|
@ -121,27 +121,27 @@ private:
|
|||
class FontLoader;
|
||||
struct MatchingFontCandidate;
|
||||
|
||||
ErrorOr<RefPtr<StyleProperties>> compute_style_impl(DOM::Element&, Optional<CSS::Selector::PseudoElement>, ComputeStyleMode) const;
|
||||
ErrorOr<void> compute_cascaded_values(StyleProperties&, DOM::Element&, Optional<CSS::Selector::PseudoElement>, bool& did_match_any_pseudo_element_rules, ComputeStyleMode) const;
|
||||
ErrorOr<RefPtr<StyleProperties>> compute_style_impl(DOM::Element&, Optional<CSS::Selector::PseudoElement::Type>, ComputeStyleMode) const;
|
||||
ErrorOr<void> compute_cascaded_values(StyleProperties&, DOM::Element&, Optional<CSS::Selector::PseudoElement::Type>, bool& did_match_any_pseudo_element_rules, ComputeStyleMode) const;
|
||||
static RefPtr<Gfx::FontCascadeList const> find_matching_font_weight_ascending(Vector<MatchingFontCandidate> const& candidates, int target_weight, float font_size_in_pt, bool inclusive);
|
||||
static RefPtr<Gfx::FontCascadeList const> find_matching_font_weight_descending(Vector<MatchingFontCandidate> const& candidates, int target_weight, float font_size_in_pt, bool inclusive);
|
||||
RefPtr<Gfx::FontCascadeList const> font_matching_algorithm(FontFaceKey const& key, float font_size_in_pt) const;
|
||||
void compute_font(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement>) const;
|
||||
void compute_math_depth(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement>) const;
|
||||
void compute_defaulted_values(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement>) const;
|
||||
void absolutize_values(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement>) const;
|
||||
void transform_box_type_if_needed(StyleProperties&, DOM::Element const&, Optional<CSS::Selector::PseudoElement>) const;
|
||||
void compute_font(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
void compute_math_depth(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
void compute_defaulted_values(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
void absolutize_values(StyleProperties&, DOM::Element const*, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
void transform_box_type_if_needed(StyleProperties&, DOM::Element const&, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
|
||||
void compute_defaulted_property_value(StyleProperties&, DOM::Element const*, CSS::PropertyID, Optional<CSS::Selector::PseudoElement>) const;
|
||||
void compute_defaulted_property_value(StyleProperties&, DOM::Element const*, CSS::PropertyID, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
|
||||
void set_all_properties(DOM::Element&, Optional<CSS::Selector::PseudoElement>, StyleProperties&, StyleValue const&, DOM::Document&, CSS::CSSStyleDeclaration const*, StyleProperties::PropertyValues const& properties_for_revert) const;
|
||||
void set_all_properties(DOM::Element&, Optional<CSS::Selector::PseudoElement::Type>, StyleProperties&, StyleValue const&, DOM::Document&, CSS::CSSStyleDeclaration const*, StyleProperties::PropertyValues const& properties_for_revert) const;
|
||||
|
||||
template<typename Callback>
|
||||
void for_each_stylesheet(CascadeOrigin, Callback) const;
|
||||
|
||||
CSSPixelRect viewport_rect() const;
|
||||
[[nodiscard]] Length::FontMetrics calculate_root_element_font_metrics(StyleProperties const&) const;
|
||||
CSSPixels parent_or_root_element_line_height(DOM::Element const*, Optional<CSS::Selector::PseudoElement>) const;
|
||||
CSSPixels parent_or_root_element_line_height(DOM::Element const*, Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
|
||||
struct MatchingRuleSet {
|
||||
Vector<MatchingRule> user_agent_rules;
|
||||
|
@ -149,7 +149,7 @@ private:
|
|||
Vector<MatchingRule> author_rules;
|
||||
};
|
||||
|
||||
void cascade_declarations(StyleProperties&, DOM::Element&, Optional<CSS::Selector::PseudoElement>, Vector<MatchingRule> const&, CascadeOrigin, Important) const;
|
||||
void cascade_declarations(StyleProperties&, DOM::Element&, Optional<CSS::Selector::PseudoElement::Type>, Vector<MatchingRule> const&, CascadeOrigin, Important) const;
|
||||
|
||||
void build_rule_cache();
|
||||
void build_rule_cache_if_needed() const;
|
||||
|
|
|
@ -1124,7 +1124,7 @@ Layout::Viewport* Document::layout_node()
|
|||
return static_cast<Layout::Viewport*>(Node::layout_node());
|
||||
}
|
||||
|
||||
void Document::set_inspected_node(Node* node, Optional<CSS::Selector::PseudoElement> pseudo_element)
|
||||
void Document::set_inspected_node(Node* node, Optional<CSS::Selector::PseudoElement::Type> pseudo_element)
|
||||
{
|
||||
if (m_inspected_node.ptr() == node && m_inspected_pseudo_element == pseudo_element)
|
||||
return;
|
||||
|
|
|
@ -137,7 +137,7 @@ public:
|
|||
Node* hovered_node() { return m_hovered_node.ptr(); }
|
||||
Node const* hovered_node() const { return m_hovered_node.ptr(); }
|
||||
|
||||
void set_inspected_node(Node*, Optional<CSS::Selector::PseudoElement>);
|
||||
void set_inspected_node(Node*, Optional<CSS::Selector::PseudoElement::Type>);
|
||||
Node* inspected_node() { return m_inspected_node.ptr(); }
|
||||
Node const* inspected_node() const { return m_inspected_node.ptr(); }
|
||||
Layout::Node* inspected_layout_node();
|
||||
|
@ -576,7 +576,7 @@ private:
|
|||
JS::GCPtr<CSS::StyleSheetList> m_style_sheets;
|
||||
JS::GCPtr<Node> m_hovered_node;
|
||||
JS::GCPtr<Node> m_inspected_node;
|
||||
Optional<CSS::Selector::PseudoElement> m_inspected_pseudo_element;
|
||||
Optional<CSS::Selector::PseudoElement::Type> m_inspected_pseudo_element;
|
||||
JS::GCPtr<Node> m_active_favicon;
|
||||
WeakPtr<HTML::BrowsingContext> m_browsing_context;
|
||||
AK::URL m_url;
|
||||
|
|
|
@ -960,7 +960,7 @@ void Element::children_changed()
|
|||
set_needs_style_update(true);
|
||||
}
|
||||
|
||||
void Element::set_pseudo_element_node(Badge<Layout::TreeBuilder>, CSS::Selector::PseudoElement pseudo_element, JS::GCPtr<Layout::Node> pseudo_element_node)
|
||||
void Element::set_pseudo_element_node(Badge<Layout::TreeBuilder>, CSS::Selector::PseudoElement::Type pseudo_element, JS::GCPtr<Layout::Node> pseudo_element_node)
|
||||
{
|
||||
if (!m_pseudo_element_nodes) {
|
||||
if (!pseudo_element_node)
|
||||
|
@ -971,7 +971,7 @@ void Element::set_pseudo_element_node(Badge<Layout::TreeBuilder>, CSS::Selector:
|
|||
(*m_pseudo_element_nodes)[to_underlying(pseudo_element)] = pseudo_element_node;
|
||||
}
|
||||
|
||||
JS::GCPtr<Layout::Node> Element::get_pseudo_element_node(CSS::Selector::PseudoElement pseudo_element) const
|
||||
JS::GCPtr<Layout::Node> Element::get_pseudo_element_node(CSS::Selector::PseudoElement::Type pseudo_element) const
|
||||
{
|
||||
if (!m_pseudo_element_nodes)
|
||||
return nullptr;
|
||||
|
@ -992,7 +992,7 @@ void Element::serialize_pseudo_elements_as_json(JsonArraySerializer<StringBuilde
|
|||
if (!pseudo_element_node)
|
||||
continue;
|
||||
auto object = MUST(children_array.add_object());
|
||||
MUST(object.add("name"sv, DeprecatedString::formatted("::{}", CSS::pseudo_element_name(static_cast<CSS::Selector::PseudoElement>(i)))));
|
||||
MUST(object.add("name"sv, MUST(String::formatted("::{}", CSS::Selector::PseudoElement::name(static_cast<CSS::Selector::PseudoElement::Type>(i))))));
|
||||
MUST(object.add("type"sv, "pseudo-element"));
|
||||
MUST(object.add("parent-id"sv, unique_id()));
|
||||
MUST(object.add("pseudo-element"sv, i));
|
||||
|
@ -2057,7 +2057,7 @@ auto Element::pseudo_element_custom_properties() const -> PseudoElementCustomPro
|
|||
return *m_pseudo_element_custom_properties;
|
||||
}
|
||||
|
||||
void Element::set_custom_properties(Optional<CSS::Selector::PseudoElement> pseudo_element, HashMap<FlyString, CSS::StyleProperty> custom_properties)
|
||||
void Element::set_custom_properties(Optional<CSS::Selector::PseudoElement::Type> pseudo_element, HashMap<FlyString, CSS::StyleProperty> custom_properties)
|
||||
{
|
||||
if (!pseudo_element.has_value()) {
|
||||
m_custom_properties = move(custom_properties);
|
||||
|
@ -2066,7 +2066,7 @@ void Element::set_custom_properties(Optional<CSS::Selector::PseudoElement> pseud
|
|||
pseudo_element_custom_properties()[to_underlying(pseudo_element.value())] = move(custom_properties);
|
||||
}
|
||||
|
||||
HashMap<FlyString, CSS::StyleProperty> const& Element::custom_properties(Optional<CSS::Selector::PseudoElement> pseudo_element) const
|
||||
HashMap<FlyString, CSS::StyleProperty> const& Element::custom_properties(Optional<CSS::Selector::PseudoElement::Type> pseudo_element) const
|
||||
{
|
||||
if (!pseudo_element.has_value())
|
||||
return m_custom_properties;
|
||||
|
|
|
@ -173,8 +173,8 @@ public:
|
|||
|
||||
RequiredInvalidationAfterStyleChange recompute_style();
|
||||
|
||||
Optional<CSS::Selector::PseudoElement> use_pseudo_element() const { return m_use_pseudo_element; }
|
||||
void set_use_pseudo_element(Optional<CSS::Selector::PseudoElement> use_pseudo_element) { m_use_pseudo_element = use_pseudo_element; }
|
||||
Optional<CSS::Selector::PseudoElement::Type> use_pseudo_element() const { return m_use_pseudo_element; }
|
||||
void set_use_pseudo_element(Optional<CSS::Selector::PseudoElement::Type> use_pseudo_element) { m_use_pseudo_element = move(use_pseudo_element); }
|
||||
|
||||
Layout::NodeWithStyle* layout_node();
|
||||
Layout::NodeWithStyle const* layout_node() const;
|
||||
|
@ -207,8 +207,8 @@ public:
|
|||
ShadowRoot const* shadow_root_internal() const { return m_shadow_root.ptr(); }
|
||||
void set_shadow_root(JS::GCPtr<ShadowRoot>);
|
||||
|
||||
void set_custom_properties(Optional<CSS::Selector::PseudoElement>, HashMap<FlyString, CSS::StyleProperty> custom_properties);
|
||||
[[nodiscard]] HashMap<FlyString, CSS::StyleProperty> const& custom_properties(Optional<CSS::Selector::PseudoElement>) const;
|
||||
void set_custom_properties(Optional<CSS::Selector::PseudoElement::Type>, HashMap<FlyString, CSS::StyleProperty> custom_properties);
|
||||
[[nodiscard]] HashMap<FlyString, CSS::StyleProperty> const& custom_properties(Optional<CSS::Selector::PseudoElement::Type>) const;
|
||||
|
||||
int queue_an_element_task(HTML::Task::Source, JS::SafeFunction<void()>);
|
||||
|
||||
|
@ -225,8 +225,8 @@ public:
|
|||
|
||||
static JS::GCPtr<Layout::Node> create_layout_node_for_display_type(DOM::Document&, CSS::Display const&, NonnullRefPtr<CSS::StyleProperties>, Element*);
|
||||
|
||||
void set_pseudo_element_node(Badge<Layout::TreeBuilder>, CSS::Selector::PseudoElement, JS::GCPtr<Layout::Node>);
|
||||
JS::GCPtr<Layout::Node> get_pseudo_element_node(CSS::Selector::PseudoElement) const;
|
||||
void set_pseudo_element_node(Badge<Layout::TreeBuilder>, CSS::Selector::PseudoElement::Type, JS::GCPtr<Layout::Node>);
|
||||
JS::GCPtr<Layout::Node> get_pseudo_element_node(CSS::Selector::PseudoElement::Type) const;
|
||||
void clear_pseudo_element_nodes(Badge<Layout::TreeBuilder>);
|
||||
void serialize_pseudo_elements_as_json(JsonArraySerializer<StringBuilder>& children_array) const;
|
||||
|
||||
|
@ -410,18 +410,18 @@ private:
|
|||
RefPtr<CSS::StyleProperties> m_computed_css_values;
|
||||
HashMap<FlyString, CSS::StyleProperty> m_custom_properties;
|
||||
|
||||
using PseudoElementCustomProperties = Array<HashMap<FlyString, CSS::StyleProperty>, to_underlying(CSS::Selector::PseudoElement::PseudoElementCount)>;
|
||||
using PseudoElementCustomProperties = Array<HashMap<FlyString, CSS::StyleProperty>, to_underlying(CSS::Selector::PseudoElement::Type::PseudoElementCount)>;
|
||||
mutable OwnPtr<PseudoElementCustomProperties> m_pseudo_element_custom_properties;
|
||||
PseudoElementCustomProperties& pseudo_element_custom_properties() const;
|
||||
|
||||
Optional<CSS::Selector::PseudoElement> m_use_pseudo_element {};
|
||||
Optional<CSS::Selector::PseudoElement::Type> m_use_pseudo_element;
|
||||
|
||||
Vector<FlyString> m_classes;
|
||||
Optional<Dir> m_dir;
|
||||
|
||||
Optional<FlyString> m_id;
|
||||
|
||||
using PseudoElementLayoutNodes = Array<JS::GCPtr<Layout::Node>, to_underlying(CSS::Selector::PseudoElement::PseudoElementCount)>;
|
||||
using PseudoElementLayoutNodes = Array<JS::GCPtr<Layout::Node>, to_underlying(CSS::Selector::PseudoElement::Type::PseudoElementCount)>;
|
||||
OwnPtr<PseudoElementLayoutNodes> m_pseudo_element_nodes;
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/custom-elements.html#custom-element-reaction-queue
|
||||
|
|
|
@ -1838,8 +1838,8 @@ ErrorOr<String> Node::name_or_description(NameOrDescription target, Document con
|
|||
// i. Set the accumulated text to the empty string.
|
||||
total_accumulated_text.clear();
|
||||
// ii. Check for CSS generated textual content associated with the current node and include it in the accumulated text. The CSS :before and :after pseudo elements [CSS2] can provide textual content for elements that have a content model.
|
||||
auto before = element->get_pseudo_element_node(CSS::Selector::PseudoElement::Before);
|
||||
auto after = element->get_pseudo_element_node(CSS::Selector::PseudoElement::After);
|
||||
auto before = element->get_pseudo_element_node(CSS::Selector::PseudoElement::Type::Before);
|
||||
auto after = element->get_pseudo_element_node(CSS::Selector::PseudoElement::Type::After);
|
||||
// - For :before pseudo elements, User agents MUST prepend CSS textual content, without a space, to the textual content of the current node.
|
||||
if (before)
|
||||
TRY(Node::prepend_without_space(total_accumulated_text, before->computed_values().content().data));
|
||||
|
|
|
@ -542,7 +542,7 @@ void dump_selector(StringBuilder& builder, CSS::Selector const& selector)
|
|||
}
|
||||
|
||||
if (simple_selector.type == CSS::Selector::SimpleSelector::Type::PseudoElement) {
|
||||
builder.appendff(" pseudo_element={}", CSS::pseudo_element_name(simple_selector.pseudo_element()));
|
||||
builder.appendff(" pseudo_element={}", simple_selector.pseudo_element().name());
|
||||
}
|
||||
|
||||
if (simple_selector.type == CSS::Selector::SimpleSelector::Type::Attribute) {
|
||||
|
|
|
@ -571,7 +571,7 @@ void HTMLInputElement::create_text_input_shadow_tree()
|
|||
MUST(shadow_root->append_child(element));
|
||||
|
||||
m_placeholder_element = MUST(DOM::create_element(document(), HTML::TagNames::div, Namespace::HTML));
|
||||
m_placeholder_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Placeholder);
|
||||
m_placeholder_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::Placeholder);
|
||||
MUST(m_placeholder_element->set_attribute(HTML::AttributeNames::style, R"~~~(
|
||||
flex: 1;
|
||||
height: 1lh;
|
||||
|
|
|
@ -191,7 +191,7 @@ void HTMLMeterElement::create_shadow_tree_if_needed()
|
|||
set_shadow_root(shadow_root);
|
||||
|
||||
auto meter_bar_element = MUST(DOM::create_element(document(), HTML::TagNames::div, Namespace::HTML));
|
||||
meter_bar_element->set_use_pseudo_element(CSS::Selector::PseudoElement::MeterBar);
|
||||
meter_bar_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::MeterBar);
|
||||
MUST(shadow_root->append_child(*meter_bar_element));
|
||||
|
||||
m_meter_value_element = MUST(DOM::create_element(document(), HTML::TagNames::div, Namespace::HTML));
|
||||
|
@ -215,23 +215,23 @@ void HTMLMeterElement::update_meter_value_element()
|
|||
// If the optimum point is equal to the low boundary or the high boundary, or anywhere in between them, then the region between the low and high boundaries of the gauge must be treated as the optimum region, and the low and high parts, if any, must be treated as suboptimal.
|
||||
if (optimum >= low && optimum <= high) {
|
||||
if (value >= low && value <= high)
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::MeterOptimumValue);
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::MeterOptimumValue);
|
||||
else
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::MeterSuboptimumValue);
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::MeterSuboptimumValue);
|
||||
}
|
||||
// Otherwise, if the optimum point is less than the low boundary, then the region between the minimum value and the low boundary must be treated as the optimum region, the region from the low boundary up to the high boundary must be treated as a suboptimal region, and the remaining region must be treated as an even less good region.
|
||||
else if (optimum < low) {
|
||||
if (value >= low && value <= high)
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::MeterSuboptimumValue);
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::MeterSuboptimumValue);
|
||||
else
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::MeterEvenLessGoodValue);
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::MeterEvenLessGoodValue);
|
||||
}
|
||||
// Finally, if the optimum point is higher than the high boundary, then the situation is reversed; the region between the high boundary and the maximum value must be treated as the optimum region, the region from the high boundary down to the low boundary must be treated as a suboptimal region, and the remaining region must be treated as an even less good region.
|
||||
else {
|
||||
if (value >= low && value <= high)
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::MeterSuboptimumValue);
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::MeterSuboptimumValue);
|
||||
else
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::MeterEvenLessGoodValue);
|
||||
m_meter_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::MeterEvenLessGoodValue);
|
||||
}
|
||||
|
||||
double position = (value - min) / (max - min) * 100;
|
||||
|
|
|
@ -105,11 +105,11 @@ void HTMLProgressElement::create_shadow_tree_if_needed()
|
|||
set_shadow_root(shadow_root);
|
||||
|
||||
auto progress_bar_element = MUST(DOM::create_element(document(), HTML::TagNames::div, Namespace::HTML));
|
||||
progress_bar_element->set_use_pseudo_element(CSS::Selector::PseudoElement::ProgressBar);
|
||||
progress_bar_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::ProgressBar);
|
||||
MUST(shadow_root->append_child(*progress_bar_element));
|
||||
|
||||
m_progress_value_element = MUST(DOM::create_element(document(), HTML::TagNames::div, Namespace::HTML));
|
||||
m_progress_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::ProgressValue);
|
||||
m_progress_value_element->set_use_pseudo_element(CSS::Selector::PseudoElement::Type::ProgressValue);
|
||||
MUST(progress_bar_element->append_child(*m_progress_value_element));
|
||||
update_progress_value_element();
|
||||
}
|
||||
|
|
|
@ -41,8 +41,8 @@ void Inspector::inspect_dom_node(i32 node_id, Optional<i32> const& pseudo_elemen
|
|||
{
|
||||
auto& page = global_object().browsing_context()->page();
|
||||
page.client().inspector_did_select_dom_node(node_id, pseudo_element.map([](auto value) {
|
||||
VERIFY(value < to_underlying(Web::CSS::Selector::PseudoElement::PseudoElementCount));
|
||||
return static_cast<Web::CSS::Selector::PseudoElement>(value);
|
||||
VERIFY(value < to_underlying(Web::CSS::Selector::PseudoElement::Type::PseudoElementCount));
|
||||
return static_cast<Web::CSS::Selector::PseudoElement::Type>(value);
|
||||
}));
|
||||
}
|
||||
|
||||
|
|
|
@ -182,7 +182,7 @@ void TreeBuilder::insert_node_into_inline_or_block_ancestor(Layout::Node& node,
|
|||
}
|
||||
}
|
||||
|
||||
ErrorOr<void> TreeBuilder::create_pseudo_element_if_needed(DOM::Element& element, CSS::Selector::PseudoElement pseudo_element, AppendOrPrepend mode)
|
||||
ErrorOr<void> TreeBuilder::create_pseudo_element_if_needed(DOM::Element& element, CSS::Selector::PseudoElement::Type pseudo_element, AppendOrPrepend mode)
|
||||
{
|
||||
auto& document = element.document();
|
||||
auto& style_computer = document.style_computer();
|
||||
|
@ -207,9 +207,9 @@ ErrorOr<void> TreeBuilder::create_pseudo_element_if_needed(DOM::Element& element
|
|||
return {};
|
||||
|
||||
auto generated_for = Node::GeneratedFor::NotGenerated;
|
||||
if (pseudo_element == CSS::Selector::PseudoElement::Before) {
|
||||
if (pseudo_element == CSS::Selector::PseudoElement::Type::Before) {
|
||||
generated_for = Node::GeneratedFor::PseudoBefore;
|
||||
} else if (pseudo_element == CSS::Selector::PseudoElement::After) {
|
||||
} else if (pseudo_element == CSS::Selector::PseudoElement::Type::After) {
|
||||
generated_for = Node::GeneratedFor::PseudoAfter;
|
||||
} else {
|
||||
VERIFY_NOT_REACHED();
|
||||
|
@ -368,7 +368,7 @@ ErrorOr<void> TreeBuilder::create_layout_tree(DOM::Node& dom_node, TreeBuilder::
|
|||
if (is<DOM::Element>(dom_node) && layout_node->can_have_children()) {
|
||||
auto& element = static_cast<DOM::Element&>(dom_node);
|
||||
push_parent(verify_cast<NodeWithStyle>(*layout_node));
|
||||
TRY(create_pseudo_element_if_needed(element, CSS::Selector::PseudoElement::Before, AppendOrPrepend::Prepend));
|
||||
TRY(create_pseudo_element_if_needed(element, CSS::Selector::PseudoElement::Type::Before, AppendOrPrepend::Prepend));
|
||||
pop_parent();
|
||||
}
|
||||
|
||||
|
@ -388,10 +388,10 @@ ErrorOr<void> TreeBuilder::create_layout_tree(DOM::Node& dom_node, TreeBuilder::
|
|||
|
||||
if (is<ListItemBox>(*layout_node)) {
|
||||
auto& element = static_cast<DOM::Element&>(dom_node);
|
||||
auto marker_style = TRY(style_computer.compute_style(element, CSS::Selector::PseudoElement::Marker));
|
||||
auto marker_style = TRY(style_computer.compute_style(element, CSS::Selector::PseudoElement::Type::Marker));
|
||||
auto list_item_marker = document.heap().allocate_without_realm<ListItemMarkerBox>(document, layout_node->computed_values().list_style_type(), layout_node->computed_values().list_style_position(), calculate_list_item_index(dom_node), *marker_style);
|
||||
static_cast<ListItemBox&>(*layout_node).set_marker(list_item_marker);
|
||||
element.set_pseudo_element_node({}, CSS::Selector::PseudoElement::Marker, list_item_marker);
|
||||
element.set_pseudo_element_node({}, CSS::Selector::PseudoElement::Type::Marker, list_item_marker);
|
||||
layout_node->append_child(*list_item_marker);
|
||||
}
|
||||
|
||||
|
@ -460,7 +460,7 @@ ErrorOr<void> TreeBuilder::create_layout_tree(DOM::Node& dom_node, TreeBuilder::
|
|||
if (is<DOM::Element>(dom_node) && layout_node->can_have_children()) {
|
||||
auto& element = static_cast<DOM::Element&>(dom_node);
|
||||
push_parent(verify_cast<NodeWithStyle>(*layout_node));
|
||||
TRY(create_pseudo_element_if_needed(element, CSS::Selector::PseudoElement::After, AppendOrPrepend::Append));
|
||||
TRY(create_pseudo_element_if_needed(element, CSS::Selector::PseudoElement::Type::After, AppendOrPrepend::Append));
|
||||
pop_parent();
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ private:
|
|||
Prepend,
|
||||
};
|
||||
void insert_node_into_inline_or_block_ancestor(Layout::Node&, CSS::Display, AppendOrPrepend);
|
||||
ErrorOr<void> create_pseudo_element_if_needed(DOM::Element&, CSS::Selector::PseudoElement, AppendOrPrepend);
|
||||
ErrorOr<void> create_pseudo_element_if_needed(DOM::Element&, CSS::Selector::PseudoElement::Type, AppendOrPrepend);
|
||||
|
||||
JS::GCPtr<Layout::Node> m_layout_root;
|
||||
Vector<JS::NonnullGCPtr<Layout::NodeWithStyle>> m_ancestor_stack;
|
||||
|
|
|
@ -286,7 +286,7 @@ public:
|
|||
virtual void page_did_insert_clipboard_entry([[maybe_unused]] String data, [[maybe_unused]] String presentation_style, [[maybe_unused]] String mime_type) { }
|
||||
|
||||
virtual void inspector_did_load() { }
|
||||
virtual void inspector_did_select_dom_node([[maybe_unused]] i32 node_id, [[maybe_unused]] Optional<CSS::Selector::PseudoElement> const& pseudo_element) { }
|
||||
virtual void inspector_did_select_dom_node([[maybe_unused]] i32 node_id, [[maybe_unused]] Optional<CSS::Selector::PseudoElement::Type> const& pseudo_element) { }
|
||||
virtual void inspector_did_set_dom_node_text([[maybe_unused]] i32 node_id, [[maybe_unused]] String const& text) { }
|
||||
virtual void inspector_did_set_dom_node_tag([[maybe_unused]] i32 node_id, [[maybe_unused]] String const& tag) { }
|
||||
virtual void inspector_did_add_dom_node_attributes([[maybe_unused]] i32 node_id, [[maybe_unused]] JS::NonnullGCPtr<DOM::NamedNodeMap> attributes) { }
|
||||
|
|
|
@ -156,7 +156,7 @@ void ViewImplementation::inspect_accessibility_tree()
|
|||
client().async_inspect_accessibility_tree();
|
||||
}
|
||||
|
||||
ErrorOr<ViewImplementation::DOMNodeProperties> ViewImplementation::inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> pseudo_element)
|
||||
ErrorOr<ViewImplementation::DOMNodeProperties> ViewImplementation::inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element)
|
||||
{
|
||||
auto response = client().inspect_dom_node(node_id, pseudo_element);
|
||||
if (!response.has_style())
|
||||
|
|
|
@ -61,7 +61,7 @@ public:
|
|||
|
||||
void inspect_dom_tree();
|
||||
void inspect_accessibility_tree();
|
||||
ErrorOr<DOMNodeProperties> inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> pseudo_element);
|
||||
ErrorOr<DOMNodeProperties> inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element);
|
||||
void clear_inspected_dom_node();
|
||||
i32 get_hovered_node_id();
|
||||
|
||||
|
@ -163,7 +163,7 @@ public:
|
|||
Function<void(Gfx::Color)> on_theme_color_change;
|
||||
Function<void(String const&, String const&, String const&)> on_insert_clipboard_entry;
|
||||
Function<void()> on_inspector_loaded;
|
||||
Function<void(i32, Optional<Web::CSS::Selector::PseudoElement> const&)> on_inspector_selected_dom_node;
|
||||
Function<void(i32, Optional<Web::CSS::Selector::PseudoElement::Type> const&)> on_inspector_selected_dom_node;
|
||||
Function<void(i32, String const&)> on_inspector_set_dom_node_text;
|
||||
Function<void(i32, String const&)> on_inspector_set_dom_node_tag;
|
||||
Function<void(i32, Vector<Attribute> const&)> on_inspector_added_dom_node_attributes;
|
||||
|
|
|
@ -414,7 +414,7 @@ void WebContentClient::inspector_did_load()
|
|||
m_view.on_inspector_loaded();
|
||||
}
|
||||
|
||||
void WebContentClient::inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element)
|
||||
void WebContentClient::inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> const& pseudo_element)
|
||||
{
|
||||
if (m_view.on_inspector_selected_dom_node)
|
||||
m_view.on_inspector_selected_dom_node(node_id, pseudo_element);
|
||||
|
|
|
@ -89,7 +89,7 @@ private:
|
|||
virtual void did_change_theme_color(Gfx::Color color) override;
|
||||
virtual void did_insert_clipboard_entry(String const& data, String const& presentation_style, String const& mime_type) override;
|
||||
virtual void inspector_did_load() override;
|
||||
virtual void inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element) override;
|
||||
virtual void inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> const& pseudo_element) override;
|
||||
virtual void inspector_did_set_dom_node_text(i32 node_id, String const& text) override;
|
||||
virtual void inspector_did_set_dom_node_tag(i32 node_id, String const& tag) override;
|
||||
virtual void inspector_did_add_dom_node_attributes(i32 node_id, Vector<Attribute> const& attributes) override;
|
||||
|
|
|
@ -516,7 +516,7 @@ void ConnectionFromClient::inspect_dom_tree()
|
|||
}
|
||||
}
|
||||
|
||||
Messages::WebContentServer::InspectDomNodeResponse ConnectionFromClient::inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element)
|
||||
Messages::WebContentServer::InspectDomNodeResponse ConnectionFromClient::inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> const& pseudo_element)
|
||||
{
|
||||
auto& top_context = page().page().top_level_browsing_context();
|
||||
|
||||
|
@ -552,7 +552,7 @@ Messages::WebContentServer::InspectDomNodeResponse ConnectionFromClient::inspect
|
|||
return builder.to_deprecated_string();
|
||||
};
|
||||
|
||||
auto serialize_custom_properties_json = [](Web::DOM::Element const& element, Optional<Web::CSS::Selector::PseudoElement> pseudo_element) -> DeprecatedString {
|
||||
auto serialize_custom_properties_json = [](Web::DOM::Element const& element, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element) -> DeprecatedString {
|
||||
StringBuilder builder;
|
||||
auto serializer = MUST(JsonObjectSerializer<>::try_create(builder));
|
||||
HashTable<FlyString> seen_properties;
|
||||
|
|
|
@ -72,7 +72,7 @@ private:
|
|||
virtual void debug_request(DeprecatedString const&, DeprecatedString const&) override;
|
||||
virtual void get_source() override;
|
||||
virtual void inspect_dom_tree() override;
|
||||
virtual Messages::WebContentServer::InspectDomNodeResponse inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element) override;
|
||||
virtual Messages::WebContentServer::InspectDomNodeResponse inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> const& pseudo_element) override;
|
||||
virtual void inspect_accessibility_tree() override;
|
||||
virtual Messages::WebContentServer::GetHoveredNodeIdResponse get_hovered_node_id() override;
|
||||
|
||||
|
|
|
@ -529,7 +529,7 @@ void PageClient::inspector_did_load()
|
|||
client().async_inspector_did_load();
|
||||
}
|
||||
|
||||
void PageClient::inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element)
|
||||
void PageClient::inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> const& pseudo_element)
|
||||
{
|
||||
client().async_inspector_did_select_dom_node(node_id, pseudo_element);
|
||||
}
|
||||
|
|
|
@ -124,7 +124,7 @@ private:
|
|||
virtual void page_did_change_theme_color(Gfx::Color color) override;
|
||||
virtual void page_did_insert_clipboard_entry(String data, String presentation_style, String mime_type) override;
|
||||
virtual void inspector_did_load() override;
|
||||
virtual void inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element) override;
|
||||
virtual void inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> const& pseudo_element) override;
|
||||
virtual void inspector_did_set_dom_node_text(i32 node_id, String const& text) override;
|
||||
virtual void inspector_did_set_dom_node_tag(i32 node_id, String const& tag) override;
|
||||
virtual void inspector_did_add_dom_node_attributes(i32 node_id, JS::NonnullGCPtr<Web::DOM::NamedNodeMap> attributes) override;
|
||||
|
|
|
@ -74,7 +74,7 @@ endpoint WebContentClient
|
|||
did_finish_text_test() =|
|
||||
|
||||
inspector_did_load() =|
|
||||
inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> pseudo_element) =|
|
||||
inspector_did_select_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element) =|
|
||||
inspector_did_set_dom_node_text(i32 node_id, String text) =|
|
||||
inspector_did_set_dom_node_tag(i32 node_id, String tag) =|
|
||||
inspector_did_add_dom_node_attributes(i32 node_id, Vector<WebView::Attribute> attributes) =|
|
||||
|
|
|
@ -40,7 +40,7 @@ endpoint WebContentServer
|
|||
debug_request(DeprecatedString request, DeprecatedString argument) =|
|
||||
get_source() =|
|
||||
inspect_dom_tree() =|
|
||||
inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> pseudo_element) => (bool has_style, DeprecatedString computed_style, DeprecatedString resolved_style, DeprecatedString custom_properties, DeprecatedString node_box_sizing, DeprecatedString aria_properties_state)
|
||||
inspect_dom_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element) => (bool has_style, DeprecatedString computed_style, DeprecatedString resolved_style, DeprecatedString custom_properties, DeprecatedString node_box_sizing, DeprecatedString aria_properties_state)
|
||||
inspect_accessibility_tree() =|
|
||||
get_hovered_node_id() => (i32 node_id)
|
||||
js_console_input(DeprecatedString js_source) =|
|
||||
|
|
Loading…
Reference in a new issue