ソースを参照

Adopt entity chooserUrls for Draftail richtext in embeds/documents/images

Avoid the need to append to window.chooserUrls for the rich text usage of choosers for the non-core modules (images, documents, embeds).

Instead pass in the lazy URLs to the feature entity options.
elhussein almasri 1 年間 前
コミット
b993a52757

+ 14 - 0
wagtail/documents/tests/test_rich_text.py

@@ -1,4 +1,5 @@
 from django.test import TestCase
+from django.urls import reverse_lazy
 
 from wagtail.documents import get_document_model
 from wagtail.documents.rich_text import (
@@ -8,6 +9,7 @@ from wagtail.documents.rich_text.editor_html import (
     DocumentLinkHandler as EditorHtmlDocumentLinkHandler,
 )
 from wagtail.fields import RichTextField
+from wagtail.rich_text.feature_registry import FeatureRegistry
 from wagtail.test.utils import WagtailTestUtils
 
 
@@ -60,3 +62,15 @@ class TestFrontendDocumentLinkHandler(TestCase):
             ),
             [(get_document_model(), "1", "", "")],
         )
+
+
+class TestEntityFeatureChooserUrls(TestCase):
+    def test_chooser_urls_exist(self):
+        features = FeatureRegistry()
+        document = features.get_editor_plugin("draftail", "document-link")
+
+        self.assertIsNotNone(document.data.get("chooserUrls"))
+        self.assertEqual(
+            document.data["chooserUrls"]["documentChooser"],
+            reverse_lazy("wagtaildocs_chooser:choose"),
+        )

+ 4 - 14
wagtail/documents/wagtail_hooks.py

@@ -1,7 +1,6 @@
 from django.conf import settings
 from django.template.response import TemplateResponse
-from django.urls import include, path, reverse
-from django.utils.html import format_html
+from django.urls import include, path, reverse, reverse_lazy
 from django.utils.translation import gettext, ngettext
 from django.utils.translation import gettext_lazy as _
 
@@ -64,18 +63,6 @@ def register_documents_menu_item():
     )
 
 
-@hooks.register("insert_editor_js")
-def editor_js():
-    return format_html(
-        """
-        <script>
-            window.chooserUrls.documentChooser = '{0}';
-        </script>
-        """,
-        reverse("wagtaildocs_chooser:choose"),
-    )
-
-
 @hooks.register("register_rich_text_features")
 def register_document_feature(features):
     features.register_link_type(DocumentLinkHandler)
@@ -88,6 +75,9 @@ def register_document_feature(features):
                 "type": "DOCUMENT",
                 "icon": "doc-full-inverse",
                 "description": gettext("Document"),
+                "chooserUrls": {
+                    "documentChooser": reverse_lazy("wagtaildocs_chooser:choose")
+                },
             },
             js=["wagtaildocs/js/document-chooser-modal.js"],
         ),

+ 14 - 0
wagtail/embeds/tests/test_rich_text.py

@@ -1,6 +1,7 @@
 from unittest.mock import patch
 
 from django.test import TestCase, override_settings
+from django.urls import reverse_lazy
 
 from wagtail.embeds.exceptions import EmbedNotFoundException
 from wagtail.embeds.models import Embed
@@ -9,6 +10,7 @@ from wagtail.embeds.rich_text.editor_html import (
     MediaEmbedHandler as EditorHtmlMediaEmbedHandler,
 )
 from wagtail.rich_text import expand_db_html
+from wagtail.rich_text.feature_registry import FeatureRegistry
 from wagtail.test.utils import WagtailTestUtils
 
 
@@ -143,3 +145,15 @@ class TestFrontendMediaEmbedHandler(TestCase):
         get_embed.assert_called_with(
             "https://www.youtube.com/watch?v=O7D-1RG-VRk&t=25", None, None
         )
