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():