first commit

This commit is contained in:
Iyas Altawil
2025-06-26 15:38:10 +03:30
commit e928faf6d2
899 changed files with 403713 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
<div class="scrollx">{{- '' -}}
<table class="striped">{{- '' -}}
<tr>{{- '' -}}
<th>{{ _('Allow') }}</th>{{- '' -}}
<th>{{ _('Keywords (first word in query)') }}</th>{{- '' -}}
<th>{{ _('Name') }}</th>{{- '' -}}
<th>{{ _('Description') }}</th>{{- '' -}}
<th>{{ _('Examples') }}</th>{{- '' -}}
</tr>{{- '' -}}
<tr class="pref-group" >{{- '' -}}
<th scope="colgroup" colspan="5">
{{- _("This is the list of SearXNG's instant answering modules.") -}}
</th>{{- '' -}}
</tr>
{%- for info in answer_storage -%}
<tr>{{- '' -}}
<td class="checkbox-col"></td>{{- '' -}}
<td>{{ info.keywords|join(', ') }}</td>{{- '' -}}
<td>{{ info.name }}</td>{{- '' -}}
<td>{{ info.description }}</td>{{- '' -}}
<td>{{ info.examples|join(', ') }}</td>{{- '' -}}
</tr>
{%- endfor -%}
<tr class="pref-group" >{{- '' -}}
<th scope="colgroup" colspan="5">
{{- _('This is the list of plugins.') -}}
</th>{{- '' -}}
</th>
{%- for plugin in plugins_storage -%}
{%- if plugin.preference_section == 'query' -%}
<tr>{{- '' -}}
<td class="checkbox-col">{{- checkbox_onoff_reversed('plugin_' + plugin.id, plugin.id not in allowed_plugins, 'plugin_labelledby' + plugin.id) -}}</td>{{- '' -}}
<td>{{ plugin.keywords|join(', ') }}</td>{{- '' -}}
<td>{{ _(plugin.name) }}</td>{{- '' -}}
<td id="{{ 'plugin_labelledby' + plugin.id }}">{{ _(plugin.description) }}</td>{{- '' -}}
<td>{{ plugin.examples|join(', ') }}</td>{{- '' -}}
</tr>
{%- endif -%}
{%- endfor -%}
</table>{{- '' -}}
</div>{{- '' -}}

View File

