mirror of
				https://github.com/searxng/searxng.git
				synced 2025-11-03 19:17:07 -05:00 
			
		
		
		
	Merge branch 'master' of https://github.com/asciimoo/searx into csp-oscar-theme
This commit is contained in:
		
						commit
						e088b95e74
					
				@ -10,7 +10,9 @@
 | 
				
			|||||||
 @parse       url, title
 | 
					 @parse       url, title
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
from json import loads
 | 
					from json import loads
 | 
				
			||||||
 | 
					from flask_babel import gettext
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# engine dependent config
 | 
					# engine dependent config
 | 
				
			||||||
categories = ['map']
 | 
					categories = ['map']
 | 
				
			||||||
@ -21,10 +23,15 @@ base_url = 'https://nominatim.openstreetmap.org/'
 | 
				
			|||||||
search_string = 'search/{query}?format=json&polygon_geojson=1&addressdetails=1'
 | 
					search_string = 'search/{query}?format=json&polygon_geojson=1&addressdetails=1'
 | 
				
			||||||
result_base_url = 'https://openstreetmap.org/{osm_type}/{osm_id}'
 | 
					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
 | 
					# do search-request
 | 
				
			||||||
def request(query, params):
 | 
					def request(query, params):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    params['url'] = base_url + search_string.format(query=query.decode('utf-8'))
 | 
					    params['url'] = base_url + search_string.format(query=query.decode('utf-8'))
 | 
				
			||||||
 | 
					    params['route'] = route_re.match(query.decode('utf-8'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return params
 | 
					    return params
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -34,6 +41,12 @@ def response(resp):
 | 
				
			|||||||
    results = []
 | 
					    results = []
 | 
				
			||||||
    json = loads(resp.text)
 | 
					    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
 | 
					    # parse results
 | 
				
			||||||
    for r in json:
 | 
					    for r in json:
 | 
				
			||||||
        if 'display_name' not in r:
 | 
					        if 'display_name' not in r:
 | 
				
			||||||
 | 
				
			|||||||
@ -414,11 +414,13 @@ def add_url(urls, result, id_cache, property_id=None, default_label=None, url_pr
 | 
				
			|||||||
    # append urls
 | 
					    # append urls
 | 
				
			||||||
    for url in links:
 | 
					    for url in links:
 | 
				
			||||||
        if url is not None:
 | 
					        if url is not None:
 | 
				
			||||||
            urls.append({'title': default_label or label,
 | 
					            u = {'title': default_label or label, 'url': url}
 | 
				
			||||||
                         'url': url})
 | 
					            if property_id == 'P856':
 | 
				
			||||||
 | 
					                u['official'] = True
 | 
				
			||||||
 | 
					                u['domain'] = url.split('/')[2]
 | 
				
			||||||
 | 
					            urls.append(u)
 | 
				
			||||||
            if results is not None:
 | 
					            if results is not None:
 | 
				
			||||||
                results.append({'title': default_label or label,
 | 
					                results.append(u)
 | 
				
			||||||
                                'url': url})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_imdblink(result, url_prefix):
 | 
					def get_imdblink(result, url_prefix):
 | 
				
			||||||
 | 
				
			|||||||
@ -70,11 +70,15 @@ def response(resp):
 | 
				
			|||||||
                title = get_text_from_json(video.get('title', {}))
 | 
					                title = get_text_from_json(video.get('title', {}))
 | 
				
			||||||
                content = get_text_from_json(video.get('descriptionSnippet', {}))
 | 
					                content = get_text_from_json(video.get('descriptionSnippet', {}))
 | 
				
			||||||
                embedded = embedded_url.format(videoid=videoid)
 | 
					                embedded = embedded_url.format(videoid=videoid)
 | 
				
			||||||
 | 
					                author = get_text_from_json(video.get('ownerText', {}))
 | 
				
			||||||
 | 
					                length = get_text_from_json(video.get('lengthText', {}))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                # append result
 | 
					                # append result
 | 
				
			||||||
                results.append({'url': url,
 | 
					                results.append({'url': url,
 | 
				
			||||||
                                'title': title,
 | 
					                                'title': title,
 | 
				
			||||||
                                'content': content,
 | 
					                                'content': content,
 | 
				
			||||||
 | 
					                                'author': author,
 | 
				
			||||||
 | 
					                                'length': length,
 | 
				
			||||||
                                'template': 'videos.html',
 | 
					                                'template': 'videos.html',
 | 
				
			||||||
                                'embedded': embedded,
 | 
					                                'embedded': embedded,
 | 
				
			||||||
                                'thumbnail': thumbnail})
 | 
					                                'thumbnail': thumbnail})
 | 
				
			||||||
 | 
				
			|||||||
@ -37,10 +37,8 @@ def post_search(request, search):
 | 
				
			|||||||
            ip = x_forwarded_for[0]
 | 
					            ip = x_forwarded_for[0]
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            ip = request.remote_addr
 | 
					            ip = request.remote_addr
 | 
				
			||||||
        search.result_container.answers.clear()
 | 
					        search.result_container.answers['ip'] = {'answer': ip}
 | 
				
			||||||
        search.result_container.answers.add(ip)
 | 
					 | 
				
			||||||
    elif p.match(search.search_query.query):
 | 
					    elif p.match(search.search_query.query):
 | 
				
			||||||
        ua = request.user_agent
 | 
					        ua = request.user_agent
 | 
				
			||||||
        search.result_container.answers.clear()
 | 
					        search.result_container.answers['user-agent'] = {'answer': ua}
 | 
				
			||||||
        search.result_container.answers.add(ua)
 | 
					 | 
				
			||||||
    return True
 | 
					    return True
 | 
				
			||||||
 | 
				
			|||||||
@ -131,7 +131,7 @@ class ResultContainer(object):
 | 
				
			|||||||
        self._merged_results = []
 | 
					        self._merged_results = []
 | 
				
			||||||
        self.infoboxes = []
 | 
					        self.infoboxes = []
 | 
				
			||||||
        self.suggestions = set()
 | 
					        self.suggestions = set()
 | 
				
			||||||
        self.answers = set()
 | 
					        self.answers = {}
 | 
				
			||||||
        self.corrections = set()
 | 
					        self.corrections = set()
 | 
				
			||||||
        self._number_of_results = []
 | 
					        self._number_of_results = []
 | 
				
			||||||
        self._ordered = False
 | 
					        self._ordered = False
 | 
				
			||||||
@ -146,7 +146,7 @@ class ResultContainer(object):
 | 
				
			|||||||
                self.suggestions.add(result['suggestion'])
 | 
					                self.suggestions.add(result['suggestion'])
 | 
				
			||||||
                results.remove(result)
 | 
					                results.remove(result)
 | 
				
			||||||
            elif 'answer' in result:
 | 
					            elif 'answer' in result:
 | 
				
			||||||
                self.answers.add(result['answer'])
 | 
					                self.answers[result['answer']] = result
 | 
				
			||||||
                results.remove(result)
 | 
					                results.remove(result)
 | 
				
			||||||
            elif 'correction' in result:
 | 
					            elif 'correction' in result:
 | 
				
			||||||
                self.corrections.add(result['correction'])
 | 
					                self.corrections.add(result['correction'])
 | 
				
			||||||
 | 
				
			|||||||
@ -267,6 +267,11 @@ input[type=checkbox]:not(:checked) + .label_hide_if_checked + .label_hide_if_not
 | 
				
			|||||||
  outline: 0 none;
 | 
					  outline: 0 none;
 | 
				
			||||||
  position: relative;
 | 
					  position: relative;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					@media screen and (max-width: 75em) {
 | 
				
			||||||
 | 
					  .img-thumbnail {
 | 
				
			||||||
 | 
					    object-fit: cover;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.infobox .panel-heading {
 | 
					.infobox .panel-heading {
 | 
				
			||||||
  background-color: #f6f9fa;
 | 
					  background-color: #f6f9fa;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -240,6 +240,11 @@ input[type=checkbox]:not(:checked) + .label_hide_if_checked + .label_hide_if_not
 | 
				
			|||||||
  outline: 0 none;
 | 
					  outline: 0 none;
 | 
				
			||||||
  position: relative;
 | 
					  position: relative;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					@media screen and (max-width: 75em) {
 | 
				
			||||||
 | 
					  .img-thumbnail {
 | 
				
			||||||
 | 
					    object-fit: cover;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.infobox .panel-heading {
 | 
					.infobox .panel-heading {
 | 
				
			||||||
  background-color: #f6f9fa;
 | 
					  background-color: #f6f9fa;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -185,3 +185,9 @@
 | 
				
			|||||||
    outline: 0 none;
 | 
					    outline: 0 none;
 | 
				
			||||||
    position: relative;
 | 
					    position: relative;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media screen and (max-width: 75em) {
 | 
				
			||||||
 | 
					    .img-thumbnail {
 | 
				
			||||||
 | 
					        object-fit: cover;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -33,8 +33,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    {% if answers %}
 | 
					    {% if answers %}
 | 
				
			||||||
    <div id="answers"><span>{{ _('Answers') }}</span>
 | 
					    <div id="answers"><span>{{ _('Answers') }}</span>
 | 
				
			||||||
        {% for answer in answers %}
 | 
					        {% for answer in answers.values() %}
 | 
				
			||||||
        <span>{{ answer }}</span>
 | 
					            {% if answer.url %}
 | 
				
			||||||
 | 
					            <a href="{{ answer.url }}">{{ answer.answer }}</a>
 | 
				
			||||||
 | 
					            {% else %}
 | 
				
			||||||
 | 
					            <span>{{ answer.answer }}</span>
 | 
				
			||||||
 | 
					            {% endif %}
 | 
				
			||||||
        {% endfor %}
 | 
					        {% endfor %}
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@
 | 
				
			|||||||
<div class="panel panel-default infobox">
 | 
					<div class="panel panel-default infobox">
 | 
				
			||||||
    <div class="panel-heading">{{- "" -}}
 | 
					    <div class="panel-heading">{{- "" -}}
 | 
				
			||||||
        <h4 class="panel-title infobox_part"><bdi>{{ infobox.infobox }}</bdi></h4>{{- "" -}}
 | 
					        <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>
 | 
				
			||||||
    <div class="panel-body">
 | 
					    <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.img_src %}<img class="img-responsive center-block infobox_part" src="{{ image_proxify(infobox.img_src) }}" alt="{{ infobox.infobox }}" />{% endif %}
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,8 @@
 | 
				
			|||||||
<div class="container-fluid">
 | 
					<div class="container-fluid">
 | 
				
			||||||
    <div class="row">
 | 
					    <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>
 | 
					        <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 %}
 | 
					        {% if result.content %}<p class="col-xs-12 col-sm-8 col-md-8 result-content">{{ result.content|safe }}</p>{% endif %}
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
				
			|||||||
@ -94,9 +94,13 @@
 | 
				
			|||||||
            {%- endif %}
 | 
					            {%- endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            {% if answers -%}
 | 
					            {% if answers -%}
 | 
				
			||||||
            {%- for answer in answers %}
 | 
					            {%- for answer in answers.values() %}
 | 
				
			||||||
            <div class="result well">
 | 
					            <div class="result well">
 | 
				
			||||||
                <span>{{ answer }}</span>
 | 
					              {% if answer.url %}
 | 
				
			||||||
 | 
					                <a href="{{ answer.url }}">{{ answer.answer }}</a>
 | 
				
			||||||
 | 
					              {% else %}
 | 
				
			||||||
 | 
					                <span>{{ answer.answer }}</span>
 | 
				
			||||||
 | 
					              {% endif %}
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            {%- endfor %}
 | 
					            {%- endfor %}
 | 
				
			||||||
            {%- endif %}
 | 
					            {%- endif %}
 | 
				
			||||||
 | 
				
			|||||||
@ -15,8 +15,14 @@
 | 
				
			|||||||
<div id="results" class="{{ only_template }}">
 | 
					<div id="results" class="{{ only_template }}">
 | 
				
			||||||
    {% if answers -%}
 | 
					    {% if answers -%}
 | 
				
			||||||
    <div id="answers"><h4 class="title">{{ _('Answers') }} : </h4>
 | 
					    <div id="answers"><h4 class="title">{{ _('Answers') }} : </h4>
 | 
				
			||||||
        {%- for answer in answers -%}
 | 
					        {%- for answer in answers.values() -%}
 | 
				
			||||||
        <div class="answer">{{- answer -}}</div>
 | 
					        <div class="answer">
 | 
				
			||||||
 | 
					              {% if answer.url %}
 | 
				
			||||||
 | 
					                <a href="{{ answer.url }}">{{ answer.answer }}</a>
 | 
				
			||||||
 | 
					              {% else %}
 | 
				
			||||||
 | 
					                <span>{{ answer.answer }}</span>
 | 
				
			||||||
 | 
					              {% endif %}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
        {%- endfor -%}
 | 
					        {%- endfor -%}
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    {%- endif %}
 | 
					    {%- endif %}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user