From fb0ba6513b853789e71f4a69f75c615b4cd03af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marduk=20Bola=C3=B1os?= Date: Wed, 11 Sep 2024 20:46:05 +0200 Subject: [PATCH 1/5] Added the fix from the issue #249 --- .../static/django_select2/django_select2.js | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/django_select2/static/django_select2/django_select2.js b/django_select2/static/django_select2/django_select2.js index 01db20b5..176a5f4a 100644 --- a/django_select2/static/django_select2/django_select2.js +++ b/django_select2/static/django_select2/django_select2.js @@ -69,6 +69,30 @@ $(function () { $('.django-select2').djangoSelect2() + + // This part fixes new inlines not having the correct select2 widgets + function handleFormsetAdded(row, formsetName) { + // Converting to the "normal jQuery" + var jqRow = django.jQuery(row) + + // Because select2 was already instantiated on the empty form, we need to remove it, destroy the instance, + // and re-instantiate it. + jqRow.find('.select2-container').remove() + jqRow.find('.django-select2').djangoSelect2('destroy'); + jqRow.find('.django-select2').djangoSelect2() + } + + // See: https://docs.djangoproject.com/en/dev/ref/contrib/admin/javascript/#supporting-versions-of-django-older-than-4-1 + django.jQuery(document).on('formset:added', function (event, $row, formsetName) { + if (event.detail && event.detail.formsetName) { + // Django >= 4.1 + handleFormsetAdded(event.target, event.detail.formsetName) + } else { + // Django < 4.1, use $row and formsetName + handleFormsetAdded($row.get(0), formsetName) + } + }) + // End of fix }) return $.fn.djangoSelect2 From 83052e338d9884e0666f03ac6f9ce22dd483370c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marduk=20Bola=C3=B1os?= Date: Mon, 16 Sep 2024 15:21:57 +0200 Subject: [PATCH 2/5] Only delete the .select2-container if it contains a .django-select2 --- django_select2/static/django_select2/django_select2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_select2/static/django_select2/django_select2.js b/django_select2/static/django_select2/django_select2.js index 176a5f4a..704a6424 100644 --- a/django_select2/static/django_select2/django_select2.js +++ b/django_select2/static/django_select2/django_select2.js @@ -77,7 +77,7 @@ // Because select2 was already instantiated on the empty form, we need to remove it, destroy the instance, // and re-instantiate it. - jqRow.find('.select2-container').remove() + jqRow.find('.django-select2').parent().find('.select2-container').remove() jqRow.find('.django-select2').djangoSelect2('destroy'); jqRow.find('.django-select2').djangoSelect2() } From 3599159edc790a263a90640a7f2ca3706131b288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marduk=20Bola=C3=B1os?= Date: Mon, 16 Sep 2024 18:29:11 +0200 Subject: [PATCH 3/5] Fixed formatting in oder to comply with standard JS style --- .../static/django_select2/django_select2.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/django_select2/static/django_select2/django_select2.js b/django_select2/static/django_select2/django_select2.js index 704a6424..d46dd506 100644 --- a/django_select2/static/django_select2/django_select2.js +++ b/django_select2/static/django_select2/django_select2.js @@ -71,25 +71,25 @@ $('.django-select2').djangoSelect2() // This part fixes new inlines not having the correct select2 widgets - function handleFormsetAdded(row, formsetName) { + function handleFormsetAdded (row, formsetName) { // Converting to the "normal jQuery" - var jqRow = django.jQuery(row) + const jqRow = $(row) // Because select2 was already instantiated on the empty form, we need to remove it, destroy the instance, // and re-instantiate it. jqRow.find('.django-select2').parent().find('.select2-container').remove() - jqRow.find('.django-select2').djangoSelect2('destroy'); + jqRow.find('.django-select2').djangoSelect2('destroy') jqRow.find('.django-select2').djangoSelect2() } // See: https://docs.djangoproject.com/en/dev/ref/contrib/admin/javascript/#supporting-versions-of-django-older-than-4-1 - django.jQuery(document).on('formset:added', function (event, $row, formsetName) { + $(document).on('formset:added', function (event, $row, formsetName) { if (event.detail && event.detail.formsetName) { - // Django >= 4.1 - handleFormsetAdded(event.target, event.detail.formsetName) + // Django >= 4.1 + handleFormsetAdded(event.target, event.detail.formsetName) } else { - // Django < 4.1, use $row and formsetName - handleFormsetAdded($row.get(0), formsetName) + // Django < 4.1, use $row and formsetName + handleFormsetAdded($row.get(0), formsetName) } }) // End of fix From 7c001d8590c5591871025375490484fce1738f06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marduk=20Bola=C3=B1os?= Date: Mon, 25 Nov 2024 16:16:52 +0100 Subject: [PATCH 4/5] Update django_select2/static/django_select2/django_select2.js Co-authored-by: Johannes Maron --- .../static/django_select2/django_select2.js | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/django_select2/static/django_select2/django_select2.js b/django_select2/static/django_select2/django_select2.js index d46dd506..cde60894 100644 --- a/django_select2/static/django_select2/django_select2.js +++ b/django_select2/static/django_select2/django_select2.js @@ -68,31 +68,11 @@ } $(function () { - $('.django-select2').djangoSelect2() + $('.django-select2').not('[name*=__prefix__]').djangoAdminSelect2() - // This part fixes new inlines not having the correct select2 widgets - function handleFormsetAdded (row, formsetName) { - // Converting to the "normal jQuery" - const jqRow = $(row) - - // Because select2 was already instantiated on the empty form, we need to remove it, destroy the instance, - // and re-instantiate it. - jqRow.find('.django-select2').parent().find('.select2-container').remove() - jqRow.find('.django-select2').djangoSelect2('destroy') - jqRow.find('.django-select2').djangoSelect2() - } - - // See: https://docs.djangoproject.com/en/dev/ref/contrib/admin/javascript/#supporting-versions-of-django-older-than-4-1 - $(document).on('formset:added', function (event, $row, formsetName) { - if (event.detail && event.detail.formsetName) { - // Django >= 4.1 - handleFormsetAdded(event.target, event.detail.formsetName) - } else { - // Django < 4.1, use $row and formsetName - handleFormsetAdded($row.get(0), formsetName) - } + document.addEventListener('formset:added', (event) => { + $(event.target).find('.django-select2').djangoSelect2() }) - // End of fix }) return $.fn.djangoSelect2 From f9ed100f8f19daa62694c04727dadefc44ca0b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marduk=20Bola=C3=B1os?= Date: Mon, 25 Nov 2024 16:19:29 +0100 Subject: [PATCH 5/5] Call djangoSelect2 instead of djangoAdminSelect2 --- django_select2/static/django_select2/django_select2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_select2/static/django_select2/django_select2.js b/django_select2/static/django_select2/django_select2.js index cde60894..935033d3 100644 --- a/django_select2/static/django_select2/django_select2.js +++ b/django_select2/static/django_select2/django_select2.js @@ -68,7 +68,7 @@ } $(function () { - $('.django-select2').not('[name*=__prefix__]').djangoAdminSelect2() + $('.django-select2').not('[name*=__prefix__]').djangoSelect2() document.addEventListener('formset:added', (event) => { $(event.target).find('.django-select2').djangoSelect2()