1from django.urls import include, path, reverse 2from django.utils.html import format_html 3from django.utils.translation import gettext as _ 4 5import wagtail.admin.rich_text.editors.draftail.features as draftail_features 6 7from wagtail.admin.rich_text import HalloPlugin 8from wagtail.core import hooks 9from wagtail.embeds import urls 10from wagtail.embeds.rich_text import MediaEmbedHandler 11from wagtail.embeds.rich_text.contentstate import ContentstateMediaConversionRule 12from wagtail.embeds.rich_text.editor_html import EditorHTMLEmbedConversionRule 13 14 15@hooks.register('register_admin_urls') 16def register_admin_urls(): 17 return [ 18 path('embeds/', include(urls, namespace='wagtailembeds')), 19 ] 20 21 22@hooks.register('insert_editor_js') 23def editor_js(): 24 return format_html( 25 """ 26 <script> 27 window.chooserUrls.embedsChooser = '{0}'; 28 </script> 29 """, 30 reverse('wagtailembeds:chooser') 31 ) 32 33 34@hooks.register('register_rich_text_features') 35def register_embed_feature(features): 36 # define a handler for converting <embed embedtype="media"> tags into frontend HTML 37 features.register_embed_type(MediaEmbedHandler) 38 39 # define a hallo.js plugin to use when the 'embed' feature is active 40 features.register_editor_plugin( 41 'hallo', 'embed', 42 HalloPlugin( 43 name='hallowagtailembeds', 44 js=[ 45 'wagtailembeds/js/embed-chooser-modal.js', 46 'wagtailembeds/js/hallo-plugins/hallo-wagtailembeds.js', 47 ], 48 ) 49 ) 50 51 # define how to convert between editorhtml's representation of embeds and 52 # the database representation 53 features.register_converter_rule('editorhtml', 'embed', EditorHTMLEmbedConversionRule) 54 55 # define a draftail plugin to use when the 'embed' feature is active 56 features.register_editor_plugin( 57 'draftail', 'embed', draftail_features.EntityFeature({ 58 'type': 'EMBED', 59 'icon': 'media', 60 'description': _('Embed'), 61 }, js=['wagtailembeds/js/embed-chooser-modal.js']) 62 ) 63 64 # define how to convert between contentstate's representation of embeds and 65 # the database representation- 66 features.register_converter_rule('contentstate', 'embed', ContentstateMediaConversionRule) 67 68 # add 'embed' to the set of on-by-default rich text features 69 features.default_features.append('embed') 70