# HG changeset patch # User Ludovic Chabant # Date 1514595113 28800 # Node ID 9d81c838f41a86f9884207e705a0d6f44a7d1406 # Parent 50938f53ce8cad759280c81270eb15ef6d88b9ac web: Fix the UX for creating new pages at root vs. under a folder. diff -r 50938f53ce8c -r 9d81c838f41a wikked/templates/edit-page.html --- 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%}
- +
You can put this page in a folder by entering a title like Folder/Page Title. diff -r 50938f53ce8c -r 9d81c838f41a wikked/utils.py --- 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 diff -r 50938f53ce8c -r 9d81c838f41a wikked/views/__init__.py --- 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: diff -r 50938f53ce8c -r 9d81c838f41a wikked/views/edit.py --- 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/') -def create_page(url): +@app.route('/create/') +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():