kopia lustrzana https://github.com/wagtail/wagtail
Change PageChooser widget constructor to accept `parent_id` as part of the opts dict
The old signature is still accepted for backwards compatibility. This then matches the signature of the other chooser widget JS classes, allowing PageChooserFactory to extend the generic ChooserFactory.pull/9445/head
rodzic
dcba3a9194
commit
536d1096c2
|
@ -11,7 +11,7 @@ class PageChooserFactory {
|
|||
placeholder.outerHTML = html;
|
||||
/* the PageChooser object also serves as the JS widget representation */
|
||||
// eslint-disable-next-line no-undef
|
||||
const chooser = new PageChooser(id, null, this.config);
|
||||
const chooser = new PageChooser(id, this.config);
|
||||
chooser.setState(initialState);
|
||||
return chooser;
|
||||
}
|
||||
|
|
|
@ -7,27 +7,33 @@ class PageChooser extends Chooser {
|
|||
titleStateKey = 'adminTitle';
|
||||
editUrlStateKey = 'editUrl';
|
||||
|
||||
constructor(id, parentId, options = {}) {
|
||||
super(id);
|
||||
this.initialParentId = parentId;
|
||||
this.options = options;
|
||||
constructor(id, arg1, arg2) {
|
||||
let opts;
|
||||
if (arg2 || typeof arg1 === 'number') {
|
||||
/* old-style args: (id, parentId, opts) */
|
||||
opts = { parent_id: arg1, ...arg2 };
|
||||
} else {
|
||||
/* new style args: (id, opts) where opts includes 'parent_id' */
|
||||
opts = arg1 || {};
|
||||
}
|
||||
super(id, opts);
|
||||
}
|
||||
|
||||
getStateFromHTML() {
|
||||
const state = super.getStateFromHTML();
|
||||
if (state) {
|
||||
state.parentId = this.initialParentId;
|
||||
state.parentId = this.opts.parent_id;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
getModalOptions() {
|
||||
const opts = {
|
||||
model_names: this.options.model_names,
|
||||
target_pages: this.options.target_pages,
|
||||
match_subclass: this.options.match_subclass,
|
||||
can_choose_root: this.options.can_choose_root,
|
||||
user_perms: this.options.user_perms,
|
||||
model_names: this.opts.model_names,
|
||||
target_pages: this.opts.target_pages,
|
||||
match_subclass: this.opts.match_subclass,
|
||||
can_choose_root: this.opts.can_choose_root,
|
||||
user_perms: this.opts.user_perms,
|
||||
};
|
||||
if (this.state && this.state.parentId) {
|
||||
opts.parentId = this.state.parentId;
|
||||
|
|
|
@ -947,7 +947,7 @@ class TestPageChooserPanel(TestCase):
|
|||
|
||||
def test_render_js_init(self):
|
||||
result = self.page_chooser_panel.render_html()
|
||||
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null}});'.format(
|
||||
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null, "parent_id": {parent}}});'.format(
|
||||
id="id_page", model="wagtailcore.page", parent=self.events_index_page.id
|
||||
)
|
||||
|
||||
|
@ -969,7 +969,7 @@ class TestPageChooserPanel(TestCase):
|
|||
result = page_chooser_panel.render_html()
|
||||
|
||||
# the canChooseRoot flag on PageChooser should now be true
|
||||
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": true, "user_perms": null}});'.format(
|
||||
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": true, "user_perms": null, "parent_id": {parent}}});'.format(
|
||||
id="id_page", model="wagtailcore.page", parent=self.events_index_page.id
|
||||
)
|
||||
self.assertIn(expected_js, result)
|
||||
|
@ -1025,7 +1025,7 @@ class TestPageChooserPanel(TestCase):
|
|||
)
|
||||
|
||||
result = page_chooser_panel.render_html()
|
||||
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null}});'.format(
|
||||
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null, "parent_id": {parent}}});'.format(
|
||||
id="id_page", model="tests.eventpage", parent=self.events_index_page.id
|
||||
)
|
||||
|
||||
|
@ -1045,7 +1045,7 @@ class TestPageChooserPanel(TestCase):
|
|||
)
|
||||
|
||||
result = page_chooser_panel.render_html()
|
||||
expected_js = 'new PageChooser("{id}", {parent}, {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null}});'.format(
|
||||
expected_js = 'new PageChooser("{id}", {{"model_names": ["{model}"], "can_choose_root": false, "user_perms": null, "parent_id": {parent}}});'.format(
|
||||
id="id_page", model="tests.eventpage", parent=self.events_index_page.id
|
||||
)
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
|
||||
html = widget.render("test", None, {"id": "test-id"})
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", null, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});',
|
||||
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});',
|
||||
html,
|
||||
)
|
||||
|
||||
|
@ -82,7 +82,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
|
||||
html = widget.render("test", None, {"id": "test-id"})
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", null, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": "copy_to"});',
|
||||
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": "copy_to"});',
|
||||
html,
|
||||
)
|
||||
|
||||
|
@ -99,7 +99,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
self.assertInHTML("foobarbaz (simple page)", html)
|
||||
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", %d, {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null});'
|
||||
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": false, "user_perms": null, "parent_id": %d});'
|
||||
% self.root_page.id,
|
||||
html,
|
||||
)
|
||||
|
@ -109,7 +109,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
|
||||
html = widget.render("test", None, {"id": "test-id"})
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
|
||||
'new PageChooser("test-id", {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
|
||||
html,
|
||||
)
|
||||
|
||||
|
@ -121,7 +121,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
|
||||
html = widget.render("test", None, {"id": "test-id"})
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
|
||||
'new PageChooser("test-id", {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
|
||||
html,
|
||||
)
|
||||
|
||||
|
@ -133,7 +133,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
|
||||
html = widget.render("test", None, {"id": "test-id"})
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
|
||||
'new PageChooser("test-id", {"model_names": ["tests.simplepage"], "can_choose_root": false, "user_perms": null});',
|
||||
html,
|
||||
)
|
||||
|
||||
|
@ -146,7 +146,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
|
||||
html = widget.render("test", None, {"id": "test-id"})
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", null, {"model_names": ["tests.simplepage", "tests.eventpage"], "can_choose_root": false, "user_perms": null});',
|
||||
'new PageChooser("test-id", {"model_names": ["tests.simplepage", "tests.eventpage"], "can_choose_root": false, "user_perms": null});',
|
||||
html,
|
||||
)
|
||||
|
||||
|
@ -158,7 +158,7 @@ class TestAdminPageChooserWidget(TestCase):
|
|||
|
||||
html = widget.render("test", self.child_page, {"id": "test-id"})
|
||||
self.assertIn(
|
||||
'new PageChooser("test-id", %d, {"model_names": ["wagtailcore.page"], "can_choose_root": true, "user_perms": null});'
|
||||
'new PageChooser("test-id", {"model_names": ["wagtailcore.page"], "can_choose_root": true, "user_perms": null, "parent_id": %d});'
|
||||
% self.root_page.id,
|
||||
html,
|
||||
)
|
||||
|
|
|
@ -344,10 +344,13 @@ class AdminPageChooser(BaseChooser):
|
|||
|
||||
def render_js_init(self, id_, name, value_data):
|
||||
value_data = value_data or {}
|
||||
return "new PageChooser({id}, {parent}, {options});".format(
|
||||
options = self.client_options
|
||||
parent_id = value_data.get("parent_id")
|
||||
if parent_id is not None:
|
||||
options["parent_id"] = parent_id
|
||||
return "new PageChooser({id}, {options});".format(
|
||||
id=json.dumps(id_),
|
||||
parent=json.dumps(value_data.get("parent_id")),
|
||||
options=json.dumps(self.client_options),
|
||||
options=json.dumps(options),
|
||||
)
|
||||
|
||||
@property
|
||||
|
|
Ładowanie…
Reference in New Issue