summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2016-06-19 14:13:29 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2016-06-19 14:13:29 +0200
commitfa9fdb70b3c7b32f457a71859ad2647860166d24 (patch)
tree0591008637bcd3198783f88db608c1cbfcdada09
parent60e3ab8f5edd4513581d674e2b18acdf2d32af10 (diff)
downloadjokevote-fa9fdb70b3c7b32f457a71859ad2647860166d24.tar.gz
jokevote-fa9fdb70b3c7b32f457a71859ad2647860166d24.zip
expose sort options
-rw-r--r--app.py11
-rw-r--r--templates/index.html43
2 files changed, 41 insertions, 13 deletions
diff --git a/app.py b/app.py
index 8944a49..52cb4fa 100644
--- a/app.py
+++ b/app.py
@@ -302,10 +302,13 @@ class DBProxy(object):
ret_jokes.append(ret_joke)
def sorter(j):
- if sortby == 'rank':
- return (j['score']+1)/pow(j['freshness']+1, 2)
+ if sortby == 'unread':
+ return -j['freshness'] if j['upvoted'] or j['downvoted'] else j['freshness']
+ if sortby == 'age':
+ return 1-j['freshness']
if sortby == 'score':
return j['score']
+ return (j['score']+1)/pow(j['freshness']+1, 2) # 'rank' or invalid
ret_jokes = sorted(ret_jokes, key=sorter, reverse=True)
return ret_jokes
@@ -444,12 +447,13 @@ def root():
@app.route('/page/<int:num>')
def page(num):
search = request.args.get('filter')
+ sortmethod = str(request.args.get('sort')) or 'rank'
if search:
# TODO find a cleaner way
search = re.sub(r"^" + Markup.tagmark, "#", search)
search = search.split(Markup.spacemark)
perpage = abs(int(request.args.get('perpage') or 10))
- jokes = db().get_jokes(user=userid(), search=search)
+ jokes = db().get_jokes(user=userid(), search=search, sortby=sortmethod)
user = {'loggedin': False}
if 'userlogin' in session:
user['loggedin'] = True
@@ -459,6 +463,7 @@ def page(num):
'index.html',
currentpage=num,
query=str(request.query_string, 'utf-8'),
+ selected_sort=sortmethod,
tags=search,
perpage=perpage,
jokes=jokes,
diff --git a/templates/index.html b/templates/index.html
index 861f259..b08f68b 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -34,17 +34,34 @@
</div>
</form>
{% endif %}
- <form>
- <div class="col s9 input-field">
- <label for="search">Stichworte</label>
- <input type="text" name="filter">
+ <div class="col s12">
+ <form>
+ <div class="col s9 input-field">
+ <label for="search">Stichworte</label>
+ <input type="text" name="filter">
+ </div>
+ <div class="col s3">
+ <button class="btn" type="submit">Suchen</button>
+ </div>
+ </form>
+ </div>
+ <div class="right">
+ <div class="col offset-s5 s5">
+ <form>
+ <div class="input-field">
+ <select name="sort" onchange="this.form.submit();">
+ {% for meth in [["rank", "Angesagt"], ["score", "Punkte"], ["age", "Alter"], ["unread", "Ungelesen"]] %}
+ <option value="{{ meth[0] }}"{% if selected_sort == meth[0] %} selected{% endif %}>{{ meth[1] }}</option>
+ {% endfor %}
+ </select>
+ <label>Sortierung</label>
+ </div>
+ <noscript><input type="submit" value="Anzeigen"></noscript>
+ </form>
</div>
- <div class="col s3">
- <button class="btn" type="submit">Suchen</button>
+ <div class="col s2">
+ <a id="export" target="_blank" class="btn-floating btn-large right" href="/export{% if query %}?{{ query }}{% endif %}"><i class="material-icons">file_download</i></a>
</div>
- </form>
- <div class="col s2 m12 l2 right">
- <a id="export" target="_blank" class="btn-floating btn-large right" href="/export{% if query %}?{{ query }}{% endif %}"><i class="material-icons">file_download</i></a>
</div>
</div>
</header>
@@ -148,11 +165,17 @@
</main>
</div>
<script type="text/javascript">
+ function materialjs() {
+ $('select').material_select();
+ }
+
$(document).ready(function() {
+ materialjs();
$('#main').smoothState({
prefetch: true,
locationHeader: 'X-SmoothState-Location',
- blacklist: '#export'
+ blacklist: '#export',
+ onAfter: materialjs
});
});
function openEditor(me) {