From aa14c51d71859fb5bdd3b1b2e3101b3522bf80e2 Mon Sep 17 00:00:00 2001 From: lukas Date: Wed, 9 Jul 2025 14:48:26 +0200 Subject: [PATCH 1/4] feat: ajax paginated inlines --- src/unfold/static/admin/js/inlines.js | 60 +++++++++++++------ .../unfold/helpers/pagination_inline.html | 7 ++- 2 files changed, 49 insertions(+), 18 deletions(-) diff --git a/src/unfold/static/admin/js/inlines.js b/src/unfold/static/admin/js/inlines.js index 2f3dbb88..a5eadaf1 100644 --- a/src/unfold/static/admin/js/inlines.js +++ b/src/unfold/static/admin/js/inlines.js @@ -310,7 +310,7 @@ }; // Tabular inlines --------------------------------------------------------- - $.fn.tabularFormset = function (selector, options) { + $.fn.tabularFormset = function (selector, options, callback = null) { const $rows = $(this); const reinitDateTimeShortCuts = function () { @@ -368,13 +368,18 @@ updateSelectFilter(); }, addButton: options.addButton, + callback: callback, }); + if (typeof callback === "function") { + callback(); + } + return $rows; }; // Stacked inlines --------------------------------------------------------- - $.fn.stackedFormset = function (selector, options) { + $.fn.stackedFormset = function (selector, options, callback = null) { const $rows = $(this); const updateInlineLabel = function (row) { $(selector) @@ -449,26 +454,47 @@ addButton: options.addButton, }); + if (typeof callback === "function") { + callback(); + } + return $rows; }; + $(window).on("htmx:afterSettle", function (event) { + if (event.target.classList.contains("js-inline-admin-formset")) { + initInlines($(event.target), function () { + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + + $(event.target).find(".admin-autocomplete").djangoAdminSelect2(); + }); + } + }); + $(document).ready(function () { $(".js-inline-admin-formset").each(function () { - const data = $(this).data(), - inlineOptions = data.inlineFormset; - let selector; - switch (data.inlineType) { - case "stacked": - selector = inlineOptions.name + "-group .inline-related"; - $(selector).stackedFormset(selector, inlineOptions.options); - break; - case "tabular": - selector = - inlineOptions.name + - "-group .tabular.inline-related tbody:last > tr.form-row"; - $(selector).tabularFormset(selector, inlineOptions.options); - break; - } + initInlines(this); }); }); + + function initInlines(el, callback = null) { + const data = $(el).data(), + inlineOptions = data.inlineFormset; + let selector; + switch (data.inlineType) { + case "stacked": + selector = inlineOptions.name + "-group .inline-related"; + $(selector).stackedFormset(selector, inlineOptions.options, callback); + break; + case "tabular": + selector = + inlineOptions.name + + "-group .tabular.inline-related tbody:last > tr.form-row"; + $(selector).tabularFormset(selector, inlineOptions.options, callback); + break; + } + } } diff --git a/src/unfold/templates/unfold/helpers/pagination_inline.html b/src/unfold/templates/unfold/helpers/pagination_inline.html index 18427bcb..f4c00f94 100644 --- a/src/unfold/templates/unfold/helpers/pagination_inline.html +++ b/src/unfold/templates/unfold/helpers/pagination_inline.html @@ -14,7 +14,12 @@ {% elif i == page_obj.number %} {{ i }} {% else %} - + {{ i }} {% endif %} From 46c6a92d93edf5fc8fb93ea1e45a270315e7bd61 Mon Sep 17 00:00:00 2001 From: lukas Date: Wed, 9 Jul 2025 17:23:23 +0200 Subject: [PATCH 2/4] chore: prop removal --- src/unfold/static/admin/js/inlines.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/unfold/static/admin/js/inlines.js b/src/unfold/static/admin/js/inlines.js index a5eadaf1..17b0d8fa 100644 --- a/src/unfold/static/admin/js/inlines.js +++ b/src/unfold/static/admin/js/inlines.js @@ -368,7 +368,6 @@ updateSelectFilter(); }, addButton: options.addButton, - callback: callback, }); if (typeof callback === "function") { From a8e41461aa1e9af65dac4678da8577ef8e1120dc Mon Sep 17 00:00:00 2001 From: lukas Date: Mon, 14 Jul 2025 10:22:39 +0200 Subject: [PATCH 3/4] feat: render only HTMX requested inline --- src/unfold/templates/admin/change_form.html | 8 +++++++- .../templates/unfold/helpers/pagination_inline.html | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/unfold/templates/admin/change_form.html b/src/unfold/templates/admin/change_form.html index 263a37af..566735d1 100644 --- a/src/unfold/templates/admin/change_form.html +++ b/src/unfold/templates/admin/change_form.html @@ -104,7 +104,13 @@ {% block inline_field_sets %} {% for inline_admin_formset in inline_admin_formsets %} - {% include inline_admin_formset.opts.template %} + {% if request.headers.hx_request %} + {% if inline_admin_formset.formset.get_pagination_key in request.GET %} + {% include inline_admin_formset.opts.template %} + {% endif %} + {% else %} + {% include inline_admin_formset.opts.template %} + {% endif %} {% endfor %} {% endblock %} diff --git a/src/unfold/templates/unfold/helpers/pagination_inline.html b/src/unfold/templates/unfold/helpers/pagination_inline.html index f4c00f94..074ae57d 100644 --- a/src/unfold/templates/unfold/helpers/pagination_inline.html +++ b/src/unfold/templates/unfold/helpers/pagination_inline.html @@ -7,7 +7,7 @@ {% if page_obj.paginator.count and page_obj.paginator.num_pages > 1 %} -
+
{% for i in elided_page_range %} {% if i == page_obj.paginator.ELLIPSIS %} {{ page_obj.paginator.ELLIPSIS }} From fec8f4dd044a3f934302c74547dfdbbe487f8fc5 Mon Sep 17 00:00:00 2001 From: lukas Date: Mon, 14 Jul 2025 11:51:24 +0200 Subject: [PATCH 4/4] fix: design --- src/unfold/templates/admin/includes/fieldset.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unfold/templates/admin/includes/fieldset.html b/src/unfold/templates/admin/includes/fieldset.html index bedad876..01a39ef3 100644 --- a/src/unfold/templates/admin/includes/fieldset.html +++ b/src/unfold/templates/admin/includes/fieldset.html @@ -9,7 +9,7 @@

+

{{ fieldset.name }}

{% endif %}