on master help sign in
Suggestions: use RawTextQuery to make the suggestions URLs. Update all themes accordingly.
c7220b4Dalf
searx/query.py+1
@@ -145,6 +145,7 @@ class RawTextQuery(object):
145 self.query_parts[-1] = search_query
145 self.query_parts[-1] = search_query
146 else:
146 else:
147 self.query_parts.append(search_query)
147 self.query_parts.append(search_query)
148+ return self
148
149
149 def getSearchQuery(self):
150 def getSearchQuery(self):
150 if len(self.query_parts):
151 if len(self.query_parts):
searx/search.py+3−2
@@ -319,8 +319,9 @@ def get_search_query_from_webapp(preferences, form):
319 for engine in categories[categ]
319 for engine in categories[categ]
320 if (engine.name, categ) not in disabled_engines)
320 if (engine.name, categ) not in disabled_engines)
321
321
322− return SearchQuery(query, query_engines, query_categories,
322+ return (SearchQuery(query, query_engines, query_categories,
323− query_lang, query_safesearch, query_pageno, query_time_range)
323+ query_lang, query_safesearch, query_pageno, query_time_range),
324+ raw_text_query)
324
325
325
326
326class Search(object):
327class Search(object):
searx/templates/courgette/results.html+2−2
@@ -42,8 +42,8 @@
42 <div id="suggestions"><span>{{ _('Suggestions') }}</span>
42 <div id="suggestions"><span>{{ _('Suggestions') }}</span>
43 {% for suggestion in suggestions %}
43 {% for suggestion in suggestions %}
44 <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
44 <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
45− <input type="hidden" name="q" value="{{ suggestion }}">
45+ <input type="hidden" name="q" value="{{ suggestion.url }}">
46− <input type="submit" value="{{ suggestion }}" />
46+ <input type="submit" value="{{ suggestion.title }}" />
47 </form>
47 </form>
48 {% endfor %}
48 {% endfor %}
49 </div>
49 </div>
searx/templates/legacy/results.html+2−2
@@ -44,8 +44,8 @@
44 {% set first = true %}
44 {% set first = true %}
45 {% for suggestion in suggestions %}
45 {% for suggestion in suggestions %}
46 {% if not first %} &bull; {% endif %}<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
46 {% if not first %} &bull; {% endif %}<form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
47− <input type="hidden" name="q" value="{{ suggestion }}">
47+ <input type="hidden" name="q" value="{{ suggestion.url }}">
48− <input type="submit" class="suggestion" value="{{ suggestion }}" />
48+ <input type="submit" class="suggestion" value="{{ suggestion.title }}" />
49 </form>
49 </form>
50 {% set first = false %}
50 {% set first = false %}
51 {% endfor %}
51 {% endfor %}
searx/templates/oscar/results.html+2−2
@@ -118,8 +118,8 @@
118 <div class="panel-body">
118 <div class="panel-body">
119 {% for suggestion in suggestions %}
119 {% for suggestion in suggestions %}
120 <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" role="navigation" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} suggestion_item">
120 <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}" role="navigation" class="form-inline pull-{% if rtl %}right{% else %}left{% endif %} suggestion_item">
121− <input type="hidden" name="q" value="{{ query_prefix + suggestion }}">
121+ <input type="hidden" name="q" value="{{ suggestion.url }}">
122− <button type="submit" class="btn btn-default btn-xs">{{ suggestion }}</button>
122+ <button type="submit" class="btn btn-default btn-xs">{{ suggestion.title }}</button>
123 </form>
123 </form>
124 {% endfor %}
124 {% endfor %}
125 </div>
125 </div>
searx/templates/simple/results.html+2−2
@@ -50,11 +50,11 @@
50 <div class="wrapper">
50 <div class="wrapper">
51 {% for suggestion in suggestions %}
51 {% for suggestion in suggestions %}
52 <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
52 <form method="{{ method or 'POST' }}" action="{{ url_for('index') }}">
53− <input type="hidden" name="q" value="{{ suggestion }}">
53+ <input type="hidden" name="q" value="{{ suggestion.url }}">
54 <input type="hidden" name="language" value="{{ current_language }}">
54 <input type="hidden" name="language" value="{{ current_language }}">
55 <input type="hidden" name="safesearch" value="{{ safesearch }}">
55 <input type="hidden" name="safesearch" value="{{ safesearch }}">
56 <input type="hidden" name="theme" value="{{ theme }}">
56 <input type="hidden" name="theme" value="{{ theme }}">
57− <input type="submit" class="suggestion" value="&bull; {{ suggestion }}">
57+ <input type="submit" class="suggestion" value="&bull; {{ suggestion.title }}">
58 </form>
58 </form>
59 {% endfor %}
59 {% endfor %}
60 </div>
60 </div>
searx/webapp.py+12−3
@@ -489,9 +489,10 @@ def index():
489
489
490 # search
490 # search
491 search_query = None
491 search_query = None
492+ raw_text_query = None
492 result_container = None
493 result_container = None
493 try:
494 try:
494− search_query = get_search_query_from_webapp(request.preferences, request.form)
495+ search_query, raw_text_query = get_search_query_from_webapp(request.preferences, request.form)
495 # search = Search(search_query) # without plugins
496 # search = Search(search_query) # without plugins
496 search = SearchWithPlugins(search_query, request.user_plugins, request)
497 search = SearchWithPlugins(search_query, request.user_plugins, request)
497 result_container = search.search()
498 result_container = search.search()
@@ -580,17 +581,25 @@ def index():
580 )
581 )
581 return Response(response_rss, mimetype='text/xml')
582 return Response(response_rss, mimetype='text/xml')
582
583
584+ # HTML output format
585+
586+ # suggestions: use RawTextQuery to get the suggestion URLs with the same bang
587+ suggestion_urls = map(lambda suggestion: {
588+ 'url': raw_text_query.changeSearchQuery(suggestion).getFullQuery(),
589+ 'title': suggestion
590+ },
591+ result_container.suggestions)
592+ #
583 return render(
593 return render(
584 'results.html',
594 'results.html',
585 results=results,
595 results=results,
586 q=request.form['q'],
596 q=request.form['q'],
587− query_prefix=u''.join((request.form['q']).rsplit(search_query.query.decode('utf-8'), 1)),
588 selected_categories=search_query.categories,
597 selected_categories=search_query.categories,
589 pageno=search_query.pageno,
598 pageno=search_query.pageno,
590 time_range=search_query.time_range,
599 time_range=search_query.time_range,
591 number_of_results=format_decimal(number_of_results),
600 number_of_results=format_decimal(number_of_results),
592 advanced_search=advanced_search,
601 advanced_search=advanced_search,
593− suggestions=result_container.suggestions,
602+ suggestions=suggestion_urls,
594 answers=result_container.answers,
603 answers=result_container.answers,
595 corrections=result_container.corrections,
604 corrections=result_container.corrections,
596 infoboxes=result_container.infoboxes,
605 infoboxes=result_container.infoboxes,
utils/standalone_searx.py+1−1
@@ -64,7 +64,7 @@ form = {
64preferences = searx.preferences.Preferences(['oscar'], searx.engines.categories.keys(), searx.engines.engines, [])
64preferences = searx.preferences.Preferences(['oscar'], searx.engines.categories.keys(), searx.engines.engines, [])
65preferences.key_value_settings['safesearch'].parse(args.safesearch)
65preferences.key_value_settings['safesearch'].parse(args.safesearch)
66
66
67−search_query = searx.search.get_search_query_from_webapp(preferences, form)
67+search_query, raw_text_query = searx.search.get_search_query_from_webapp(preferences, form)
68search = searx.search.Search(search_query)
68search = searx.search.Search(search_query)
69result_container = search.search()
69result_container = search.search()
70
70