From 8e9ad1ccc296c220d61f12926c94d98baa83e3ca Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Wed, 22 Dec 2021 15:51:26 +0100 Subject: [enh] introduce categories_as_tabs Previously all categories were displayed as search engine tabs. This commit changes that so that only the categories listed under categories_as_tabs in settings.yml are displayed. This lets us introduce more categories without cluttering up the UI. Categories not displayed as tabs can still be searched with !bangs. --- searx/engines/__init__.py | 24 ++++++++++++++++++++++++ searx/settings.yml | 18 ++++++++++++------ searx/settings_defaults.py | 4 ++-- searx/templates/oscar/categories.html | 4 ++-- searx/templates/oscar/preferences.html | 4 ++-- searx/templates/simple/categories.html | 2 +- searx/templates/simple/preferences.html | 2 +- searx/webapp.py | 10 ++-------- 8 files changed, 46 insertions(+), 22 deletions(-) (limited to 'searx') diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py index 1fc01600a..8d49bae8a 100644 --- a/searx/engines/__init__.py +++ b/searx/engines/__init__.py @@ -13,6 +13,7 @@ usage:: import sys import copy +import itertools from os.path import realpath, dirname from babel.localedata import locale_identifiers @@ -260,3 +261,26 @@ def load_engines(engine_list): if engine: register_engine(engine) return engines + + +DEFAULT_GROUP_NAME = 'others' + + +def group_engines_in_tab(engines): # pylint: disable=redefined-outer-name + def engine_sort_key(engine): + return (engine.about.get('language', ''), engine.name) + + def group_sort_key(group): + return (group[0] == DEFAULT_GROUP_NAME, group[0].lower()) + + def get_group(eng): + non_tab_engines = [c for c in eng.categories if c not in settings['categories_as_tabs']] + return non_tab_engines[0] if len(non_tab_engines) > 0 else DEFAULT_GROUP_NAME + + return [ + (groupname, sorted(engines, key=engine_sort_key)) + for groupname, engines in sorted( + ((name, list(engines)) for name, engines in itertools.groupby(sorted(engines, key=get_group), get_group)), + key=group_sort_key, + ) + ] diff --git a/searx/settings.yml b/searx/settings.yml index 3227a5a55..18d047535 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -81,12 +81,6 @@ ui: simple_style: auto # Open result links in a new tab by default # results_on_new_tab: false - # categories_order : - # - general - # - files - # - map - # - it - # - science # 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". @@ -233,6 +227,18 @@ checker: result_container: - has_infobox +categories_as_tabs: + - general + - images + - videos + - news + - map + - music + - it + - science + - files + - social media + engines: - name: apk mirror engine: apkmirror diff --git a/searx/settings_defaults.py b/searx/settings_defaults.py index 9c4711bfc..d8e3ec693 100644 --- a/searx/settings_defaults.py +++ b/searx/settings_defaults.py @@ -20,7 +20,7 @@ OUTPUT_FORMATS = ['html', 'csv', 'json', 'rss'] LANGUAGE_CODES = ['all'] + list(l[0] for l in languages) OSCAR_STYLE = ('logicodev', 'logicodev-dark', 'pointhi') SIMPLE_STYLE = ('auto', 'light', 'dark') -CATEGORY_ORDER = [ +CATEGORIES_AS_TABS = [ 'general', 'images', 'videos', @@ -181,7 +181,6 @@ SCHEMA = { 'results_on_new_tab': SettingsValue(bool, False), 'advanced_search': SettingsValue(bool, False), 'query_in_title': SettingsValue(bool, False), - 'categories_order': SettingsValue(list, CATEGORY_ORDER), }, 'preferences': { 'lock': SettingsValue(list, []), @@ -212,6 +211,7 @@ SCHEMA = { 'checker': { 'off_when_debug': SettingsValue(bool, True), }, + 'categories_as_tabs': SettingsValue(list, CATEGORIES_AS_TABS), 'engines': SettingsValue(list, []), 'doi_resolvers': {}, } diff --git a/searx/templates/oscar/categories.html b/searx/templates/oscar/categories.html index a5c5f61c7..39d1e1d33 100644 --- a/searx/templates/oscar/categories.html +++ b/searx/templates/oscar/categories.html @@ -1,11 +1,11 @@
{%- if rtl -%} - {% for category in categories | reverse -%} + {% for category in categories_as_tabs | reverse -%} {{- '' -}} {%- endfor %} {%- else -%} - {% for category in categories -%} + {% for category in categories_as_tabs -%} {{- '' -}} {%- endfor %} diff --git a/searx/templates/oscar/preferences.html b/searx/templates/oscar/preferences.html index b76ee44a1..da88cd755 100644 --- a/searx/templates/oscar/preferences.html +++ b/searx/templates/oscar/preferences.html @@ -298,7 +298,7 @@
@@ -317,7 +317,7 @@

- {% for categ in all_categories %} + {% for categ in categories_as_tabs %}
diff --git a/searx/templates/simple/categories.html b/searx/templates/simple/categories.html index ae8b2ec09..71a211904 100644 --- a/searx/templates/simple/categories.html +++ b/searx/templates/simple/categories.html @@ -14,7 +14,7 @@
{{- '' -}}
{%- if display_tooltip %}
{{ _('Click on the magnifier to perform search') }}
{% endif -%} - {%- for category in categories -%} + {%- for category in categories_as_tabs -%}