on master help sign in
[enh] paging support
commit8bb94e3dc4c35042ec5fb16f412331f4b8ca6c8a authorasciimoo <asciimoo@gmail.com> dateWed 29 Jan 2014, 20:52 (13 years ago) parent93b5ecd
4 files changed+41−10
searx/engines/__init__.py+7−1 searx/static/css/style.css−2 searx/templates/results.html+22−4 searx/webapp.py+12−3
searx/engines/__init__.py+7−1
@@ -53,6 +53,8 @@ if not 'engines' in settings or not settings['engines']:
5353for engine_data in settings['engines']:
5454 engine_name = engine_data['engine']
5555 engine = load_module(engine_name + '.py')
56+ if not hasattr(engine, 'paging'):
57+ engine.paging = False
5658 for param_name in engine_data:
5759 if param_name == 'engine':
5860 continue
@@ -156,7 +158,7 @@ def score_results(results):
156158 return sorted(results, key=itemgetter('score'), reverse=True)
157159
158160
159−def search(query, request, selected_engines):
161+def search(query, request, selected_engines, pageno=1):
160162 global engines, categories, number_of_searches
161163 requests = []
162164 results = {}
@@ -171,10 +173,14 @@ def search(query, request, selected_engines):
171173
172174 engine = engines[selected_engine['name']]
173175
176+ if pageno > 1 and not engine.paging:
177+ continue
178+
174179 request_params = default_request_params()
175180 request_params['headers']['User-Agent'] = user_agent
176181 request_params['category'] = selected_engine['category']
177182 request_params['started'] = datetime.now()
183+ request_params['pageno'] = pageno
178184 request_params = engine.request(query, request_params)
179185
180186 callback = make_callback(
searx/static/css/style.css−2
@@ -151,8 +151,6 @@ tr:hover td { background: #DDDDDD; }
151151
152152#results { margin: 10px; padding: 0; }
153153
154−#result_count { font-size: 0.8em; margin: 2px 0 2px 0; padding: 0 }
155−
156154#suggestions { position: absolute; left: 54em; width: 12em; margin: 0 2px 5px 5px; padding: 0 2px 2px 2px; }
157155#suggestions span { display: block; font-size: 0.8em; margin: 0 2px 10px 2px; padding: 0; }
158156#suggestions form { display: block; }
searx/templates/results.html+22−4
@@ -11,10 +11,6 @@
1111 {% endif %}
1212
1313
14− <div id ="result_count">
15− {{ _('Number of results') }}: {{ number_of_results }}
16− </div>
17−
1814 {% for result in results %}
1915 {% if result['template'] %}
2016 {% include 'result_templates/'+result['template'] %}
@@ -22,6 +18,28 @@
2218 {% include 'result_templates/default.html' %}
2319 {% endif %}
2420 {% endfor %}
21+
22+ {% if paging %}
23+ <div id="paging">
24+ {% if pageno > 1 %}
25+ <form method="post" action="/">
26+ <div class="left">
27+ <input type="hidden" name="q" value="{{ q }}" />
28+ <input type="hidden" name="pageno" value="{{ pageno-1 }}" />
29+ <input type="submit" value="<< {{ _('previous page') }}" />
30+ </div>
31+ </form>
32+ {% endif %}
33+ <form method="post" action="/">
34+ <div class="left">
35+ <input type="hidden" name="q" value="{{ q }}" />
36+ <input type="hidden" name="pageno" value="{{ pageno+1 }}" />
37+ <input type="submit" value="{{ _('next page') }} >>" />
38+ </div>
39+ </form>
40+ </div>
41+ {% endif %}
42+
2543 <div id="apis">
2644 {{ _('Download results') }}
2745 <form method="post" action="/">
searx/webapp.py+12−3
@@ -129,7 +129,7 @@ def parse_query(query):
129129
130130@app.route('/', methods=['GET', 'POST'])
131131def index():
132− global categories
132+ paging = False
133133
134134 if request.method == 'POST':
135135 request_data = request.form
@@ -138,6 +138,12 @@ def index():
138138 if not request_data.get('q'):
139139 return render('index.html')
140140
141+ pageno_param = request_data.get('pageno', '1')
142+ if not pageno_param.isdigit() or int(pageno_param) < 1:
143+ return render('index.html')
144+
145+ pageno = int(pageno_param)
146+
141147 selected_categories = []
142148
143149 query, selected_engines = parse_query(request_data['q'].encode('utf-8'))
@@ -166,10 +172,12 @@ def index():
166172 'name': x.name}
167173 for x in categories[categ])
168174
169− results, suggestions = search(query, request, selected_engines)
175+ results, suggestions = search(query, request, selected_engines, pageno)
170176
171177 featured_results = []
172178 for result in results:
179+ if not paging and engines[result['engine']].paging:
180+ paging = True
173181 if request_data.get('format', 'html') == 'html':
174182 if 'content' in result:
175183 result['content'] = highlight_content(result['content'], query)
@@ -219,7 +227,8 @@ def index():
219227 results=results,
220228 q=request_data['q'],
221229 selected_categories=selected_categories,
222− number_of_results=len(results) + len(featured_results),
230+ paging=paging,
231+ pageno=pageno,
223232 featured_results=featured_results,
224233 suggestions=suggestions
225234 )