diff --git a/media/js/main.js b/media/js/main.js index ffc1d413..aec214a1 100644 --- a/media/js/main.js +++ b/media/js/main.js @@ -98,3 +98,18 @@ function showDistros(btn, osDiv) { btn.style.background = active_color; document.getElementById(osDiv).style.display = 'block'; } + + +/* + * Register a confirm handler for forms that, well, requires confirmation + * for someting. + */ +document.querySelectorAll('button[data-confirm]').forEach((button) => { + button.addEventListener('click', (event) => { + if (confirm(event.target.dataset.confirm)) { + return true; + } + event.preventDefault(); + return false; + }); +}); diff --git a/pgweb/util/helpers.py b/pgweb/util/helpers.py index 7c6d7647..3c436eb2 100644 --- a/pgweb/util/helpers.py +++ b/pgweb/util/helpers.py @@ -45,6 +45,11 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for raise PermissionDenied("You cannot edit this item") if request.method == 'POST': + if 'modstate' in (f.name for f in instance._meta.get_fields()) and instance.modstate == ModerationState.CREATED and request.POST.get('delete', '') == 'delete': + # Don't care to validate, just delete. + instance.delete() + return HttpResponseRedirect(redirect) + # Process this form form = formclass(data=request.POST, instance=instance) for fn in form.fields: @@ -183,6 +188,7 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for form_intro = None savebutton = 'Save' + deletebutton = None if itemid == 'new': if 'modstate' in (f.name for f in instance._meta.get_fields()): # This is a three-state moderated entry, so don't say "submit new" for new @@ -194,6 +200,7 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for if 'modstate' in (f.name for f in instance._meta.get_fields()): if instance.modstate == ModerationState.CREATED: savebutton = 'Save draft' + deletebutton = 'Delete draft' ctx = { 'form': form, @@ -201,6 +208,7 @@ def simple_form(instancetype, itemid, request, formclass, formtemplate='base/for 'form_intro': form_intro, 'described_checkboxes': getattr(form, 'described_checkboxes', {}), 'savebutton': savebutton, + 'deletebutton': deletebutton, 'operation': (itemid == "new") and "New" or "Edit", } ctx.update(extracontext) diff --git a/templates/base/form_contents.html b/templates/base/form_contents.html index 69083cf1..3d110c72 100644 --- a/templates/base/form_contents.html +++ b/templates/base/form_contents.html @@ -21,4 +21,7 @@ {%endfor%} {%endif%} +{%if deletebutton%} + +{%endif%}