From 6a3d540de2e00519b663bea27a8a88d3476eacd2 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 27 Jun 2018 10:05:33 -0400 Subject: [PATCH] Added date filter in search options and github banner on homepage --- app.py | 11 ++++++-- search/search.py | 15 +++++++++-- static/css/main.css | 13 +++++++++ static/img/forkme_right_white_ffffff.png | Bin 0 -> 7027 bytes templates/home.html | 4 +++ templates/layout.html | 2 +- templates/search.html | 32 ++++++++++++++++++++--- 7 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 static/img/forkme_right_white_ffffff.png 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 0000000000000000000000000000000000000000..8fe3a7e1f3a2cb4b6fc54ca151dd5d84815c8820 GIT binary patch literal 7027 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�{T`{+3qo9Nl&SNi0dhoPBW1dp(#-pXTPIF>OKK zis+15lzg~2P?11>(|Q{qO-)V7P~9jf1G^3>WVJ7DWRf9gIXV+?JGFjQ@Nn_ODjI_Z z?APWNdG{&98v{4()-S6;wb2o2bmpgz?oXCmn9Y6q^f$I)8g2<#aN3 + + + 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; + } + });