Mercurial > wikked
changeset 411:ba977a547daa
web: Support browsers without Javascript.
* Add development flag to disable Javascript.
* Fix editing/previewing pages when there's not Javascript.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 20 Mar 2017 22:18:32 -0700 |
parents | c93ac92aef5b |
children | 39f0f07805e3 |
files | wikked/commands/web.py wikked/templates/edit-page.html wikked/templates/index.html wikked/templates/nav.html wikked/templates/preview-page.html wikked/templates/special-nav.html wikked/views/__init__.py wikked/views/edit.py wikked/web.py |
diffstat | 9 files changed, 81 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/commands/web.py Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/commands/web.py Mon Mar 20 22:18:32 2017 -0700 @@ -38,6 +38,10 @@ "code reloading and debugging.", action='store_true') parser.add_argument( + '--no-js', + help="Disable Javascript.", + action='store_true') + parser.add_argument( '--no-update', help="Don't auto-update the wiki if a page file has been " "touched (which means you can refresh a locally modified " @@ -81,6 +85,8 @@ wikked.settings.WIKI_SERVE_FILES = True if ctx.args.dev: wikked.settings.WIKI_DEV_ASSETS = True + if ctx.args.no_js: + wikked.settings.WIKI_DEV_NO_JS = True if not ctx.args.no_update: wikked.settings.WIKI_AUTO_RELOAD = True
--- a/wikked/templates/edit-page.html Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/templates/edit-page.html Mon Mar 20 22:18:32 2017 -0700 @@ -44,8 +44,8 @@ </section> <section class="editing-submit"> <div class="pure-control-group"> - <button type="submit" class="pure-button pure-button-primary"><span class="fa fa-check"></span> Save</button> - <button id="editing-preview-button" type="submit" class="pure-button" data-wiki-url="{{preview_url}}"><span class="fa fa-eye"></span> <span class="editing-preview-button-label">Preview</span></button> + <button name="do-save" type="submit" class="pure-button pure-button-primary"><span class="fa fa-check"></span> Save</button> + <button name="do-preview" id="editing-preview-button" type="submit" class="pure-button" data-wiki-url="{{preview_url}}"><span class="fa fa-eye"></span> <span class="editing-preview-button-label">Preview</span></button> <a id="editing-cancel-button" class="pure-button" href="{%if is_new%}/{%else%}{{get_read_url(meta.url)}}{%endif%}"><span class="fa fa-remove"></span> Cancel</a> </div> </section> @@ -57,10 +57,12 @@ {% endblock %} {% block scripts %} {% if is_dev %} +{% if not no_js %} <script data-main="/dev-assets/js/wikked.js" src="/dev-assets/js/require.js"></script> <script> require(['wikked.app', 'wikked.edit'], function(app, edit) {}); </script> +{% endif %} {% else %} <script src="/static/js/require.js"></script> <script src="/static/js/wikked.app.js"></script>
--- a/wikked/templates/index.html Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/templates/index.html Mon Mar 20 22:18:32 2017 -0700 @@ -12,7 +12,7 @@ <div class="nav-wrapper"> {% block nav %}{% include 'nav.html' %}{% endblock %} </div> - <div class="wrapper{%if nav.is_menu_active%} wiki-menu-active{%endif%}{%if is_special_page%} special{%endif%}"> + <div class="wrapper{%if not nav.hide_menu%} wiki-menu-active{%endif%}{%if is_special_page%} special{%endif%}"> {% block content %}{% endblock %} </div> <div class="footer-wrapper"> @@ -21,10 +21,12 @@ </div> {% block scripts %} {% if is_dev %} + {% if not no_js %} <script data-main="/dev-assets/js/wikked.js" src="/dev-assets/js/require.js"></script> <script> require(['wikked.app'], function(edit) {}); </script> + {% endif %} {% else %} <script src="/static/js/require.js"></script> <script src="/static/js/wikked.app.js"></script>
--- a/wikked/templates/nav.html Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/templates/nav.html Mon Mar 20 22:18:32 2017 -0700 @@ -1,13 +1,13 @@ <a id="wiki-menu-shortcut" class="wiki-logo"> <span>W</span> </a> -<nav id="wiki-menu" role="navigation" class="pure-menu pure-menu-open{%if nav.is_menu_active%} wiki-menu-active{%endif%}"> +<nav id="wiki-menu" role="navigation" class="pure-menu pure-menu-open{%if not nav.hide_menu %} wiki-menu-active{%endif%}"> <div id="wiki-menu-pin" title="Pin/unpin the wiki menu."> <span class="fa fa-lock"></span> </div> <ul class=""> - <li><a href="/"><span class="fa fa-home"></span> Home</a></li> - <li><a href="/create/"><span class="fa fa-file"></span> New Page</a></li> + {%if nav.url_home%}<li><a href="{{nav.url_home}}"><span class="fa fa-home"></span> Home</a></li>{%endif%} + {%if nav.url_new%}<li><a href="{{nav.url_new}}"><span class="fa fa-file"></span> New Page</a></li>{%endif%} {%if nav.url_read%}<li><a href="{{nav.url_read}}"><span class="fa fa-book"></span> Read</a></li>{%endif%} {%if nav.url_edit%}<li><a href="{{nav.url_edit}}"><span class="fa fa-edit"></span> Edit</a></li>{%endif%} {%if nav.url_hist%}<li><a href="{{nav.url_hist}}"><span class="fa fa-road"></span> History</a></li>{%endif%}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wikked/templates/preview-page.html Mon Mar 20 22:18:32 2017 -0700 @@ -0,0 +1,18 @@ +{% extends 'index.html' %} +{% block content %} +<article> + <header> + <h1>{{meta.title}}</h1> + <div class="decorator">Previewing</div> + </header> + <section class="content"> + {{text|safe}} + </section> + <form class="pure-form" action="{{post_back}}" method="POST"> + <input type="hidden" name="previewed_text" value="{{raw_text}}"></input> + <div class="pure-control-group"> + <button name="do-back-to-edit" type="submit" class="pure-button">Back to Editing</button> + </div> + </form> +</article> +{% endblock %}
--- a/wikked/templates/special-nav.html Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/templates/special-nav.html Mon Mar 20 22:18:32 2017 -0700 @@ -1,7 +1,7 @@ <a id="wiki-menu-shortcut" class="wiki-logo"> <span>W</span> </a> -<nav id="wiki-menu" role="navigation" class="pure-menu pure-menu-open{% if nav.is_menu_active%} wiki-menu-active{%endif%}"> +<nav id="wiki-menu" role="navigation" class="pure-menu pure-menu-open{% if not nav.hide_menu%} wiki-menu-active{%endif%}"> <div id="wiki-menu-pin" title="Pin/unpin the wiki menu."> <span class="fa fa-lock"></span> </div>
--- a/wikked/views/__init__.py Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/views/__init__.py Mon Mar 20 22:18:32 2017 -0700 @@ -1,5 +1,5 @@ import functools -from flask import request, render_template +from flask import request, render_template, url_for from flask.ext.login import current_user from wikked.web import app, get_wiki from wikked.webimpl import PermissionError @@ -72,7 +72,8 @@ def add_navigation_data( - url, data, + url, data, *, + home=True, new_page=True, read=False, edit=False, history=False, inlinks=False, raw_url=None, extras=None, footers=None): if url is not None: @@ -80,22 +81,26 @@ elif read or edit or history or inlinks: raise Exception("Default navigation entries require a valid URL.") - nav = {'home': '/', 'extras': [], 'footers': []} + nav = {'extras': [], 'footers': []} + + nav['hide_menu'] = ( + request.cookies.get('wiki-hide-nav') == '1') - nav['is_menu_active'] = ( - request.cookies.get('wiki-menu-active') == '1') - + if home: + nav['url_home'] = '/' + if new_page: + nav['url_new'] = url_for('edit_new_page') if read: - nav['url_read'] = '/read/%s' % url + nav['url_read'] = url_for('read', url=url) if edit: - nav['url_edit'] = '/edit/%s' % url + nav['url_edit'] = url_for('edit_page', url=url) if history: - nav['url_hist'] = '/hist/%s' % url + nav['url_hist'] = url_for('page_history', url=url) if inlinks: nav['extras'].append({ 'title': "Pages Linking Here", - 'url': '/inlinks/' + url, + 'url': url_for('incoming_links', url=url), 'icon': 'link' }) @@ -108,7 +113,7 @@ nav['extras'].append({ 'title': "Special Pages", - 'url': '/special', + 'url': url_for('special_pages_dashboard'), 'icon': 'dashboard'}) if extras: @@ -122,4 +127,5 @@ if app.config['WIKI_DEV_ASSETS']: data['is_dev'] = True - + if app.config['WIKI_DEV_NO_JS']: + data['no_js'] = True
--- a/wikked/views/edit.py Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/views/edit.py Mon Mar 20 22:18:32 2017 -0700 @@ -1,11 +1,12 @@ -from flask import redirect, url_for, request, render_template +from flask import abort, redirect, url_for, request, render_template from flask.ext.login import current_user from wikked.views import ( errorhandling_ui2, show_unauthorized_error, add_auth_data, add_navigation_data) from wikked.web import app, get_wiki from wikked.webimpl import url_from_viewarg -from wikked.webimpl.edit import get_edit_page, do_edit_page +from wikked.webimpl.edit import ( + get_edit_page, do_edit_page, preview_edited_page) @app.route('/create/') @@ -28,7 +29,7 @@ 'author': current_user.get_id() or request.remote_addr, 'desc': 'Editing ' + url }, - 'post_back': '/edit' + 'post_back': url_for('edit_page', url=url.lstrip('/')) } add_auth_data(data) add_navigation_data(url, data) @@ -49,25 +50,42 @@ user = current_user.get_id() url = url_from_viewarg(url) - if request.method == 'GET': + if request.method == 'GET' or ( + request.method == 'POST' and 'do-back-to-edit' in request.form): author = user or request.remote_addr custom_data = { - 'post_back': '/edit/' + url.lstrip('/'), + 'post_back': url_for('edit_page', url=url.lstrip('/')), 'preview_url': url} data = get_edit_page(wiki, user, url, author=author, custom_data=custom_data) + if 'previewed_text' in request.form: + data['text'] = request.form['previewed_text'] add_auth_data(data) add_navigation_data( url, data, read=True, history=True, inlinks=True, - raw_url='/api/edit/' + url.lstrip('/')) + raw_url=url_for('api_read_page', url=url.lstrip('/'))) return render_template('edit-page.html', **data) if request.method == 'POST': text = request.form['text'] author = user or request.form['author'] or request.remote_addr message = request.form['message'] or 'Editing ' + url - do_edit_page(wiki, user, url, text, - author=author, message=message) - return redirect(url_for('read', url=url.lstrip('/'))) + if 'do-preview' in request.form: + data = get_edit_page(wiki, user, url, author=author) + preview = preview_edited_page(wiki, url, text) + data['raw_text'] = text + data['text'] = preview + data['post_back'] = url_for('edit_page', url=url.lstrip('/')) + add_auth_data(data) + add_navigation_data(url, data, new_page=False) + return render_template('preview-page.html', **data) + + elif 'do-save' in request.form: + do_edit_page(wiki, user, url, text, + author=author, message=message) + return redirect(url_for('read', url=url.lstrip('/'))) + + else: + abort(400)
--- a/wikked/web.py Thu Jan 12 09:19:21 2017 -0800 +++ b/wikked/web.py Mon Mar 20 22:18:32 2017 -0700 @@ -22,6 +22,7 @@ app.config.setdefault('SQL_COMMIT_ON_TEARDOWN', False) app.config.setdefault('WIKI_ROOT', None) app.config.setdefault('WIKI_DEV_ASSETS', False) +app.config.setdefault('WIKI_DEV_NO_JS', False) app.config.setdefault('WIKI_UPDATE_ON_START', True) app.config.setdefault('WIKI_AUTO_RELOAD', False) app.config.setdefault('WIKI_ASYNC_UPDATE', False)