From b534d64d8c89aefa29211082d90597288b98b66d Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Fri, 16 Oct 2015 15:07:05 +0100 Subject: [PATCH] Add can_choose_root flag to AdminPageChooser widget Also enable it in the relevant places: permission chooser, and selecting destination for copy page --- wagtail/wagtailadmin/forms.py | 2 +- wagtail/wagtailadmin/tests/test_widgets.py | 6 ++++++ wagtail/wagtailadmin/widgets.py | 9 ++++++--- wagtail/wagtailusers/forms.py | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/wagtail/wagtailadmin/forms.py b/wagtail/wagtailadmin/forms.py index ca70c654e..b2ca6ae85 100644 --- a/wagtail/wagtailadmin/forms.py +++ b/wagtail/wagtailadmin/forms.py @@ -116,7 +116,7 @@ class CopyForm(forms.Form): self.fields['new_parent_page'] = forms.ModelChoiceField( initial=self.page.get_parent(), queryset=Page.objects.all(), - widget=AdminPageChooser(), + widget=AdminPageChooser(can_choose_root=True), label=_("New parent page"), help_text=_("This copy will be a child of this given parent page.") ) diff --git a/wagtail/wagtailadmin/tests/test_widgets.py b/wagtail/wagtailadmin/tests/test_widgets.py index 7be1d1c91..04f4111a9 100644 --- a/wagtail/wagtailadmin/tests/test_widgets.py +++ b/wagtail/wagtailadmin/tests/test_widgets.py @@ -66,3 +66,9 @@ class TestAdminPageChooserWidget(TestCase): js_init = widget.render_js_init('test-id', 'test', None) self.assertEqual(js_init, "createPageChooser(\"test-id\", [\"tests.simplepage\", \"tests.eventpage\"], null, false);") + + def test_render_js_init_with_can_choose_root(self): + widget = widgets.AdminPageChooser(can_choose_root=True) + + js_init = widget.render_js_init('test-id', 'test', self.child_page) + self.assertEqual(js_init, "createPageChooser(\"test-id\", [\"wagtailcore.page\"], %d, true);" % self.root_page.id) diff --git a/wagtail/wagtailadmin/widgets.py b/wagtail/wagtailadmin/widgets.py index 7d86b2521..5fac7f974 100644 --- a/wagtail/wagtailadmin/widgets.py +++ b/wagtail/wagtailadmin/widgets.py @@ -122,9 +122,10 @@ class AdminPageChooser(AdminChooser): choose_another_text = _('Choose another page') link_to_chosen_text = _('Edit this page') - def __init__(self, content_type=None, **kwargs): + def __init__(self, content_type=None, can_choose_root=False, **kwargs): super(AdminPageChooser, self).__init__(**kwargs) self._content_type = content_type + self.can_choose_root = can_choose_root @cached_property def target_content_types(self): @@ -166,7 +167,7 @@ class AdminPageChooser(AdminChooser): parent = page.get_parent() if page else None - return "createPageChooser({id}, {content_type}, {parent}, false);".format( + return "createPageChooser({id}, {content_type}, {parent}, {can_choose_root});".format( id=json.dumps(id_), content_type=json.dumps([ '{app}.{model}'.format( @@ -174,4 +175,6 @@ class AdminPageChooser(AdminChooser): model=content_type.model) for content_type in self.target_content_types ]), - parent=json.dumps(parent.id if parent else None)) + parent=json.dumps(parent.id if parent else None), + can_choose_root=('true' if self.can_choose_root else 'false') + ) diff --git a/wagtail/wagtailusers/forms.py b/wagtail/wagtailusers/forms.py index fa1736068..82cb89c9e 100644 --- a/wagtail/wagtailusers/forms.py +++ b/wagtail/wagtailusers/forms.py @@ -235,7 +235,7 @@ class GroupForm(forms.ModelForm): class GroupPagePermissionForm(forms.ModelForm): page = forms.ModelChoiceField(queryset=Page.objects.all(), - widget=AdminPageChooser(show_edit_link=False)) + widget=AdminPageChooser(show_edit_link=False, can_choose_root=True)) class Meta: model = GroupPagePermission