mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 01:17:34 +00:00
LibWeb: Convert DOM::Element::m_classes to the new AK::FlyString
This makes selector matching significantly faster by not forcing us to convert from FlyString to DeprecatedFlyString when matching class selectors. :^)
This commit is contained in:
parent
629b6462dc
commit
2042993997
4 changed files with 11 additions and 11 deletions
|
@ -354,7 +354,7 @@ static inline bool matches(CSS::Selector::SimpleSelector const& component, DOM::
|
||||||
case CSS::Selector::SimpleSelector::Type::Id:
|
case CSS::Selector::SimpleSelector::Type::Id:
|
||||||
return component.name() == element.attribute(HTML::AttributeNames::id).view();
|
return component.name() == element.attribute(HTML::AttributeNames::id).view();
|
||||||
case CSS::Selector::SimpleSelector::Type::Class:
|
case CSS::Selector::SimpleSelector::Type::Class:
|
||||||
return element.has_class(component.name().bytes_as_string_view());
|
return element.has_class(component.name());
|
||||||
case CSS::Selector::SimpleSelector::Type::TagName:
|
case CSS::Selector::SimpleSelector::Type::TagName:
|
||||||
// See https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors
|
// See https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors
|
||||||
if (element.document().document_type() == DOM::Document::Type::HTML)
|
if (element.document().document_type() == DOM::Document::Type::HTML)
|
||||||
|
|
|
@ -1030,9 +1030,9 @@ JS::NonnullGCPtr<HTMLCollection> Document::get_elements_by_name(DeprecatedString
|
||||||
|
|
||||||
JS::NonnullGCPtr<HTMLCollection> Document::get_elements_by_class_name(DeprecatedFlyString const& class_names)
|
JS::NonnullGCPtr<HTMLCollection> Document::get_elements_by_class_name(DeprecatedFlyString const& class_names)
|
||||||
{
|
{
|
||||||
Vector<DeprecatedFlyString> list_of_class_names;
|
Vector<FlyString> list_of_class_names;
|
||||||
for (auto& name : class_names.view().split_view(' ')) {
|
for (auto& name : class_names.view().split_view(' ')) {
|
||||||
list_of_class_names.append(name);
|
list_of_class_names.append(FlyString::from_utf8(name).release_value_but_fixme_should_propagate_errors());
|
||||||
}
|
}
|
||||||
return HTMLCollection::create(*this, [list_of_class_names = move(list_of_class_names), quirks_mode = document().in_quirks_mode()](Element const& element) {
|
return HTMLCollection::create(*this, [list_of_class_names = move(list_of_class_names), quirks_mode = document().in_quirks_mode()](Element const& element) {
|
||||||
for (auto& name : list_of_class_names) {
|
for (auto& name : list_of_class_names) {
|
||||||
|
|
|
@ -271,7 +271,7 @@ Vector<DeprecatedString> Element::get_attribute_names() const
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Element::has_class(DeprecatedFlyString const& class_name, CaseSensitivity case_sensitivity) const
|
bool Element::has_class(FlyString const& class_name, CaseSensitivity case_sensitivity) const
|
||||||
{
|
{
|
||||||
if (case_sensitivity == CaseSensitivity::CaseSensitive) {
|
if (case_sensitivity == CaseSensitivity::CaseSensitive) {
|
||||||
return any_of(m_classes, [&](auto& it) {
|
return any_of(m_classes, [&](auto& it) {
|
||||||
|
@ -279,7 +279,7 @@ bool Element::has_class(DeprecatedFlyString const& class_name, CaseSensitivity c
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
return any_of(m_classes, [&](auto& it) {
|
return any_of(m_classes, [&](auto& it) {
|
||||||
return it.equals_ignoring_case(class_name);
|
return it.equals_ignoring_ascii_case(class_name);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,7 +347,7 @@ void Element::parse_attribute(DeprecatedFlyString const& name, DeprecatedString
|
||||||
m_classes.clear();
|
m_classes.clear();
|
||||||
m_classes.ensure_capacity(new_classes.size());
|
m_classes.ensure_capacity(new_classes.size());
|
||||||
for (auto& new_class : new_classes) {
|
for (auto& new_class : new_classes) {
|
||||||
m_classes.unchecked_append(new_class);
|
m_classes.unchecked_append(FlyString::from_utf8(new_class).release_value_but_fixme_should_propagate_errors());
|
||||||
}
|
}
|
||||||
if (m_class_list)
|
if (m_class_list)
|
||||||
m_class_list->associated_attribute_changed(value);
|
m_class_list->associated_attribute_changed(value);
|
||||||
|
@ -580,9 +580,9 @@ bool Element::is_active() const
|
||||||
|
|
||||||
JS::NonnullGCPtr<HTMLCollection> Element::get_elements_by_class_name(DeprecatedFlyString const& class_names)
|
JS::NonnullGCPtr<HTMLCollection> Element::get_elements_by_class_name(DeprecatedFlyString const& class_names)
|
||||||
{
|
{
|
||||||
Vector<DeprecatedFlyString> list_of_class_names;
|
Vector<FlyString> list_of_class_names;
|
||||||
for (auto& name : class_names.view().split_view_if(Infra::is_ascii_whitespace)) {
|
for (auto& name : class_names.view().split_view_if(Infra::is_ascii_whitespace)) {
|
||||||
list_of_class_names.append(name);
|
list_of_class_names.append(FlyString::from_utf8(name).release_value_but_fixme_should_propagate_errors());
|
||||||
}
|
}
|
||||||
return HTMLCollection::create(*this, [list_of_class_names = move(list_of_class_names), quirks_mode = document().in_quirks_mode()](Element const& element) {
|
return HTMLCollection::create(*this, [list_of_class_names = move(list_of_class_names), quirks_mode = document().in_quirks_mode()](Element const& element) {
|
||||||
for (auto& name : list_of_class_names) {
|
for (auto& name : list_of_class_names) {
|
||||||
|
|
|
@ -101,8 +101,8 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool has_class(DeprecatedFlyString const&, CaseSensitivity = CaseSensitivity::CaseSensitive) const;
|
bool has_class(FlyString const&, CaseSensitivity = CaseSensitivity::CaseSensitive) const;
|
||||||
Vector<DeprecatedFlyString> const& class_names() const { return m_classes; }
|
Vector<FlyString> const& class_names() const { return m_classes; }
|
||||||
|
|
||||||
virtual void apply_presentational_hints(CSS::StyleProperties&) const { }
|
virtual void apply_presentational_hints(CSS::StyleProperties&) const { }
|
||||||
virtual void parse_attribute(DeprecatedFlyString const& name, DeprecatedString const& value);
|
virtual void parse_attribute(DeprecatedFlyString const& name, DeprecatedString const& value);
|
||||||
|
@ -284,7 +284,7 @@ private:
|
||||||
RefPtr<CSS::StyleProperties> m_computed_css_values;
|
RefPtr<CSS::StyleProperties> m_computed_css_values;
|
||||||
HashMap<DeprecatedFlyString, CSS::StyleProperty> m_custom_properties;
|
HashMap<DeprecatedFlyString, CSS::StyleProperty> m_custom_properties;
|
||||||
|
|
||||||
Vector<DeprecatedFlyString> m_classes;
|
Vector<FlyString> m_classes;
|
||||||
|
|
||||||
Array<JS::GCPtr<Layout::Node>, to_underlying(CSS::Selector::PseudoElement::PseudoElementCount)> m_pseudo_element_nodes;
|
Array<JS::GCPtr<Layout::Node>, to_underlying(CSS::Selector::PseudoElement::PseudoElementCount)> m_pseudo_element_nodes;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue