From 3696c66314f700bc7ac132ac2bafad42594d05c9 Mon Sep 17 00:00:00 2001 From: Andreas <andreasv@fsmpi.rwth-aachen.de> Date: Sun, 23 Apr 2017 02:49:31 +0200 Subject: [PATCH] now using bootstrap style for paging --- editapi.py | 18 ++++++++++++++++++ jobs.py | 3 ++- server.py | 20 +++----------------- templates/changelog.html | 21 +++++++++++++++++---- templates/jobs_overview.html | 20 ++++++++++++++++++-- 5 files changed, 58 insertions(+), 24 deletions(-) diff --git a/editapi.py b/editapi.py index 2a235c6..07f5be7 100644 --- a/editapi.py +++ b/editapi.py @@ -161,3 +161,21 @@ def create(table): if 'ref' in request.values: return redirect(request.values['ref']) return str(id), 200 + +@app.route('/internal/changelog') +@register_navbar('Changelog', icon='book') +@mod_required +def changelog(): + if 'page' in request.args: + page = max(0, int(request.args['page'])) + else: + page = 0 + if 'pagesize' in request.args: + pagesize = min(500, int(request.args['pagesize'])) + else: + pagesize = 50 + changelog = query('SELECT * FROM changelog LEFT JOIN users ON (changelog.who = users.id) ORDER BY `when` DESC LIMIT ? OFFSET ?', pagesize, page*pagesize) + pagecount = math.ceil(query('SELECT count(id) as count FROM changelog')[0]['count']/pagesize) + for entry in changelog: + entry['path'] = '.'.join([entry['table'], entry['id_value'], entry['field']]) + return render_template('changelog.html', changelog=changelog, page=page, pagesize=pagesize, pagecount=pagecount) diff --git a/jobs.py b/jobs.py index 8d4b3de..59c50d0 100644 --- a/jobs.py +++ b/jobs.py @@ -15,6 +15,7 @@ def jobs_overview(): pagesize = min(500, int(request.args['pagesize'])) else: pagesize = 50 + pagecount = math.ceil(query('SELECT count(id) as count FROM jobs')[0]['count']/pagesize) worker = query('SELECT * FROM worker ORDER BY last_ping DESC') @@ -31,7 +32,7 @@ def jobs_overview(): 'worker': request.args.get('worker','%') } jobs = query('SELECT * FROM jobs WHERE (type like ?) AND (worker like ? OR (worker IS NULL AND ? = "%")) AND (state like ?) ORDER BY `time_created` DESC LIMIT ? OFFSET ?', filter['type'], filter['worker'], filter['worker'], filter['state'], pagesize, page*pagesize) - return render_template('jobs_overview.html',worker=worker,jobs=jobs, filter_values=filter_values, filter=filter, page=page, pagesize=pagesize) + return render_template('jobs_overview.html',worker=worker,jobs=jobs, filter_values=filter_values, filter=filter, page=page, pagesize=pagesize, pagecount=pagecount) def jobs_api_token_required(func): @wraps(func) diff --git a/server.py b/server.py index 7051544..8da2b74 100644 --- a/server.py +++ b/server.py @@ -12,6 +12,7 @@ import traceback import string from socket import gethostname from ipaddress import ip_address, ip_network +import math app = Flask(__name__) @@ -21,6 +22,8 @@ app.add_template_global(random.randint, name='randint') app.add_template_global(datetime, name='datetime') app.add_template_global(timedelta, name='timedelta') app.add_template_global(gethostname, name='gethostname') +app.add_template_global(min, name='min') +app.add_template_global(max, name='max') scheduler = sched.scheduler() def run_scheduler(): @@ -565,23 +568,6 @@ def auth(): # For use with nginx auth_request return Response("Login required", 401, {'WWW-Authenticate': 'Basic realm="Login Required"'}) return "Not allowed", 403 -@app.route('/internal/changelog') -@register_navbar('Changelog', icon='book') -@mod_required -def changelog(): - if 'page' in request.args: - page = max(0, int(request.args['page'])) - else: - page = 0 - if 'pagesize' in request.args: - pagesize = min(500, int(request.args['pagesize'])) - else: - pagesize = 50 - changelog = query('SELECT * FROM changelog LEFT JOIN users ON (changelog.who = users.id) ORDER BY `when` DESC LIMIT ? OFFSET ?', pagesize, page*pagesize) - for entry in changelog: - entry['path'] = '.'.join([entry['table'], entry['id_value'], entry['field']]) - return render_template('changelog.html', changelog=changelog, page=page, pagesize=pagesize) - @app.route('/files/<filename>') def files(filename): return redirect(config['VIDEOPREFIX']+'/'+filename) diff --git a/templates/changelog.html b/templates/changelog.html index 4d0a823..b721581 100644 --- a/templates/changelog.html +++ b/templates/changelog.html @@ -8,10 +8,23 @@ </div> <div class="panel-body"> <p>Hier werden alle Änderungen an Kursen/Veranstaltungen/Videos etc. geloggt und können Rückgängig gemacht werden.</p> - <div style="margin-top: 10px;" class="col-xs-12"> - <a href="{{url_for('changelog', page=page-1) }}" class="pull-left btn btn-default">{{ "<<" }}</a> - <a href="{{url_for('changelog', page=page+1) }}" class="pull-right btn btn-default">{{ ">>" }}</a> - </div> + <ul class="pagination pull-right"> + <li class="page-item"> + <a class="page-link" href="{{url_for('changelog', page=page-1) }}"> + <span aria-hidden="true">«</span> + <span class="sr-only">Previous</span> + </a> + </li> + {% for i in range(max(0, pagecount - 5) ,min(pagecount, pagecount + 5)) %} + <li class="page-item"><a class="page-link" href="{{url_for('changelog', page=i) }}">{{ i }}</a></li> + {% endfor %} + <li class="page-item"> + <a class="page-link" href="{{url_for('changelog', page=page+1) }}"> + <span aria-hidden="true">»</span> + <span class="sr-only">Next</span> + </a> + </li> + </ul> </div> <div class="table-responsive"> <table class="table table-condensed"> diff --git a/templates/jobs_overview.html b/templates/jobs_overview.html index 3b2d639..c7b7ea9 100644 --- a/templates/jobs_overview.html +++ b/templates/jobs_overview.html @@ -42,7 +42,6 @@ <div class="panel-body"> <div class="row"> <form> - <a href="{{url_for('jobs_overview', page=page-1, **(request.args|filterdict(['page','pagesize'])) ) }}" class="pull-left btn btn-default col-xs-1">{{ "<<" }}</a> <div class="form-group col-xs-3"> <label for="type">Type</label> <input list="job_type" name="type" value="{{ filter.type }}"> @@ -71,8 +70,25 @@ </datalist> </div> <button type="submit" class="btn btn-primary col-xs-1">Filter</button> - <a href="{{url_for('jobs_overview', page=page+1, **(request.args|filterdict(['page','pagesize'])) ) }}" class="pull-right btn btn-default col-xs-1">{{ ">>" }}</a> </form> + <ul class="pagination pull-right"> + <li class="page-item"> + <a class="page-link" href="{{url_for('jobs_overview', page=page-1, **(request.args|filterdict(['page','pagesize']))) }}"> + <span aria-hidden="true">«</span> + <span class="sr-only">Previous</span> + </a> + </li> + {% for i in range(max(0, pagecount - 5) ,min(pagecount, pagecount + 5)) %} + <li class="page-item"><a class="page-link" href="{{url_for('jobs_overview', page=i, **(request.args|filterdict(['page','pagesize']))) }}">{{ i }}</a></li> + {% endfor %} + <li class="page-item"> + <a class="page-link" href="{{url_for('jobs_overview', page=page+1, **(request.args|filterdict(['page','pagesize']))) }}"> + <span aria-hidden="true">»</span> + <span class="sr-only">Next</span> + </a> + </li> + </ul> + </div> <table class="table"> <tr> -- GitLab