diff options
| -rw-r--r-- | app.py | 11 | ||||
| -rw-r--r-- | templates/index.html | 43 |
2 files changed, 41 insertions, 13 deletions
@@ -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) { |
