mirror of
https://github.com/simon987/od-database.git
synced 2025-04-19 18:36:44 +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 = 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
|
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
|
match_all = "all" in request.args
|
||||||
|
|
||||||
field_name = "field_name" in request.args
|
field_name = "field_name" in request.args
|
||||||
@ -260,7 +265,8 @@ def search():
|
|||||||
|
|
||||||
if len(q) >= 3:
|
if len(q) >= 3:
|
||||||
try:
|
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)
|
hits = db.join_website_on_search_result(hits)
|
||||||
except InvalidQueryException as e:
|
except InvalidQueryException as e:
|
||||||
flash("<strong>Invalid query:</strong> " + str(e), "warning")
|
flash("<strong>Invalid query:</strong> " + str(e), "warning")
|
||||||
@ -277,7 +283,8 @@ def search():
|
|||||||
extensions=",".join(extensions),
|
extensions=",".join(extensions),
|
||||||
size_min=size_min, size_max=size_max,
|
size_min=size_min, size_max=size_max,
|
||||||
match_all=match_all,
|
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")
|
@app.route("/contribute")
|
||||||
|
@ -16,7 +16,7 @@ class SearchEngine:
|
|||||||
def import_json(self, in_str: str, website_id: int):
|
def import_json(self, in_str: str, website_id: int):
|
||||||
raise NotImplementedError
|
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
|
raise NotImplementedError
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
@ -142,7 +142,7 @@ class ElasticSearchEngine(SearchEngine):
|
|||||||
action_string = '{"index":{}}\n'
|
action_string = '{"index":{}}\n'
|
||||||
return "\n".join("".join([action_string, ujson.dumps(doc)]) for doc in docs)
|
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 = []
|
filters = []
|
||||||
if extensions:
|
if extensions:
|
||||||
@ -159,6 +159,17 @@ class ElasticSearchEngine(SearchEngine):
|
|||||||
|
|
||||||
filters.append(new_filter)
|
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, [])
|
sort_by = ElasticSearchEngine.SORT_ORDERS.get(sort_order, [])
|
||||||
|
|
||||||
page = self.es.search(body={
|
page = self.es.search(body={
|
||||||
|
@ -216,3 +216,16 @@ a:hover {
|
|||||||
.irs {
|
.irs {
|
||||||
margin-bottom: 1em;
|
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>
|
||||||
|
|
||||||
</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 %}
|
{% endblock body %}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<link href="/static/css/bootstrap.min.css" rel="stylesheet" type="text/css">
|
<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.css" rel="stylesheet" type="text/css">
|
||||||
<link href="/static/css/ion.rangeSlider.skinFlat.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>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
@ -29,6 +29,11 @@
|
|||||||
<input title="File size" id="sizeSlider">
|
<input title="File size" id="sizeSlider">
|
||||||
<input type="hidden" name="size_min" id="sizeMin" value="{{ size_min }}">
|
<input type="hidden" name="size_min" id="sizeMin" value="{{ size_min }}">
|
||||||
<input type="hidden" name="size_max" id="sizeMax" value="{{ size_max }}">
|
<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">
|
<div class="form-row">
|
||||||
{# File extension #}
|
{# File extension #}
|
||||||
@ -151,11 +156,11 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{% if results["hits"]["total"] > (p + 1) * per_page %}
|
{% 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>
|
class="btn btn-primary" style="float: right">Next</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if p > 0 %}
|
{% 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>
|
class="btn btn-primary">Previous</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@ -178,7 +183,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
//Size slider
|
//Size slider
|
||||||
var slider = $("#sizeSlider").ionRangeSlider({
|
$("#sizeSlider").ionRangeSlider({
|
||||||
type: "double",
|
type: "double",
|
||||||
grid: false,
|
grid: false,
|
||||||
force_edges: true,
|
force_edges: true,
|
||||||
@ -210,6 +215,27 @@
|
|||||||
document.getElementById("sizeMax").value = size_max;
|
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>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user