Browse Source

Merge branch 'master' into filtron

Markus Heiser 4 years ago
parent
commit
4496ad1218

+ 13 - 0
searx/engines/openstreetmap.py

@@ -10,7 +10,9 @@
  @parse       url, title
 """
 
+import re
 from json import loads
+from flask_babel import gettext
 
 # engine dependent config
 categories = ['map']
@@ -21,10 +23,15 @@ base_url = 'https://nominatim.openstreetmap.org/'
 search_string = 'search/{query}?format=json&polygon_geojson=1&addressdetails=1'
 result_base_url = 'https://openstreetmap.org/{osm_type}/{osm_id}'
 
+route_url = 'https://graphhopper.com/maps/?point={}&point={}&locale=en-US&vehicle=car&weighting=fastest&turn_costs=true&use_miles=false&layer=Omniscale'  # noqa
+route_re = re.compile('(?:from )?(.+) to (.+)')
+
 
 # do search-request
 def request(query, params):
+
     params['url'] = base_url + search_string.format(query=query.decode('utf-8'))
+    params['route'] = route_re.match(query.decode('utf-8'))
 
     return params
 
@@ -34,6 +41,12 @@ def response(resp):
     results = []
     json = loads(resp.text)
 
+    if resp.search_params['route']:
+        results.append({
+            'answer': gettext('Get directions'),
+            'url': route_url.format(*resp.search_params['route'].groups()),
+        })
+
     # parse results
     for r in json:
         if 'display_name' not in r:

+ 6 - 4
searx/engines/wikidata.py

@@ -414,11 +414,13 @@ def add_url(urls, result, id_cache, property_id=None, default_label=None, url_pr
     # append urls
     for url in links:
         if url is not None:
-            urls.append({'title': default_label or label,
-                         'url': url})
+            u = {'title': default_label or label, 'url': url}
+            if property_id == 'P856':
+                u['official'] = True
+                u['domain'] = url.split('/')[2]
+            urls.append(u)
             if results is not None:
-                results.append({'title': default_label or label,
-                                'url': url})
+                results.append(u)
 
 
 def get_imdblink(result, url_prefix):

+ 4 - 0
searx/engines/youtube_noapi.py

@@ -70,11 +70,15 @@ def response(resp):
                 title = get_text_from_json(video.get('title', {}))
                 content = get_text_from_json(video.get('descriptionSnippet', {}))
                 embedded = embedded_url.format(videoid=videoid)
+                author = get_text_from_json(video.get('ownerText', {}))
+                length = get_text_from_json(video.get('lengthText', {}))
 
                 # append result
                 results.append({'url': url,
                                 'title': title,
                                 'content': content,
+                                'author': author,
+                                'length': length,
                                 'template': 'videos.html',
                                 'embedded': embedded,
                                 'thumbnail': thumbnail})

+ 2 - 4
searx/plugins/self_info.py

@@ -37,10 +37,8 @@ def post_search(request, search):
             ip = x_forwarded_for[0]
         else:
             ip = request.remote_addr
-        search.result_container.answers.clear()
-        search.result_container.answers.add(ip)
+        search.result_container.answers['ip'] = {'answer': ip}
     elif p.match(search.search_query.query):
         ua = request.user_agent
-        search.result_container.answers.clear()
-        search.result_container.answers.add(ua)
+        search.result_container.answers['user-agent'] = {'answer': ua}
     return True

+ 2 - 2
searx/results.py

@@ -131,7 +131,7 @@ class ResultContainer(object):
         self._merged_results = []
         self.infoboxes = []
         self.suggestions = set()
-        self.answers = set()
+        self.answers = {}
         self.corrections = set()
         self._number_of_results = []
         self._ordered = False
@@ -146,7 +146,7 @@ class ResultContainer(object):
                 self.suggestions.add(result['suggestion'])
                 results.remove(result)
             elif 'answer' in result:
-                self.answers.add(result['answer'])
+                self.answers[result['answer']] = result
                 results.remove(result)
             elif 'correction' in result:
                 self.corrections.add(result['correction'])

+ 5 - 0
searx/static/themes/oscar/css/logicodev-dark.css

@@ -267,6 +267,11 @@ input[type=checkbox]:not(:checked) + .label_hide_if_checked + .label_hide_if_not
   outline: 0 none;
   position: relative;
 }
+@media screen and (max-width: 75em) {
+  .img-thumbnail {
+    object-fit: cover;
+  }
+}
 .infobox .panel-heading {
   background-color: #f6f9fa;
 }

File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/oscar/css/logicodev-dark.min.css


+ 5 - 0
searx/static/themes/oscar/css/logicodev.css

@@ -240,6 +240,11 @@ input[type=checkbox]:not(:checked) + .label_hide_if_checked + .label_hide_if_not
   outline: 0 none;
   position: relative;
 }
+@media screen and (max-width: 75em) {
+  .img-thumbnail {
+    object-fit: cover;
+  }
+}
 .infobox .panel-heading {
   background-color: #f6f9fa;
 }

File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/oscar/css/logicodev.min.css


+ 6 - 0
searx/static/themes/oscar/less/logicodev/results.less

@@ -185,3 +185,9 @@
     outline: 0 none;
     position: relative;
 }
+
+@media screen and (max-width: 75em) {
+    .img-thumbnail {
+        object-fit: cover;
+    }
+}

+ 6 - 2
searx/templates/legacy/results.html

@@ -33,8 +33,12 @@
 
     {% if answers %}
     <div id="answers"><span>{{ _('Answers') }}</span>
-        {% for answer in answers %}
-        <span>{{ answer }}</span>
+        {% for answer in answers.values() %}
+            {% if answer.url %}
+            <a href="{{ answer.url }}">{{ answer.answer }}</a>
+            {% else %}
+            <span>{{ answer.answer }}</span>
+            {% endif %}
         {% endfor %}
     </div>
     {% endif %}

+ 1 - 0
searx/templates/oscar/infobox.html

@@ -2,6 +2,7 @@
 <div class="panel panel-default infobox">
     <div class="panel-heading">{{- "" -}}
         <h4 class="panel-title infobox_part"><bdi>{{ infobox.infobox }}</bdi></h4>{{- "" -}}
+        {% for u in infobox.urls %}{% if u.official %} <a href="{{ u.url }}">{{ u.domain }}</a>{% endif %}{% endfor %}
     </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 %}

+ 2 - 0
searx/templates/oscar/result_templates/videos.html

@@ -16,6 +16,8 @@
 <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.author %}<p class="col-xs-12 col-sm-8 col-md-8 result-content"><b>{{ _('Author') }}</b>: {{ result.author }}</p>{% endif %}
+        {% if result.length %}<p class="col-xs-12 col-sm-8 col-md-8 result-content"><b>{{ _('Length') }}</b>: {{ result.length }}</p>{% endif %}
         {% if result.content %}<p class="col-xs-12 col-sm-8 col-md-8 result-content">{{ result.content|safe }}</p>{% endif %}
     </div>
 </div>

+ 6 - 2
searx/templates/oscar/results.html

@@ -94,9 +94,13 @@
             {%- endif %}
 
             {% if answers -%}
-            {%- for answer in answers %}
+            {%- for answer in answers.values() %}
             <div class="result well">
-                <span>{{ answer }}</span>
+              {% if answer.url %}
+                <a href="{{ answer.url }}">{{ answer.answer }}</a>
+              {% else %}
+                <span>{{ answer.answer }}</span>
+              {% endif %}
             </div>
             {%- endfor %}
             {%- endif %}

+ 8 - 2
searx/templates/simple/results.html

@@ -15,8 +15,14 @@
 <div id="results" class="{{ only_template }}">
     {% if answers -%}
     <div id="answers"><h4 class="title">{{ _('Answers') }} : </h4>
-        {%- for answer in answers -%}
-        <div class="answer">{{- answer -}}</div>
+        {%- for answer in answers.values() -%}
+        <div class="answer">
+              {% if answer.url %}
+                <a href="{{ answer.url }}">{{ answer.answer }}</a>
+              {% else %}
+                <span>{{ answer.answer }}</span>
+              {% endif %}
+        </div>
         {%- endfor -%}
     </div>
     {%- endif %}

Some files were not shown because too many files changed in this diff