Support YouTube videos

This commit is contained in:
Ben Sturmfels 2024-09-27 23:00:06 +10:00
parent 646735252f
commit 5bf63fe046
Signed by: bsturmfels
GPG key ID: 023C05E2C9C068F0
2 changed files with 24 additions and 6 deletions

View file

@ -56,13 +56,18 @@
{% endautoescape %} {% endautoescape %}
{% if presentation.videos_split %} {% if presentation.videos_split %}
<h2 class="mt-4">Video</h4> <h2 class="mt-4">Videos</h4>
<video controls style="max-width: 640px"> {% for v in presentation.youtube_videos %}
{% for video in presentation.videos_split %} <iframe width="560" height="315" src="{{ v }}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<source src="{{ video }}">
{% endfor %} {% endfor %}
</video> {% if v.other_videos %}
<p style="margin-top: 1rem">Available formats:</p> <video controls style="max-width: 640px">
{% for video in presentation.other_videos %}
<source src="{{ video }}">
{% endfor %}
</video>
{% endif %}
<p style="margin-top: 1rem">Available sources:</p>
<ul> <ul>
{% for video in presentation.videos_split %} {% for video in presentation.videos_split %}
<li>{{ video|urlize }}</li> <li>{{ video|urlize }}</li>

View file

@ -308,6 +308,19 @@ class Presentation(models.Model):
def videos_split(self): def videos_split(self):
return [v.strip() for v in self.videos.split('\n') if v != ''] return [v.strip() for v in self.videos.split('\n') if v != '']
def youtube_videos(self):
return [
v.replace('youtu.be', 'www.youtube.com/embed')
for v in self.videos_split()
if 'youtu.be' in v
]
def other_videos(self):
return [
v for v in self.videos_split()
if 'youtu.be' not in v
]
class Meta: class Meta:
ordering = ["slot"] ordering = ["slot"]
verbose_name = _("presentation") verbose_name = _("presentation")