Skip to content

Commit

Permalink
[2.2.x] Fixed #30459 -- Delegated hide/show JS toggle to parent div.
Browse files Browse the repository at this point in the history
Co-authored-by: Carlton Gibson <carlton.gibson@noumenal.es>

Backport of e286987 from master
  • Loading branch information
claudep authored and felixxm committed May 17, 2019
1 parent 08c8838 commit 34a357d
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 19 deletions.
31 changes: 17 additions & 14 deletions django/contrib/admin/static/admin/js/collapse.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,26 @@
h2.appendChild(document.createTextNode(')'));
}
}
// Add toggle to anchor tag
var toggles = document.querySelectorAll('fieldset.collapse a.collapse-toggle');
// Add toggle to hide/show anchor tag
var toggleFunc = function(ev) {
ev.preventDefault();
var fieldset = closestElem(this, 'fieldset');
if (fieldset.classList.contains('collapsed')) {
// Show
this.textContent = gettext('Hide');
fieldset.classList.remove('collapsed');
} else {
// Hide
this.textContent = gettext('Show');
fieldset.classList.add('collapsed');
if (ev.target.matches('.collapse-toggle')) {
ev.preventDefault();
ev.stopPropagation();
var fieldset = closestElem(ev.target, 'fieldset');
if (fieldset.classList.contains('collapsed')) {
// Show
ev.target.textContent = gettext('Hide');
fieldset.classList.remove('collapsed');
} else {
// Hide
ev.target.textContent = gettext('Show');
fieldset.classList.add('collapsed');
}
}
};
for (i = 0; i < toggles.length; i++) {
toggles[i].addEventListener('click', toggleFunc);
var inlineDivs = document.querySelectorAll('fieldset.module');
for (i = 0; i < inlineDivs.length; i++) {
inlineDivs[i].addEventListener('click', toggleFunc);
}
});
})();
5 changes: 3 additions & 2 deletions django/contrib/admin/static/admin/js/collapse.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion docs/releases/2.2.2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ Django 2.2.2 fixes several bugs in 2.2.1.
Bugfixes
========

* ...
* Fixed a regression in Django 2.2 that stopped Show/Hide toggles working on
dynamically added admin inlines (:ticket:`30459`).
18 changes: 16 additions & 2 deletions tests/admin_inlines/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
from django.db import models

from .models import (
Author, BinaryTree, CapoFamiglia, Chapter, ChildModel1, ChildModel2,
Author, BinaryTree, CapoFamiglia, Chapter, Child, ChildModel1, ChildModel2,
Consigliere, EditablePKBook, ExtraTerrestrial, Fashionista, Holder,
Holder2, Holder3, Holder4, Inner, Inner2, Inner3, Inner4Stacked,
Inner4Tabular, NonAutoPKBook, NonAutoPKBookChild, Novel,
NovelReadonlyChapter, ParentModelWithCustomPk, Poll, Profile,
ProfileCollection, Question, ReadOnlyInline, ShoppingWeakness, Sighting,
SomeChildModel, SomeParentModel, SottoCapo, Title, TitleCollection,
SomeChildModel, SomeParentModel, SottoCapo, Teacher, Title,
TitleCollection,
)

site = admin.AdminSite(name="admin")
Expand Down Expand Up @@ -235,6 +236,18 @@ class SomeChildModelInline(admin.TabularInline):
readonly_fields = ('readonly_field',)


class StudentInline(admin.StackedInline):
model = Child
extra = 1
fieldsets = [
('Name', {'fields': ('name',), 'classes': ('collapse',)}),
]


class TeacherAdmin(admin.ModelAdmin):
inlines = [StudentInline]


site.register(TitleCollection, inlines=[TitleInline])
# Test bug #12561 and #12778
# only ModelAdmin media
Expand All @@ -257,3 +270,4 @@ class SomeChildModelInline(admin.TabularInline):
site.register(ExtraTerrestrial, inlines=[SightingInline])
site.register(SomeParentModel, inlines=[SomeChildModelInline])
site.register([Question, Inner4Stacked, Inner4Tabular])
site.register(Teacher, TeacherAdmin)
18 changes: 18 additions & 0 deletions tests/admin_inlines/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1024,3 +1024,21 @@ def test_collapsed_inlines(self):
self.wait_until_visible(field_name)
hide_links[hide_index].click()
self.wait_until_invisible(field_name)

def test_added_stacked_inline_with_collapsed_fields(self):
self.admin_login(username='super', password='secret')
self.selenium.get(self.live_server_url + reverse('admin:admin_inlines_teacher_add'))
self.selenium.find_element_by_link_text('Add another Child').click()
test_fields = ['#id_child_set-0-name', '#id_child_set-1-name']
show_links = self.selenium.find_elements_by_link_text('SHOW')
self.assertEqual(len(show_links), 2)
for show_index, field_name in enumerate(test_fields, 0):
self.wait_until_invisible(field_name)
show_links[show_index].click()
self.wait_until_visible(field_name)
hide_links = self.selenium.find_elements_by_link_text('HIDE')
self.assertEqual(len(hide_links), 2)
for hide_index, field_name in enumerate(test_fields, 0):
self.wait_until_visible(field_name)
hide_links[hide_index].click()
self.wait_until_invisible(field_name)

0 comments on commit 34a357d

Please sign in to comment.