diff options
Diffstat (limited to 'searx/templates/oscar')
29 files changed, 1179 insertions, 0 deletions
diff --git a/searx/templates/oscar/404.html b/searx/templates/oscar/404.html new file mode 100644 index 000000000..5a50880a9 --- /dev/null +++ b/searx/templates/oscar/404.html @@ -0,0 +1,9 @@ +{% extends "oscar/base.html" %} +{% block content %} +<div class="text-center"> + <h1>{{ _('Page not found') }}</h1> + {% autoescape false %} + <p>{{ _('Go to %(search_page)s.', search_page=unicode('<a href="{}">{}</a>').format(url_for('index'), _('search page'))) }}</p> + {% endautoescape %} +</div> +{% endblock %} diff --git a/searx/templates/oscar/about.html b/searx/templates/oscar/about.html new file mode 100644 index 000000000..bc7fed8e1 --- /dev/null +++ b/searx/templates/oscar/about.html @@ -0,0 +1,5 @@ +{% extends "oscar/base.html" %} +{% block title %}{{ _('about') }} - {% endblock %} +{% block content %} +{% include '__common__/about.html' %} +{% endblock %} diff --git a/searx/templates/oscar/advanced.html b/searx/templates/oscar/advanced.html new file mode 100644 index 000000000..bf5f86324 --- /dev/null +++ b/searx/templates/oscar/advanced.html @@ -0,0 +1,17 @@ +<input type="checkbox" name="advanced_search" id="check-advanced" {% if advanced_search %} checked="checked"{% endif %}> +<label for="check-advanced">{{- "" -}} + <span class="glyphicon glyphicon-cog"></span> + {{- _('Advanced settings') -}} +</label> +<div id="advanced-search-container"> + {% include 'oscar/categories.html' %} + + <div class="row"> + <div class="col-xs-6"> + {%- include 'oscar/time-range.html' -%} + </div> + <div class="col-xs-6"> + {%- include 'oscar/languages.html' -%} + </div> + </div> +</div> diff --git a/searx/templates/oscar/base.html b/searx/templates/oscar/base.html new file mode 100644 index 000000000..66a9e6029 --- /dev/null +++ b/searx/templates/oscar/base.html @@ -0,0 +1,113 @@ +{% from 'oscar/macros.html' import icon %} +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"{% if rtl %} dir="rtl"{% endif %}> +<head> + <meta charset="UTF-8" /> + <meta name="description" content="searx - a privacy-respecting, hackable metasearch engine" /> + <meta name="keywords" content="searx, search, search engine, metasearch, meta search" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="generator" content="searx/{{ searx_version }}"> + <meta name="referrer" content="no-referrer"> + <meta name="viewport" content="width=device-width, initial-scale=1 , maximum-scale=1.0, user-scalable=1" /> + {% block meta %}{% endblock %} + + <title>{% block title %}{% endblock %}{{ instance_name }}</title> + <link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}" type="text/css" /> + {% if preferences.get_value('oscar-style') -%} + {{' '}}<link rel="stylesheet" href="{{ url_for('static', filename='css/'+preferences.get_value('oscar-style')+'.min.css') }}" type="text/css" /> + {%- else -%} + {{' '}}<link rel="stylesheet" href="{{ url_for('static', filename='css/logicodev.min.css') }}" type="text/css" /> + {%- endif %} + + <link rel="stylesheet" href="{{ url_for('static', filename='css/leaflet.min.css') }}" type="text/css" /> + {%- for css in styles %} + <link rel="stylesheet" href="{{ url_for('static', filename=css) }}" type="text/css" /> + {% endfor %} + + <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="{{ url_for('static', filename='js/html5shiv.min.js') }}"></script> + <script src="{{ url_for('static', filename='js/respond.min.js') }}"></script> + <![endif]--> + + <link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.png') }}" /> + + {% block styles %} + {% endblock %} + {% block head %} + {% endblock %} + + <link title="{{ instance_name }}" type="application/opensearchdescription+xml" rel="search" href="{{ url_for('opensearch') }}"/> + <noscript> + <style type="text/css"> + .tab-content > .active_if_nojs, .active_if_nojs {display: block !important; visibility: visible !important;} + .margin_top_if_nojs {margin-top: 20px;} + .hide_if_nojs {display: none !important;overflow:none !important;} + .disabled_if_nojs {pointer-events: none; cursor: default; text-decoration: line-through;} + </style> + </noscript> +</head> +<body> + {% include 'oscar/navbar.html' %} + + <div class="container"> + {% if errors %} + <div class="alert alert-danger fade in" role="alert"> + <button class="close" data-dismiss="alert" type="button"> + <span aria-hidden="true">×</span> + <span class="sr-only">{{ _('Close') }}</span> + </button> + <strong class="lead">{{ icon('info-sign') }} {{ _('Error!') }}</strong> + <ul> + {% for message in errors %} + <li>{{ message }}</li> + {% endfor %} + </ul> + </div> + {% endif %} + + {% block site_alert_error %} + {% endblock %} + {% block site_alert_warning %} + {% endblock %} + {% block site_alert_info %} + {% endblock %} + {% block site_alert_success %} + {% endblock %} + + {% block content %} + {% endblock %} + + </div> + <div class="footer"> + <div class="container"> + {% block footer %} + {% endblock %} + <p class="text-muted"> + <small> + {{ _('Powered by') }} <a href="https://asciimoo.github.io/searx/">searx</a> - {{ searx_version }} - {{ _('a privacy-respecting, hackable metasearch engine') }}<br/> + <a href="https://github.com/asciimoo/searx">{{ _('Source code') }}</a> | + <a href="https://github.com/asciimoo/searx/issues">{{ _('Issue tracker') }}</a> | + <a href="https://github.com/asciimoo/searx/wiki/Searx-instances">{{ _('Public instances') }}</a> + </small> + </p> + </div> + </div> + <script src="{{ url_for('static', filename='js/jquery-1.11.1.min.js') }}"></script> + <script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script> + {% if autocomplete %} <script src="{{ url_for('static', filename='js/typeahead.bundle.min.js') }}"></script>{% endif %} + + <script src="{{ url_for('static', filename='js/require-2.1.15.min.js') }}"></script> + <script src="{{ url_for('static', filename='js/searx.min.js') }}" + data-method="{{ method or 'POST' }}" + data-autocompleter="{% if autocomplete %}true{% else %}false{% endif %}"></script> + {% for script in scripts %} + {{""}}<script src="{{ url_for('static', filename=script) }}"></script> + {% endfor %} + <noscript> + <style> + .glyphicon { display: none; } + </style> + </noscript> +</body> +</html> diff --git a/searx/templates/oscar/categories.html b/searx/templates/oscar/categories.html new file mode 100644 index 000000000..a5c5f61c7 --- /dev/null +++ b/searx/templates/oscar/categories.html @@ -0,0 +1,13 @@ +<div id="categories"> +{%- if rtl -%} + {% for category in categories | reverse -%} + <input class="hidden" type="checkbox" id="checkbox_{{ category|replace(' ', '_') }}" name="category_{{ category }}" {% if category in selected_categories %}checked="checked"{% endif %} />{{- '' -}} + <label for="checkbox_{{ category|replace(' ', '_') }}">{{ _(category) }}</label> + {%- endfor %} +{%- else -%} + {% for category in categories -%} + <input class="hidden" type="checkbox" id="checkbox_{{ category|replace(' ', '_') }}" name="category_{{ category }}" {% if category in selected_categories %}checked="checked"{% endif %} />{{- '' -}} + <label for="checkbox_{{ category|replace(' ', '_') }}">{{ _(category) }}</label> + {%- endfor %} +{%- endif -%} +</div> diff --git a/searx/templates/oscar/index.html b/searx/templates/oscar/index.html new file mode 100644 index 000000000..b941f5f20 --- /dev/null +++ b/searx/templates/oscar/index.html @@ -0,0 +1,22 @@ +{% extends "oscar/base.html" %} +{% block content %} +<div class="container-fluid"> + <div class="row"> + <div class="text-center col-sm-12 col-md-12"> + {% if cookies['oscar-style'] == 'pointhi' %} + <h1 class="text-hide center-block"><img class="center-block img-responsive" src="{{ url_for('static', filename='img/searx_logo.png') }}" alt="searx logo"/>searx</h1> + {% else %} + <h1 class="text-hide center-block" id="main-logo"> + <img class="center-block img-responsive" src="{{ url_for('static', filename='img/logo_searx_a.png') }}" alt="searx logo" /> + searx + </h1> + {% endif %} + </div> + </div> + <div class="row"> + <div class="text-center col-sm-12 col-md-12"> + {% include 'oscar/search_full.html' %} + </div> + </div> +</div> +{% endblock %} diff --git a/searx/templates/oscar/infobox.html b/searx/templates/oscar/infobox.html new file mode 100644 index 000000000..9f5e58d2b --- /dev/null +++ b/searx/templates/oscar/infobox.html @@ -0,0 +1,36 @@ +{% from 'oscar/macros.html' import result_link with context %} +<div class="panel panel-default infobox"> + <div class="panel-heading">{{- "" -}} + <h4 class="panel-title infobox_part"><bdi>{{ infobox.infobox }}</bdi></h4>{{- "" -}} + </div> + <div class="panel-body"> + {% if infobox.img_src %}<img class="img-responsive center-block infobox_part" src="{{ image_proxify(infobox.img_src) }}" alt="{{ infobox.infobox }}" />{% endif %} + + {% if infobox.content %}<bdi><p class="infobox_part">{{ infobox.content }}</p></bdi>{% endif %} + + {% if infobox.attributes -%} + <table class="table table-striped infobox_part"> + {% for attribute in infobox.attributes -%} + <tr>{{- "" -}} + <td><bdi>{{ attribute.label }}</bdi></td> + {%- if attribute.image -%} + <td><img class="img-responsive" src="{{ image_proxify(attribute.image.src) }}" alt="{{ attribute.image.alt }}" /></td> + {%- else -%} + <td><bdi>{{ attribute.value }}</bdi></td> + {%- endif -%} + </tr> + {% endfor -%} + </table> + {% endif %} + + {% if infobox.urls -%} + <div class="infobox_part">{{- "\n" -}} + <bdi> + {%- for url in infobox.urls -%} + <p class="btn btn-default btn-xs">{{ result_link(url.url, url.title) }}</p> + {% endfor -%} + </bdi>{{- "" -}} + </div> + {% endif %} + </div> +</div> diff --git a/searx/templates/oscar/languages.html b/searx/templates/oscar/languages.html new file mode 100644 index 000000000..5aff9f918 --- /dev/null +++ b/searx/templates/oscar/languages.html @@ -0,0 +1,8 @@ +<select class="language custom-select form-control" id="language" name="language" accesskey="l"> + <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option> +{%- for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) -%} + <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}> + {{- lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id -}} + </option> +{%- endfor -%} +</select> diff --git a/searx/templates/oscar/macros.html b/searx/templates/oscar/macros.html new file mode 100644 index 000000000..d2d1dc643 --- /dev/null +++ b/searx/templates/oscar/macros.html @@ -0,0 +1,107 @@ +<!-- Draw glyphicon icon from bootstrap-theme --> +{% macro icon(action) -%} + <span class="glyphicon glyphicon-{{ action }}"></span> +{%- endmacro %} + +<!-- Draw favicon --> +{% macro draw_favicon(favicon) -%} + <img width="32" height="32" class="favicon" src="{{ url_for('static', filename='themes/oscar/img/icons/' + favicon + '.png') }}" alt="{{ favicon }}" /> +{%- endmacro %} + +{%- macro result_link(url, title, classes='') -%} +<a href="{{ url }}" {% if classes %}class="{{ classes }}" {% endif %}{% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %}>{{ title }}</a> +{%- endmacro -%} + +<!-- Draw result header --> +{% macro result_header(result, favicons) -%} +<h4 class="result_header">{% if result.engine~".png" in favicons %}{{ draw_favicon(result.engine) }} {% endif %}{% if result.url %}{{ result_link(result.url, result.title|safe) }}{% else %}{{ result.title|safe}}{% endif %}</h4> +{%- endmacro %} + +<!-- Draw result sub header --> +{% macro result_sub_header(result) -%} + {% if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %} + {% if result.magnetlink %}<small> • {{ result_link(result.magnetlink, icon('magnet') + _('magnet link'), "magnetlink") }}</small>{% endif %} + {% if result.torrentfile %}<small> • {{ result_link(result.torrentfile, icon('download-alt') + _('torrent file'), "torrentfile") }}</small>{% endif %} +{%- endmacro %} + +<!-- Draw result footer --> +{% macro result_footer(result) -%} + <div class="clearfix"></div>{{- "" -}} + <div class="pull-right"> + {%- for engine in result.engines -%} + <span class="label label-default">{{ engine }}</span> + {%- endfor -%} + {%- if result.url -%} + <small>{{ result_link("https://web.archive.org/web/" + result.url, icon('link') + _('cached'), "text-info") }}</small> + {%- endif -%} + {%- if proxify -%} + <small>{{ result_link(proxify(result.url), icon('sort') + _('proxied'), "text-info") }}</small> + {%- endif -%} + </div> + {%- if result.pretty_url -%} + <div class="external-link">{{ result.pretty_url }}</div> + {%- endif -%} +{%- endmacro %} + +<!-- Draw result footer --> +{% macro result_footer_rtl(result) -%} + <div class="clearfix"></div>{{- "" -}} + {% for engine in result.engines -%} + <span class="label label-default">{{ engine }}</span> + {%- endfor %} + {%- if result.url -%} + <small>{{ result_link("https://web.archive.org/web/" + result.url, icon('link') + _('cached'), "text-info") }}</small> + {%- endif -%} + {% if proxify -%} + <small>{{ result_link(proxify(result.url), icon('sort') + _('proxied'), "text-info") }}</small> + {%- endif %} + {%- if result.pretty_url -%} + <div class="external-link">{{ result.pretty_url }}</div> + {%- endif %} +{%- endmacro %} + +{% macro preferences_item_header(info, label, rtl) -%} + {% if rtl %} + <div class="row form-group"> + <label class="col-sm-3 col-md-2 pull-right">{{ label }}</label> + <span class="col-sm-5 col-md-6 help-block pull-left">{{ info }}</span> + <div class="col-sm-4 col-md-4"> + {% else %} + <div class="row form-group"> + <label class="col-sm-3 col-md-2">{{ label }}</label> + <div class="col-sm-4 col-md-4"> + {% endif %} +{%- endmacro %} + +{% macro preferences_item_footer(info, label, rtl) -%} + {% if rtl %} + </div> + </div> + {% else %} + </div> + <span class="col-sm-5 col-md-6 help-block">{{ info }}</span> + </div> + {% endif %} +{%- endmacro %} + +{% macro checkbox_toggle(id, blocked) -%} + <div class="onoffswitch"> + <input type="checkbox" id="{{ id }}" name="{{ id }}"{% if blocked %} checked="checked"{% endif %} class="onoffswitch-checkbox"> + <label class="onoffswitch-label" for="{{ id }}"> + <span class="onoffswitch-inner"></span> + <span class="onoffswitch-switch"></span> + </label> + </div> +{%- endmacro %} + +{% macro support_toggle(supports) -%} + {% if supports %} + <span class="label label-success"> + {{ _("supported") }} + </span> + {% else %} + <span class="label label-danger"> + {{ _("not supported") }} + </span> + {% endif %} +{%- endmacro %} diff --git a/searx/templates/oscar/messages/first_time.html b/searx/templates/oscar/messages/first_time.html new file mode 100644 index 000000000..38db62bdf --- /dev/null +++ b/searx/templates/oscar/messages/first_time.html @@ -0,0 +1,8 @@ +<div class="alert alert-info fade in" role="alert"> + <button class="close" data-dismiss="alert" type="button"> + <span aria-hidden="true">×</span> + <span class="sr-only">{{ _('Close') }}</span> + </button> + <strong class="lead">{{ icon('info-sign') }} {{ _('Heads up!') }}</strong> + {{ _('It look like you are using searx first time.') }} +</div> diff --git a/searx/templates/oscar/messages/no_cookies.html b/searx/templates/oscar/messages/no_cookies.html new file mode 100644 index 000000000..9bebc8ad1 --- /dev/null +++ b/searx/templates/oscar/messages/no_cookies.html @@ -0,0 +1,5 @@ +{% from 'oscar/macros.html' import icon %} +<div class="alert alert-info fade in" role="alert"> + <strong class="lead">{{ icon('info-sign') }} {{ _('Information!') }}</strong> + {{ _('currently, there are no cookies defined.') }} +</div> diff --git a/searx/templates/oscar/messages/no_data_available.html b/searx/templates/oscar/messages/no_data_available.html new file mode 100644 index 000000000..aee791766 --- /dev/null +++ b/searx/templates/oscar/messages/no_data_available.html @@ -0,0 +1,5 @@ +{% from 'oscar/macros.html' import icon %} +<div class="alert alert-info fade in" role="alert"> + <strong class="lead">{{ icon('info-sign') }} {{ _('Heads up!') }}</strong> + {{ _('There is currently no data available. ') }} +</div> diff --git a/searx/templates/oscar/messages/no_results.html b/searx/templates/oscar/messages/no_results.html new file mode 100644 index 000000000..16b5984ba --- /dev/null +++ b/searx/templates/oscar/messages/no_results.html @@ -0,0 +1,17 @@ +{% from 'oscar/macros.html' import icon %} +{% if unresponsive_engines %} +<div class="alert alert-danger fade in" role="alert"> + <p><strong class="lead">{{ icon('remove-sign') }} {{ _('Error!') }}</strong> {{ _('Engines cannot retrieve results.') }}</p> + <p> + {% for engine_name, error_type in unresponsive_engines %} + {{ engine_name }} ({{ error_type }}){% if not loop.last %}, {% endif %} + {% endfor %} + </p> + <p><small>{{ _('Please, try again later or find another searx instance.') }}</small></p> +</div> +{% else %} +<div class="alert alert-info fade in" role="alert"> + <strong class="lead">{{ icon('info-sign') }} {{ _('Sorry!') }}</strong> + {{ _('we didn\'t find any results. Please use another query or search in more categories.') }} +</div> +{% endif %} diff --git a/searx/templates/oscar/messages/save_settings_successfull.html b/searx/templates/oscar/messages/save_settings_successfull.html new file mode 100644 index 000000000..63e578c70 --- /dev/null +++ b/searx/templates/oscar/messages/save_settings_successfull.html @@ -0,0 +1,9 @@ +{% from 'oscar/macros.html' import icon %} +<div class="alert alert-success fade in" role="alert"> + <button class="close" data-dismiss="alert" type="button"> + <span aria-hidden="true">×</span> + <span class="sr-only">{{ _('Close') }}</span> + </button> + <strong class="lead">{{ icon('ok-sign') }} {{ _('Well done!') }}</strong> + {{ _('Settings saved successfully.') }} +</div> diff --git a/searx/templates/oscar/messages/unknow_error.html b/searx/templates/oscar/messages/unknow_error.html new file mode 100644 index 000000000..3c4c9c15d --- /dev/null +++ b/searx/templates/oscar/messages/unknow_error.html @@ -0,0 +1,9 @@ +{% from 'oscar/macros.html' import icon %} +<div class="alert alert-danger fade in" role="alert"> + <button class="close" data-dismiss="alert" type="button"> + <span aria-hidden="true">×</span> + <span class="sr-only">{{ _('Close') }}</span> + </button> + <strong class="lead">{{ icon('exclamation-sign') }} {{ _('Oh snap!') }}</strong> + {{ _('Something went wrong.') }} +</div> diff --git a/searx/templates/oscar/navbar.html b/searx/templates/oscar/navbar.html new file mode 100644 index 000000000..077fb9f15 --- /dev/null +++ b/searx/templates/oscar/navbar.html @@ -0,0 +1,9 @@ +<div class="searx-navbar">{{- "" -}} + <span class="instance {% if rtl %}pull-right{% else %}pull-left{% endif%}">{{- "" -}} + <a href="{{ url_for('index') }}">{{ instance_name }}</a>{{- "" -}} + </span>{{- "" -}} + <span class="{% if rtl %}pull-left{% else %}pull-right{% endif %}">{{- "" -}} + <a href="{{ url_for('about') }}">{{ _('about') }}</a>{{- "" -}} + <a href="{{ url_for('preferences') }}">{{ _('preferences') }}</a>{{- "" -}} + </span>{{- "" -}} +</div> diff --git a/searx/templates/oscar/preferences.html b/searx/templates/oscar/preferences.html new file mode 100644 index 000000000..1a484dd4b --- /dev/null +++ b/searx/templates/oscar/preferences.html @@ -0,0 +1,311 @@ +{% from 'oscar/macros.html' import preferences_item_header, preferences_item_header_rtl, preferences_item_footer, preferences_item_footer_rtl, checkbox_toggle, support_toggle %} +{% extends "oscar/base.html" %} +{% block title %}{{ _('preferences') }} - {% endblock %} +{% block content %} + +<div> + + <h1>{{ _('Preferences') }}</h1> + <form method="post" action="{{ url_for('preferences') }}" id="search_form"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs nav-justified hide_if_nojs" role="tablist" style="margin-bottom:20px;"> + <li class="active"><a href="#tab_general" role="tab" data-toggle="tab">{{ _('General') }}</a></li> + <li><a href="#tab_engine" role="tab" data-toggle="tab">{{ _('Engines') }}</a></li> + <li><a href="#tab_plugins" role="tab" data-toggle="tab">{{ _('Plugins') }}</a></li> + {% if answerers %}<li><a href="#tab_answerers" role="tab" data-toggle="tab">{{ _('Answerers') }}</a></li>{% endif %} + <li><a href="#tab_cookies" role="tab" data-toggle="tab">{{ _('Cookies') }}</a></li> + </ul> + + <!-- Tab panes --> + <noscript> + <h3>{{ _('General') }}</h3> + </noscript> + <div class="tab-content"> + <div class="tab-pane active" id="tab_general"> + <fieldset> + <div class="container-fluid"> + <div class="row form-group"> + {% if rtl %} + <div class="col-sm-11 col-md-10"> + {% include 'oscar/categories.html' %} + </div> + <label class="col-sm-3 col-md-2">{{ _('Default categories') }}</label> + {% else %} + <label class="col-sm-3 col-md-2">{{ _('Default categories') }}</label> + <div class="col-sm-11 col-md-10 search-categories"> + {% include 'oscar/categories.html' %} + </div> + {% endif %} + </div> + {% set language_label = _('Search language') %} + {% set language_info = _('What language do you prefer for search?') %} + {{ preferences_item_header(language_info, language_label, rtl) }} + {% include 'oscar/languages.html' %} + {{ preferences_item_footer(language_info, language_label, rtl) }} + + {% set locale_label = _('Interface language') %} + {% set locale_info = _('Change the language of the layout') %} + {{ preferences_item_header(locale_info, locale_label, rtl) }} + <select class="form-control" name='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> + {{ preferences_item_footer(locale_info, locale_label, rtl) }} + + {% set autocomplete_label = _('Autocomplete') %} + {% set autocomplete_info = _('Find stuff as you type') %} + {{ preferences_item_header(autocomplete_info, autocomplete_label, rtl) }} + <select class="form-control" name="autocomplete"> + <option value=""> - </option> + {% for backend in autocomplete_backends %} + <option value="{{ backend }}" {% if backend == autocomplete %}selected="selected"{% endif %}>{{ backend }}</option> + {% endfor %} + </select> + {{ preferences_item_footer(autocomplete_info, autocomplete_label, rtl) }} + + {% set image_proxy_label = _('Image proxy') %} + {% set image_proxy_info = _('Proxying image results through searx') %} + {{ preferences_item_header(image_proxy_info, image_proxy_label, rtl) }} + <select class="form-control" name='image_proxy'> + <option value="1" {% if image_proxy %}selected="selected"{% endif %}>{{ _('Enabled') }}</option> + <option value="" {% if not image_proxy %}selected="selected"{% endif %}>{{ _('Disabled')}}</option> + </select> + {{ preferences_item_footer(image_proxy_info, image_proxy_label, rtl) }} + + {% set method_label = _('Method') %} + {% set method_info = _('Change how forms are submited, <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods" rel="external">learn more about request methods</a>') %} + {{ preferences_item_header(method_info, method_label, rtl) }} + <select class="form-control" name='method'> + <option value="POST" {% if method == 'POST' %}selected="selected"{% endif %}>POST</option> + <option value="GET" {% if method == 'GET' %}selected="selected"{% endif %}>GET</option> + </select> + {{ preferences_item_footer(method_info, method_label, rtl) }} + + {% set safesearch_label = _('SafeSearch') %} + {% set safesearch_info = _('Filter content') %} + {{ preferences_item_header(safesearch_info, safesearch_label, rtl) }} + <select class="form-control" name='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> + {{ preferences_item_footer(safesearch_info, safesearch_label, rtl) }} + + {% set theme_label = _('Themes') %} + {% set theme_info = _('Change searx layout') %} + {{ preferences_item_header(theme_info, theme_label, rtl) }} + <select class="form-control" name="theme"> + {% for name in themes %} + <option value="{{ name }}" {% if name == theme %}selected="selected"{% endif %}>{{ name }}</option> + {% endfor %} + </select> + {{ preferences_item_footer(theme_info, theme_label, rtl) }} + + {{ preferences_item_header(_('Choose style for this theme'), _('Style'), rtl) }} + <select class="form-control" name='oscar-style'> + <option value="logicodev" >Logicodev</option> + <option value="pointhi" {% if preferences.get_value('oscar-style') == 'pointhi' %}selected="selected"{% endif %}>Pointhi</option> + <option value="logicodev-dark" {% if preferences.get_value('oscar-style') == 'logicodev-dark' %}selected="selected"{% endif %}>Logicodev dark</option> + </select> + {{ preferences_item_footer(_('Choose style for this theme'), _('Style'), rtl) }} + + {% set label = _('Results on new tabs') %} + {% set info = _('Open result links on new browser tabs') %} + {{ preferences_item_header(info, label, rtl) }} + <select class="form-control" name='results_on_new_tab'> + <option value="1" {% if results_on_new_tab %}selected="selected"{% endif %}>{{ _('On') }}</option> + <option value="0" {% if not results_on_new_tab %}selected="selected"{% endif %}>{{ _('Off')}}</option> + </select> + {{ preferences_item_footer(info, label, rtl) }} + + {% set label = _('Open Access DOI resolver') %} + {% set info = _('Redirect to open-access versions of publications when available (plugin required)') %} + {{ preferences_item_header(info, label, rtl) }} + <select class="form-control" id='doi_resolver' name='doi_resolver'> + {% for doi_resolver_name,doi_resolver_url in doi_resolvers.items() %} + <option value="{{ doi_resolver_name }}" {% if doi_resolver_name == current_doi_resolver %}selected="selected"{% endif %}> + {{ doi_resolver_name }} - {{ doi_resolver_url }} + </option> + {% endfor %} + </select> + {{ preferences_item_footer(info, label, rtl) }} + </div> + </fieldset> + </div> + <div class="tab-pane active_if_nojs" id="tab_engine"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs nav-justified hide_if_nojs" role="tablist" style="margin-bottom:20px;"> + {% for categ in all_categories %} + <li{% if loop.first %} class="active"{% endif %}><a href="#tab_engine_{{ categ|replace(' ', '_') }}" role="tab" data-toggle="tab">{{ _(categ) }}</a></li> + {% endfor %} + </ul> + + <noscript> + <h3>{{ _('Engines') }}</h3> + </noscript> + + <!-- Tab panes --> + <div class="tab-content"> + {% for categ in all_categories %} + <noscript><label>{{ _(categ) }}</label> + </noscript> + <div class="tab-pane{% if loop.first %} active{% endif %} active_if_nojs" id="tab_engine_{{ categ|replace(' ', '_') }}"> + <div class="container-fluid"> + <fieldset> + <div class="table-responsive"> + <table class="table table-hover table-condensed table-striped"> + <tr> + {% if not rtl %} + <th>{{ _("Allow") }}</th> + <th>{{ _("Engine name") }}</th> + <th>{{ _("Shortcut") }}</th> + <th>{{ _("Selected language") }}</th> + <th>{{ _("SafeSearch") }}</th> + <th>{{ _("Time range") }}</th> + <th>{{ _("Avg. time") }}</th> + <th>{{ _("Max time") }}</th> + {% else %} + <th>{{ _("Max time") }}</th> + <th>{{ _("Avg. time") }}</th> + <th>{{ _("Time range") }}</th> + <th>{{ _("SafeSearch") }}</th> + <th>{{ _("Selected language") }}</th> + <th>{{ _("Shortcut") }}</th> + <th>{{ _("Engine name") }}</th> + <th>{{ _("Allow") }}</th> + {% endif %} + </tr> + {% for search_engine in engines_by_category[categ] %} + {% if not search_engine.private %} + <tr> + {% if not rtl %} + <td class="onoff-checkbox"> + {{ checkbox_toggle('engine_' + search_engine.name|replace(' ', '_') + '__' + categ|replace(' ', '_'), (search_engine.name, categ) in disabled_engines) }} + </td> + <th>{{ search_engine.name }}</th> + <td class="name">{{ shortcuts[search_engine.name] }}</td> + <td>{{ support_toggle(stats[search_engine.name].supports_selected_language) }}</td> + <td>{{ support_toggle(search_engine.safesearch==True) }}</td> + <td>{{ support_toggle(search_engine.time_range_support==True) }}</td> + <td class="{{ 'danger' if stats[search_engine.name]['warn_time'] else '' }}">{{ 'N/A' if stats[search_engine.name].time==None else stats[search_engine.name].time }}</td> + <td class="{{ 'danger' if stats[search_engine.name]['warn_timeout'] else '' }}">{{ search_engine.timeout }}</td> + {% else %} + <td class="{{ 'danger' if stats[search_engine.name]['warn_timeout'] else '' }}">{{ search_engine.timeout }}</td> + <td class="{{ 'danger' if stats[search_engine.name]['warn_time'] else '' }}">{{ 'N/A' if stats[search_engine.name].time==None else stats[search_engine.name].time }}</td> + <td>{{ support_toggle(search_engine.time_range_support==True) }}</td> + <td>{{ support_toggle(search_engine.safesearch==True) }}</td> + <td>{{ support_toggle(stats[search_engine.name].supports_selected_language) }}</td> + <td>{{ shortcuts[search_engine.name] }}</td> + <th>{{ search_engine.name }}</th> + <td class="onoff-checkbox"> + {{ checkbox_toggle('engine_' + search_engine.name|replace(' ', '_') + '__' + categ|replace(' ', '_'), (search_engine.name, categ) in disabled_engines) }} + </td> + {% endif %} + </tr> + {% endif %} + {% endfor %} + </table> + </div> + </fieldset> + </div> + </div> + {% endfor %} + </div> + </div> + <div class="tab-pane active_if_nojs" id="tab_plugins"> + <noscript> + <h3>{{ _('Plugins') }}</h3> + </noscript> + <fieldset> + <div class="container-fluid"> + {% for plugin in plugins %} + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">{{ _(plugin.name) }}</h3> + </div> + <div class="panel-body"> + <div class="col-xs-6 col-sm-4 col-md-6">{{ _(plugin.description) }}</div> + <div class="col-xs-6 col-sm-4 col-md-6"> + <div class="onoff-checkbox"> + {{ checkbox_toggle('plugin_' + plugin.id, plugin.id not in allowed_plugins) }} + </div> + </div> + </div> + </div> + {% endfor %} + </div> + </fieldset> + </div> + + {% if answerers %} + <div class="tab-pane active_if_nojs" id="tab_answerers"> + <noscript> + <h3>{{ _('Answerers') }}</h3> + </noscript> + <p class="text-muted" style="margin:20px 0;"> + {{ _('This is the list of searx\'s instant answering modules.') }} + </p> + <table class="table table-striped"> + <tr> + <th class="text-muted">{{ _('Name') }}</th> + <th class="text-muted">{{ _('Keywords') }}</th> + <th class="text-muted">{{ _('Description') }}</th> + <th class="text-muted">{{ _('Examples') }}</th> + </tr> + + {% for answerer in answerers %} + <tr> + <td class="text-muted">{{ answerer.info.name }}</td> + <td class="text-muted">{{ answerer.keywords|join(', ') }}</td> + <td class="text-muted">{{ answerer.info.description }}</td> + <td class="text-muted">{{ answerer.info.examples|join(', ') }}</td> + </tr> + {% endfor %} + </table> + </div> + {% endif %} + + <div class="tab-pane active_if_nojs" id="tab_cookies"> + <noscript> + <h3>{{ _('Cookies') }}</h3> + </noscript> + <p class="text-muted" style="margin:20px 0;"> + {{ _('This is the list of cookies and their values searx is storing on your computer.') }}<br /> + {{ _('With that list, you can assess searx transparency.') }}<br /> + </p> + {% if cookies %} + <table class="table table-striped"> + <tr> + <th class="text-muted" style="padding-right:40px;">{{ _('Cookie name') }}</th> + <th class="text-muted">{{ _('Value') }}</th> + </tr> + + {% for cookie in cookies %} + <tr> + <td class="text-muted" style="padding-right:40px;">{{ cookie }}</td> + <td class="text-muted">{{ cookies[cookie] }}</td> + </tr> + {% endfor %} + </table> + {% else %} + {% include 'oscar/messages/no_cookies.html' %} + {% endif %} + </div> + </div> + <p class="text-muted" style="margin:20px 0;">{{ _('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 these cookies to track you.") }} + </p> + <p style="margin:20px 0;">{{ _('Search URL of the currently saved preferences') }} <small class="text-muted">({{ _('Note: specifying custom settings in the search URL can reduce privacy by leaking data to the clicked result sites.') }})</small>:<br/> + <input readonly="" class="form-control select-all-on-click cursor-text" type="url" value="{{ url_for('index', _external=True) }}?preferences={{ preferences_url_params|e }}{% raw %}&q=%s{% endraw %}"> + </p> + + <input type="submit" class="btn btn-primary" value="{{ _('save') }}" /> + <a href="{{ url_for('index') }}"><div class="btn btn-default">{{ _('back') }}</div></a> + <a href="{{ url_for('clear_cookies') }}"><div class="btn btn-default">{{ _('Reset defaults') }}</div></a> + </form> +</div> +{% endblock %} diff --git a/searx/templates/oscar/result_templates/code.html b/searx/templates/oscar/result_templates/code.html new file mode 100644 index 000000000..a1c18a6b7 --- /dev/null +++ b/searx/templates/oscar/result_templates/code.html @@ -0,0 +1,18 @@ +{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, result_footer_rtl, icon %} + +{{ result_header(result, favicons) }} +{{ result_sub_header(result) }} + +{% if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif %} + +{% if result.repository %}<p class="result-content">{{ icon('file') }} <a href="{{ result.repository }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %}>{{ result.repository }}</a></p>{% endif %} + +<div dir="ltr"> +{{ result.codelines|code_highlighter(result.code_language)|safe }} +</div> + +{% if rtl %} +{{ result_footer_rtl(result) }} +{% else %} +{{ result_footer(result) }} +{% endif %} diff --git a/searx/templates/oscar/result_templates/default.html b/searx/templates/oscar/result_templates/default.html new file mode 100644 index 000000000..885cbbfa8 --- /dev/null +++ b/searx/templates/oscar/result_templates/default.html @@ -0,0 +1,31 @@ +{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, result_footer_rtl, icon with context %} + +{{- result_header(result, favicons) -}} +{{- result_sub_header(result) -}} + +{%- if result.embedded -%} + <small> • <a class="text-info btn-collapse collapsed cursor-pointer media-loader disabled_if_nojs" data-toggle="collapse" data-target="#result-media-{{ index }}" data-btn-text-collapsed="{{ _('show media') }}" data-btn-text-not-collapsed="{{ _('hide media') }}">{{ icon('music') }} {{ _('show media') }}</a></small> +{%- endif -%} + +{%- if result.embedded -%} +<div id="result-media-{{ index }}" class="collapse"> + {{ result.embedded|safe }} +</div> +{%- endif -%} + +{%- if result.img_src -%} +<div class="container-fluid"> + <div class="row"> +<img src="{{ image_proxify(result.img_src) }}" alt="{{ result.title|striptags }}" title="{{ result.title|striptags }}" style="width: auto; max-height: 60px; min-height: 60px;" class="col-xs-2 col-sm-4 col-md-4 result-content"> +{% if result.content %}<p class="result-content col-xs-8 col-sm-8 col-md-8">{{ result.content|safe }}</p>{% endif -%} + </div> +</div> +{%- else -%} +{%- if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif -%} +{%- endif -%} + +{%- if rtl -%} +{{ result_footer_rtl(result) }} +{%- else -%} +{{ result_footer(result) }} +{%- endif -%} diff --git a/searx/templates/oscar/result_templates/images.html b/searx/templates/oscar/result_templates/images.html new file mode 100644 index 000000000..d0a3b7b83 --- /dev/null +++ b/searx/templates/oscar/result_templates/images.html @@ -0,0 +1,36 @@ +{%- from 'oscar/macros.html' import draw_favicon -%} + +<a href="{{ result.img_src }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} data-toggle="modal" data-target="#modal-{{ index }}-{{pageno}}">{{- "" -}} + <img src="{% if result.thumbnail_src %}{{ image_proxify(result.thumbnail_src) }}{% else %}{{ image_proxify(result.img_src) }}{% endif %}" alt="{{ result.title|striptags }}" title="{{ result.title|striptags }}" class="img-thumbnail">{{- "" -}} +</a> +<div class="modal fade" id="modal-{{ index }}-{{ pageno }}" tabindex="-1" role="dialog" aria-hidden="true">{{- "" -}} + <div class="modal-dialog">{{- "" -}} + <div class="modal-wrapper">{{- "" -}} + <div class="modal-header">{{- "" -}} + <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>{{- "" -}} + <h4 class="modal-title">{% if result.engine~".png" in favicons %}{{ draw_favicon(result.engine) }} {% endif %}{{ result.title|striptags }}</h4>{{- "" -}} + </div>{{- "" -}} + <div class="modal-body">{{- "" -}} + <img class="img-responsive center-block" src="{% if result.thumbnail_src %}{{ image_proxify(result.thumbnail_src) }}{% else %}{{ image_proxify(result.img_src) }}{% endif %}" alt="{{ result.title|striptags }}"> + {%- if result.author %}<span class="photo-author">{{ result.author }}</span><br />{% endif -%} + {%- if result.content %}<p class="result-content">{{ result.content|striptags }}</p>{% endif -%} + {%- if result.img_format %}<p class="result-format">{{ result.img_format }}</p>{% endif -%} + {%- if result.source %}<p class="result-source">{{ result.source }}</p>{% endif -%} + </div>{{- "" -}} + <div class="modal-footer">{{- "" -}} + <div class="clearfix"></div>{{- "" -}} + <span class="label label-default pull-right">{{ result.engine }}</span>{{- "" -}} + <p class="text-muted pull-left">{{ result.pretty_url }}</p>{{- "" -}} + <div class="clearfix"></div>{{- "" -}} + <div class="row">{{- "" -}} + <div class="col-md-6">{{- "" -}} + <a href="{{ result.img_src }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} class="btn btn-default">{{ _('Get image') }}</a>{{- "" -}} + </div>{{- "" -}} + <div class="col-md-6">{{- "" -}} + <a href="{{ result.url }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} class="btn btn-default">{{ _('View source') }}</a>{{- "" -}} + </div>{{- "" -}} + </div>{{- "" -}} + </div>{{- "" -}} + </div>{{- "" -}} + </div>{{- "" -}} +</div>{{- "" -}} diff --git a/searx/templates/oscar/result_templates/key-value.html b/searx/templates/oscar/result_templates/key-value.html new file mode 100644 index 000000000..67c748e7f --- /dev/null +++ b/searx/templates/oscar/result_templates/key-value.html @@ -0,0 +1,19 @@ +{% from 'oscar/macros.html' import result_footer, result_footer_rtl with context %} +<div class="panel panel-default"> +<table class="table table-responsive table-bordered table-condensed"> + {% for key, value in result.items() %} + {% if key in ['engine', 'engines', 'template', 'score', 'category', 'positions'] %} + {% continue %} + {% endif %} + <tr> + <td><b>{{ key|upper }}</b>: {{ value }}</td> + </tr> + {% endfor %} +</table> + +{% if rtl %} +{{ result_footer_rtl(result) }} +{% else %} +{{ result_footer(result) }} +{% endif %} +</div> diff --git a/searx/templates/oscar/result_templates/map.html b/searx/templates/oscar/result_templates/map.html new file mode 100644 index 000000000..712375d7f --- /dev/null +++ b/searx/templates/oscar/result_templates/map.html @@ -0,0 +1,72 @@ +{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, result_footer_rtl, icon %} + +{{ result_header(result, favicons) }} +{{ result_sub_header(result) }} + +{% if (result.latitude and result.longitude) or result.boundingbox %} + <small> • <a class="text-info btn-collapse collapsed searx_init_map cursor-pointer disabled_if_nojs" data-toggle="collapse" data-target="#result-map-{{ index }}" data-leaflet-target="osm-map-{{ index }}" data-map-lon="{{ result.longitude }}" data-map-lat="{{ result.latitude }}" {% if result.boundingbox %}data-map-boundingbox='{{ result.boundingbox|tojson|safe }}'{% endif %} {% if result.geojson %}data-map-geojson='{{ result.geojson|tojson|safe }}'{% endif %} data-btn-text-collapsed="{{ _('show map') }}" data-btn-text-not-collapsed="{{ _('hide map') }}">{{ icon('globe') }} {{ _('show map') }}</a></small> +{% endif %} + +{% if result.osm and (result.osm.type and result.osm.id) %} + <small> • <a class="text-info btn-collapse collapsed cursor-pointer searx_overpass_request disabled_if_nojs" data-toggle="collapse" data-target="#result-overpass-{{ index }}" data-osm-type="{{ result.osm.type }}" data-osm-id="{{ result.osm.id }}" data-result-table="result-overpass-table-{{ index }}" data-result-table-loadicon="result-overpass-table-loading-{{ index }}" data-btn-text-collapsed="{{ _('show details') }}" data-btn-text-not-collapsed="{{ _('hide details') }}">{{ icon('map-marker') }} {{ _('show details') }}</a></small> +{% endif %} + +{# {% if (result.latitude and result.longitude) %} + <small> • <a class="text-info btn-collapse collapsed cursor-pointer disabled_if_nojs" data-toggle="collapse" data-target="#result-geodata-{{ index }}" data-btn-text-collapsed="{{ _('show geodata') }}" data-btn-text-not-collapsed="{{ _('hide geodata') }}">{{ icon('map-marker') }} {{ _('show geodata') }}</a></small> +{% endif %} #} + +<div class="container-fluid"> + +{% if result.address %} +<p class="row result-content result-adress col-xs-12 col-sm-5 col-md-4" itemscope itemtype="http://schema.org/PostalAddress"> + {% if result.address.name %} + <strong itemprop="name">{{ result.address.name }}</strong><br/> + {% endif %} + {% if result.address.road %} + <span itemprop="streetAddress"> + {% if result.address.house_number %}{{ result.address.house_number }}, {% endif %} + {{ result.address.road }} + </span><br/> + {% endif %} + {% if result.address.locality %} + <span itemprop="addressLocality">{{ result.address.locality }}</span> + {% if result.address.postcode %}, <span itemprop="postalCode">{{ result.address.postcode }}</span>{% endif %} + <br/> + {% endif %} + {% if result.address.country %} + <span itemprop="addressCountry">{{ result.address.country }}</span> + {% endif %} +</p> +{% endif %} + +{% if result.osm and (result.osm.type and result.osm.id) %} + <div class="row result-content collapse col-xs-12 col-sm-7 col-md-8" id="result-overpass-{{ index }}"{% if rtl %} dir="ltr"{% endif %}> + <div class="text-center" id="result-overpass-table-loading-{{ index }}"><img src="{{ url_for('static', filename='img/loader.gif') }}" alt="Loading ..."/></div> + <table class="table table-striped table-condensed hidden" id="result-overpass-table-{{ index }}"> + <tr><th>key</th><th>value</th></tr> + </table> + </div> +{% endif %} + +{# {% if (result.latitude and result.longitude) %} + <div class="row collapse col-xs-12 col-sm-5 col-md-4" id="result-geodata-{{ index }}"> + <strong>Longitude:</strong> {{ result.longitude }} <br/> + <strong>Latitude:</strong> {{ result.latitude }} + </div> +{% endif %} #} + +{% if result.content %}<p class="row result-content col-xs-12 col-sm-12 col-md-12">{{ result.content|safe }}</p>{% endif %} + +</div> + +{% if (result.latitude and result.longitude) or result.boundingbox %} + <div class="collapse" id="result-map-{{ index }}"> + <div style="height:300px; width:100%; margin: 10px 0;" id="osm-map-{{ index }}"></div> + </div> +{% endif %} + +{% if rtl %} +{{ result_footer_rtl(result) }} +{% else %} +{{ result_footer(result) }} +{% endif %} diff --git a/searx/templates/oscar/result_templates/torrent.html b/searx/templates/oscar/result_templates/torrent.html new file mode 100644 index 000000000..089367e36 --- /dev/null +++ b/searx/templates/oscar/result_templates/torrent.html @@ -0,0 +1,25 @@ +{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, result_footer_rtl, icon %} + +{{ result_header(result, favicons) }} +{{ result_sub_header(result) }} + +{% if result.seed is defined %}<p class="result-content">{{ icon('transfer') }} {{ _('Seeder') }} <span class="badge">{{ result.seed }}</span> • {{ _('Leecher') }} <span class="badge">{{ result.leech }}</span>{% endif %} +{% if result.filesize %}<br />{{ icon('floppy-disk') }} {{ _('Filesize') }} + <span class="badge"> + {% if result.filesize < 1024 %}{{ result.filesize }} {{ _('Bytes') }} + {% elif result.filesize < 1024*1024 %}{{ '{0:0.2f}'.format(result.filesize/1024) }} {{ _('kiB') }} + {% elif result.filesize < 1024*1024*1024 %}{{ '{0:0.2f}'.format(result.filesize/1024/1024) }} {{ _('MiB') }} + {% elif result.filesize < 1024*1024*1024*1024 %}{{ '{0:0.2f}'.format(result.filesize/1024/1024/1024) }} {{ _('GiB') }} + {% else %}{{ '{0:0.2f}'.format(result.filesize/1024/1024/1024/1024) }} {{ _('TiB') }}{% endif %} + </span>{% endif %} +{% if result.files %}<br />{{ icon('file') }} {{ _('Number of Files') }} <span class="badge">{{ result.files }}</span>{% endif %} + +{% if result.content %}<br />{{ result.content|safe }}{% endif %} + +</p> + +{% if rtl %} +{{ result_footer_rtl(result) }} +{% else %} +{{ result_footer(result) }} +{% endif %} diff --git a/searx/templates/oscar/result_templates/videos.html b/searx/templates/oscar/result_templates/videos.html new file mode 100644 index 000000000..3c1913d9d --- /dev/null +++ b/searx/templates/oscar/result_templates/videos.html @@ -0,0 +1,27 @@ +{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, result_footer_rtl, icon %} + +{{ result_header(result, favicons) }} +{{ result_sub_header(result) }} + +{% if result.embedded %} + <small> • <a class="text-info btn-collapse collapsed cursor-pointer media-loader disabled_if_nojs" data-toggle="collapse" data-target="#result-video-{{ index }}" data-btn-text-collapsed="{{ _('show video') }}" data-btn-text-not-collapsed="{{ _('hide video') }}">{{ icon('film') }} {{ _('show video') }}</a></small> +{% endif %} + +{% if result.embedded %} +<div id="result-video-{{ index }}" class="collapse"> + {{ result.embedded|safe }} +</div> +{% endif %} + +<div class="container-fluid"> + <div class="row"> + <a href="{{ result.url }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %}><img class="thumbnail col-xs-6 col-sm-4 col-md-4 result-content" src="{{ image_proxify(result.thumbnail) }}" alt="{{ result.title|striptags }} {{ result.engine }}" /></a> + {% if result.content %}<p class="col-xs-12 col-sm-8 col-md-8 result-content">{{ result.content|safe }}</p>{% endif %} + </div> +</div> + +{% if rtl %} +{{ result_footer_rtl(result) }} +{% else %} +{{ result_footer(result) }} +{% endif %} diff --git a/searx/templates/oscar/results.html b/searx/templates/oscar/results.html new file mode 100644 index 000000000..9cf942695 --- /dev/null +++ b/searx/templates/oscar/results.html @@ -0,0 +1,156 @@ +{% extends "oscar/base.html" %} +{% macro search_form_attrs(pageno) -%} + {%- for category in selected_categories -%}<input type="hidden" name="category_{{ category }}" value="1"/>{%- endfor -%} + <input type="hidden" name="q" value="{{ q|e }}" />{{- "" -}} + <input type="hidden" name="pageno" value="{{ pageno }}" />{{- "" -}} + <input type="hidden" name="time_range" value="{{ time_range }}" />{{- "" -}} + <input type="hidden" name="language" value="{{ current_language }}" />{{- "" -}} + {% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" />{% endif -%} +{%- endmacro %} +{%- macro search_url() %}{{ base_url }}?q={{ q|urlencode }}{% if selected_categories %}&categories={{ selected_categories|join(",") | replace(' ','+') }}{% endif %}{% if pageno > 1 %}&pageno={{ pageno }}{% endif %}{% if time_range %}&time_range={{ time_range }}{% endif %}{% if current_language != 'all' %}&language={{ current_language }}{% endif %}{% endmacro -%} + +{% block title %}{{ q|e }} - {% endblock %} +{% block meta %}{{" "}}<link rel="alternate" type="application/rss+xml" title="Searx search: {{ q|e }}" href="{{ search_url() }}&format=rss">{% endblock %} +{% block content %} + {% include 'oscar/search.html' %} + + <div class="row"> + <div class="col-sm-8" id="main_results"> + <h1 class="sr-only">{{ _('Search results') }}</h1> + + {% if corrections -%} + <div class="result"> + <span class="result_header text-muted form-inline pull-left suggestion_item">{{ _('Try searching for:') }}</span> + {% for correction in corrections -%} + <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" role="navigation" class="form-inline pull-left suggestion_item">{{- "" -}} + <input type="hidden" name="q" value="{{ correction.url }}">{{- "" -}} + <button type="submit" class="btn btn-default btn-xs">{{ correction.title }}</button>{{- "" -}} + </form> + {% endfor %} + </div> + {%- endif %} + + {% if answers -%} + {%- for answer in answers %} + <div class="result well"> + <span>{{ answer }}</span> + </div> + {%- endfor %} + {%- endif %} + + {% for result in results -%} + <div class="result {% if result['template'] %}result-{{ result.template|replace('.html', '') }}{% else %}result-default{% endif %}"> + {%- set index = loop.index -%} + {%- if result.template -%} + {% include get_result_template('oscar', result['template']) %} + {%- else -%} + {% include 'oscar/result_templates/default.html' %} + {%- endif -%} + </div> + {% endfor %} + + {% if not results and not answers -%} + {% include 'oscar/messages/no_results.html' %} + {% endif %} + + <div class="clearfix"></div> + + {% if paging -%} + {% if rtl %} + <div id="pagination"> + <div class="pull-left">{{- "" -}} + <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" class="pull-left"> + {{- search_form_attrs(pageno+1) -}} + <button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-backward"></span> {{ _('next page') }}</button>{{- "" -}} + </form>{{- "" -}} + </div> + <div class="pull-right">{{- "" -}} + <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" class="pull-left"> + {{- search_form_attrs(pageno-1) -}} + <button type="submit" class="btn btn-default" {% if pageno == 1 %}disabled{% endif %}><span class="glyphicon glyphicon-forward"></span> {{ _('previous page') }}</button>{{- "" -}} + </form>{{- "" -}} + </div> + </div><!-- /#pagination --> + <div class="clearfix"></div> + {% else %} + <div id="pagination"> + <div class="pull-left">{{- "" -}} + <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" class="pull-left"> + {{- search_form_attrs(pageno-1) -}} + <button type="submit" class="btn btn-default" {% if pageno == 1 %}disabled{% endif %}><span class="glyphicon glyphicon-backward"></span> {{ _('previous page') }}</button>{{- "" -}} + </form>{{- "" -}} + </div> + <div class="pull-right">{{- "" -}} + <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" class="pull-left"> + {{- search_form_attrs(pageno+1) -}} + <button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-forward"></span> {{ _('next page') }}</button>{{- "" -}} + </form>{{- "" -}} + </div> + </div><!-- /#pagination --> + <div class="clearfix"></div> + {% endif %} + {% endif %} + </div><!-- /#main_results --> + + <div class="col-sm-4" id="sidebar_results"> + {% if number_of_results != '0' -%} + <p><small>{{ _('Number of results') }}: {{ number_of_results }}</small></p> + {%- endif %} + + {% if unresponsive_engines and results|length >= 1 -%} + <div class="alert alert-danger fade in" role="alert"> + <p>{{ _('Engines cannot retrieve results') }}:</p> + {%- for engine_name, error_type in unresponsive_engines -%} + {{- engine_name }} ({{ error_type }}){% if not loop.last %}, {% endif %}{{- "" -}} + {%- endfor -%} + </div> + {%- endif %} + + {% if infoboxes -%} + {% for infobox in infoboxes %} + {% include 'oscar/infobox.html' %}{{- "\n\n" -}} + {% endfor %} + {%- endif %} + + {% if suggestions %} + <div class="panel panel-default"> + <div class="panel-heading"> + <h4 class="panel-title">{{ _('Suggestions') }}</h4> + </div> + <div class="panel-body"> + {% for suggestion in suggestions %} + <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" role="navigation" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} suggestion_item"> + <input type="hidden" name="q" value="{{ suggestion.url }}"> + <button type="submit" class="btn btn-default btn-xs">{{ suggestion.title }}</button> + </form> + {% endfor %} + </div> + </div> + {%- endif %} + + <div class="panel panel-default"> + <div class="panel-heading">{{- "" -}} + <h4 class="panel-title">{{ _('Links') }}</h4>{{- "" -}} + </div> + <div class="panel-body"> + <form role="form">{{- "" -}} + <div class="form-group">{{- "" -}} + <label for="search_url">{{ _('Search URL') }}</label>{{- "" -}} + <input id="search_url" type="url" class="form-control select-all-on-click cursor-text" name="search_url" value="{{ search_url() }}" readonly>{{- "" -}} + </div>{{- "" -}} + </form> + <label>{{ _('Download results') }}</label> + <div class="clearfix"></div> + {% for output_type in ('csv', 'json', 'rss') %} + <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} result_download"> + {{- search_form_attrs(pageno) -}} + <input type="hidden" name="format" value="{{ output_type }}">{{- "" -}} + <button type="submit" class="btn btn-default">{{ output_type }}</button>{{- "" -}} + </form> + {% endfor %} + <div class="clearfix"></div> + </div> + </div> + </div><!-- /#sidebar_results --> + </div> +{% endblock %} diff --git a/searx/templates/oscar/search.html b/searx/templates/oscar/search.html new file mode 100644 index 000000000..cad9eca89 --- /dev/null +++ b/searx/templates/oscar/search.html @@ -0,0 +1,24 @@ +{% from 'oscar/macros.html' import icon %} +<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" id="search_form" role="search"> + <div class="row"> + <div class="col-xs-12 col-md-8"> + <div class="input-group search-margin"> + <input type="search" name="q" class="form-control" id="q" placeholder="{{ _('Search for...') }}" aria-label="{{ _('Search for...') }}" autocomplete="off" value="{{ q }}" accesskey="s"> + <span class="input-group-btn"> + <button type="submit" class="btn btn-default" aria-label="{{ _('Start search') }}"><span class="hide_if_nojs">{{ icon('search') }}</span><span class="hidden active_if_nojs">{{ _('Start search') }}</span></button> + </span> + </div> + </div> + <div class="col-xs-6 col-md-2 search-margin"> + {%- include 'oscar/time-range.html' -%} + </div> + <div class="col-xs-6 col-md-2 search-margin"> + {%- include 'oscar/languages.html' -%} + </div> + </div> + <div class="row"> + <div class="col-sm-12"> + {%- include 'oscar/categories.html' -%} + </div> + </div> +</form><!-- / #search_form_full --> diff --git a/searx/templates/oscar/search_full.html b/searx/templates/oscar/search_full.html new file mode 100644 index 000000000..656463178 --- /dev/null +++ b/searx/templates/oscar/search_full.html @@ -0,0 +1,18 @@ +{% from 'oscar/macros.html' import icon %} + +<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" id="search_form" role="search"> + {% if rtl %} + <div class="input-group"> + {% else %} + <div class="input-group col-md-8 col-md-offset-2"> + {% endif %} + <input type="search" name="q" class="form-control input-lg autofocus" id="q" placeholder="{{ _('Search for...') }}" aria-label="{{ _('Search for...') }}" autocomplete="off" value="{{ q }}" accesskey="s"> + <span class="input-group-btn"> + <button type="submit" class="btn btn-default input-lg" aria-label="{{ _('Start search') }}"><span class="hide_if_nojs">{{ icon('search') }}</span><span class="hidden active_if_nojs">{{ _('Start search') }}</span></button> + </span> + </div> + <div class="col-md-8 col-md-offset-2 advanced"> + {% include 'oscar/advanced.html' %} + </div> + +</form><!-- / #search_form_full --> diff --git a/searx/templates/oscar/stats.html b/searx/templates/oscar/stats.html new file mode 100644 index 000000000..0fb104210 --- /dev/null +++ b/searx/templates/oscar/stats.html @@ -0,0 +1,33 @@ +{% extends "oscar/base.html" %} +{% block title %}{{ _('stats') }} - {% endblock %} +{% block content %} +<div class="container-fluid"> + <h1>{{ _('Engine stats') }}</h1> + <div class="row"> + {% for stat_name,stat_category in stats %} + <div class="col-xs-12 col-sm-12 col-md-6"> + <h3>{{ stat_name }}</h3> + <div class="container-fluid"> + {% for engine in stat_category %} + <div class="row"> + <div class="col-sm-4 col-md-4">{{ engine.name }}</div> + <div class="col-sm-8 col-md-8"> + <div class="progress"> + <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="{{ '%i'|format(engine.avg) }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ engine.percentage }}%;"> + {{ '%.02f'|format(engine.avg) }} + </div> + </div> + </div> + </div> + {% endfor %} + {% if not stat_category %} + <div class="col-sm-12 col-md-12"> + {% include 'oscar/messages/no_data_available.html' %} + </div> + {% endif %} + </div> + </div> + {% endfor %} + </div> +</div> +{% endblock %} diff --git a/searx/templates/oscar/time-range.html b/searx/templates/oscar/time-range.html new file mode 100644 index 000000000..fb1c0754b --- /dev/null +++ b/searx/templates/oscar/time-range.html @@ -0,0 +1,17 @@ +<select name="time_range" id="time-range" class="custom-select form-control" accesskey="t">{{- "" -}} + <option id="time-range-anytime" value="" {{ "selected" if time_range=="" or not time_range else ""}}> + {{- _('Anytime') -}} + </option>{{- "" -}} + <option id="time-range-day" value="day" {{ "selected" if time_range=="day" else ""}}> + {{- _('Last day') -}} + </option>{{- "" -}} + <option id="time-range-week" value="week" {{ "selected" if time_range=="week" else ""}}> + {{- _('Last week') -}} + </option>{{- "" -}} + <option id="time-range-month" value="month" {{ "selected" if time_range=="month" else ""}}> + {{- _('Last month') -}} + </option>{{- "" -}} + <option id="time-range-year" value="year" {{ "selected" if time_range=="year" else ""}}> + {{- _('Last year') -}} + </option>{{- "" -}} +</select> |