81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
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 _
|
|
from wagtail.admin.staticfiles import versioned_static
|
|
from wagtail.admin.widgets import BaseChooser, BaseChooserAdapter
|
|
from wagtail.telepath import register
|
|
|
|
from wagtailmedia.models import get_media_model
|
|
|
|
|
|
class AdminMediaChooser(BaseChooser):
|
|
media_type = None
|
|
choose_one_text = _("Choose a media item")
|
|
choose_another_text = _("Choose another media item")
|
|
link_to_chosen_text = _("Edit this media item")
|
|
icon = "media"
|
|
classname = "media-chooser"
|
|
|
|
def __init__(self, **kwargs):
|
|
super().__init__(**kwargs)
|
|
self.model = get_media_model()
|
|
|
|
@property
|
|
def chooser_modal_url_name(self):
|
|
if self.media_type:
|
|
return "wagtailmedia:chooser_typed"
|
|
return "wagtailmedia:chooser"
|
|
|
|
def get_chooser_modal_url(self):
|
|
if self.media_type:
|
|
return reverse("wagtailmedia:chooser_typed", args=(self.media_type,))
|
|
return reverse("wagtailmedia:chooser")
|
|
|
|
def render_js_init(self, id_, name, value):
|
|
return f"createMediaChooser({json.dumps(id_)});"
|
|
|
|
@property
|
|
def media(self):
|
|
return forms.Media(
|
|
js=[
|
|
"wagtailmedia/js/tabs.js",
|
|
"wagtailmedia/js/media-chooser-modal.js",
|
|
"wagtailmedia/js/media-chooser.js",
|
|
]
|
|
)
|
|
|
|
|
|
class AdminAudioChooser(AdminMediaChooser):
|
|
media_type = "audio"
|
|
icon = "wagtailmedia-audio"
|
|
choose_one_text = _("Choose audio")
|
|
choose_another_text = _("Choose another audio item")
|
|
link_to_chosen_text = _("Edit this audio item")
|
|
|
|
|
|
class AdminVideoChooser(AdminMediaChooser):
|
|
media_type = "video"
|
|
icon = "wagtailmedia-video"
|
|
choose_one_text = _("Choose video")
|
|
choose_another_text = _("Choose another video")
|
|
link_to_chosen_text = _("Edit this video")
|
|
|
|
|
|
class MediaChooserAdapter(BaseChooserAdapter):
|
|
js_constructor = "wagtailmedia.MediaChooser"
|
|
|
|
@cached_property
|
|
def media(self):
|
|
return forms.Media(
|
|
js=[
|
|
versioned_static("wagtailmedia/js/media-chooser-telepath.js"),
|
|
]
|
|
)
|
|
|
|
|
|
register(MediaChooserAdapter(), AdminMediaChooser)
|
|
register(MediaChooserAdapter(), AdminAudioChooser)
|
|
register(MediaChooserAdapter(), AdminVideoChooser)
|