diff --git a/app.py b/app.py index 9acbef0..45783ae 100644 --- a/app.py +++ b/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("Invalid query: " + 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") diff --git a/search/search.py b/search/search.py index f2102d8..bdbc6d6 100644 --- a/search/search.py +++ b/search/search.py @@ -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={ diff --git a/static/css/main.css b/static/css/main.css index 0d858ad..c753c18 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -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; + } } \ No newline at end of file diff --git a/static/img/forkme_right_white_ffffff.png b/static/img/forkme_right_white_ffffff.png new file mode 100644 index 0000000..8fe3a7e Binary files /dev/null and b/static/img/forkme_right_white_ffffff.png differ diff --git a/templates/home.html b/templates/home.html index 9d99914..8b567ff 100644 --- a/templates/home.html +++ b/templates/home.html @@ -35,4 +35,8 @@ + + + Fork me on GitHub + {% endblock body %} diff --git a/templates/layout.html b/templates/layout.html index 183410b..b6cefb3 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -18,7 +18,7 @@ - + diff --git a/templates/search.html b/templates/search.html index a4046df..e8be9d0 100644 --- a/templates/search.html +++ b/templates/search.html @@ -29,6 +29,11 @@ + {# Date #} +
File date
+ + +
{# File extension #} @@ -151,11 +156,11 @@
{% if results["hits"]["total"] > (p + 1) * per_page %} - Next {% endif %} {% if p > 0 %} - Previous {% 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; + } + });