Browse Source

minor fixes of doi resolver

Closes #1047
Noémi Ványi 7 years ago
parent
commit
1b10abfc92
4 changed files with 19 additions and 32 deletions
  1. 4 5
      searx/plugins/oa_doi_rewrite.py
  2. 1 1
      searx/preferences.py
  3. 12 17
      searx/templates/oscar/preferences.html
  4. 2 9
      searx/webapp.py

+ 4 - 5
searx/plugins/oa_doi_rewrite.py

@@ -1,7 +1,6 @@
 from flask_babel import gettext
 import re
 from searx.url_utils import urlparse, parse_qsl
-from flask import request
 from searx import settings
 
 
@@ -26,12 +25,12 @@ def extract_doi(url):
     return None
 
 
-def get_doi_resolver():
+def get_doi_resolver(args, preference_doi_resolver):
     doi_resolvers = settings['doi_resolvers']
-    doi_resolver = request.args.get('doi_resolver', request.preferences.get_value('doi_resolver'))[0]
+    doi_resolver = args.get('doi_resolver', preference_doi_resolver)[0]
     if doi_resolver not in doi_resolvers:
         doi_resolvers = settings['default_doi_resolver']
-    return doi_resolvers[doi_resolver]
+    return doi_resolver
 
 
 def on_result(request, search, result):
@@ -40,6 +39,6 @@ def on_result(request, search, result):
         for suffix in ('/', '.pdf', '/full', '/meta', '/abstract'):
             if doi.endswith(suffix):
                 doi = doi[:-len(suffix)]
-        result['url'] = get_doi_resolver() + doi
+        result['url'] = get_doi_resolver(request.args, request.preferences.get_value('doi_resolver')) + doi
         result['parsed_url'] = urlparse(result['url'])
     return True

+ 1 - 1
searx/preferences.py

@@ -15,7 +15,7 @@ LANGUAGE_CODES = [l[0] for l in languages]
 LANGUAGE_CODES.append('all')
 DISABLED = 0
 ENABLED = 1
-DOI_RESOLVERS = [r for r in settings['doi_resolvers'].keys()]
+DOI_RESOLVERS = list(settings['doi_resolvers'])
 
 
 class MissingArgumentException(Exception):

+ 12 - 17
searx/templates/oscar/preferences.html

@@ -118,6 +118,18 @@
                             <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>
@@ -223,23 +235,6 @@
                             </div>
                         </div>
                         {% endfor %}
-                        <div class="panel panel-default">
-                            <div class="panel-heading">
-                                <h3 class="panel-title">{{ _('OA DOI rewrite') }}</h3>
-                            </div>
-                            <div class="panel-body">
-                                <div class="col-xs-6 col-sm-4 col-md-6">{{ _('Avoid paywalls by redirecting to open-access versions of publications when available') }}</div>
-                                <div class="col-xs-6 col-sm-4 col-md-6">
-                                    <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>
-                                </div>
-                            </div>
-                        </div>
                     </div>
                 </fieldset>
             </div>

+ 2 - 9
searx/webapp.py

@@ -66,6 +66,7 @@ from searx.search import SearchWithPlugins, get_search_query_from_webapp
 from searx.query import RawTextQuery
 from searx.autocomplete import searx_bang, backends as autocomplete_backends
 from searx.plugins import plugins
+from searx.plugins.oa_doi_rewrite import get_doi_resolver
 from searx.preferences import Preferences, ValidationException
 from searx.answerers import answerers
 from searx.url_utils import urlencode, urlparse, urljoin
@@ -164,14 +165,6 @@ def get_locale():
     return locale
 
 
-def get_doi_resolver():
-    doi_resolvers = settings['doi_resolvers']
-    doi_resolver = request.args.get('doi_resolver', request.preferences.get_value('doi_resolver'))[0]
-    if doi_resolver not in doi_resolvers:
-        doi_resolvers = settings['default_doi_resolver']
-    return doi_resolver
-
-
 # code-highlighter
 @app.template_filter('code_highlighter')
 def code_highlighter(codelines, language=None):
@@ -704,7 +697,7 @@ def preferences():
                   themes=themes,
                   plugins=plugins,
                   doi_resolvers=settings['doi_resolvers'],
-                  current_doi_resolver=get_doi_resolver(),
+                  current_doi_resolver=get_doi_resolver(request.args, request.preferences.get_value('doi_resolver')),
                   allowed_plugins=allowed_plugins,
                   theme=get_current_theme_name(),
                   preferences_url_params=request.preferences.get_as_url_params(),