Skip to content

Commit 312dfa6

Browse files
committed
Display video and slides in talk details
1 parent 9161332 commit 312dfa6

File tree

4 files changed

+101
-0
lines changed

4 files changed

+101
-0
lines changed

program/models.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import datetime
22
import re
3+
from pathlib import PurePath
34
from typing import Any
45

56
from django.core import validators
@@ -318,6 +319,16 @@ def video_id(self) -> str | None:
318319
return None
319320
return match.group("video_id")
320321

322+
@property
323+
def slides_file_extension(self) -> str | None:
324+
if not self.slides_file:
325+
return None
326+
path = PurePath(self.slides_file.name)
327+
ext = path.suffix
328+
if ext.startswith("."):
329+
ext = ext[1:]
330+
return ext
331+
321332
def update_from_pretalx(self, pretalx_submission: dict[str, Any]) -> None:
322333
# Note: remember to update the PRETALX_FIELDS class variable
323334
# when adding/removing fields synced with pretalx.

static/img/icons/youtube.min.svg

Lines changed: 1 addition & 0 deletions
Loading

static_src/scss/custom-components/_PC-session-detail.scss

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,57 @@
5555
overflow-wrap: break-word;
5656
}
5757
}
58+
59+
.PC-session-detail-video {
60+
display: block;
61+
position: relative;
62+
max-width: 1280px;
63+
margin: 0 auto;
64+
}
65+
66+
.PC-session-detail-video-overlay {
67+
@extend .text-white;
68+
@extend .fw-semibold;
69+
@extend .fs-4;
70+
71+
position: absolute;
72+
top: 0;
73+
bottom: 0;
74+
left: 0;
75+
right: 0;
76+
77+
background-image: radial-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.6));
78+
79+
display: grid;
80+
place-items: center;
81+
82+
&:hover, &:focus, &:active {
83+
background-image: radial-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.3));
84+
}
85+
}
86+
87+
.PC-session-detail-video-play {
88+
@extend .px-4;
89+
@extend .py-3;
90+
@extend .rounded-3;
91+
92+
background-color: rgba(0, 0, 0, 0.75);
93+
94+
img {
95+
@extend .mb-3;
96+
width: 52px;
97+
height: 36px;
98+
99+
@include media-breakpoint-up(md) {
100+
width: 130px;
101+
height: 90px;
102+
}
103+
}
104+
}
105+
106+
/* Session video has max-width of 1280px. Apply the same width to slides block to keep them aligned. */
107+
.PC-session-detail-slides {
108+
max-width: 1280px;
109+
margin-left: auto;
110+
margin-right: auto;
111+
}

templates/program/_session_detail.html

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,41 @@ <h1>
105105
</div>
106106
{% endif %}
107107

108+
{% if session.video_url and session.video_image %}
109+
<div class="mt-3 mb-4">
110+
<a href="{{ session.video_url }}" class="PC-session-detail-video rounded-2">
111+
<img src="{{ session.video_image.url }}"
112+
alt="{{ session.title }} - talk video"
113+
class="img-fluid rounded-2"/>
114+
<div class="PC-session-detail-video-overlay rounded-2">
115+
<div class="PC-session-detail-video-play text-center">
116+
<img src="{% static "img/icons/youtube.min.svg" %}"
117+
width="52" height="36" alt=""
118+
class="img-fluid" /><br/>
119+
120+
Play video on YouTube
121+
</div>
122+
</div>
123+
</a>
124+
</div>
125+
{% endif %}
126+
127+
{% if session.slides_file or session.slides_description %}
128+
<div class="PC-session-detail-slides">
129+
{% if session.slides_file %}
130+
<a href="{{ session.slides_file.url }}"
131+
class="btn btn-secondary btn-sm mb-3"
132+
target="_blank">
133+
{{ session.title }} – download slides
134+
({{ session.slides_file_extension|upper }}, {{ session.slides_file.size|filesizeformat }})
135+
</a>
136+
{% endif %}
137+
{% if session.slides_description %}
138+
{{ session.slides_description|markdown }}
139+
{% endif %}
140+
</div>
141+
{% endif %}
142+
108143
<div class="PC-multicol my-4">
109144
{{ session.abstract|markdown }}
110145

0 commit comments

Comments
 (0)