mirror of
https://github.com/simon987/od-database.git
synced 2025-04-18 01:46:46 +00:00
Added date filter in search options and github banner on homepage
This commit is contained in:
parent
b570e81bec
commit
6a3d540de2
11
app.py
11
app.py
@ -240,6 +240,11 @@ def search():
|
||||
size_max = request.args.get("size_max") if "size_max" in request.args else "size_max"
|
||||
size_max = int(size_max) if size_max.isdigit() else 0
|
||||
|
||||
date_min = request.args.get("date_min") if "date_min" in request.args else "date_min"
|
||||
date_min = int(date_min) if date_min.isdigit() else 0
|
||||
date_max = request.args.get("date_max") if "date_max" in request.args else "date_max"
|
||||
date_max = int(date_max) if date_max.isdigit() else 0
|
||||
|
||||
match_all = "all" in request.args
|
||||
|
||||
field_name = "field_name" in request.args
|
||||
@ -260,7 +265,8 @@ def search():
|
||||
|
||||
if len(q) >= 3:
|
||||
try:
|
||||
hits = searchEngine.search(q, page, per_page, sort_order, extensions, size_min, size_max, match_all, fields)
|
||||
hits = searchEngine.search(q, page, per_page, sort_order,
|
||||
extensions, size_min, size_max, match_all, fields, date_min, date_max)
|
||||
hits = db.join_website_on_search_result(hits)
|
||||
except InvalidQueryException as e:
|
||||
flash("<strong>Invalid query:</strong> " + str(e), "warning")
|
||||
@ -277,7 +283,8 @@ def search():
|
||||
extensions=",".join(extensions),
|
||||
size_min=size_min, size_max=size_max,
|
||||
match_all=match_all,
|
||||
field_trigram=field_trigram, field_path=field_path, field_name=field_name)
|
||||
field_trigram=field_trigram, field_path=field_path, field_name=field_name,
|
||||
date_min=date_min, date_max=date_max)
|
||||
|
||||
|
||||
@app.route("/contribute")
|
||||
|
@ -16,7 +16,7 @@ class SearchEngine:
|
||||
def import_json(self, in_str: str, website_id: int):
|
||||
raise NotImplementedError
|
||||
|
||||
def search(self, query, page, per_page, sort_order, extension, size_min, size_max, match_all, fields) -> {}:
|
||||
def search(self, query, page, per_page, sort_order, extension, size_min, size_max, match_all, fields, date_min, date_max) -> {}:
|
||||
raise NotImplementedError
|
||||
|
||||
def reset(self):
|
||||
@ -142,7 +142,7 @@ class ElasticSearchEngine(SearchEngine):
|
||||
action_string = '{"index":{}}\n'
|
||||
return "\n".join("".join([action_string, ujson.dumps(doc)]) for doc in docs)
|
||||
|
||||
def search(self, query, page, per_page, sort_order, extensions, size_min, size_max, match_all, fields) -> {}:
|
||||
def search(self, query, page, per_page, sort_order, extensions, size_min, size_max, match_all, fields, date_min, date_max) -> {}:
|
||||
|
||||
filters = []
|
||||
if extensions:
|
||||
@ -159,6 +159,17 @@ class ElasticSearchEngine(SearchEngine):
|
||||
|
||||
filters.append(new_filter)
|
||||
|
||||
if date_min > 0 or date_max:
|
||||
date_filer = dict()
|
||||
new_filter = {"range": {"mtime": date_filer}}
|
||||
|
||||
if date_min > 0:
|
||||
date_filer["gte"] = date_min
|
||||
if date_max:
|
||||
date_filer["lte"] = date_max
|
||||
|
||||
filters.append(new_filter)
|
||||
|
||||
sort_by = ElasticSearchEngine.SORT_ORDERS.get(sort_order, [])
|
||||
|
||||
page = self.es.search(body={
|
||||
|
@ -215,4 +215,17 @@ a:hover {
|
||||
|
||||
.irs {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.github-banner {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 990px) {
|
||||
.github-banner {
|
||||
display: none;
|
||||
}
|
||||
}
|
BIN
static/img/forkme_right_white_ffffff.png
Normal file
BIN
static/img/forkme_right_white_ffffff.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.9 KiB |
@ -35,4 +35,8 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<a href="https://github.com/simon987">
|
||||
<img class="github-banner" src="/static/img/forkme_right_white_ffffff.png" alt="Fork me on GitHub">
|
||||
</a>
|
||||
{% endblock body %}
|
||||
|
@ -18,7 +18,7 @@
|
||||
<link href="/static/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/ion.rangeSlider.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/ion.rangeSlider.skinFlat.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/main.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/main.css?v=1" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
@ -29,6 +29,11 @@
|
||||
<input title="File size" id="sizeSlider">
|
||||
<input type="hidden" name="size_min" id="sizeMin" value="{{ size_min }}">
|
||||
<input type="hidden" name="size_max" id="sizeMax" value="{{ size_max }}">
|
||||
{# Date #}
|
||||
<div class="text-muted" style="text-align: center">File date</div>
|
||||
<input title="File date" id="dateSlider">
|
||||
<input type="hidden" name="date_min" id="dateMin" value="{{ date_min }}">
|
||||
<input type="hidden" name="date_max" id="dateMax" value="{{ date_max }}">
|
||||
|
||||
<div class="form-row">
|
||||
{# File extension #}
|
||||
@ -151,11 +156,11 @@
|
||||
</table>
|
||||
</div>
|
||||
{% if results["hits"]["total"] > (p + 1) * per_page %}
|
||||
<a href="/search?q={{ q }}&p={{ p + 1 }}&sort_order={{ sort_order }}&per_page={{ per_page }}&ext={{ extensions }}&size_min={{ size_min }}&size_max={{ size_max }}{{ "&field_path=on" if field_path else "" }}{{ "&field_name=on" if field_name else "" }}{{ "&field_trigram" if field_trigram else "" }}"
|
||||
<a href="/search?q={{ q }}&p={{ p + 1 }}&sort_order={{ sort_order }}&per_page={{ per_page }}&ext={{ extensions }}&size_min={{ size_min }}&size_max={{ size_max }}{{ "&field_path" if field_path else "" }}{{ "&field_name" if field_name else "" }}{{ "&field_trigram" if field_trigram else "" }}&date_min={{ date_min }}&date_max={{ date_max }}"
|
||||
class="btn btn-primary" style="float: right">Next</a>
|
||||
{% endif %}
|
||||
{% if p > 0 %}
|
||||
<a href="/search?q={{ q }}&p={{ p - 1 }}&sort_order={{ sort_order }}&per_page={{ per_page }}&ext={{ extensions }}&size_min={{ size_min }}&size_max={{ size_max }}{{ "&field_path=on" if field_path else "" }}{{ "&field_name=on" if field_name else "" }}{{ "&field_trigram" if field_trigram else "" }}"
|
||||
<a href="/search?q={{ q }}&p={{ p - 1 }}&sort_order={{ sort_order }}&per_page={{ per_page }}&ext={{ extensions }}&size_min={{ size_min }}&size_max={{ size_max }}{{ "&field_path" if field_path else "" }}{{ "&field_name" if field_name else "" }}{{ "&field_trigram" if field_trigram else "" }}&date_min={{ date_min }}&date_max={{ date_max }}"
|
||||
class="btn btn-primary">Previous</a>
|
||||
{% endif %}
|
||||
|
||||
@ -178,7 +183,7 @@
|
||||
});
|
||||
|
||||
//Size slider
|
||||
var slider = $("#sizeSlider").ionRangeSlider({
|
||||
$("#sizeSlider").ionRangeSlider({
|
||||
type: "double",
|
||||
grid: false,
|
||||
force_edges: true,
|
||||
@ -210,6 +215,27 @@
|
||||
document.getElementById("sizeMax").value = size_max;
|
||||
}
|
||||
});
|
||||
//Date slider
|
||||
$("#dateSlider").ionRangeSlider({
|
||||
type: "double",
|
||||
grid: false,
|
||||
force_edges: true,
|
||||
min: 0,
|
||||
max: Math.floor(Date.now()/1000),
|
||||
from: {{ date_min if date_min else 0 }},
|
||||
to: {{ date_max if date_max else "self.max"}},
|
||||
min_interval: 3600 * 24 * 7,
|
||||
step: 3600 * 24,
|
||||
drag_interval: true,
|
||||
prettify: function (num) {
|
||||
let date = (new Date(num*1000));
|
||||
return date.getUTCFullYear() + "-" + ("0" + (date.getUTCMonth()+1)).slice(-2) + "-" + ("0" + date.getUTCDate()).slice(-2)
|
||||
},
|
||||
onFinish: function (e) {
|
||||
document.getElementById("dateMin").value = e.from;
|
||||
document.getElementById("dateMax").value = e.to >= e.max ? null : e.to;
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
</div>
|
||||
|
Loading…
x
Reference in New Issue
Block a user