diff --git a/src/build.rs b/src/build.rs
index d639101..11da48d 100644
--- a/src/build.rs
+++ b/src/build.rs
@@ -50,7 +50,7 @@ pub fn perform_build(context: &Context) {
match &site.content {
SiteContent::Collection(collection) => build_collection(context, collection, &site, &breadcrumbs),
SiteContent::Playlist(playlist) => build_playlist(context, playlist, &site, &breadcrumbs),
- SiteContent::Video(video) => build_video(context, video, &site, &breadcrumbs),
+ SiteContent::Video(video) => build_video(context, None, video, &site, &breadcrumbs),
SiteContent::Empty => (),
SiteContent::Invalid => todo!()
}
@@ -78,7 +78,7 @@ fn build_collection(
}
for video in &collection.videos {
- build_video(context, video, site, &breadcrumbs_extended);
+ build_video(context, None, video, site, &breadcrumbs_extended);
}
collection_html(context, collection, site, &breadcrumbs_extended);
@@ -116,12 +116,13 @@ fn build_playlist(
playlist_html(context, playlist, site, &breadcrumbs_extended);
for video in &playlist.videos {
- build_video(context, video, site, &breadcrumbs_extended);
+ build_video(context, Some(playlist), video, site, &breadcrumbs_extended);
}
}
fn build_video(
context: &Context,
+ playlist: Option<&Playlist>,
video: &Video,
site: &Site,
breadcrumbs: &[Breadcrumb]
@@ -177,5 +178,5 @@ fn build_video(
}
}
- video_html(context, video, site, &breadcrumbs_extended);
+ video_html(context, playlist, video, site, &breadcrumbs_extended);
}
diff --git a/src/build/assets/styles.css b/src/build/assets/styles.css
index c4396ee..8777136 100644
--- a/src/build/assets/styles.css
+++ b/src/build/assets/styles.css
@@ -20,6 +20,7 @@ video { width: 100%; }
.center {
margin: 0 auto;
max-width: 33rem;
+ position: relative;
}
.chart {
align-items: center;
@@ -48,6 +49,9 @@ video { width: 100%; }
left: 50%;
transform: translateX(-50%);
}
+.current {
+ background-color: var(--c-bg-3);
+}
.duration {
background-color: hsla(0, 0%, 0%, .9);
border-radius: .2rem;
@@ -78,6 +82,11 @@ img { max-width: 100%; }
font-weight: 500;
padding: .5rem;
}
+.playlist > div {
+ column-gap: 1rem;
+ display: flex;
+}
+.playlist.context .thumbnail { height: 5rem; }
.savings .bar { background-color: var(--c-green); }
.savings_percent {
color: var(--c-green);
@@ -110,15 +119,11 @@ svg {
background-color: var(--c-letterbox);
border-radius: 0.4rem;
flex-shrink: 0;
+ height: 9rem;
object-fit: contain;
- width: 16rem;
-}
-.thumbnail_wrapper {
- position: relative;
-}
-.thumbnail_wrapper:hover .duration {
- opacity: 1;
}
+.thumbnail_wrapper { position: relative; }
+.thumbnail_wrapper:hover .duration { opacity: 1; }
.video {
color: var(--c-fg-2);
display: flex;
@@ -134,4 +139,13 @@ svg {
display: grid;
grid-gap: 1rem;
grid-template-columns: 16rem auto;
+}
+
+@media (min-width: 80rem) {
+ .playlist.context {
+ left: calc(100% + 2rem);
+ position: absolute;
+ top: 6rem;
+ width: 24rem;
+ }
}
\ No newline at end of file
diff --git a/src/build/playlist.rs b/src/build/playlist.rs
index 3793e48..dfa0c80 100644
--- a/src/build/playlist.rs
+++ b/src/build/playlist.rs
@@ -55,17 +55,19 @@ pub fn playlist_html(
if !playlist.videos.is_empty() {
let videos = playlist.videos
.iter()
- .map(|video| {
- let slug = &video.slug();
- let title = video.title.as_deref().unwrap_or_else(|| video.slug());
+ .enumerate()
+ .map(|(index, video)| {
+ let number = index + 1;
+ let slug = video.slug();
+ let label = video.label();
let video_prefix = format!("{slug}/");
let video_thumbnail = thumbnail(video, &video_prefix);
formatdoc!(r#"
-
- {video_thumbnail}
-
{description}
+