mirror of
https://github.com/simon987/od-database.git
synced 2025-04-20 02:46:45 +00:00
Added option to choose results per page
This commit is contained in:
parent
ab25d821c6
commit
306b0ed0fe
14
app.py
14
app.py
@ -95,20 +95,28 @@ def websites():
|
|||||||
@app.route("/search")
|
@app.route("/search")
|
||||||
def search():
|
def search():
|
||||||
|
|
||||||
|
RESULTS_PER_PAGE = (25, 50, 100, 250, 1000)
|
||||||
|
|
||||||
q = request.args.get("q") if "q" in request.args else ""
|
q = request.args.get("q") if "q" in request.args else ""
|
||||||
sort_order = request.args.get("sort_order") if "sort_order" in request.args else "score"
|
sort_order = request.args.get("sort_order") if "sort_order" in request.args else "score"
|
||||||
page = int(request.args.get("p")) if "p" in request.args else 0
|
|
||||||
|
page = request.args.get("p") if "p" in request.args else "0"
|
||||||
|
page = int(page) if page.isdigit() else 0
|
||||||
|
|
||||||
|
per_page = request.args.get("per_page") if "per_page" in request.args else "50"
|
||||||
|
per_page = int(per_page) if per_page.isdigit() else "50"
|
||||||
|
per_page = per_page if per_page in RESULTS_PER_PAGE else 50
|
||||||
|
|
||||||
if q:
|
if q:
|
||||||
try:
|
try:
|
||||||
hits = db.search(q, 100, page, sort_order)
|
hits = db.search(q, per_page, page, sort_order)
|
||||||
except InvalidQueryException as e:
|
except InvalidQueryException as e:
|
||||||
flash("<strong>Invalid query:</strong> " + str(e), "warning")
|
flash("<strong>Invalid query:</strong> " + str(e), "warning")
|
||||||
return redirect("/search")
|
return redirect("/search")
|
||||||
else:
|
else:
|
||||||
hits = None
|
hits = None
|
||||||
|
|
||||||
return render_template("search.html", results=hits, q=q, p=page, sort_order=sort_order)
|
return render_template("search.html", results=hits, q=q, p=page, sort_order=sort_order, per_page=per_page)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/contribute")
|
@app.route("/contribute")
|
||||||
|
@ -207,14 +207,13 @@ class Database:
|
|||||||
|
|
||||||
return stats
|
return stats
|
||||||
|
|
||||||
def search(self, q, limit: int = 25, offset: int = 0, sort_order="score"):
|
def search(self, q, limit: int = 50, offset: int = 0, sort_order="score"):
|
||||||
|
|
||||||
with sqlite3.connect(self.db_path) as conn:
|
with sqlite3.connect(self.db_path) as conn:
|
||||||
cursor = conn.cursor()
|
cursor = conn.cursor()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
order_by = Database.SORT_ORDERS.get(sort_order, "")
|
order_by = Database.SORT_ORDERS.get(sort_order, "")
|
||||||
print(order_by)
|
|
||||||
cursor.execute("SELECT size, Website.url, WebsitePath.path, File.name, Website.id FROM File_index "
|
cursor.execute("SELECT size, Website.url, WebsitePath.path, File.name, Website.id FROM File_index "
|
||||||
"INNER JOIN File ON File.id = File_index.rowid "
|
"INNER JOIN File ON File.id = File_index.rowid "
|
||||||
"INNER JOIN WebsitePath ON File.path_id = WebsitePath.id "
|
"INNER JOIN WebsitePath ON File.path_id = WebsitePath.id "
|
||||||
|
@ -15,14 +15,25 @@
|
|||||||
<div class="form-group col-md-8">
|
<div class="form-group col-md-8">
|
||||||
<input class="form-control" name="q" id="q" placeholder="Full-text Query" value="{{ q }}">
|
<input class="form-control" name="q" id="q" placeholder="Full-text Query" value="{{ q }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group col-md-4">
|
<div class="form-group col-md-2">
|
||||||
<select class="form-control" name="sort_order" title="Sort order">
|
<select class="form-control" name="sort_order" title="Sort order">
|
||||||
|
<option disabled>Select sort order</option>
|
||||||
<option value="score" {{ "selected" if sort_order == "score" else "" }}>Relevance</option>
|
<option value="score" {{ "selected" if sort_order == "score" else "" }}>Relevance</option>
|
||||||
<option value="size_asc" {{ "selected" if sort_order == "size_asc" else "" }}>Size ascending</option>
|
<option value="size_asc" {{ "selected" if sort_order == "size_asc" else "" }}>Size ascending</option>
|
||||||
<option value="size_dsc" {{ "selected" if sort_order == "size_dsc" else "" }}>Size descending</option>
|
<option value="size_dsc" {{ "selected" if sort_order == "size_dsc" else "" }}>Size descending</option>
|
||||||
<option value="none" {{ "selected" if sort_order == "none" else "" }}>No order (faster)</option>
|
<option value="none" {{ "selected" if sort_order == "none" else "" }}>No order (faster)</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group col-md-2">
|
||||||
|
<select class="form-control" name="per_page" title="Results per page">
|
||||||
|
<option disabled>Results per page</option>
|
||||||
|
<option{{ " selected" if per_page == 25 }}>25</option>
|
||||||
|
<option{{ " selected" if per_page == 50 }}>50</option>
|
||||||
|
<option{{ " selected" if per_page == 100 }}>100</option>
|
||||||
|
<option{{ " selected" if per_page == 250 }}>250</option>
|
||||||
|
<option{{ " selected" if per_page == 1000 }}>1000</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input class="btn btn-primary btn-shadow" type="submit" value="Search">
|
<input class="btn btn-primary btn-shadow" type="submit" value="Search">
|
||||||
@ -62,7 +73,7 @@
|
|||||||
</td>
|
</td>
|
||||||
{# File size #}
|
{# File size #}
|
||||||
<td style="white-space: nowrap; vertical-align: top; text-align: right; font-size: 14px">
|
<td style="white-space: nowrap; vertical-align: top; text-align: right; font-size: 14px">
|
||||||
{{ hit[0] | filesizeformat }}
|
{{ hit[0] | filesizeformat if hit[0] >= 0 else "?"}}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -70,9 +81,11 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a href="/search?q={{ q }}&p={{ p + 1 }}" class="btn btn-primary" style="float: right">Next</a>
|
<a href="/search?q={{ q }}&p={{ p + 1 }}&sort_order={{ sort_order }}&per_page={{ per_page }}"
|
||||||
|
class="btn btn-primary" style="float: right">Next</a>
|
||||||
{% if p > 0 %}
|
{% if p > 0 %}
|
||||||
<a href="/search?q={{ q }}&p={{ p - 1 }}" class="btn btn-primary">Previous</a>
|
<a href="/search?q={{ q }}&p={{ p - 1 }}&sort_order={{ sort_order }}&per_page={{ per_page }}"
|
||||||
|
class="btn btn-primary">Previous</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user