kopia lustrzana https://github.com/wagtail/wagtail
Define a base_js_init_options property on BaseChooser
This defines the common options that should be passed in the opts dict in the constructor for FooChooser and FooChooserFactory.pull/9445/head
rodzic
b70ae68566
commit
bf9b62f1ec
|
|
@ -232,9 +232,15 @@ class BaseChooser(widgets.Input):
|
|||
out = "{0}<script>{1}</script>".format(widget_html, js)
|
||||
return mark_safe(out)
|
||||
|
||||
def get_js_init_options(self, id_, name, value_data):
|
||||
@property
|
||||
def base_js_init_options(self):
|
||||
"""The set of options to pass to the JS initialiser that are constant every time this widget
|
||||
instance is rendered (i.e. do not vary based on id / name / value)"""
|
||||
return {}
|
||||
|
||||
def get_js_init_options(self, id_, name, value_data):
|
||||
return {**self.base_js_init_options}
|
||||
|
||||
def render_js_init(self, id_, name, value_data):
|
||||
opts = self.get_js_init_options(id_, name, value_data)
|
||||
return f"new {self.js_constructor}({json.dumps(id_)}, {json.dumps(opts)});"
|
||||
|
|
@ -255,6 +261,7 @@ class BaseChooserAdapter(WidgetAdapter):
|
|||
return [
|
||||
widget.render_html("__NAME__", None, attrs={"id": "__ID__"}),
|
||||
widget.id_for_label("__ID__"),
|
||||
widget.base_js_init_options,
|
||||
]
|
||||
|
||||
@cached_property
|
||||
|
|
@ -325,13 +332,14 @@ class AdminPageChooser(BaseChooser):
|
|||
]
|
||||
|
||||
@property
|
||||
def client_options(self):
|
||||
def base_js_init_options(self):
|
||||
# a JSON-serializable representation of the configuration options needed for the
|
||||
# client-side behaviour of this widget
|
||||
return {
|
||||
"model_names": self.model_names,
|
||||
"can_choose_root": self.can_choose_root,
|
||||
"user_perms": self.user_perms,
|
||||
**super().base_js_init_options,
|
||||
}
|
||||
|
||||
def get_instance(self, value):
|
||||
|
|
@ -350,7 +358,6 @@ class AdminPageChooser(BaseChooser):
|
|||
|
||||
def get_js_init_options(self, id_, name, value_data):
|
||||
opts = super().get_js_init_options(id_, name, value_data)
|
||||
opts.update(self.client_options)
|
||||
value_data = value_data or {}
|
||||
parent_id = value_data.get("parent_id")
|
||||
if parent_id is not None:
|
||||
|
|
@ -367,7 +374,7 @@ class AdminPageChooser(BaseChooser):
|
|||
)
|
||||
|
||||
|
||||
class PageChooserAdapter(WidgetAdapter):
|
||||
class PageChooserAdapter(BaseChooserAdapter):
|
||||
js_constructor = "wagtail.widgets.PageChooser"
|
||||
|
||||
@cached_property
|
||||
|
|
@ -380,13 +387,6 @@ class PageChooserAdapter(WidgetAdapter):
|
|||
]
|
||||
)
|
||||
|
||||
def js_args(self, widget):
|
||||
return [
|
||||
widget.render_html("__NAME__", None, attrs={"id": "__ID__"}),
|
||||
widget.id_for_label("__ID__"),
|
||||
widget.client_options,
|
||||
]
|
||||
|
||||
|
||||
class AdminPageMoveChooser(AdminPageChooser):
|
||||
def __init__(
|
||||
|
|
@ -401,13 +401,11 @@ class AdminPageMoveChooser(AdminPageChooser):
|
|||
)
|
||||
|
||||
@property
|
||||
def client_options(self):
|
||||
def base_js_init_options(self):
|
||||
return {
|
||||
"model_names": self.model_names,
|
||||
"can_choose_root": self.can_choose_root,
|
||||
"user_perms": self.user_perms,
|
||||
"target_pages": self.pages_to_move,
|
||||
"match_subclass": False,
|
||||
**super().base_js_init_options,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5077,7 +5077,7 @@ class TestAdminSnippetChooserWidget(TestCase, WagtailTestUtils):
|
|||
|
||||
js_args = SnippetChooserAdapter().js_args(widget)
|
||||
|
||||
self.assertEqual(len(js_args), 2)
|
||||
self.assertEqual(len(js_args), 3)
|
||||
self.assertInHTML(
|
||||
'<input type="hidden" name="__NAME__" id="__ID__">', js_args[0]
|
||||
)
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue