# HG changeset patch # User Ludovic Chabant # Date 1490399197 25200 # Node ID 1066d0986082eab62b51c304dbbddaf7a409260b # Parent d2e5228194f04c5012b8333c83b82471e8168c86 web: Add button to force refresh a cached page list. diff -r d2e5228194f0 -r 1066d0986082 wikked/assets/css/wikked/main.less --- a/wikked/assets/css/wikked/main.less Thu Mar 23 22:02:44 2017 -0700 +++ b/wikked/assets/css/wikked/main.less Fri Mar 24 16:46:37 2017 -0700 @@ -72,6 +72,10 @@ border-top: 1px solid @color-gray-medium; } +.pure-button-warning { + background: rgb(223, 117, 20); +} + @media (min-width: 48em) { // Place right-aligned menu items to, well, to the right. .pure-menu .pure-menu-horizontal-right { @@ -125,3 +129,6 @@ font-weight: bolder; } +.wiki-pagelist-refresh { + margin-top: 1em; +} diff -r d2e5228194f0 -r 1066d0986082 wikked/templates/special-pagelist.html --- a/wikked/templates/special-pagelist.html Thu Mar 23 22:02:44 2017 -0700 +++ b/wikked/templates/special-pagelist.html Fri Mar 24 16:46:37 2017 -0700 @@ -16,6 +16,15 @@ {%else%} {%block empty%}{%endblock%} {%endif%} + {% if refresh %} +
+
+ + + +
+
+ {% endif %} {% endblock %} diff -r d2e5228194f0 -r 1066d0986082 wikked/views/__init__.py --- a/wikked/views/__init__.py Thu Mar 23 22:02:44 2017 -0700 +++ b/wikked/views/__init__.py Fri Mar 24 16:46:37 2017 -0700 @@ -44,14 +44,21 @@ return decorator +def requires_auth(group): + def decorator(f): + @functools.wraps(f) + def wrapper(*args, **kwargs): + wiki = get_wiki() + if not wiki.auth.hasPermission(group, current_user.get_id()): + return show_unauthorized_error() + return f(*args, **kwargs) + return wrapper + return decorator + + def requires_reader_auth(f): - @functools.wraps(f) - def wrapper(*args, **kwargs): - wiki = get_wiki() - if not wiki.auth.hasPermission('readers', current_user.get_id()): - return show_unauthorized_error() - return f(*args, **kwargs) - return wrapper + decorator = requires_auth('readers') + return decorator(f) def add_auth_data(data): diff -r d2e5228194f0 -r 1066d0986082 wikked/views/special.py --- a/wikked/views/special.py Thu Mar 23 22:02:44 2017 -0700 +++ b/wikked/views/special.py Fri Mar 24 16:46:37 2017 -0700 @@ -1,7 +1,7 @@ -from flask import url_for, render_template +from flask import request, redirect, url_for, render_template, abort from flask.ext.login import current_user from wikked.views import ( - requires_reader_auth, + requires_auth, requires_reader_auth, add_auth_data, add_navigation_data) from wikked.web import app, get_wiki from wikked.webimpl.special import ( @@ -107,6 +107,11 @@ add_navigation_data(None, data, raw_url=raw_url) data['title'] = info['title'] data['is_special_page'] = True + data['refresh'] = { + 'url': url_for('special_list_refresh'), + 'list_name': page_name.replace('-', '_'), + 'postback': page_name + } return render_template(info['template'], **data) @@ -136,3 +141,23 @@ def special_list_dead_ends(): return call_api('dead-ends', get_dead_ends, raw_url='/api/dead-ends') + + +@app.route('/special/list-refresh', methods=['POST']) +@requires_auth('administrators') +def special_list_refresh(): + list_name = request.form.get('list_name') + postback_name = request.form.get('postback') + if not list_name: + abort(400) + + info = special_pages.get(postback_name) + if not info: + abort(400) + + postback_url = url_for(info['view']) + + wiki = get_wiki() + wiki.db.removePageList(list_name) + + return redirect(postback_url)