2021-06-28 17:26:51 +03:00
|
|
|
<html style="background: #000;">
|
2021-10-27 21:30:55 +03:00
|
|
|
<head>
|
|
|
|
<link rel="apple-touch-icon" sizes="57x57" href="static/img/favicon/apple-icon-57x57.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="60x60" href="static/img/favicon/apple-icon-60x60.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="72x72" href="static/img/favicon/apple-icon-72x72.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="76x76" href="static/img/favicon/apple-icon-76x76.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="114x114" href="static/img/favicon/apple-icon-114x114.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="120x120" href="static/img/favicon/apple-icon-120x120.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="144x144" href="static/img/favicon/apple-icon-144x144.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="152x152" href="static/img/favicon/apple-icon-152x152.png">
|
|
|
|
<link rel="apple-touch-icon" sizes="180x180" href="static/img/favicon/apple-icon-180x180.png">
|
|
|
|
<link rel="icon" type="image/png" sizes="192x192" href="static/img/favicon/android-icon-192x192.png">
|
|
|
|
<link rel="icon" type="image/png" sizes="32x32" href="static/img/favicon/favicon-32x32.png">
|
|
|
|
<link rel="icon" type="image/png" sizes="96x96" href="static/img/favicon/favicon-96x96.png">
|
|
|
|
<link rel="icon" type="image/png" sizes="16x16" href="static/img/favicon/favicon-16x16.png">
|
|
|
|
<link rel="manifest" href="static/img/favicon/manifest.json">
|
|
|
|
<meta name="referrer" content="no-referrer">
|
|
|
|
<meta name="msapplication-TileColor" content="#ffffff">
|
|
|
|
<meta name="msapplication-TileImage" content="static/img/favicon/ms-icon-144x144.png">
|
2022-01-18 23:39:56 +03:00
|
|
|
{% if autocomplete_enabled == '1' %}
|
|
|
|
<script src="{{ cb_url('autocomplete.js') }}"></script>
|
|
|
|
{% endif %}
|
2021-10-27 21:30:55 +03:00
|
|
|
<script type="text/javascript" src="{{ cb_url('controller.js') }}"></script>
|
|
|
|
<link rel="search" href="opensearch.xml" type="application/opensearchdescription+xml" title="Whoogle Search">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
2021-11-24 22:38:56 +03:00
|
|
|
<link rel="stylesheet" href="{{ cb_url('logo.css') }}">
|
2021-10-27 21:30:55 +03:00
|
|
|
{% if config.theme %}
|
|
|
|
{% if config.theme == 'system' %}
|
2021-07-01 02:00:01 +03:00
|
|
|
<style>
|
|
|
|
@import "{{ cb_url('light-theme.css') }}" screen;
|
|
|
|
@import "{{ cb_url('dark-theme.css') }}" screen and (prefers-color-scheme: dark);
|
|
|
|
</style>
|
2021-06-28 17:26:51 +03:00
|
|
|
{% else %}
|
2021-10-27 21:30:55 +03:00
|
|
|
<link rel="stylesheet" href="{{ cb_url(config.theme + '-theme.css') }}"/>
|
2021-06-28 17:26:51 +03:00
|
|
|
{% endif %}
|
2021-10-27 21:30:55 +03:00
|
|
|
{% else %}
|
|
|
|
<link rel="stylesheet" href="{{ cb_url(('dark' if config.dark else 'light') + '-theme.css') }}"/>
|
|
|
|
{% endif %}
|
|
|
|
<link rel="stylesheet" href="{{ cb_url('main.css') }}">
|
|
|
|
<noscript>
|
|
|
|
<style>
|
|
|
|
#main {
|
|
|
|
display: inherit !important;
|
|
|
|
}
|
|
|
|
|
|
|
|
.content {
|
2021-11-02 01:55:33 +03:00
|
|
|
max-height: 400px;
|
2021-10-27 21:30:55 +03:00
|
|
|
padding: 18px;
|
|
|
|
border-radius: 10px;
|
2021-11-02 01:55:33 +03:00
|
|
|
overflow-y: scroll;
|
2021-10-27 21:30:55 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
.collapsible {
|
|
|
|
display: none;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</noscript>
|
|
|
|
<style>{{ config.style }}</style>
|
|
|
|
<title>Whoogle Search</title>
|
|
|
|
</head>
|
|
|
|
<body id="main">
|
|
|
|
<div class="search-container">
|
|
|
|
<div class="logo-container">
|
|
|
|
{{ logo|safe }}
|
|
|
|
</div>
|
|
|
|
<form id="search-form" action="search" method="{{ 'get' if config.get_only else 'post' }}">
|
|
|
|
<div class="search-fields">
|
|
|
|
<div class="autocomplete">
|
2022-09-22 23:14:56 +03:00
|
|
|
{% if config.preferences %}
|
|
|
|
<input type="hidden" name="preferences" value="{{ config.preferences }}" />
|
|
|
|
{% endif %}
|
2021-10-27 21:30:55 +03:00
|
|
|
<input
|
|
|
|
type="text"
|
|
|
|
name="q"
|
|
|
|
id="search-bar"
|
|
|
|
class="home-search"
|
|
|
|
autofocus="autofocus"
|
|
|
|
autocapitalize="none"
|
|
|
|
spellcheck="false"
|
|
|
|
autocorrect="off"
|
|
|
|
autocomplete="off"
|
|
|
|
dir="auto">
|
|
|
|
</div>
|
|
|
|
<input type="submit" id="search-submit" value="{{ translation['search'] }}">
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
{% if not config_disabled %}
|
|
|
|
<br/>
|
|
|
|
<button id="config-collapsible" class="collapsible">{{ translation['config'] }}</button>
|
|
|
|
<div class="content">
|
|
|
|
<div class="config-fields">
|
|
|
|
<form id="config-form" action="config" method="post">
|
2021-11-23 22:27:59 +03:00
|
|
|
<div class="config-options">
|
Use farside.link for frontend alternatives in results (#560)
* Integrate Farside into Whoogle
When instances are ratelimited (when a captcha is returned instead of
the user's search results) the user can now hop to a new instance via
Farside, a new backend service that redirects users to working instances
of a particular frontend. In this case, it presents a user with a
Farside link to a new Whoogle (or Searx) instance instead, so that the
user can resume their search.
For the generated Farside->Whoogle link, the generated link includes the
user's current Whoogle configuration settings as URL params, to ensure a
more seamless transition between instances. This doesn't translate to
the Farside->Searx link, but potentially could with some changes.
* Expand conversion of config<->url params
Config settings can now be translated to and from URL params using a
predetermined set of "safe" keys (i.e. config settings that easily
translate to URL params).
* Allow jumping instances via Farside when ratelimited
When instances are ratelimited (when a captcha is returned instead of
the user's search results) the user can now hop to a new instance via
Farside, a new backend service that redirects users to working instances
of a particular frontend. In this case, it presents a user with a
Farside link to a new Whoogle (or Searx) instance instead, so that the
user can resume their search.
For the generated Farside->Whoogle link, the generated link includes the
user's current Whoogle configuration settings as URL params, to ensure a
more seamless transition between instances. This doesn't translate to
the Farside->Searx link, but potentially could with some changes.
Closes #554
Closes #559
2021-12-09 03:27:33 +03:00
|
|
|
<div class="config-div config-div-country">
|
|
|
|
<label for="config-country">{{ translation['config-country'] }}: </label>
|
|
|
|
<select name="country" id="config-country">
|
|
|
|
{% for country in countries %}
|
|
|
|
<option value="{{ country.value }}"
|
2022-08-01 20:33:38 +03:00
|
|
|
{% if (
|
|
|
|
config.country != '' and config.country in country.value
|
|
|
|
) or (
|
|
|
|
config.country == '' and country.value == '')
|
|
|
|
%}
|
2021-11-23 22:27:59 +03:00
|
|
|
selected
|
|
|
|
{% endif %}>
|
Use farside.link for frontend alternatives in results (#560)
* Integrate Farside into Whoogle
When instances are ratelimited (when a captcha is returned instead of
the user's search results) the user can now hop to a new instance via
Farside, a new backend service that redirects users to working instances
of a particular frontend. In this case, it presents a user with a
Farside link to a new Whoogle (or Searx) instance instead, so that the
user can resume their search.
For the generated Farside->Whoogle link, the generated link includes the
user's current Whoogle configuration settings as URL params, to ensure a
more seamless transition between instances. This doesn't translate to
the Farside->Searx link, but potentially could with some changes.
* Expand conversion of config<->url params
Config settings can now be translated to and from URL params using a
predetermined set of "safe" keys (i.e. config settings that easily
translate to URL params).
* Allow jumping instances via Farside when ratelimited
When instances are ratelimited (when a captcha is returned instead of
the user's search results) the user can now hop to a new instance via
Farside, a new backend service that redirects users to working instances
of a particular frontend. In this case, it presents a user with a
Farside link to a new Whoogle (or Searx) instance instead, so that the
user can resume their search.
For the generated Farside->Whoogle link, the generated link includes the
user's current Whoogle configuration settings as URL params, to ensure a
more seamless transition between instances. This doesn't translate to
the Farside->Searx link, but potentially could with some changes.
Closes #554
Closes #559
2021-12-09 03:27:33 +03:00
|
|
|
{{ country.name }}
|
2021-11-23 22:27:59 +03:00
|
|
|
</option>
|
|
|
|
{% endfor %}
|
|
|
|
</select>
|
|
|
|
</div>
|
2022-12-21 23:24:27 +03:00
|
|
|
<div class="config-div">
|
|
|
|
<label for="config-time-period">{{ translation['config-time-period'] }}</label>
|
|
|
|
<select name="tbs" id="config-time-period">
|
|
|
|
{% for time_period in time_periods %}
|
|
|
|
<option value="{{ time_period.value }}"
|
|
|
|
{% if (
|
|
|
|
config.tbs != '' and config.tbs in time_period.value
|
|
|
|
) or (
|
|
|
|
config.tbs == '' and time_period.value == '')
|
|
|
|
%}
|
|
|
|
selected
|
|
|
|
{% endif %}>
|
|
|
|
{{ translation[time_period.value] }}
|
|
|
|
</option>
|
|
|
|
{% endfor %}
|
|
|
|
</select>
|
|
|
|
</div>
|
2021-11-23 22:27:59 +03:00
|
|
|
<div class="config-div config-div-lang">
|
|
|
|
<label for="config-lang-interface">{{ translation['config-lang'] }}: </label>
|
|
|
|
<select name="lang_interface" id="config-lang-interface">
|
|
|
|
{% for lang in languages %}
|
|
|
|
<option value="{{ lang.value }}"
|
|
|
|
{% if lang.value in config.lang_interface %}
|
|
|
|
selected
|
|
|
|
{% endif %}>
|
|
|
|
{{ lang.name }}
|
|
|
|
</option>
|
|
|
|
{% endfor %}
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-search-lang">
|
|
|
|
<label for="config-lang-search">{{ translation['config-lang-search'] }}: </label>
|
|
|
|
<select name="lang_search" id="config-lang-search">
|
|
|
|
{% for lang in languages %}
|
|
|
|
<option value="{{ lang.value }}"
|
|
|
|
{% if lang.value in config.lang_search %}
|
|
|
|
selected
|
|
|
|
{% endif %}>
|
|
|
|
{{ lang.name }}
|
|
|
|
</option>
|
|
|
|
{% endfor %}
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-near">
|
|
|
|
<label for="config-near">{{ translation['config-near'] }}: </label>
|
|
|
|
<input type="text" name="near" id="config-near"
|
|
|
|
placeholder="{{ translation['config-near-help'] }}" value="{{ config.near }}">
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-block">
|
|
|
|
<label for="config-block">{{ translation['config-block'] }}: </label>
|
|
|
|
<input type="text" name="block" id="config-block"
|
|
|
|
placeholder="{{ translation['config-block-help'] }}" value="{{ config.block }}">
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-block">
|
|
|
|
<label for="config-block-title">{{ translation['config-block-title'] }}: </label>
|
|
|
|
<input type="text" name="block_title" id="config-block"
|
|
|
|
placeholder="{{ translation['config-block-title-help'] }}"
|
|
|
|
value="{{ config.block_title }}">
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-block">
|
|
|
|
<label for="config-block-url">{{ translation['config-block-url'] }}: </label>
|
|
|
|
<input type="text" name="block_url" id="config-block"
|
|
|
|
placeholder="{{ translation['config-block-url-help'] }}" value="{{ config.block_url }}">
|
|
|
|
</div>
|
2022-04-13 20:29:07 +03:00
|
|
|
<div class="config-div config-div-anon-view">
|
|
|
|
<label for="config-anon-view">{{ translation['config-anon-view'] }}: </label>
|
|
|
|
<input type="checkbox" name="anon_view" id="config-anon-view" {{ 'checked' if config.anon_view else '' }}>
|
|
|
|
</div>
|
2021-11-23 22:27:59 +03:00
|
|
|
<div class="config-div config-div-nojs">
|
|
|
|
<label for="config-nojs">{{ translation['config-nojs'] }}: </label>
|
|
|
|
<input type="checkbox" name="nojs" id="config-nojs" {{ 'checked' if config.nojs else '' }}>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-theme">
|
|
|
|
<label for="config-theme">{{ translation['config-theme'] }}: </label>
|
|
|
|
<select name="theme" id="config-theme">
|
|
|
|
{% for theme in themes %}
|
|
|
|
<option value="{{ theme }}"
|
|
|
|
{% if theme in config.theme %}
|
|
|
|
selected
|
|
|
|
{% endif %}>
|
|
|
|
{{ translation[theme].capitalize() }}
|
|
|
|
</option>
|
|
|
|
{% endfor %}
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
<!-- DEPRECATED -->
|
|
|
|
<!--<div class="config-div config-div-dark">-->
|
|
|
|
<!--<label for="config-dark">{{ translation['config-dark'] }}: </label>-->
|
|
|
|
<!--<input type="checkbox" name="dark" id="config-dark" {{ 'checked' if config.dark else '' }}>-->
|
|
|
|
<!--</div>-->
|
|
|
|
<div class="config-div config-div-safe">
|
|
|
|
<label for="config-safe">{{ translation['config-safe'] }}: </label>
|
|
|
|
<input type="checkbox" name="safe" id="config-safe" {{ 'checked' if config.safe else '' }}>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-alts">
|
|
|
|
<label class="tooltip" for="config-alts">{{ translation['config-alts'] }}: </label>
|
|
|
|
<input type="checkbox" name="alts" id="config-alts" {{ 'checked' if config.alts else '' }}>
|
|
|
|
<div><span class="info-text"> — {{ translation['config-alts-help'] }}</span></div>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-new-tab">
|
|
|
|
<label for="config-new-tab">{{ translation['config-new-tab'] }}: </label>
|
|
|
|
<input type="checkbox" name="new_tab"
|
|
|
|
id="config-new-tab" {{ 'checked' if config.new_tab else '' }}>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-view-image">
|
|
|
|
<label for="config-view-image">{{ translation['config-images'] }}: </label>
|
|
|
|
<input type="checkbox" name="view_image"
|
|
|
|
id="config-view-image" {{ 'checked' if config.view_image else '' }}>
|
|
|
|
<div><span class="info-text"> — {{ translation['config-images-help'] }}</span></div>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-tor">
|
|
|
|
<label for="config-tor">{{ translation['config-tor'] }}: {{ '' if tor_available else 'Unavailable' }}</label>
|
|
|
|
<input type="checkbox" name="tor"
|
|
|
|
id="config-tor" {{ '' if tor_available else 'hidden' }} {{ 'checked' if config.tor else '' }}>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-get-only">
|
|
|
|
<label for="config-get-only">{{ translation['config-get-only'] }}: </label>
|
|
|
|
<input type="checkbox" name="get_only"
|
|
|
|
id="config-get-only" {{ 'checked' if config.get_only else '' }}>
|
|
|
|
</div>
|
2022-02-16 19:23:38 +03:00
|
|
|
<div class="config-div config-div-accept-language">
|
2021-11-23 22:27:59 +03:00
|
|
|
<label for="config-accept-language">Set Accept-Language: </label>
|
|
|
|
<input type="checkbox" name="accept_language"
|
|
|
|
id="config-accept-language" {{ 'checked' if config.accept_language else '' }}>
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-root-url">
|
|
|
|
<label for="config-url">{{ translation['config-url'] }}: </label>
|
|
|
|
<input type="text" name="url" id="config-url" value="{{ config.url }}">
|
|
|
|
</div>
|
|
|
|
<div class="config-div config-div-custom-css">
|
|
|
|
<a id="css-link"
|
|
|
|
href="https://github.com/benbusby/whoogle-search/wiki/User-Contributed-CSS-Themes">
|
|
|
|
{{ translation['config-css'] }}:
|
|
|
|
</a>
|
|
|
|
<textarea
|
|
|
|
name="style"
|
|
|
|
id="config-style"
|
|
|
|
autocapitalize="off"
|
|
|
|
autocomplete="off"
|
|
|
|
spellcheck="false"
|
|
|
|
autocorrect="off"
|
|
|
|
value="">
|
|
|
|
{{ config.style.replace('\t', '') }}
|
|
|
|
</textarea>
|
|
|
|
</div>
|
2022-09-22 23:14:56 +03:00
|
|
|
<div class="config-div config-div-pref-url">
|
|
|
|
<label for="config-pref-encryption">{{ translation['config-pref-encryption'] }}: </label>
|
|
|
|
<input type="checkbox" name="preferences_encrypted"
|
|
|
|
id="config-pref-encryption" {{ 'checked' if config.preferences_encrypted and config.preferences_key else '' }}>
|
|
|
|
<div><span class="info-text"> — {{ translation['config-pref-help'] }}</span></div>
|
|
|
|
<label for="config-pref-url">{{ translation['config-pref-url'] }}: </label>
|
|
|
|
<input type="text" name="pref-url" id="config-pref-url" value="{{ config.url }}?preferences={{ config.preferences }}">
|
|
|
|
</div>
|
2021-11-23 22:27:59 +03:00
|
|
|
</div>
|
|
|
|
<div class="config-div config-buttons">
|
2021-10-27 21:30:55 +03:00
|
|
|
<input type="submit" id="config-load" value="{{ translation['load'] }}">
|
|
|
|
<input type="submit" id="config-submit" value="{{ translation['apply'] }}">
|
|
|
|
<input type="submit" id="config-save" value="{{ translation['save-as'] }}">
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{% endif %}
|
|
|
|
</div>
|
2021-11-02 19:35:40 +03:00
|
|
|
{% include 'footer.html' %}
|
2021-10-27 21:30:55 +03:00
|
|
|
</body>
|
2020-04-07 23:12:16 +03:00
|
|
|
</html>
|