mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-29 12:19:54 +00:00
LibWeb: Use Element::lang() in matches_lang_pseudo_class
The previous implementation went up the DOM tree until it found lang attribute. The new version uses lang() function from the spec.
This commit is contained in:
parent
95c511a3f6
commit
a6794627b0
Notes:
github-actions[bot]
2024-10-28 21:56:05 +00:00
Author: https://github.com/Grubre
Commit: a6794627b0
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1974
Reviewed-by: https://github.com/trflynn89
1 changed files with 6 additions and 11 deletions
|
@ -57,26 +57,21 @@ static inline JS::GCPtr<DOM::Node const> traverse_up(JS::GCPtr<DOM::Node const>
|
||||||
// https://drafts.csswg.org/selectors-4/#the-lang-pseudo
|
// https://drafts.csswg.org/selectors-4/#the-lang-pseudo
|
||||||
static inline bool matches_lang_pseudo_class(DOM::Element const& element, Vector<FlyString> const& languages)
|
static inline bool matches_lang_pseudo_class(DOM::Element const& element, Vector<FlyString> const& languages)
|
||||||
{
|
{
|
||||||
FlyString element_language;
|
auto maybe_element_language = element.lang();
|
||||||
for (auto const* e = &element; e; e = e->parent_element()) {
|
if (!maybe_element_language.has_value())
|
||||||
auto lang = e->attribute(HTML::AttributeNames::lang);
|
|
||||||
if (lang.has_value()) {
|
|
||||||
element_language = lang.release_value();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (element_language.is_empty())
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
auto element_language = maybe_element_language.release_value();
|
||||||
|
|
||||||
// FIXME: This is ad-hoc. Implement a proper language range matching algorithm as recommended by BCP47.
|
// FIXME: This is ad-hoc. Implement a proper language range matching algorithm as recommended by BCP47.
|
||||||
for (auto const& language : languages) {
|
for (auto const& language : languages) {
|
||||||
if (language.is_empty())
|
if (language.is_empty())
|
||||||
continue;
|
continue;
|
||||||
if (language == "*"sv)
|
if (language == "*"sv)
|
||||||
return true;
|
return true;
|
||||||
if (!element_language.to_string().contains('-') && Infra::is_ascii_case_insensitive_match(element_language, language))
|
if (!element_language.contains('-') && Infra::is_ascii_case_insensitive_match(element_language, language))
|
||||||
return true;
|
return true;
|
||||||
auto parts = element_language.to_string().split_limit('-', 2).release_value_but_fixme_should_propagate_errors();
|
auto parts = element_language.split_limit('-', 2).release_value_but_fixme_should_propagate_errors();
|
||||||
if (Infra::is_ascii_case_insensitive_match(parts[0], language))
|
if (Infra::is_ascii_case_insensitive_match(parts[0], language))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue