wagtail_hooks.py 2.3 KB

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