diff options
Diffstat (limited to 'python')
-rw-r--r-- | python/fatcat_web/editing_routes.py | 39 | ||||
-rw-r--r-- | python/fatcat_web/templates/container_edit.html | 5 | ||||
-rw-r--r-- | python/fatcat_web/templates/edit_macros.html | 50 |
3 files changed, 59 insertions, 35 deletions
diff --git a/python/fatcat_web/editing_routes.py b/python/fatcat_web/editing_routes.py index 88fb4557..fb45ca7b 100644 --- a/python/fatcat_web/editing_routes.py +++ b/python/fatcat_web/editing_routes.py @@ -50,7 +50,7 @@ def form_editgroup_get_or_create(api, edit_form): ### Views ################################################################### -def generic_entity_edit(entity_type, edit_template, existing_ident, editgroup_id): +def generic_entity_edit(editgroup_id, entity_type, existing_ident, edit_template): """ existing (entity) @@ -83,6 +83,11 @@ def generic_entity_edit(entity_type, edit_template, existing_ident, editgroup_id except ApiException as ae: abort(ae.status) + # check that editgroup is edit-able + if editgroup.changelog_index != None: + flash("Editgroup already merged") + abort(400) + # fetch entity (if set) or 404 existing = None existing_edit = None @@ -106,10 +111,6 @@ def generic_entity_edit(entity_type, edit_template, existing_ident, editgroup_id editgroup = form_editgroup_get_or_create(user_api, form) if editgroup: - # check that editgroup is edit-able - if editgroup.changelog_index != None: - flash("Editgroup already merged") - abort(400) if not existing_ident: # it's a create entity = form.to_entity() @@ -170,10 +171,14 @@ def generic_entity_edit(entity_type, edit_template, existing_ident, editgroup_id if not editgroup_id: form.editgroup_id.data = session.get('active_editgroup_id', None) + editor_editgroups = api.get_editor_editgroups(session['editor']['editor_id'], limit=20) + potential_editgroups = [e for e in editor_editgroups if e.changelog_index == None and e.submitted == None] + return render_template(edit_template, form=form, - existing_ident=existing_ident, editgroup=editgroup), status + existing_ident=existing_ident, editgroup=editgroup, + potential_editgroups=potential_editgroups), status -def generic_edit_delete(entity_type, editgroup_id, edit_id): +def generic_edit_delete(editgroup_id, entity_type, edit_id): # fetch editgroup (if set) or 404 editgroup = None if editgroup_id: @@ -182,6 +187,11 @@ def generic_edit_delete(entity_type, editgroup_id, edit_id): except ApiException as ae: abort(ae.status) + # check that editgroup is edit-able + if editgroup.changelog_index != None: + flash("Editgroup already merged") + abort(400) + # API on behalf of user user_api = auth_api(session['api_token']) @@ -192,32 +202,29 @@ def generic_edit_delete(entity_type, editgroup_id, edit_id): else: raise NotImplementedError except ApiException as ae: - if ae.status == 404: - pass - else: - abort(ae.status) + abort(ae.status) return redirect("/editgroup/{}".format(editgroup_id)) @app.route('/container/create', methods=['GET', 'POST']) @login_required def container_create(): - return generic_entity_edit('container', 'container_create.html', None, None) + return generic_entity_edit(None, 'container', None, 'container_create.html') @app.route('/container/<ident>/edit', methods=['GET', 'POST']) @login_required def container_edit(ident): - return generic_entity_edit('container', 'container_edit.html', ident, None) + return generic_entity_edit(None, 'container', ident, 'container_edit.html') @app.route('/editgroup/<editgroup_id>/container/<ident>/edit', methods=['GET', 'POST']) @login_required def container_editgroup_edit(editgroup_id, ident): - return generic_entity_edit('container', 'container_edit.html', ident, editgroup_id) + return generic_entity_edit(editgroup_id, 'container', ident, 'container_edit.html') -@app.route('/editgroup/<editgroup_id>/container/edit/<edit_id>/delete', methods=['POST', 'DELETE']) +@app.route('/editgroup/<editgroup_id>/container/edit/<edit_id>/delete', methods=['POST']) @login_required def container_edit_delete(editgroup_id, edit_id): - return generic_edit_delete('container', editgroup_id, edit_id) + return generic_edit_delete(editgroup_id, 'container', edit_id) @app.route('/creator/<ident>/edit', methods=['GET']) def creator_edit(ident): diff --git a/python/fatcat_web/templates/container_edit.html b/python/fatcat_web/templates/container_edit.html index 6a08b1ae..91432d5e 100644 --- a/python/fatcat_web/templates/container_edit.html +++ b/python/fatcat_web/templates/container_edit.html @@ -10,8 +10,8 @@ {% endblock %} {{ form.hidden_tag() }} - <br> - {{ edit_macros.editgroup_dropdown(form, editgroup) }} + <h3 class="ui dividing header">Editgroup</h3> + {{ edit_macros.editgroup_dropdown(form, editgroup, potential_editgroups) }} <h3 class="ui dividing header">The Basics</h3> <br> @@ -71,6 +71,7 @@ $(document).ready(function() { $('.ui.accordion').accordion(); + $('.ui.dropdown') .dropdown(); var fixup_url_numbering = function(group_item) { items = Array.from(group_item.querySelectorAll(".list-group-item")) diff --git a/python/fatcat_web/templates/edit_macros.html b/python/fatcat_web/templates/edit_macros.html index 66da04e7..a207e51e 100644 --- a/python/fatcat_web/templates/edit_macros.html +++ b/python/fatcat_web/templates/edit_macros.html @@ -35,22 +35,38 @@ </div> {%- endmacro %} -{% macro editgroup_dropdown(form, editgroup=None) -%} - <div class="ui accordion"> - <div class="{% if not editgroup %}active{% endif %} title"> - <h3><i class="dropdown icon"></i>Editgroup Meta</h3> - </div> - <div class="{% if not editgroup %}active{% endif %} content"> - {% if editgroup %} - <p>You have an editgroup in progress, and this edit will be included by - default. You can override this below. - {% else %} - <p>No existing editgroup is in progress (or at least, not is selected). - An existing ID can be pasted in, or if you leave that blank but give a - description, a new editgroup will be created for this edit. - {% endif %} - {{ form_field_inline(form.editgroup_id) }} +{% macro editgroup_dropdown(form, editgroup=None, potential_editgroups=None) -%} + {% if editgroup %} + <p>You are updating an existing un-merged editgroup: <a href="/editgroup/{{ editgroup.editgroup_id}}">{{ editgroup.editgroup_id }}</a>. + <p><b>Description:</b> {{ editgroup.description }} + {% else %} + {% if not potential_editgroups %} + <p>You have no un-submitted editgroups in progress; a new one will be + created. You can add a description for the whole group of edits: {{ form_field_inline(form.editgroup_description) }} - </div> - </div> + {% else %} + <p>Select an in-progress editgroup for this change to be part of (or start a new one): + + <div class="ui fluid selection dropdown"> + <input type="hidden" id="editgroup_id" name="editgroup_id" value="{{ form.editgroup_id.data }}"> + <i class="dropdown icon"></i> + <div class="default text">Select Editgroup</div> + <div class="menu"> + {% for peg in potential_editgroups %} + <div class="item" data-value="{{ peg.editgroup_id }}"> + <div class="right floated">{{ peg.created }}</div> + <code><b>editgroup_{{ peg.editgroup_id }}</b></code> + {% if peg.description %} + <br>{{ peg.description[:200] }} + {% endif %} + </div> + {% endfor %} + <div class="item" data-value=""><b>Start New Editgroup</b></div> + </div> + </div> + + <p>If starting a new editgroup, you can add a description for the whole group: + {{ form_field_inline(form.editgroup_description) }} + {% endif %} + {% endif %} {%- endmacro %} |