Merge pull request #1638 from dalf/suggestions

Suggestions: use RawTextQuery to make the suggestions URLs.
This commit is contained in:
Alexandre Flament 2019-07-17 09:20:07 +02:00 committed by GitHub
commit 582f3bfcbc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 25 additions and 14 deletions

View File

@ -145,6 +145,7 @@ class RawTextQuery(object):
self.query_parts[-1] = search_query self.query_parts[-1] = search_query
else: else:
self.query_parts.append(search_query) self.query_parts.append(search_query)
return self
def getSearchQuery(self): def getSearchQuery(self):
if len(self.query_parts): if len(self.query_parts):

View File

@ -319,8 +319,9 @@ def get_search_query_from_webapp(preferences, form):
for engine in categories[categ] for engine in categories[categ]
if (engine.name, categ) not in disabled_engines) if (engine.name, categ) not in disabled_engines)
return SearchQuery(query, query_engines, query_categories, return (SearchQuery(query, query_engines, query_categories,
query_lang, query_safesearch, query_pageno, query_time_range) query_lang, query_safesearch, query_pageno, query_time_range),
raw_text_query)
class Search(object): class Search(object):

View File

@ -42,8 +42,8 @@
<div id="suggestions"><span>{{ _('Suggestions') }}</span> <div id="suggestions"><span>{{ _('Suggestions') }}</span>
{% for suggestion in suggestions %} {% for suggestion in suggestions %}
<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}"> <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
<input type="hidden" name="q" value="{{ suggestion }}"> <input type="hidden" name="q" value="{{ suggestion.url }}">
<input type="submit" value="{{ suggestion }}" /> <input type="submit" value="{{ suggestion.title }}" />
</form> </form>
{% endfor %} {% endfor %}
</div> </div>

View File

@ -44,8 +44,8 @@
{% set first = true %} {% set first = true %}
{% for suggestion in suggestions %} {% for suggestion in suggestions %}
{% if not first %} &bull; {% endif %}<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}"> {% if not first %} &bull; {% endif %}<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
<input type="hidden" name="q" value="{{ suggestion }}"> <input type="hidden" name="q" value="{{ suggestion.url }}">
<input type="submit" class="suggestion" value="{{ suggestion }}" /> <input type="submit" class="suggestion" value="{{ suggestion.title }}" />
</form> </form>
{% set first = false %} {% set first = false %}
{% endfor %} {% endfor %}

View File

@ -118,8 +118,8 @@
<div class="panel-body"> <div class="panel-body">
{% for suggestion in suggestions %} {% 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"> <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="{{ query_prefix + suggestion }}"> <input type="hidden" name="q" value="{{ suggestion.url }}">
<button type="submit" class="btn btn-default btn-xs">{{ suggestion }}</button> <button type="submit" class="btn btn-default btn-xs">{{ suggestion.title }}</button>
</form> </form>
{% endfor %} {% endfor %}
</div> </div>

View File

@ -50,11 +50,11 @@
<div class="wrapper"> <div class="wrapper">
{% for suggestion in suggestions %} {% for suggestion in suggestions %}
<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}"> <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
<input type="hidden" name="q" value="{{ suggestion }}"> <input type="hidden" name="q" value="{{ suggestion.url }}">
<input type="hidden" name="language" value="{{ current_language }}"> <input type="hidden" name="language" value="{{ current_language }}">
<input type="hidden" name="safesearch" value="{{ safesearch }}"> <input type="hidden" name="safesearch" value="{{ safesearch }}">
<input type="hidden" name="theme" value="{{ theme }}"> <input type="hidden" name="theme" value="{{ theme }}">
<input type="submit" class="suggestion" value="&bull; {{ suggestion }}"> <input type="submit" class="suggestion" value="&bull; {{ suggestion.title }}">
</form> </form>
{% endfor %} {% endfor %}
</div> </div>

View File

@ -489,9 +489,10 @@ def index():
# search # search
search_query = None search_query = None
raw_text_query = None
result_container = None result_container = None
try: try:
search_query = get_search_query_from_webapp(request.preferences, request.form) search_query, raw_text_query = get_search_query_from_webapp(request.preferences, request.form)
# search = Search(search_query) # without plugins # search = Search(search_query) # without plugins
search = SearchWithPlugins(search_query, request.user_plugins, request) search = SearchWithPlugins(search_query, request.user_plugins, request)
result_container = search.search() result_container = search.search()
@ -580,17 +581,25 @@ def index():
) )
return Response(response_rss, mimetype='text/xml') return Response(response_rss, mimetype='text/xml')
# HTML output format
# suggestions: use RawTextQuery to get the suggestion URLs with the same bang
suggestion_urls = map(lambda suggestion: {
'url': raw_text_query.changeSearchQuery(suggestion).getFullQuery(),
'title': suggestion
},
result_container.suggestions)
#
return render( return render(
'results.html', 'results.html',
results=results, results=results,
q=request.form['q'], q=request.form['q'],
query_prefix=u''.join((request.form['q']).rsplit(search_query.query.decode('utf-8'), 1)),
selected_categories=search_query.categories, selected_categories=search_query.categories,
pageno=search_query.pageno, pageno=search_query.pageno,
time_range=search_query.time_range, time_range=search_query.time_range,
number_of_results=format_decimal(number_of_results), number_of_results=format_decimal(number_of_results),
advanced_search=advanced_search, advanced_search=advanced_search,
suggestions=result_container.suggestions, suggestions=suggestion_urls,
answers=result_container.answers, answers=result_container.answers,
corrections=result_container.corrections, corrections=result_container.corrections,
infoboxes=result_container.infoboxes, infoboxes=result_container.infoboxes,

View File

@ -64,7 +64,7 @@ form = {
preferences = searx.preferences.Preferences(['oscar'], searx.engines.categories.keys(), searx.engines.engines, []) preferences = searx.preferences.Preferences(['oscar'], searx.engines.categories.keys(), searx.engines.engines, [])
preferences.key_value_settings['safesearch'].parse(args.safesearch) preferences.key_value_settings['safesearch'].parse(args.safesearch)
search_query = searx.search.get_search_query_from_webapp(preferences, form) search_query, raw_text_query = searx.search.get_search_query_from_webapp(preferences, form)
search = searx.search.Search(search_query) search = searx.search.Search(search_query)
result_container = search.search() result_container = search.search()