From 443b4ccc573f07f582f0c9ca8485f15d3517c71d Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Wed, 5 Jan 2022 11:23:11 -0500 Subject: [PATCH] Initial work on #8231 --- netbox/ipam/views.py | 1 - netbox/netbox/views/generic.py | 20 +++++++++++++++---- netbox/templates/generic/object.html | 6 +++++- netbox/templates/generic/object_delete.html | 19 ++++++++++++------ netbox/templates/htmx/delete_form.html | 20 +++++++++++++++++++ netbox/templates/inc/htmx_modal.html | 7 +++++++ netbox/templates/ipam/prefix_delete.html | 5 ----- .../utilities/templates/buttons/delete.html | 10 ++++++++-- 8 files changed, 69 insertions(+), 19 deletions(-) create mode 100644 netbox/templates/htmx/delete_form.html create mode 100644 netbox/templates/inc/htmx_modal.html delete mode 100644 netbox/templates/ipam/prefix_delete.html diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index c79a58dd6..38b30e9cc 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -529,7 +529,6 @@ class PrefixEditView(generic.ObjectEditView): class PrefixDeleteView(generic.ObjectDeleteView): queryset = Prefix.objects.all() - template_name = 'ipam/prefix_delete.html' class PrefixBulkImportView(generic.BulkImportView): diff --git a/netbox/netbox/views/generic.py b/netbox/netbox/views/generic.py index feff2ca39..74f8f325b 100644 --- a/netbox/netbox/views/generic.py +++ b/netbox/netbox/views/generic.py @@ -10,6 +10,7 @@ from django.db.models import ManyToManyField, ProtectedError from django.forms import Form, ModelMultipleChoiceField, MultipleHiddenInput, Textarea from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render +from django.urls import reverse from django.utils.html import escape from django.utils.http import is_safe_url from django.utils.safestring import mark_safe @@ -430,10 +431,21 @@ class ObjectDeleteView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View): obj = self.get_object(kwargs) form = ConfirmationForm(initial=request.GET) + # If this is an HTMX request, return only the rendered deletion form as modal content + if is_htmx(request): + viewname = f'{self.queryset.model._meta.app_label}:{self.queryset.model._meta.model_name}_delete' + form_url = reverse(viewname, kwargs={'pk': obj.pk}) + return render(request, 'htmx/delete_form.html', { + 'object': obj, + 'object_type': self.queryset.model._meta.verbose_name, + 'form': form, + 'form_url': form_url, + }) + return render(request, self.template_name, { - 'obj': obj, + 'object': obj, + 'object_type': self.queryset.model._meta.verbose_name, 'form': form, - 'obj_type': self.queryset.model._meta.verbose_name, 'return_url': self.get_return_url(request, obj), }) @@ -466,9 +478,9 @@ class ObjectDeleteView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View): logger.debug("Form validation failed") return render(request, self.template_name, { - 'obj': obj, + 'object': obj, + 'object_type': self.queryset.model._meta.verbose_name, 'form': form, - 'obj_type': self.queryset.model._meta.verbose_name, 'return_url': self.get_return_url(request, obj), }) diff --git a/netbox/templates/generic/object.html b/netbox/templates/generic/object.html index 40c0e09ce..4d616f944 100644 --- a/netbox/templates/generic/object.html +++ b/netbox/templates/generic/object.html @@ -100,4 +100,8 @@
{% block content %}{% endblock %}
-{% endblock %} +{% endblock content-wrapper %} + +{% block modals %} + {% include 'inc/htmx_modal.html' %} +{% endblock modals %} diff --git a/netbox/templates/generic/object_delete.html b/netbox/templates/generic/object_delete.html index 85cedd29c..d0603ace0 100644 --- a/netbox/templates/generic/object_delete.html +++ b/netbox/templates/generic/object_delete.html @@ -1,9 +1,16 @@ -{% extends 'generic/confirmation_form.html' %} +{% extends 'base/layout.html' %} {% load form_helpers %} -{% block title %}Delete {{ obj_type }}?{% endblock %} +{% block title %}Delete {{ object_type }}?{% endblock %} -{% block message %} -

Are you sure you want to delete {{ obj_type }} {{ obj }}?

- {% block message_extra %}{% endblock %} -{% endblock message %} +{% block header %}{% endblock %} + +{% block content %} + +{% endblock %} diff --git a/netbox/templates/htmx/delete_form.html b/netbox/templates/htmx/delete_form.html new file mode 100644 index 000000000..fc1cbe0a0 --- /dev/null +++ b/netbox/templates/htmx/delete_form.html @@ -0,0 +1,20 @@ +{% load form_helpers %} + +
+ {% csrf_token %} + + + +
diff --git a/netbox/templates/inc/htmx_modal.html b/netbox/templates/inc/htmx_modal.html new file mode 100644 index 000000000..771f5d595 --- /dev/null +++ b/netbox/templates/inc/htmx_modal.html @@ -0,0 +1,7 @@ + diff --git a/netbox/templates/ipam/prefix_delete.html b/netbox/templates/ipam/prefix_delete.html deleted file mode 100644 index eb7a22d3c..000000000 --- a/netbox/templates/ipam/prefix_delete.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends 'generic/object_delete.html' %} - -{% block message_extra %} -

Note: This will not delete any child prefixes or IP addresses.

-{% endblock %} diff --git a/netbox/utilities/templates/buttons/delete.html b/netbox/utilities/templates/buttons/delete.html index 6fe3fe7d8..a027edeec 100644 --- a/netbox/utilities/templates/buttons/delete.html +++ b/netbox/utilities/templates/buttons/delete.html @@ -1,3 +1,9 @@ - -  Delete + +  Delete