浏览代码

[enh] plugin preferences - server-side ++ oscar theme

Adam Tauber 10 年前
父节点
当前提交
37c58fd9ca
共有 2 个文件被更改,包括 51 次插入9 次删除
  1. 25
    6
      searx/templates/oscar/preferences.html
  2. 26
    3
      searx/webapp.py

+ 25
- 6
searx/templates/oscar/preferences.html 查看文件

@@ -1,4 +1,4 @@
1
-{% from 'oscar/macros.html' import preferences_item_header, preferences_item_header_rtl, preferences_item_footer, preferences_item_footer_rtl %}
1
+{% from 'oscar/macros.html' import preferences_item_header, preferences_item_header_rtl, preferences_item_footer, preferences_item_footer_rtl, checkbox_toggle %}
2 2
 {% extends "oscar/base.html" %}
3 3
 {% block title %}{{ _('preferences') }} - {% endblock %}
4 4
 {% block site_alert_warning_nojs %}
@@ -16,6 +16,7 @@
16 16
     <ul class="nav nav-tabs nav-justified hide_if_nojs" role="tablist" style="margin-bottom:20px;">
17 17
       <li class="active"><a href="#tab_general" role="tab" data-toggle="tab">{{ _('General') }}</a></li>
18 18
       <li><a href="#tab_engine" role="tab" data-toggle="tab">{{ _('Engines') }}</a></li>
19
+      <li><a href="#tab_plugins" role="tab" data-toggle="tab">{{ _('Plugins') }}</a></li>
19 20
     </ul>
20 21
 
21 22
     <!-- Tab panes -->
@@ -139,11 +140,7 @@
139 140
                                 <div class="col-xs-6 col-sm-4 col-md-4">{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})</div>
140 141
                                 {% endif %}
141 142
                                 <div class="col-xs-6 col-sm-4 col-md-4">
142
-                                    <div class="checkbox">
143
-                                    <input class="hidden" type="checkbox" id="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}" name="engine_{{ search_engine.name }}__{{ categ }}"{% if (search_engine.name, categ) in blocked_engines %} checked="checked"{% endif %} />
144
-                                    <label class="btn btn-success label_hide_if_checked" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Block') }}</label>
145
-                                    <label class="btn btn-danger label_hide_if_not_checked" for="engine_{{ categ|replace(' ', '_') }}_{{ search_engine.name|replace(' ', '_') }}">{{ _('Allow') }}</label>
146
-                                    </div>
143
+                                    {{ checkbox_toggle('engine_' + search_engine.name|replace(' ', '_') + '__' + categ|replace(' ', '_'), (search_engine.name, categ) in blocked_engines) }}
147 144
                                 </div>
148 145
                                 {% if rtl %}
149 146
                                 <div class="col-xs-6 col-sm-4 col-md-4">{{ search_engine.name }} ({{ shortcuts[search_engine.name] }})&lrm;</div>
@@ -157,6 +154,28 @@
157 154
                 {% endfor %}
158 155
             </div>
159 156
         </div>
157
+        <div class="tab-pane active_if_nojs" id="tab_plugins">
158
+            <noscript>
159
+                <h3>{{ _('Plugins') }}</h3>
160
+            </noscript>
161
+            <fieldset>
162
+            <div class="container-fluid">
163
+                {% for plugin in plugins %}
164
+                <div class="panel panel-default">
165
+                    <div class="panel-heading">
166
+                        <h3 class="panel-title">{{ plugin.name }}</h3>
167
+                    </div>
168
+                    <div class="panel-body">
169
+                        <div class="col-xs-6 col-sm-4 col-md-6">{{ plugin.description }}</div>
170
+                        <div class="col-xs-6 col-sm-4 col-md-6">
171
+                            {{ checkbox_toggle('plugin_' + plugin.id, plugin.id not in allowed_plugins) }}
172
+                        </div>
173
+                    </div>
174
+                </div>
175
+                {% endfor %}
176
+            </div>
177
+            </fieldset>
178
+        </div>
160 179
     </div>
161 180
     <p class="text-muted" style="margin:20px 0;">{{ _('These settings are stored in your cookies, this allows us not to store this data about you.') }}
162 181
     <br />

+ 26
- 3
searx/webapp.py 查看文件

@@ -317,8 +317,8 @@ def pre_request():
317 317
     allowed_plugins = request.cookies.get('allowed_plugins', '').split(',')
318 318
     disabled_plugins = request.cookies.get('disabled_plugins', '').split(',')
319 319
     for plugin in plugins:
320
-        if ((plugin.default_on and plugin.name not in disabled_plugins)
321
-                or plugin.name in allowed_plugins):
320
+        if ((plugin.default_on and plugin.id not in disabled_plugins)
321
+                or plugin.id in allowed_plugins):
322 322
             request.user_plugins.append(plugin)
323 323
 
324 324
 
@@ -508,6 +508,7 @@ def preferences():
508 508
         blocked_engines = get_blocked_engines(engines, request.cookies)
509 509
     else:  # on save
510 510
         selected_categories = []
511
+        post_disabled_plugins = []
511 512
         locale = None
512 513
         autocomplete = ''
513 514
         method = 'POST'
@@ -534,14 +535,34 @@ def preferences():
534 535
                 safesearch = pd
535 536
             elif pd_name.startswith('engine_'):
536 537
                 if pd_name.find('__') > -1:
537
-                    engine_name, category = pd_name.replace('engine_', '', 1).split('__', 1)
538
+                    # TODO fix underscore vs space
539
+                    engine_name, category = [x.replace('_', ' ') for x in
540
+                                             pd_name.replace('engine_', '', 1).split('__', 1)]
538 541
                     if engine_name in engines and category in engines[engine_name].categories:
539 542
                         blocked_engines.append((engine_name, category))
540 543
             elif pd_name == 'theme':
541 544
                 theme = pd if pd in themes else default_theme
545
+            elif pd_name.startswith('plugin_'):
546
+                plugin_id = pd_name.replace('plugin_', '', 1)
547
+                if not any(plugin.id == plugin_id for plugin in plugins):
548
+                    continue
549
+                post_disabled_plugins.append(plugin_id)
542 550
             else:
543 551
                 resp.set_cookie(pd_name, pd, max_age=cookie_max_age)
544 552
 
553
+        disabled_plugins = []
554
+        allowed_plugins = []
555
+        for plugin in plugins:
556
+            if plugin.default_on:
557
+                if plugin.id in post_disabled_plugins:
558
+                    disabled_plugins.append(plugin.id)
559
+            elif plugin.id not in post_disabled_plugins:
560
+                allowed_plugins.append(plugin.id)
561
+
562
+        resp.set_cookie('disabled_plugins', ','.join(disabled_plugins), max_age=cookie_max_age)
563
+
564
+        resp.set_cookie('allowed_plugins', ','.join(allowed_plugins), max_age=cookie_max_age)
565
+
545 566
         resp.set_cookie(
546 567
             'blocked_engines', ','.join('__'.join(e) for e in blocked_engines),
547 568
             max_age=cookie_max_age
@@ -591,6 +612,8 @@ def preferences():
591 612
                   autocomplete_backends=autocomplete_backends,
592 613
                   shortcuts={y: x for x, y in engine_shortcuts.items()},
593 614
                   themes=themes,
615
+                  plugins=plugins,
616
+                  allowed_plugins=[plugin.id for plugin in request.user_plugins],
594 617
                   theme=get_current_theme_name())
595 618
 
596 619