From 08d06d623e78077a5e0ec4c847606497c4532f3d Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Mon, 9 May 2022 13:26:20 +0100 Subject: [PATCH] Move remaining common context variables into BaseChooser --- wagtail/admin/widgets/chooser.py | 24 +++++++++---------- wagtail/admin/widgets/workflows.py | 14 ++--------- wagtail/documents/widgets.py | 16 +++---------- .../wagtailimages/widgets/image_chooser.html | 2 +- wagtail/images/widgets.py | 14 ++++------- wagtail/snippets/widgets.py | 18 ++++---------- 6 files changed, 26 insertions(+), 62 deletions(-) diff --git a/wagtail/admin/widgets/chooser.py b/wagtail/admin/widgets/chooser.py index 346abe5a15..30161f46fc 100644 --- a/wagtail/admin/widgets/chooser.py +++ b/wagtail/admin/widgets/chooser.py @@ -97,6 +97,8 @@ class BaseChooser(widgets.Input): display_title_key = ( "title" # key to use for the display title within the value data dict ) + icon = None + classname = None # when looping over form fields, this one should appear in visible_fields, not hidden_fields # despite the underlying input being type="hidden" @@ -140,6 +142,9 @@ class BaseChooser(widgets.Input): self.get_hidden_input_context(name, value, attrs), ) + def get_chooser_modal_url(self): + return reverse(self.chooser_modal_url_name) + def get_context(self, name, value_data, attrs): original_field_html = self.render_hidden_input( name, value_data.get("id"), attrs @@ -152,6 +157,10 @@ class BaseChooser(widgets.Input): value_data ), # only used by chooser.html to identify blank values "edit_url": value_data.get("edit_url", ""), + "display_title": value_data.get(self.display_title_key, ""), + "chooser_url": self.get_chooser_modal_url(), + "icon": self.icon, + "classname": self.classname, } def render_html(self, name, value_data, attrs): @@ -225,6 +234,9 @@ class AdminPageChooser(BaseChooser): choose_another_text = _("Choose another page") link_to_chosen_text = _("Edit this page") display_title_key = "display_title" + chooser_modal_url_name = "wagtailadmin_choose_page" + icon = "doc-empty-inverse" + classname = "page-chooser" def __init__( self, target_models=None, can_choose_root=False, user_perms=None, **kwargs @@ -295,18 +307,6 @@ class AdminPageChooser(BaseChooser): data["parent_id"] = parent_page.pk if parent_page else None return data - def get_context(self, name, value_data, attrs): - context = super().get_context(name, value_data, attrs) - context.update( - { - "display_title": value_data.get("display_title", ""), - "icon": "doc-empty-inverse", - "classname": "page-chooser", - "chooser_url": reverse("wagtailadmin_choose_page"), - } - ) - return context - def render_js_init(self, id_, name, value_data): value_data = value_data or {} return "createPageChooser({id}, {parent}, {options});".format( diff --git a/wagtail/admin/widgets/workflows.py b/wagtail/admin/widgets/workflows.py index 040d7de3ec..83cc3fa592 100644 --- a/wagtail/admin/widgets/workflows.py +++ b/wagtail/admin/widgets/workflows.py @@ -1,7 +1,6 @@ import json from django import forms -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from wagtail.admin.staticfiles import versioned_static @@ -15,17 +14,8 @@ class AdminTaskChooser(BaseChooser): link_to_chosen_text = _("Edit this task") model = Task template_name = "wagtailadmin/workflows/widgets/task_chooser.html" - - def get_context(self, name, value_data, attrs): - context = super().get_context(name, value_data, attrs) - context.update( - { - "display_title": value_data.get("title", ""), - "classname": "task-chooser", - "chooser_url": reverse("wagtailadmin_workflows:task_chooser"), - } - ) - return context + chooser_modal_url_name = "wagtailadmin_workflows:task_chooser" + classname = "task-chooser" def render_js_init(self, id_, name, value_data): return "createTaskChooser({0});".format(json.dumps(id_)) diff --git a/wagtail/documents/widgets.py b/wagtail/documents/widgets.py index 67b87c8c6d..82a966054b 100644 --- a/wagtail/documents/widgets.py +++ b/wagtail/documents/widgets.py @@ -1,7 +1,6 @@ import json from django import forms -from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ @@ -16,23 +15,14 @@ class AdminDocumentChooser(BaseChooser): choose_one_text = _("Choose a document") choose_another_text = _("Choose another document") link_to_chosen_text = _("Edit this document") + chooser_modal_url_name = "wagtaildocs:chooser" + icon = "doc-full-inverse" + classname = "document-chooser" def __init__(self, **kwargs): super().__init__(**kwargs) self.model = get_document_model() - def get_context(self, name, value_data, attrs): - context = super().get_context(name, value_data, attrs) - context.update( - { - "display_title": value_data.get("title", ""), - "icon": "doc-full-inverse", - "classname": "document-chooser", - "chooser_url": reverse("wagtaildocs:chooser"), - } - ) - return context - def render_js_init(self, id_, name, value_data): return "createDocumentChooser({0});".format(json.dumps(id_)) diff --git a/wagtail/images/templates/wagtailimages/widgets/image_chooser.html b/wagtail/images/templates/wagtailimages/widgets/image_chooser.html index 6d0a941b91..2bbc0d5720 100644 --- a/wagtail/images/templates/wagtailimages/widgets/image_chooser.html +++ b/wagtail/images/templates/wagtailimages/widgets/image_chooser.html @@ -5,6 +5,6 @@ {% block chosen_state_view %}
- {{ title }} + {{ display_title }}
{% endblock %} diff --git a/wagtail/images/widgets.py b/wagtail/images/widgets.py index 0b26cfa911..6112c64a8f 100644 --- a/wagtail/images/widgets.py +++ b/wagtail/images/widgets.py @@ -1,7 +1,6 @@ import json from django import forms -from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ @@ -18,6 +17,9 @@ class AdminImageChooser(BaseChooser): choose_another_text = _("Change image") link_to_chosen_text = _("Edit this image") template_name = "wagtailimages/widgets/image_chooser.html" + chooser_modal_url_name = "wagtailimages:chooser" + icon = "image" + classname = "image-chooser" def __init__(self, **kwargs): super().__init__(**kwargs) @@ -35,15 +37,7 @@ class AdminImageChooser(BaseChooser): def get_context(self, name, value_data, attrs): context = super().get_context(name, value_data, attrs) - context.update( - { - "title": value_data.get("title", ""), - "preview": value_data.get("preview", {}), - "icon": "image", - "classname": "image-chooser", - "chooser_url": reverse("wagtailimages:chooser"), - } - ) + context["preview"] = value_data.get("preview", {}) return context def render_js_init(self, id_, name, value_data): diff --git a/wagtail/snippets/widgets.py b/wagtail/snippets/widgets.py index c5f2068f55..dc56abe35b 100644 --- a/wagtail/snippets/widgets.py +++ b/wagtail/snippets/widgets.py @@ -14,6 +14,8 @@ from wagtail.widget_adapters import WidgetAdapter class AdminSnippetChooser(BaseChooser): display_title_key = "string" + icon = "snippet" + classname = "snippet-chooser" def __init__(self, model, **kwargs): self.model = model @@ -24,10 +26,8 @@ class AdminSnippetChooser(BaseChooser): super().__init__(**kwargs) - def get_context(self, name, value_data, attrs): - context = super().get_context(name, value_data, attrs) - - chooser_url = reverse( + def get_chooser_modal_url(self): + return reverse( "wagtailsnippets:choose", args=[ self.model._meta.app_label, @@ -35,16 +35,6 @@ class AdminSnippetChooser(BaseChooser): ], ) - context.update( - { - "display_title": value_data.get("string", ""), - "chooser_url": chooser_url, - "icon": "snippet", - "classname": "snippet-chooser", - } - ) - return context - def render_js_init(self, id_, name, value_data): return "createSnippetChooser({id});".format(id=json.dumps(id_))