+
+
+class TestEntityFeatureChooserUrls(TestCase):
+    def test_chooser_urls_exist(self):
+        features = FeatureRegistry()
+        embed = features.get_editor_plugin("draftail", "embed")
+
+        self.assertIsNotNone(embed.data.get("chooserUrls"))
+        self.assertEqual(
+            embed.data["chooserUrls"]["embedsChooser"],
+            reverse_lazy("wagtailembeds:chooser"),
+        )

+ 4 - 14
wagtail/embeds/wagtail_hooks.py

@@ -1,5 +1,4 @@
-from django.urls import include, path, reverse
-from django.utils.html import format_html
+from django.urls import include, path, reverse_lazy
 from django.utils.translation import gettext as _
 
 import wagtail.admin.rich_text.editors.draftail.features as draftail_features
@@ -17,18 +16,6 @@ def register_admin_urls():
     ]
 
 
-@hooks.register("insert_editor_js")
-def editor_js():
-    return format_html(
-        """
-            <script>
-                window.chooserUrls.embedsChooser = '{0}';
-            </script>
-        """,
-        reverse("wagtailembeds:chooser"),
-    )
-
-
 @hooks.register("register_rich_text_features")
 def register_embed_feature(features):
     # define a handler for converting <embed embedtype="media"> tags into frontend HTML
@@ -49,6 +36,9 @@ def register_embed_feature(features):
                 "type": "EMBED",
                 "icon": "media",
                 "description": _("Embed"),
+                "chooserUrls": {
+                    "embedsChooser": reverse_lazy("wagtailembeds:chooser"),
+                },
             },
             js=["wagtailembeds/js/embed-chooser-modal.js"],
         ),

+ 14 - 0
wagtail/images/tests/test_rich_text.py

@@ -1,10 +1,12 @@
 from django.test import TestCase
+from django.urls import reverse_lazy
 
 from wagtail.fields import RichTextField
 from wagtail.images.rich_text import ImageEmbedHandler as FrontendImageEmbedHandler
 from wagtail.images.rich_text.editor_html import (
     ImageEmbedHandler as EditorHtmlImageEmbedHandler,
 )
+from wagtail.rich_text.feature_registry import FeatureRegistry
 from wagtail.test.utils import WagtailTestUtils
 
 from .utils import Image, get_test_image_file
@@ -140,3 +142,15 @@ class TestExtractReferencesWithImage(WagtailTestUtils, TestCase):
             ),
             [(Image, "52", "", "")],
         )
+
+
+class TestEntityFeatureChooserUrls(TestCase):
+    def test_chooser_urls_exist(self):
+        features = FeatureRegistry()
+        image = features.get_editor_plugin("draftail", "image")
+
+        self.assertIsNotNone(image.data.get("chooserUrls"))
+        self.assertEqual(
+            image.data["chooserUrls"]["imageChooser"],
+            reverse_lazy("wagtailimages_chooser:choose"),
+        )

+ 4 - 14
wagtail/images/wagtail_hooks.py

@@ -1,5 +1,4 @@
-from django.urls import include, path, reverse
-from django.utils.html import format_html
+from django.urls import include, path, reverse, reverse_lazy
 from django.utils.translation import gettext, ngettext
 from django.utils.translation import gettext_lazy as _
 
@@ -58,18 +57,6 @@ def register_images_menu_item():
     )
 
 
-@hooks.register("insert_editor_js")
-def editor_js():
-    return format_html(
-        """
-        <script>
-            window.chooserUrls.imageChooser = '{0}';
-        </script>
-        """,
-        reverse("wagtailimages_chooser:choose"),
-    )
-
-
 @hooks.register("register_rich_text_features")
 def register_image_feature(features):
     # define a handler for converting <embed embedtype="image"> tags into frontend HTML
@@ -97,6 +84,9 @@ def register_image_feature(features):
                 "allowlist": {
                     "id": True,
                 },
+                "chooserUrls": {
+                    "imageChooser": reverse_lazy("wagtailimages_chooser:choose")
+                },
             },
             js=[
                 "wagtailimages/js/image-chooser-modal.js",