@@ -25,7 +25,7 @@ if __name__ == "__main__":
2525from flask import Flask, request, flash, render_template, url_for, Response
2626import ConfigParser
2727from os import getenv
28−from searx.engines import search, engines
28+from searx.engines import search, categories
2929import json
3030
3131cfg = ConfigParser.SafeConfigParser()
@@ -51,27 +51,36 @@ opensearch_xml = '''<?xml version="1.0" encoding="utf-8"?>
5151'''
5252
5353def render(template_name, **kwargs):
54− kwargs['engines'] = engines.keys()
54+ global categories
55+ kwargs['categories'] = categories.keys()
56+ if not 'selected_categories' in kwargs:
57+ kwargs['selected_categories'] = ['general']
5558 return render_template(template_name, **kwargs)
5659
5760@app.route('/', methods=['GET', 'POST'])
5861def index():
62+ global categories
5963 if request.method=='POST':
6064 if not request.form.get('q'):
6165 flash('Wrong post data')
6266 return render('index.html')
6367 selected_engines = []
68+ selected_categories = []
6469 for pd_name,pd in request.form.items():
65− if pd_name.startswith('engine_'):
66− selected_engines.append(pd_name[7:])
70+ if pd_name.startswith('category_'):
71+ category = pd_name[9:]
72+ if not category in categories:
73+ continue
74+ selected_categories.append(category)
75+ selected_engines.extend(x.name for x in categories[category])
6776 if not len(selected_engines):
68− selected_engines = engines.keys()
77+ selected_engines = [x.name for x in categories['general']]
6978 query = request.form['q'].encode('utf-8')
7079 results = search(query, request, selected_engines)
7180 if request.form.get('format') == 'json':
7281 # TODO HTTP headers
7382 return json.dumps({'query': query, 'results': results})
74− return render('results.html', results=results, q=query.decode('utf-8'))
83+ return render('results.html', results=results, q=query.decode('utf-8'), selected_categories=selected_categories)
7584 return render('index.html')
7685
7786@app.route('/favicon.ico', methods=['GET'])