Add can_choose_root flag to AdminPageChooser widget

Also enable it in the relevant places: permission chooser, and selecting destination for copy page
This commit is contained in:
Matt Westcott 2015-10-16 15:07:05 +01:00
parent 340dd73602
commit b534d64d8c
4 changed files with 14 additions and 5 deletions

View file

@ -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.")
)

View file

@ -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)

View file

@ -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')
)

View file

@ -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