@@ -0,0 +1,17 @@
<fieldset>{{- '' -}}
<legend id="pref_autocomplete">{{- _('Autocomplete') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name="autocomplete" aria-labelledby="pref_autocomplete">{{- '' -}}
<option value=""> - </option>
{%- for backend in autocomplete_backends -%}
<option value="{{ backend }}"
{%- if backend == autocomplete %} selected="selected" {%- endif -%}>
{{- backend -}}
</option>
{%- endfor -%}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Show possible queries as you type') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend id="pref_center_alignment">{{ _('Center Alignment') }}</legend>{{- '' -}}
<p class="value">{{- '' -}}
<input type="checkbox" {{- ' ' -}}
name="center_alignment" {{- ' ' -}}
aria-labelledby="pref_center_alignment" {{- ' ' -}}
class="checkbox-onoff" {{- ' ' -}}
{%- if preferences.get_value('center_alignment') -%}
checked
{%- endif -%}{{- ' ' -}}
>{{- '' -}}
</p>{{- '' -}}
<div class="description">
{{- _('Display results in the center of the page (Oscar layout).') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,59 @@
<p class="text-muted">
{{- _('This is the list of cookies and their values SearXNG is storing on your computer.') }}
<br>{{- _('With this list, you can assess the transparency of SearXNG.') -}}
<br>{{- '' -}}
</p>
{% if cookies %}
<table class="cookies">
<tr>{{- '' -}}
<th>{{ _('Cookie name') }}</th>{{- '' -}}
<th>{{ _('Value') }}</th>{{- '' -}}
</tr>
{%- for cookie in cookies -%}
<tr>{{- '' -}}
<td>{{ cookie }}</td>{{- '' -}}
<td>{{ cookies[cookie] }}</td>{{- '' -}}
</tr>
{%- endfor -%}
</table>
{%- else -%}
{% include 'simple/messages/no_cookies.html' %}
{% endif %}
<h4>
{{- _('Search URL of the currently saved preferences') -}}:{{- '' -}}
</h4>{{- '' -}}
<div class="selectable_url">{{- '' -}}
<pre>
{{- url_for('index', _external=True) -}}?preferences={{- preferences_url_params|e -}}
{%- raw -%}&amp;q=%s{%- endraw -%}
</pre>{{- '' -}}
</div>{{- '' -}}
<p class="small_font">
{{- _('Note: specifying custom settings in the search URL can reduce privacy by leaking data to the clicked result sites.') -}}
</p>
<h4>
{{- _('URL to restore your preferences in another browser') -}}:{{- '' -}}
</h4>{{- '' -}}
<div class="selectable_url">{{- '' -}}
<pre>
{{- url_for('preferences', _external=True) -}}?preferences={{- preferences_url_params|e -}}{{- '' -}}
</pre>{{- '' -}}
</div>{{- '' -}}
<p class="small_font">
{{- _('A URL containing your preferences. This URL can be used to restore your settings on a different device.') -}}
</p>
<h4>
{{- _('Copy preferences hash') -}}:{{- '' -}}
</h4>{{- '' -}}
<div id="copy-hash-container">{{- '' -}}
<div class="selectable_url">{{- '' -}}
<pre>
{{- preferences_url_params|e }}
</pre>{{- '' -}}
</div>
<button id="copy-hash" class="button" data-hash="{{- preferences_url_params|e -}}" data-copied-text="{{- _('Copied') -}}">{{- _('Copy') -}}</button>
</div>
<h4>
{{- _('Insert copied preferences hash (without URL) to restore') -}}:{{- '' -}}
</h4>{{- '' -}}
<input type="text" id="pref-hash-input" name="preferences" placeholder="{{- _('Preferences hash') -}}">{{- '' -}}

View File

@@ -0,0 +1,20 @@
<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>{{- '' -}}
<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() -%}
<option value="{{ doi_resolver_name }}"
{%- if doi_resolver_url == current_doi_resolver %} selected="selected" {%- endif -%}>
{{- doi_resolver_name }} - {{ doi_resolver_url -}}
</option>
{%- endfor -%}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Select service used by DOI rewrite') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,101 @@
{%- set ns = namespace(checked=true) -%}
{%- for categ in categories_as_tabs + [DEFAULT_CATEGORY] -%}
{{- tab_header('enginetab', 'category_' + categ, _(categ), ns.checked ) -}}
{%- set ns.checked = false -%}
{%- if categ == DEFAULT_CATEGORY -%}
<p>
{{- _('This tab does not exist in the user interface, but you can search with these engines via !bangs.') -}}
{{- ' ' -}}<a href="{{ url_for('info', pagename='search-syntax') }}">&#9432;</a>
</p>
{%- endif -%}
<div class="hide_if_nojs" id="toggle-all-engines-container">
<button type="button" class="button enable-all-engines">{{ _("Enable all") }}</button>
<button type="button" class="button disable-all-engines">{{ _("Disable all") }}</button>
</div>
<div class="scrollx">{{- '' -}}
<table class="striped table_engines">{{- '' -}}
<tr>{{- '' -}}
<th class="checkbox-col">{{- _("Allow") -}}</th>{{- '' -}}
<th class="name">{{- _("Engine name") -}}</th>{{- '' -}}
<th class="shortcut">{{ _("!bang") -}}</th>{{- '' -}}
<th>{{- _("Supports selected language") -}}</th>{{- '' -}}
<th>{{- _("SafeSearch") -}}</th>{{- '' -}}
<th>{{- _("Time range") -}}</th>{{- '' -}}
<th>{{- _("Weight") }}</th>
{%- if enable_metrics -%}
<th>{{- _("Response time") -}}</th>
{%- endif -%}
<th>{{- _("Max time") -}}</th>
{%- if enable_metrics -%}
<th>{{- _("Reliability") }}</th>
{%- endif -%}
</tr>{{- '' -}}
{%- for group, group_bang, engines in engines_by_category[categ] | group_engines_in_tab -%}
{%- if loop.length > 1 -%}
<tr class="pref-group" >{{- '' -}}
<th colspan="2">{{- _(group) -}}</th>{{- '' -}}
<th colspan="8">
{%- if group_bang -%}
<span class="bang">{{- group_bang -}}</span>
{%- endif -%}</th>{{- '' -}}
</tr>{{- '' -}}
{%- endif -%}
{%- for search_engine in engines -%}
{%- if not search_engine.private -%}
{%- set engine_id = 'engine_' + search_engine.name|replace(' ', '_') + '__' + categ|replace(' ', '_') -%}
<tr>{{- '' -}}
<td>
{{- checkbox_onoff_reversed(engine_id, (search_engine.name, categ) in disabled_engines) -}}
</td>{{- '' -}}
<th class="name" data-engine-name="{{ search_engine.name }}">
{%- if search_engine.enable_http -%}
{{- icon_big('alert', 'No HTTPS') -}}
{%- endif -%}
<label for="{{ engine_id }}">
{{- ' ' -}}{{- search_engine.name -}}
{%- if search_engine.about and search_engine.about.language -%}
{{- ' ' -}}({{search_engine.about.language | upper}})
{%- endif -%}
</label>
{{- engine_about(search_engine) -}}
</th>{{- '' -}}
<td class="shortcut">{{- '' -}}
<span class="bang">{{ '!' + shortcuts[search_engine.name] }}</span>{{- '' -}}
</td>{{- '' -}}
<td>
{{- checkbox(None, supports[search_engine.name]['supports_selected_language'], true) -}}
</td>{{- '' -}}
<td>
{{- checkbox(None, supports[search_engine.name]['safesearch'], true) -}}
</td>{{- '' -}}
<td>
{{- checkbox(None, supports[search_engine.name]['time_range_support'], true) -}}
</td>{{- '' -}}
<td>{{- search_engine.weight or '1.0' -}}</td>{{- '' -}}
{%- if enable_metrics -%}
{{- engine_time(search_engine.name) -}}
{%- endif -%}
<td class="{{ 'danger' if stats[search_engine.name]['warn_timeout'] else '' }}">
{{- search_engine.timeout -}}
</td>{{- '' -}}
{%- if enable_metrics -%}
{{- engine_reliability(search_engine.name) -}}
{%- endif -%}
</tr>
{%- endif -%}
{%- endfor -%}
{%- endfor -%}
</table>{{- '' -}}
</div>
{{- tab_footer() -}}
{%- endfor -%}

View File

@@ -0,0 +1,17 @@
<fieldset>{{- '' -}}
<legend id="pref_favicon_resolver">{{- _('Favicon Resolver') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name="favicon_resolver" aria-labelledby="pref_favicon_resolver">{{- '' -}}
<option value=""> - </option>
{%- for backend in favicon_resolver_names -%}
<option value="{{ backend }}"
{%- if backend == favicon_resolver %} selected="selected" {%- endif -%}>
{{- backend -}}
</option>
{%- endfor -%}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Display favicons near search results') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,14 @@
<p class="small_font">
{{- _('These settings are stored in your cookies. This allows us not to store this data about you.') -}}
<br>{{- _("These cookies serve your sole convenience; we don't use them to track you.") -}}
</p>{{- '' -}}
<input type="submit" value="{{ _('Save') }}">{{- '' -}}
<div class="{% if rtl %}left{% else %}right{% endif %} preferences_back">{{- '' -}}
<a href="{{ url_for('clear_cookies') }}">{{ _('Reset defaults') }}</a>{{- '' -}}
</div>{{- '' -}}
<div class="{% if rtl %}left{% else %}right{% endif %} preferences_back">{{- '' -}}
<a href="{{ url_for('index') }}">{{ _('Back') }}</a>{{- '' -}}
</div>

View File

@@ -0,0 +1,23 @@
<fieldset>{{- '' -}}
<legend id="pref_hotkeys">{{- _('Hotkeys') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name="hotkeys" aria-labelledby="pref_hotkeys">{{- '' -}}
<option value="default"
{%- if hotkeys == 'default' %} selected="selected"
{%- endif -%}>
SearXNG{{- '' -}}
</option>{{- '' -}}
<option value="vim"
{%- if hotkeys == 'vim' %} selected="selected"
{%- endif -%}>
{{- _('Vim-like') -}}
</option>{{- '' -}}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _(
'Navigate search results with hotkeys (JavaScript required). '
'Press "h" key on main or result page to get help.'
) -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend id="pref_image_proxy">{{ _('Image proxy') }}</legend>{{- '' -}}
<p class="value">{{- '' -}}
<input type="checkbox" {{- ' ' -}}
name="image_proxy" {{- ' ' -}}
aria-labelledby="pref_image_proxy" {{- ' ' -}}
class="checkbox-onoff" {{- ' ' -}}
{%- if preferences.get_value('image_proxy') -%}
checked
{%- endif -%}{{- ' ' -}}
>{{- '' -}}
</p>{{- '' -}}
<div class="description">
{{- _('Proxy image results through SearXNG') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend>{{ _('Infinite scroll') }}</legend>{{- '' -}}
<p class="value">{{- '' -}}
<input type="checkbox" {{- ' ' -}}
name="infinite_scroll" {{- ' ' -}}
aria-labelledby="pref_infinite_scroll" {{- ' ' -}}
class="checkbox-onoff" {{- ' ' -}}
{%- if preferences.get_value('infinite_scroll') -%}
checked
{%- endif -%}{{- ' ' -}}
>{{- '' -}}
</p>{{- '' -}}
<div class="description" id="pref_infinite_scroll">
{{- _('Automatically load the next page when scrolling to the bottom of the current page') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,27 @@
<fieldset>{{- '' -}}
<legend id="pref_language">{{- _('Search language') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name='language' aria-labelledby="pref_language" aria-describedby="desc_language">{{- '' -}}
<option value="all"
{%- if current_language == 'all' %} selected="selected" {%- endif -%}>
{{- _('Default language') }} [all] {{- '' -}}
</option>{{- '' -}}
<option value="auto"
{%- if current_language == 'auto' %} selected="selected" {%- endif -%}>
{{- _('Auto-detect') }} [auto] {{- '' -}}
</option>{{- '' -}}
{% for sxng_tag,lang_name,country_name,english_name,flag in sxng_locales | sort(attribute=1) -%}
<option value="{{ sxng_tag }}"
{%- if sxng_tag == current_language %} selected="selected" {%- endif -%}>
{{ lang_name }}{%- if country_name -%}-{{ country_name }}{%- endif -%}
{{- ' ' -}}[{{sxng_tag}}]{{- ' ' -}}
{%- if flag -%}{{ flag }}{%- endif -%}
</option>
{%- endfor -%}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description" id="desc_language">
{{- _('What language do you prefer for search?') }} {{- ' ' -}}
{{- _('Choose Auto-detect to let SearXNG detect the language of your query.') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend id="pref_method">{{- _('HTTP Method') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name='method' aria-labelledby="pref_method">{{- '' -}}
<option value="POST"
{%- if method == 'POST' %} selected="selected"{%- endif -%}>POST{{- '' -}}
</option>{{- '' -}}
<option value="GET"
{%- if method == 'GET' %} selected="selected"{%- endif -%}>GET{{- '' -}}
</option>{{- '' -}}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Change how forms are submitted') }} <a href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods" rel="external">🔗</a>
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend id="pref_query_in_title">{{ _("Query in the page's title") }}</legend>{{- '' -}}
<p class="value">{{- '' -}}
<input type="checkbox" {{- ' ' -}}
name="query_in_title" {{- ' ' -}}
aria-labelledby="pref_query_in_title" {{- ' ' -}}
class="checkbox-onoff" {{- ' ' -}}
{%- if preferences.get_value('query_in_title') -%}
checked
{%- endif -%}{{- ' ' -}}
>{{- '' -}}
</p>{{- '' -}}
<div class="description">
{{- _("When enabled, the result page's title contains your query. Your browser can record this title") -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend id="pref_results_on_new_tab">{{ _('Results in new tabs') }}</legend>{{- '' -}}
<p class="value">{{- '' -}}
<input type="checkbox" {{- ' ' -}}
name="results_on_new_tab" {{- ' ' -}}
aria-labelledby="pref_results_on_new_tab" {{- ' ' -}}
class="checkbox-onoff" {{- ' ' -}}
{%- if preferences.get_value('results_on_new_tab') -%}
checked
{%- endif -%}{{- ' ' -}}
>{{- ' ' -}}
</p>{{- '' -}}
<div class="description">
{{- _('Open result links in new browser tabs') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,22 @@
<fieldset>{{- '' -}}
<legend id="pref_safesearch">{{- _('SafeSearch') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name='safesearch' aria-labelledby="pref_safesearch">{{- '' -}}
<option value="2"
{%- if safesearch == '2' %} selected="selected" {%- endif -%}>
{{- _('Strict') -}}
</option>{{- '' -}}
<option value="1"
{%- if safesearch == '1' %} selected="selected" {%- endif -%}>
{{- _('Moderate') -}}
</option>{{- '' -}}
<option value="0"
{%- if safesearch == '0' %} selected="selected" {%- endif -%}>
{{- _('None') -}}
</option>{{- '' -}}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Filter content') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend>{{ _('Search on category select') }}</legend>{{- '' -}}
<p class="value">{{- '' -}}
<input type="checkbox" {{- ' ' -}}
name="search_on_category_select" {{- ' ' -}}
aria-labelledby="pref_search_on_category_select" {{- ' ' -}}
class="checkbox-onoff" {{- ' ' -}}
{%- if preferences.get_value('search_on_category_select') -%}
checked
{%- endif -%}{{- ' ' -}}
>{{- '' -}}
</p>{{- '' -}}
<div class="description" id="pref_search_on_category_select">
{{- _('Perform a search immediately if a category is selected. Disable to select multiple categories') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,35 @@
<fieldset>{{- '' -}}
<legend id="pref_theme">{{- _('Theme') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name="theme" aria-labelledby="pref_theme">{{- '' -}}
{%- for name in themes -%}
<option value="{{ name }}"
{%- if name == theme %} selected="selected"{%- endif -%}>
{{- name | capitalize -}}
</option>
{%- endfor -%}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Change the layout of SearXNG') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}
<fieldset>{{- '' -}}
<legend id="pref_simple_style">{{- _('Theme style') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name="simple_style" aria-labelledby="pref_simple_style">
{%- for name in ['auto', 'light', 'dark', 'black'] -%}
<option value="{{ name }}"
{%- if name == preferences.get_value('simple_style') %} selected="selected" {%- endif -%}>
{{- _(name) | capitalize -}}
</option>
{%- endfor -%}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Choose auto to follow your browser settings') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}
{%- include 'simple/preferences/center_alignment.html' -%}

View File

@@ -0,0 +1,11 @@
<fieldset>{{- '' -}}
<legend id="pref_tokens">{{- _('Engine tokens') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<input name="tokens" aria-labelledby="pref_tokens" type="text"
autocomplete="off" spellcheck="false" autocorrect="off"
value='{{ preferences.tokens.get_value() }}'>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Access tokens for private engines') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -0,0 +1,16 @@
<fieldset>{{- '' -}}
<legend id="pref_ui_locale">{{- _('Interface language') -}}</legend>{{- '' -}}
<div class="value">{{- '' -}}
<select name='locale' aria-labelledby="pref_ui_locale">{{- '' -}}
{%- for locale_id,locale_name in locales.items() | sort -%}
<option value="{{ locale_id }}"
{%- if locale_id == current_locale %} selected="selected" {%- endif %}>
{{- locale_name -}}
</option>{{- '' -}}
{%- endfor -%}
</select>{{- '' -}}
</div>{{- '' -}}
<div class="description">
{{- _('Change the language of the layout') -}}
</div>{{- '' -}}
</fieldset>{{- '' -}}

View File

@@ -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>{{- '' -}}