Browse Source

Fixes #15637: Fix rendering of links from within embedded tables w/HTMX enabled (#15642)

* Add htmx_table to __all__

* Fix dropdown menu clipping

* Fix loading links from within embedded tables

* Fix rendering of object deletion warning
Jeremy Stretch 1 year ago
parent
commit
d34f188d40

+ 1 - 1
netbox/netbox/views/generic/object_views.py

@@ -381,7 +381,7 @@ class ObjectDeleteView(GetReturnURLMixin, BaseObjectView):
             return self._handle_protected_objects(obj, e.restricted_objects, request, e)
             return self._handle_protected_objects(obj, e.restricted_objects, request, e)
 
 
         # If this is an HTMX request, return only the rendered deletion form as modal content
         # If this is an HTMX request, return only the rendered deletion form as modal content
-        if request.htmx:
+        if htmx_partial(request):
             viewname = get_viewname(self.queryset.model, action='delete')
             viewname = get_viewname(self.queryset.model, action='delete')
             form_url = reverse(viewname, kwargs={'pk': obj.pk})
             form_url = reverse(viewname, kwargs={'pk': obj.pk})
             return render(request, 'htmx/delete_form.html', {
             return render(request, 'htmx/delete_form.html', {

+ 1 - 1
netbox/templates/generic/object_delete.html

@@ -18,7 +18,7 @@ Context:
 {% block content %}
 {% block content %}
   <div class="modal" tabindex="-1" style="display: block; position: static">
   <div class="modal" tabindex="-1" style="display: block; position: static">
     <div class="modal-dialog">
     <div class="modal-dialog">
-      <div class="modal-content" >
+      <div class="modal-content border-1 border-danger">
         {% include 'htmx/delete_form.html' %}
         {% include 'htmx/delete_form.html' %}
       </div>
       </div>
     </div>
     </div>

+ 1 - 2
netbox/templates/inc/table_htmx.html

@@ -1,9 +1,8 @@
 {% load django_tables2 %}
 {% load django_tables2 %}
-<table{% if table.attrs %} {{ table.attrs.as_html }}{% endif %}>
+<table{% if table.attrs %} {{ table.attrs.as_html }}{% endif %} hx-disinherit="hx-target hx-select hx-swap">
   {% if table.show_header %}
   {% if table.show_header %}
     <thead
     <thead
         hx-target="closest .htmx-container"
         hx-target="closest .htmx-container"
-        hx-disinherit="hx-select hx-swap"
         {% if not table.embedded %} hx-push-url="true"{% endif %}
         {% if not table.embedded %} hx-push-url="true"{% endif %}
     >
     >
       <tr>
       <tr>

+ 1 - 1
netbox/utilities/htmx.py

@@ -10,4 +10,4 @@ def htmx_partial(request):
     Determines whether to render partial (versus complete) HTML content
     Determines whether to render partial (versus complete) HTML content
     in response to an HTMX request, based on the target element.
     in response to an HTMX request, based on the target element.
     """
     """
-    return request.htmx and request.htmx.target != PAGE_CONTAINER_ID
+    return request.htmx and request.htmx.target and request.htmx.target != PAGE_CONTAINER_ID

+ 1 - 1
netbox/utilities/templates/builtins/htmx_table.html

@@ -1,4 +1,4 @@
-<div class="card-body htmx-container table-responsive p-0"
+<div class="htmx-container table-responsive"
   hx-get="{% url viewname %}{% if url_params %}?{{ url_params.urlencode }}{% endif %}"
   hx-get="{% url viewname %}{% if url_params %}?{{ url_params.urlencode }}{% endif %}"
   hx-target="this"
   hx-target="this"
   hx-trigger="load" hx-select="table" hx-swap="innerHTML"
   hx-trigger="load" hx-select="table" hx-swap="innerHTML"

+ 1 - 0
netbox/utilities/templatetags/builtins/tags.py

@@ -8,6 +8,7 @@ __all__ = (
     'checkmark',
     'checkmark',
     'copy_content',
     'copy_content',
     'customfield_value',
     'customfield_value',
+    'htmx_table',
     'formaction',
     'formaction',
     'tag',
     'tag',
 )
 )