kopia lustrzana https://github.com/wagtail/wagtail
Refactor BaseChooser to standardise on `(id, opts)` as arguments to the JS constructor
rodzic
3dc3d37bbf
commit
b70ae68566
|
|
@ -101,6 +101,7 @@ class BaseChooser(widgets.Input):
|
|||
icon = None
|
||||
classname = None
|
||||
model = None
|
||||
js_constructor = "Chooser"
|
||||
|
||||
# when looping over form fields, this one should appear in visible_fields, not hidden_fields
|
||||
# despite the underlying input being type="hidden"
|
||||
|
|
@ -231,8 +232,12 @@ 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):
|
||||
return {}
|
||||
|
||||
def render_js_init(self, id_, name, value_data):
|
||||
return "new Chooser({0});".format(json.dumps(id_))
|
||||
opts = self.get_js_init_options(id_, name, value_data)
|
||||
return f"new {self.js_constructor}({json.dumps(id_)}, {json.dumps(opts)});"
|
||||
|
||||
@cached_property
|
||||
def media(self):
|
||||
|
|
@ -272,6 +277,7 @@ class AdminPageChooser(BaseChooser):
|
|||
chooser_modal_url_name = "wagtailadmin_choose_page"
|
||||
icon = "doc-empty-inverse"
|
||||
classname = "page-chooser"
|
||||
js_constructor = "PageChooser"
|
||||
|
||||
def __init__(
|
||||
self, target_models=None, can_choose_root=False, user_perms=None, **kwargs
|
||||
|
|
@ -342,16 +348,14 @@ class AdminPageChooser(BaseChooser):
|
|||
data["parent_id"] = parent_page.pk if parent_page else None
|
||||
return data
|
||||
|
||||
def render_js_init(self, id_, name, value_data):
|
||||
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 {}
|
||||
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_),
|
||||
options=json.dumps(options),
|
||||
)
|
||||
opts["parent_id"] = parent_id
|
||||
return opts
|
||||
|
||||
@property
|
||||
def media(self):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import json
|
||||
|
||||
from django import forms
|
||||
from django.urls import reverse
|
||||
from django.utils.functional import cached_property
|
||||
|
|
@ -150,14 +148,12 @@ class DocumentChooserUploadView(
|
|||
|
||||
class BaseAdminDocumentChooser(BaseChooser):
|
||||
classname = "document-chooser"
|
||||
js_constructor = "DocumentChooser"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.model = get_document_model_string()
|
||||
|
||||
def render_js_init(self, id_, name, value_data):
|
||||
return "new DocumentChooser({0});".format(json.dumps(id_))
|
||||
|
||||
@property
|
||||
def media(self):
|
||||
return forms.Media(
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import json
|
||||
|
||||
from django import forms
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
|
@ -19,6 +17,7 @@ class AdminImageChooser(BaseChooser):
|
|||
chooser_modal_url_name = "wagtailimages_chooser:choose"
|
||||
icon = "image"
|
||||
classname = "image-chooser"
|
||||
js_constructor = "ImageChooser"
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
|
@ -39,9 +38,6 @@ class AdminImageChooser(BaseChooser):
|
|||
context["preview"] = value_data.get("preview", {})
|
||||
return context
|
||||
|
||||
def render_js_init(self, id_, name, value_data):
|
||||
return "new ImageChooser({0});".format(json.dumps(id_))
|
||||
|
||||
@property
|
||||
def media(self):
|
||||
return forms.Media(
|
||||
|
|
|
|||
|
|
@ -3803,7 +3803,7 @@ class TestSnippetChooserPanel(TestCase, WagtailTestUtils):
|
|||
|
||||
def test_render_js(self):
|
||||
self.assertIn(
|
||||
'new SnippetChooser("id_advert");',
|
||||
'new SnippetChooser("id_advert", {});',
|
||||
self.snippet_chooser_panel.render_html(),
|
||||
)
|
||||
|
||||
|
|
@ -5386,7 +5386,7 @@ class TestSnippetChooserPanelWithCustomPrimaryKey(TestCase, WagtailTestUtils):
|
|||
|
||||
def test_render_js(self):
|
||||
self.assertIn(
|
||||
'new SnippetChooser("id_advertwithcustomprimarykey");',
|
||||
'new SnippetChooser("id_advertwithcustomprimarykey", {});',
|
||||
self.snippet_chooser_panel.render_html(),
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
import json
|
||||
|
||||
from django import forms
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.urls import reverse
|
||||
|
|
@ -17,6 +15,7 @@ class AdminSnippetChooser(BaseChooser):
|
|||
display_title_key = "string"
|
||||
icon = "snippet"
|
||||
classname = "snippet-chooser"
|
||||
js_constructor = "SnippetChooser"
|
||||
|
||||
def __init__(self, model, **kwargs):
|
||||
self.model = model
|
||||
|
|
@ -45,9 +44,6 @@ class AdminSnippetChooser(BaseChooser):
|
|||
else:
|
||||
raise
|
||||
|
||||
def render_js_init(self, id_, name, value_data):
|
||||
return "new SnippetChooser({id});".format(id=json.dumps(id_))
|
||||
|
||||
@cached_property
|
||||
def media(self):
|
||||
return forms.Media(
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue