Browse Source

[feat] search: add url formatting preference

Bnyro 5 months ago
parent
commit
a7537a6935

+ 4 - 0
docs/admin/settings/settings_ui.rst

@@ -21,6 +21,7 @@
        simple_style: auto
      search_on_category_select: true
      hotkeys: default
+     url_formatting: pretty
 
 .. _static_use_hash:
 
@@ -68,3 +69,6 @@
 
 ``hotkeys``:
   Hotkeys to use in the search interface: ``default``, ``vim`` (Vim-like).
+
+``url_formatting``:
+  Formatting type to use for result URLs: ``pretty``, ``full`` or ``host``.

+ 4 - 0
searx/preferences.py

@@ -472,6 +472,10 @@ class Preferences:
                 settings['ui']['hotkeys'],
                 choices=['default', 'vim']
             ),
+            'url_formatting': EnumStringSetting(
+                settings['ui']['url_formatting'],
+                choices=['pretty', 'full', 'host']
+            ),
             # fmt: on
         }
 

+ 2 - 0
searx/settings.yml

@@ -145,6 +145,8 @@ ui:
   search_on_category_select: true
   # Hotkeys: default or vim
   hotkeys: default
+  # URL formatting: pretty, full or host
+  url_formatting: pretty
 
 # Lock arbitrary settings on the preferences page.  To find the ID of the user
 # setting you want to lock, check the ID of the form on the page "preferences".

+ 1 - 0
searx/settings_defaults.py

@@ -205,6 +205,7 @@ SCHEMA = {
         'cache_url': SettingsValue(str, 'https://web.archive.org/web/'),
         'search_on_category_select': SettingsValue(bool, True),
         'hotkeys': SettingsValue(('default', 'vim'), 'default'),
+        'url_formatting': SettingsValue(('pretty', 'full', 'host'), 'pretty'),
     },
     'preferences': {
         'lock': SettingsValue(list, []),

+ 4 - 0
searx/static/themes/simple/src/less/style.less

@@ -254,6 +254,10 @@ article[data-vim-selected].category-social {
       white-space: nowrap;
       flex-shrink: 1;
       padding-bottom: 1px;
+
+      .url_i1 {
+        unicode-bidi: plaintext;
+      }
     }
 
     .url_o1::after {

+ 1 - 0
searx/templates/simple/preferences.html

@@ -204,6 +204,7 @@
       {%- include 'simple/preferences/search_on_category_select.html' -%}
     {%- endif -%}
     {%- include 'simple/preferences/hotkeys.html' -%}
+    {%- include 'simple/preferences/urlformatting.html' -%}
     {{- plugin_preferences('ui') -}}
     {{- tab_footer() -}}
 

+ 25 - 0
searx/templates/simple/preferences/urlformatting.html

@@ -0,0 +1,25 @@
+<fieldset>{{- '' -}}
+  <legend id="pref_url_formatting">{{- _('URL formatting') -}}</legend>{{- '' -}}
+  <div class="value">{{- '' -}}
+    <select name="url_formatting" aria-labelledby="pref_url_formatting">{{- '' -}}
+      <option value="pretty"
+              {%- if preferences.get_value('url_formatting') == 'pretty' %} selected="selected"
+              {%- endif -%}>
+              {{- _('Pretty') -}}
+      </option>{{- '' -}}
+      <option value="full"
+              {%- if preferences.get_value('url_formatting') == 'full' %} selected="selected"
+              {%- endif -%}>
+              {{- _('Full') -}}
+      </option>{{- '' -}}
+      <option value="host"
+              {%- if preferences.get_value('url_formatting') == 'host' %} selected="selected"
+              {%- endif -%}>
+              {{- _('Host') -}}
+      </option>{{- '' -}}
+    </select>{{- '' -}}
+  </div>{{- '' -}}
+  <div class="description">
+    {{- _('Change result URL formatting') -}}
+  </div>{{- '' -}}
+</fieldset>{{- '' -}}

+ 10 - 0
searx/webapp.py

@@ -340,6 +340,14 @@ def get_enabled_categories(category_names: Iterable[str]):
 
 
 def get_pretty_url(parsed_url: urllib.parse.ParseResult):
+    url_formatting_pref = request.preferences.get_value('url_formatting')
+
+    if url_formatting_pref == 'full':
+        return [parsed_url.geturl()]
+
+    if url_formatting_pref == 'host':
+        return [parsed_url.netloc]
+
     path = parsed_url.path
     path = path[:-1] if len(path) > 0 and path[-1] == '/' else path
     path = unquote(path.replace("/", " › "))
@@ -356,6 +364,7 @@ def get_client_settings():
         'translations': get_translations(),
         'search_on_category_select': req_pref.get_value('search_on_category_select'),
         'hotkeys': req_pref.get_value('hotkeys'),
+        'url_formatting': req_pref.get_value('url_formatting'),
         'theme_static_path': custom_url_for('static', filename='themes/simple'),
     }
 
@@ -385,6 +394,7 @@ def render(template_name: str, **kwargs):
     kwargs['infinite_scroll'] = request.preferences.get_value('infinite_scroll')
     kwargs['search_on_category_select'] = request.preferences.get_value('search_on_category_select')
     kwargs['hotkeys'] = request.preferences.get_value('hotkeys')
+    kwargs['url_formatting'] = request.preferences.get_value('url_formatting')
     kwargs['results_on_new_tab'] = request.preferences.get_value('results_on_new_tab')
     kwargs['advanced_search'] = request.preferences.get_value('advanced_search')
     kwargs['query_in_title'] = request.preferences.get_value('query_in_title')