mirror of
https://github.com/searxng/searxng.git
synced 2025-08-03 18:42:33 +02:00
[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.
This commit is contained in:
parent
02e9bdf755
commit
8e9ad1ccc2
12 changed files with 82 additions and 29 deletions
|
@ -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,
|
||||
)
|
||||
]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue