mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-03 14:50:02 +00:00
LibWeb+LibWebView+WebContent: Support case-insensitive find-in-page
This allows searching for text with case-insensitivity. As this is probably what most users expect, the default behavior is changes to perform case-insensitive lookups. Chromes may add UI to change the behavior as they see fit.
This commit is contained in:
parent
fe3fde2411
commit
b01e810a89
Notes:
sideshowbarker
2024-07-17 06:45:52 +09:00
Author: https://github.com/trflynn89
Commit: b01e810a89
Pull-request: https://github.com/SerenityOS/serenity/pull/24501
10 changed files with 16 additions and 14 deletions
|
@ -70,7 +70,7 @@ static bool is_primitive_type(ByteString const& type)
|
||||||
static bool is_simple_type(ByteString const& type)
|
static bool is_simple_type(ByteString const& type)
|
||||||
{
|
{
|
||||||
// Small types that it makes sense just to pass by value.
|
// Small types that it makes sense just to pass by value.
|
||||||
return type.is_one_of("Gfx::Color", "Web::DevicePixels", "Gfx::IntPoint", "Gfx::FloatPoint", "Web::DevicePixelPoint", "Gfx::IntSize", "Gfx::FloatSize", "Web::DevicePixelSize", "Core::File::OpenMode", "Web::Cookie::Source", "Web::HTML::AllowMultipleFiles", "Web::HTML::AudioPlayState", "Web::HTML::HistoryHandlingBehavior");
|
return type.is_one_of("AK::CaseSensitivity", "Gfx::Color", "Web::DevicePixels", "Gfx::IntPoint", "Gfx::FloatPoint", "Web::DevicePixelPoint", "Gfx::IntSize", "Gfx::FloatSize", "Web::DevicePixelSize", "Core::File::OpenMode", "Web::Cookie::Source", "Web::HTML::AllowMultipleFiles", "Web::HTML::AudioPlayState", "Web::HTML::HistoryHandlingBehavior");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_primitive_or_simple_type(ByteString const& type)
|
static bool is_primitive_or_simple_type(ByteString const& type)
|
||||||
|
|
|
@ -5068,7 +5068,7 @@ void Document::set_needs_to_refresh_scroll_state(bool b)
|
||||||
paintable->set_needs_to_refresh_scroll_state(b);
|
paintable->set_needs_to_refresh_scroll_state(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector<JS::Handle<DOM::Range>> Document::find_matching_text(String const& query)
|
Vector<JS::Handle<DOM::Range>> Document::find_matching_text(String const& query, CaseSensitivity case_sensitivity)
|
||||||
{
|
{
|
||||||
if (!document_element() || !document_element()->layout_node())
|
if (!document_element() || !document_element()->layout_node())
|
||||||
return {};
|
return {};
|
||||||
|
@ -5078,7 +5078,9 @@ Vector<JS::Handle<DOM::Range>> Document::find_matching_text(String const& query)
|
||||||
auto const& text = text_node.text_for_rendering();
|
auto const& text = text_node.text_for_rendering();
|
||||||
size_t offset = 0;
|
size_t offset = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
auto match_index = text.find_byte_offset(query, offset);
|
auto match_index = case_sensitivity == CaseSensitivity::CaseInsensitive
|
||||||
|
? text.find_byte_offset_ignoring_case(query, offset)
|
||||||
|
: text.find_byte_offset(query, offset);
|
||||||
if (!match_index.has_value())
|
if (!match_index.has_value())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -667,7 +667,7 @@ public:
|
||||||
// Does document represent an embedded svg img
|
// Does document represent an embedded svg img
|
||||||
[[nodiscard]] bool is_decoded_svg() const;
|
[[nodiscard]] bool is_decoded_svg() const;
|
||||||
|
|
||||||
Vector<JS::Handle<DOM::Range>> find_matching_text(String const&);
|
Vector<JS::Handle<DOM::Range>> find_matching_text(String const&, CaseSensitivity);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void initialize(JS::Realm&) override;
|
virtual void initialize(JS::Realm&) override;
|
||||||
|
|
|
@ -539,7 +539,7 @@ void Page::clear_selection()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Page::find_in_page(String const& query)
|
void Page::find_in_page(String const& query, CaseSensitivity case_sensitivity)
|
||||||
{
|
{
|
||||||
m_find_in_page_match_index = 0;
|
m_find_in_page_match_index = 0;
|
||||||
|
|
||||||
|
@ -555,7 +555,7 @@ void Page::find_in_page(String const& query)
|
||||||
if (&document->page() != this)
|
if (&document->page() != this)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto matches = document->find_matching_text(query);
|
auto matches = document->find_matching_text(query, case_sensitivity);
|
||||||
all_matches.extend(move(matches));
|
all_matches.extend(move(matches));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,7 @@ public:
|
||||||
|
|
||||||
void clear_selection();
|
void clear_selection();
|
||||||
|
|
||||||
void find_in_page(String const& query);
|
void find_in_page(String const& query, CaseSensitivity);
|
||||||
void find_in_page_next_match();
|
void find_in_page_next_match();
|
||||||
void find_in_page_previous_match();
|
void find_in_page_previous_match();
|
||||||
|
|
||||||
|
|
|
@ -180,9 +180,9 @@ void ViewImplementation::paste(String const& text)
|
||||||
client().async_paste(page_id(), text);
|
client().async_paste(page_id(), text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewImplementation::find_in_page(String const& query)
|
void ViewImplementation::find_in_page(String const& query, CaseSensitivity case_sensitivity)
|
||||||
{
|
{
|
||||||
client().async_find_in_page(page_id(), query);
|
client().async_find_in_page(page_id(), query, case_sensitivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewImplementation::find_in_page_next_match()
|
void ViewImplementation::find_in_page_next_match()
|
||||||
|
|
|
@ -66,7 +66,7 @@ public:
|
||||||
ByteString selected_text();
|
ByteString selected_text();
|
||||||
Optional<String> selected_text_with_whitespace_collapsed();
|
Optional<String> selected_text_with_whitespace_collapsed();
|
||||||
void select_all();
|
void select_all();
|
||||||
void find_in_page(String const& query);
|
void find_in_page(String const& query, CaseSensitivity = CaseSensitivity::CaseInsensitive);
|
||||||
void find_in_page_next_match();
|
void find_in_page_next_match();
|
||||||
void find_in_page_previous_match();
|
void find_in_page_previous_match();
|
||||||
void paste(String const&);
|
void paste(String const&);
|
||||||
|
|
|
@ -827,13 +827,13 @@ void ConnectionFromClient::select_all(u64 page_id)
|
||||||
page->page().focused_navigable().select_all();
|
page->page().focused_navigable().select_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionFromClient::find_in_page(u64 page_id, String const& query)
|
void ConnectionFromClient::find_in_page(u64 page_id, String const& query, CaseSensitivity case_sensitivity)
|
||||||
{
|
{
|
||||||
auto page = this->page(page_id);
|
auto page = this->page(page_id);
|
||||||
if (!page.has_value())
|
if (!page.has_value())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
page->page().find_in_page(query);
|
page->page().find_in_page(query, case_sensitivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConnectionFromClient::find_in_page_next_match(u64 page_id)
|
void ConnectionFromClient::find_in_page_next_match(u64 page_id)
|
||||||
|
|
|
@ -130,7 +130,7 @@ private:
|
||||||
virtual Messages::WebContentServer::GetSelectedTextResponse get_selected_text(u64 page_id) override;
|
virtual Messages::WebContentServer::GetSelectedTextResponse get_selected_text(u64 page_id) override;
|
||||||
virtual void select_all(u64 page_id) override;
|
virtual void select_all(u64 page_id) override;
|
||||||
|
|
||||||
virtual void find_in_page(u64 page_id, String const& query) override;
|
virtual void find_in_page(u64 page_id, String const& query, CaseSensitivity) override;
|
||||||
virtual void find_in_page_next_match(u64 page_id) override;
|
virtual void find_in_page_next_match(u64 page_id) override;
|
||||||
virtual void find_in_page_previous_match(u64 page_id) override;
|
virtual void find_in_page_previous_match(u64 page_id) override;
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ endpoint WebContentServer
|
||||||
select_all(u64 page_id) =|
|
select_all(u64 page_id) =|
|
||||||
paste(u64 page_id, String text) =|
|
paste(u64 page_id, String text) =|
|
||||||
|
|
||||||
find_in_page(u64 page_id, String query) =|
|
find_in_page(u64 page_id, String query, AK::CaseSensitivity case_sensitivity) =|
|
||||||
find_in_page_next_match(u64 page_id) =|
|
find_in_page_next_match(u64 page_id) =|
|
||||||
find_in_page_previous_match(u64 page_id) =|
|
find_in_page_previous_match(u64 page_id) =|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue