Mercurial > wikked
changeset 441:9d81c838f41a
web: Fix the UX for creating new pages at root vs. under a folder.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 29 Dec 2017 16:51:53 -0800 |
parents | 50938f53ce8c |
children | 6a9e9e4d6b29 |
files | wikked/templates/edit-page.html wikked/utils.py wikked/views/__init__.py wikked/views/edit.py |
diffstat | 4 files changed, 31 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/wikked/templates/edit-page.html Sat Jul 08 19:59:36 2017 -0700 +++ b/wikked/templates/edit-page.html Fri Dec 29 16:51:53 2017 -0800 @@ -8,7 +8,7 @@ {%if is_new%} <div class="pure-control-group pure-control-addon"> <label for="title" class="">Title</label> - <input type="text" name="title" placeholder="New Page" required="true" class="" value="{{create_in}}"></input> + <input type="text" name="title" placeholder="New Page" required="true" class="" value="{{title_hint}}"></input> </div> <div class="pure-form-help"> <span for="title">You can put this page in a folder by entering a title like <code>Folder/Page Title</code>.</span>
--- a/wikked/utils.py Sat Jul 08 19:59:36 2017 -0700 +++ b/wikked/utils.py Fri Dec 29 16:51:53 2017 -0800 @@ -86,6 +86,14 @@ return abs_url +def get_url_folder(url): + if url: + head = os.path.dirname(url) + if head: + return head + return '/' + + def is_endpoint_url(url): return endpoint_prefix_regex.match(url) is not None
--- a/wikked/views/__init__.py Sat Jul 08 19:59:36 2017 -0700 +++ b/wikked/views/__init__.py Fri Dec 29 16:51:53 2017 -0800 @@ -2,6 +2,7 @@ import functools from flask import request, render_template, url_for from flask.ext.login import current_user +from wikked.utils import get_url_folder from wikked.web import app, get_wiki from wikked.webimpl import PermissionError @@ -97,7 +98,8 @@ if home: nav['url_home'] = '/' if new_page: - nav['url_new'] = url_for('edit_new_page') + url_folder = get_url_folder(url).lstrip('/') + nav['url_new'] = url_for('create_page', url_folder=url_folder) if read: nav['url_read'] = url_for('read', url=url) if edit:
--- a/wikked/views/edit.py Sat Jul 08 19:59:36 2017 -0700 +++ b/wikked/views/edit.py Fri Dec 29 16:51:53 2017 -0800 @@ -9,33 +9,45 @@ get_edit_page, do_edit_page, preview_edited_page, do_upload_file) -@app.route('/create/') +@app.route('/create/', methods=['GET']) def create_page_at_root(): return create_page('/') -@app.route('/create/<path:url>') -def create_page(url): +@app.route('/create/<path:url_folder>') +def create_page(url_folder): wiki = get_wiki() if not wiki.auth.hasPermission('writers', current_user.get_id()): return show_unauthorized_error( error="You're not authorized to create new pages.") + title_hint = ((url_folder or '') + '/New Page').lstrip('/') data = { 'is_new': True, - 'create_in': url.lstrip('/'), + 'title_hint': title_hint, 'text': '', 'commit_meta': { 'author': current_user.get_id() or request.remote_addr, - 'desc': 'Editing ' + url + 'desc': 'Creating new page', }, - 'post_back': url_for('edit_page', url=url.lstrip('/')) + 'post_back': url_for('create_page_postback') } add_auth_data(data) - add_navigation_data(url, data) + add_navigation_data(None, data, new_page=False) return render_template('edit-page.html', **data) +@app.route('/create', methods=['POST']) +def create_page_postback(): + wiki = get_wiki() + if not wiki.auth.hasPermission('writers', current_user.get_id()): + return show_unauthorized_error( + error="You're not authorized to create new pages.") + + url = request.form['title'] + return edit_page(url) + + @app.route('/edit', methods=['POST']) @errorhandling_ui2('error-unauthorized-edit.html') def edit_new_page():