mirror of
https://github.com/searxng/searxng.git
synced 2026-10-30 02:16:29 +00:00
[enh] simplify and clean up preferences (#6126)
- The 'engine tokens' field is only shown now if there are any engines with tokens configured. - DOI Resolver now has combined the previous two settings (one dropdown and one toggle) into just a single dropdown similar to the favicon resolver.
This commit is contained in:
@@ -19,9 +19,6 @@ if typing.TYPE_CHECKING:
|
||||
from searx.plugins import PluginCfg
|
||||
|
||||
|
||||
ahmia_blacklist: list = []
|
||||
|
||||
|
||||
def filter_url_field(result: "Result|LegacyResult", field_name: str, url_src: str) -> bool | str:
|
||||
"""Returns bool ``True`` to use URL unchanged (``False`` to ignore URL).
|
||||
If URL should be modified, the returned string is the new URL to use."""
|
||||
@@ -29,11 +26,15 @@ def filter_url_field(result: "Result|LegacyResult", field_name: str, url_src: st
|
||||
if field_name != "url":
|
||||
return True # use it unchanged
|
||||
|
||||
resolver_url = get_doi_resolver()
|
||||
if not resolver_url:
|
||||
return True # use it unchanged
|
||||
|
||||
doi = extract_doi(result.parsed_url)
|
||||
if doi and len(doi) < 50:
|
||||
for suffix in ("/", ".pdf", ".xml", "/full", "/meta", "/abstract"):
|
||||
doi = doi.removesuffix(suffix)
|
||||
new_url = get_doi_resolver() + doi
|
||||
new_url = resolver_url + doi
|
||||
if "doi" not in result:
|
||||
result["doi"] = doi
|
||||
log.debug("oa_doi_rewrite: [URL field: %s] %s -> %s", field_name, url_src, new_url)
|
||||
@@ -53,7 +54,7 @@ class SXNGPlugin(Plugin):
|
||||
id=self.id,
|
||||
name=gettext("Open Access DOI rewrite"),
|
||||
description=gettext("Avoid paywalls by redirecting to open-access versions of publications when available"),
|
||||
preference_section="general",
|
||||
preference_section=None,
|
||||
)
|
||||
|
||||
def on_result(
|
||||
@@ -83,7 +84,7 @@ def extract_doi(url):
|
||||
|
||||
def get_doi_resolver() -> str:
|
||||
doi_resolvers = get_setting("doi_resolvers")
|
||||
selected_resolver = sxng_request.preferences.get_value('doi_resolver')[0]
|
||||
if selected_resolver not in doi_resolvers:
|
||||
selected_resolver = get_setting("default_doi_resolver")
|
||||
selected_resolver = sxng_request.preferences.get_value("doi_resolver")
|
||||
if not selected_resolver or selected_resolver not in doi_resolvers:
|
||||
return ""
|
||||
return doi_resolvers[selected_resolver]
|
||||
|
||||
@@ -457,10 +457,10 @@ class Preferences:
|
||||
get_setting("ui.results_on_new_tab"),
|
||||
locked="results_on_new_tab" in self.cfg.lock,
|
||||
),
|
||||
'doi_resolver': MultipleChoiceSetting(
|
||||
[get_setting("default_doi_resolver")],
|
||||
"doi_resolver": EnumStringSetting(
|
||||
get_setting("default_doi_resolver"),
|
||||
locked="doi_resolver" in self.cfg.lock,
|
||||
choices=DOI_RESOLVERS,
|
||||
choices=["", *DOI_RESOLVERS],
|
||||
),
|
||||
'simple_style': EnumStringSetting(
|
||||
get_setting("ui.theme_args.simple_style"),
|
||||
@@ -536,6 +536,8 @@ class Preferences:
|
||||
self.plugins.parse_cookie(input_data.get('disabled_plugins', ''), input_data.get('enabled_plugins', ''))
|
||||
elif user_setting_name == 'tokens':
|
||||
self.tokens.parse(user_setting)
|
||||
if "oa_doi_rewrite" in self.plugins.choices:
|
||||
self.plugins.choices["oa_doi_rewrite"] = bool(self.get_value("doi_resolver"))
|
||||
|
||||
def parse_form(self, input_data: dict[str, str]):
|
||||
"""Parse formular (``<input>``) data from a ``flask.request.form``"""
|
||||
@@ -564,6 +566,8 @@ class Preferences:
|
||||
self.key_value_settings['categories'].parse_form(enabled_categories) # type: ignore
|
||||
self.engines.parse_form(disabled_engines)
|
||||
self.plugins.parse_form(disabled_plugins)
|
||||
if "oa_doi_rewrite" in self.plugins.choices:
|
||||
self.plugins.choices["oa_doi_rewrite"] = bool(self.get_value("doi_resolver"))
|
||||
|
||||
# cannot be used in case of engines or plugins
|
||||
def get_value(self, user_setting_name: str) -> t.Any:
|
||||
|
||||
@@ -183,16 +183,16 @@
|
||||
{%- if 'favicon_resolver' not in locked_preferences -%}
|
||||
{%- include 'simple/preferences/favicon.html' -%}
|
||||
{%- endif -%}
|
||||
{%- if 'doi_resolver' not in locked_preferences -%}
|
||||
{%- include 'simple/preferences/doi_resolver.html' -%}
|
||||
{%- endif -%}
|
||||
{% if 'safesearch' not in locked_preferences %}
|
||||
{%- include 'simple/preferences/safesearch.html' -%}
|
||||
{%- endif -%}
|
||||
{%- include 'simple/preferences/tokens.html' -%}
|
||||
{{- plugin_preferences('general') -}}
|
||||
|
||||
|
||||
{%- if 'doi_resolver' not in locked_preferences %}
|
||||
{%- include 'simple/preferences/doi_resolver.html' -%}
|
||||
{%- if engines_with_tokens -%}
|
||||
{%- include 'simple/preferences/tokens.html' -%}
|
||||
{%- endif -%}
|
||||
{{- plugin_preferences('general') -}}
|
||||
{{- tab_footer() -}}
|
||||
|
||||
{# tab: ui #}
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
<div class="pref-group">{{- _('Digital Object Identifier (DOI)') -}}</div>
|
||||
|
||||
{{- plugin_preferences('general/doi_resolver') -}}
|
||||
|
||||
<fieldset>{{- '' -}}
|
||||
<legend id="pref_doi_resolver">{{- _('Open Access DOI resolver') -}}</legend>{{- '' -}}
|
||||
<legend id="pref_doi_resolver">{{- _('DOI Resolver') -}}</legend>{{- '' -}}
|
||||
<div class="value">{{- '' -}}
|
||||
<select id='doi_resolver' name='doi_resolver' aria-labelledby="pref_doi_resolver">{{- '' -}}
|
||||
{%- for doi_resolver_name,doi_resolver_url in doi_resolvers.items() -%}
|
||||
<select name="doi_resolver" aria-labelledby="pref_doi_resolver">{{- '' -}}
|
||||
<option value=""> - </option>
|
||||
{%- for doi_resolver_name in doi_resolvers -%}
|
||||
<option value="{{ doi_resolver_name }}"
|
||||
{%- if doi_resolver_url == current_doi_resolver %} selected="selected" {%- endif -%}>
|
||||
{{- doi_resolver_name }} - {{ doi_resolver_url -}}
|
||||
{%- if doi_resolver_name == current_doi_resolver %} selected="selected" {%- endif -%}>
|
||||
{{- doi_resolver_name -}}
|
||||
</option>
|
||||
{%- endfor -%}
|
||||
</select>{{- '' -}}
|
||||
</div>{{- '' -}}
|
||||
<div class="description">
|
||||
{{- _('Select service used by DOI rewrite') -}}
|
||||
{{- _('Avoid paywalls by redirecting to open-access versions of publications when available') -}}
|
||||
</div>{{- '' -}}
|
||||
</fieldset>{{- '' -}}
|
||||
|
||||
+2
-1
@@ -959,6 +959,7 @@ def preferences():
|
||||
# fmt: off
|
||||
'preferences.html',
|
||||
preferences = True,
|
||||
engines_with_tokens = any(getattr(e, "tokens", None) for e in engines.values()),
|
||||
selected_categories = get_selected_categories(sxng_request.preferences, sxng_request.form),
|
||||
locales = LOCALE_NAMES,
|
||||
current_locale = sxng_request.preferences.get_value("locale"),
|
||||
@@ -975,7 +976,7 @@ def preferences():
|
||||
shortcuts = {y: x for x, y in engine_shortcuts.items()},
|
||||
themes = themes,
|
||||
plugins_storage = searx.plugins.STORAGE.info,
|
||||
current_doi_resolver = get_doi_resolver(),
|
||||
current_doi_resolver = sxng_request.preferences.get_value("doi_resolver"),
|
||||
allowed_plugins = allowed_plugins,
|
||||
preferences_url_params = sxng_request.preferences.get_as_url_params(),
|
||||
locked_preferences = get_setting("preferences").lock,
|
||||
|
||||
Reference in New Issue
Block a user