瀏覽代碼

LibWebView: Add an API to format a search query for UI display

This will create a string of the form:

    Search DuckDuckGo for "Ladybird is awesome!"

If the provided query URL is unknown, the engine name is excluded (e.g.
for custom search URLs).
Timothy Flynn 1 年之前
父節點
當前提交
e221b3afeb
共有 2 個文件被更改,包括 34 次插入0 次删除
  1. 32 0
      Userland/Libraries/LibWebView/SearchEngine.cpp
  2. 2 0
      Userland/Libraries/LibWebView/SearchEngine.h

+ 32 - 0
Userland/Libraries/LibWebView/SearchEngine.cpp

@@ -5,6 +5,7 @@
  */
 
 #include <AK/Find.h>
+#include <AK/String.h>
 #include <LibWebView/SearchEngine.h>
 
 namespace WebView {
@@ -46,4 +47,35 @@ Optional<SearchEngine const&> find_search_engine_by_name(StringView name)
     return *it;
 }
 
+Optional<SearchEngine const&> find_search_engine_by_query_url(StringView query_url)
+{
+    auto it = AK::find_if(builtin_search_engines.begin(), builtin_search_engines.end(),
+        [&](auto const& engine) {
+            return engine.query_url == query_url;
+        });
+
+    if (it == builtin_search_engines.end())
+        return {};
+
+    return *it;
+}
+
+String format_search_query_for_display(StringView query_url, StringView query)
+{
+    static constexpr auto MAX_SEARCH_STRING_LENGTH = 32;
+
+    if (auto search_engine = find_search_engine_by_query_url(query_url); search_engine.has_value()) {
+        return MUST(String::formatted("Search {} for \"{:.{}}{}\"",
+            search_engine->name,
+            query,
+            MAX_SEARCH_STRING_LENGTH,
+            query.length() > MAX_SEARCH_STRING_LENGTH ? "..."sv : ""sv));
+    }
+
+    return MUST(String::formatted("Search for \"{:.{}}{}\"",
+        query,
+        MAX_SEARCH_STRING_LENGTH,
+        query.length() > MAX_SEARCH_STRING_LENGTH ? "..."sv : ""sv));
+}
+
 }

+ 2 - 0
Userland/Libraries/LibWebView/SearchEngine.h

@@ -19,5 +19,7 @@ struct SearchEngine {
 ReadonlySpan<SearchEngine> search_engines();
 SearchEngine const& default_search_engine();
 Optional<SearchEngine const&> find_search_engine_by_name(StringView name);
+Optional<SearchEngine const&> find_search_engine_by_query_url(StringView query_url);
+String format_search_query_for_display(StringView query_url, StringView query);
 
 }