From f01428b07cea22a102032d8c5778254c603c3d24 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Sun, 30 Nov 2025 17:07:17 -0300 Subject: [PATCH] feat: Add support for POST requests on searches for privacy Use already set preferences variable Use span for description, grammar fix from Copilot --- assets/css/default.css | 8 ++++---- locales/en-US.json | 2 ++ src/invidious/config.cr | 1 + src/invidious/routes/search.cr | 11 +++++++++-- src/invidious/routing.cr | 1 + src/invidious/user/preferences.cr | 1 + src/invidious/views/components/search_box.ecr | 8 ++++++++ src/invidious/views/search.ecr | 7 ++++++- src/invidious/views/user/preferences.ecr | 8 +++++++- 9 files changed, 39 insertions(+), 8 deletions(-) diff --git a/assets/css/default.css b/assets/css/default.css index 3957cfc7..0bd4f164 100644 --- a/assets/css/default.css +++ b/assets/css/default.css @@ -663,7 +663,7 @@ span > select { background: #f2f2f2; color: #7c7c7c; } - + .no-theme footer #footer-custom-text > b { color: #565D64; } @@ -750,7 +750,7 @@ body.dark-theme { .dark-theme #footer-content-container > hr { color: #313131; -} +} .dark-theme .footer-content #footer-custom-text > b { color: #ccc; @@ -1025,7 +1025,7 @@ h1, h2, h3, h4, h5, p, .video-transcript header { padding-bottom: 5px; border-bottom: 1px solid #a0a0a0; -} +} .video-transcript > #lines { display: flex; @@ -1082,4 +1082,4 @@ h1, h2, h3, h4, h5, p, padding-left: 10px; display: inline-block; vertical-align: top; -} \ No newline at end of file +} diff --git a/locales/en-US.json b/locales/en-US.json index 5fc5a035..01a4548b 100644 --- a/locales/en-US.json +++ b/locales/en-US.json @@ -129,6 +129,8 @@ "preferences_default_trending_type": "Default trending page: ", "preferences_default_playlist": "Default playlist: ", "preferences_default_playlist_none": "No default playlist set", + "preferences_search_privacy_label": "Search privacy: ", + "preferences_search_privacy_description": "Enabling this preference will prevent your search queries from being saved in your browser history.", "published": "published", "published - reverse": "published - reverse", "alphabetically": "alphabetically", diff --git a/src/invidious/config.cr b/src/invidious/config.cr index 4bc11fb2..afd03249 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -62,6 +62,7 @@ struct ConfigPreferences property show_community_backends : Bool = false @[YAML::Field(ignore: true)] property current_companion : Int32? = nil + property search_privacy : Bool = false def to_tuple {% begin %} diff --git a/src/invidious/routes/search.cr b/src/invidious/routes/search.cr index 11e6f171..968a5554 100644 --- a/src/invidious/routes/search.cr +++ b/src/invidious/routes/search.cr @@ -40,9 +40,16 @@ module Invidious::Routes::Search preferences = env.get("preferences").as(Preferences) locale = preferences.locale - region = env.params.query["region"]? || preferences.region + uri_params = URI::Params.new + if env.request.method == "GET" + uri_params = env.params.query + else + uri_params = env.params.body + end - query = Invidious::Search::Query.new(env.params.query, :regular, region) + region = uri_params["region"]? || preferences.region + + query = Invidious::Search::Query.new(uri_params, :regular, region) if query.empty? # Display the full page search box implemented in #1977 diff --git a/src/invidious/routing.cr b/src/invidious/routing.cr index 304c97d7..7bdefb31 100644 --- a/src/invidious/routing.cr +++ b/src/invidious/routing.cr @@ -188,6 +188,7 @@ module Invidious::Routing get "/opensearch.xml", Routes::Search, :opensearch get "/results", Routes::Search, :results get "/search", Routes::Search, :search + post "/search", Routes::Search, :search get "/hashtag/:hashtag", Routes::Search, :hashtag end diff --git a/src/invidious/user/preferences.cr b/src/invidious/user/preferences.cr index c82f3712..ee45d370 100644 --- a/src/invidious/user/preferences.cr +++ b/src/invidious/user/preferences.cr @@ -61,6 +61,7 @@ struct Preferences property default_playlist : String? = nil property show_community_backends : Bool = false property current_companion : Int32? = nil + property search_privacy : Bool = CONFIG.default_user_preferences.search_privacy module BoolToString def self.to_json(value : String, json : JSON::Builder) diff --git a/src/invidious/views/components/search_box.ecr b/src/invidious/views/components/search_box.ecr index 29da2c52..7c8180a6 100644 --- a/src/invidious/views/components/search_box.ecr +++ b/src/invidious/views/components/search_box.ecr @@ -1,4 +1,12 @@ +<% + search_privacy = preferences.search_privacy +%> + +<% if search_privacy %> +
+<% else %> +<% end %>
autofocus<% end %> diff --git a/src/invidious/views/search.ecr b/src/invidious/views/search.ecr index b1300214..e8a78f65 100644 --- a/src/invidious/views/search.ecr +++ b/src/invidious/views/search.ecr @@ -1,5 +1,10 @@ +<% + search_privacy = preferences.search_privacy + search_query = query.text.size > 30 ? HTML.escape(query.text[0,30].rstrip(".")) + "…" : HTML.escape(query.text) +%> + <% content_for "header" do %> -<%= query.text.size > 30 ? HTML.escape(query.text[0,30].rstrip(".")) + "…" : HTML.escape(query.text) %> - Invidious +<%= search_privacy ? "Search" : search_query %> - Invidious <% end %> diff --git a/src/invidious/views/user/preferences.ecr b/src/invidious/views/user/preferences.ecr index 75f90bea..6e3e0481 100644 --- a/src/invidious/views/user/preferences.ecr +++ b/src/invidious/views/user/preferences.ecr @@ -241,6 +241,12 @@ <%= translate(locale, "preferences_show_community_backends_description") %> +
+ + checked<% end %>> + <%= translate(locale, "preferences_search_privacy_description") %> +
+
<% hidden_channels = preferences.hidden_channels %> @@ -406,4 +412,4 @@
- +