瀏覽代碼

Add a base class for Telepath adapters for chooser widgets

Matt Westcott 2 年之前
父節點
當前提交
0077183682

+ 3 - 0
client/src/entrypoints/admin/chooser-widget-telepath.js

@@ -0,0 +1,3 @@
+import { ChooserFactory } from '../../components/ChooserWidget';
+
+window.telepath.register('wagtail.admin.widgets.Chooser', ChooserFactory);

+ 1 - 0
client/webpack.config.js

@@ -33,6 +33,7 @@ module.exports = function exports(env, argv) {
     'admin': [
       'chooser-modal',
       'chooser-widget',
+      'chooser-widget-telepath',
       'comments',
       'core',
       'date-time-chooser',

+ 27 - 3
wagtail/admin/widgets/chooser.py

@@ -234,11 +234,35 @@ class BaseChooser(widgets.Input):
     def render_js_init(self, id_, name, value_data):
         return "new Chooser({0});".format(json.dumps(id_))
 
-    class Media:
-        js = [
-            "wagtailadmin/js/chooser-widget.js",
+    @cached_property
+    def media(self):
+        return forms.Media(
+            js=[
+                versioned_static("wagtailadmin/js/chooser-widget.js"),
+            ]
+        )
+
+
+class BaseChooserAdapter(WidgetAdapter):
+    js_constructor = "wagtail.admin.widgets.Chooser"
+
+    def js_args(self, widget):
+        return [
+            widget.render_html("__NAME__", None, attrs={"id": "__ID__"}),
+            widget.id_for_label("__ID__"),
         ]
 
+    @cached_property
+    def media(self):
+        return forms.Media(
+            js=[
+                versioned_static("wagtailadmin/js/chooser-widget-telepath.js"),
+            ]
+        )
+
+
+register(BaseChooserAdapter(), BaseChooser)
+
 
 class AdminPageChooser(BaseChooser):
     choose_one_text = _("Choose a page")

+ 2 - 8
wagtail/documents/widgets.py

@@ -2,22 +2,16 @@ from django import forms
 from django.utils.functional import cached_property
 
 from wagtail.admin.staticfiles import versioned_static
+from wagtail.admin.widgets import BaseChooserAdapter
 from wagtail.documents.views.chooser import viewset as chooser_viewset
 from wagtail.telepath import register
-from wagtail.widget_adapters import WidgetAdapter
 
 AdminDocumentChooser = chooser_viewset.widget_class
 
 
-class DocumentChooserAdapter(WidgetAdapter):
+class DocumentChooserAdapter(BaseChooserAdapter):
     js_constructor = "wagtail.documents.widgets.DocumentChooser"
 
-    def js_args(self, widget):
-        return [
-            widget.render_html("__NAME__", None, attrs={"id": "__ID__"}),
-            widget.id_for_label("__ID__"),
-        ]
-
     @cached_property
     def media(self):
         return forms.Media(

+ 2 - 9
wagtail/images/widgets.py

@@ -5,11 +5,10 @@ from django.utils.functional import cached_property
 from django.utils.translation import gettext_lazy as _
 
 from wagtail.admin.staticfiles import versioned_static
-from wagtail.admin.widgets import BaseChooser
+from wagtail.admin.widgets import BaseChooser, BaseChooserAdapter
 from wagtail.images import get_image_model
 from wagtail.images.shortcuts import get_rendition_or_not_found
 from wagtail.telepath import register
-from wagtail.widget_adapters import WidgetAdapter
 
 
 class AdminImageChooser(BaseChooser):
@@ -53,15 +52,9 @@ class AdminImageChooser(BaseChooser):
         )
 
 
-class ImageChooserAdapter(WidgetAdapter):
+class ImageChooserAdapter(BaseChooserAdapter):
     js_constructor = "wagtail.images.widgets.ImageChooser"
 
-    def js_args(self, widget):
-        return [
-            widget.render_html("__NAME__", None, attrs={"id": "__ID__"}),
-            widget.id_for_label("__ID__"),
-        ]
-
     @cached_property
     def media(self):
         return forms.Media(

+ 2 - 9
wagtail/snippets/widgets.py

@@ -8,10 +8,9 @@ from django.utils.functional import cached_property
 from django.utils.translation import gettext_lazy as _
 
 from wagtail.admin.staticfiles import versioned_static
-from wagtail.admin.widgets import BaseChooser
+from wagtail.admin.widgets import BaseChooser, BaseChooserAdapter
 from wagtail.admin.widgets.button import ListingButton
 from wagtail.telepath import register
-from wagtail.widget_adapters import WidgetAdapter
 
 
 class AdminSnippetChooser(BaseChooser):
@@ -59,15 +58,9 @@ class AdminSnippetChooser(BaseChooser):
         )
 
 
-class SnippetChooserAdapter(WidgetAdapter):
+class SnippetChooserAdapter(BaseChooserAdapter):
     js_constructor = "wagtail.snippets.widgets.SnippetChooser"
 
-    def js_args(self, widget):
-        return [
-            widget.render_html("__NAME__", None, attrs={"id": "__ID__"}),
-            widget.id_for_label("__ID__"),
-        ]
-
     @cached_property
     def media(self):
         return forms.Media(