fix(associated-media): sorts + grid sizing

This commit is contained in:
Cory Dransfeldt 2025-05-24 18:49:25 -07:00
parent 6a41304b5f
commit 3dac23b171
No known key found for this signature in database
9 changed files with 116 additions and 61 deletions

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "coryd.dev", "name": "coryd.dev",
"version": "7.0.1", "version": "7.0.2",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "coryd.dev", "name": "coryd.dev",
"version": "7.0.1", "version": "7.0.2",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"minisearch": "^7.1.2", "minisearch": "^7.1.2",

View file

@ -1,6 +1,6 @@
{ {
"name": "coryd.dev", "name": "coryd.dev",
"version": "7.0.1", "version": "7.0.2",
"description": "The source for my personal site. Built using 11ty (and other tools).", "description": "The source for my personal site. Built using 11ty (and other tools).",
"type": "module", "type": "module",
"engines": { "engines": {

View file

@ -65,13 +65,12 @@ SELECT
'url', a.slug 'url', a.slug
), ),
'type', 'music' 'type', 'music'
) ORDER BY a.name_string ASC) ) ORDER BY a.total_plays DESC)
FROM posts_artists pa FROM posts_artists pa
LEFT JOIN artists a ON pa.artists_id = a.id LEFT JOIN artists a ON pa.artists_id = a.id
LEFT JOIN directus_files df_artist ON a.art = df_artist.id LEFT JOIN directus_files df_artist ON a.art = df_artist.id
WHERE pa.posts_id = p.id WHERE pa.posts_id = p.id
) AS artists, ) AS artists,
( (
SELECT json_agg(json_build_object( SELECT json_agg(json_build_object(
'title', b.title, 'title', b.title,
@ -106,7 +105,7 @@ SELECT
'url', m.slug 'url', m.slug
), ),
'type', 'movies' 'type', 'movies'
) ORDER BY m.year DESC) ) ORDER BY m.year ASC)
FROM posts_movies pm FROM posts_movies pm
LEFT JOIN movies m ON pm.movies_id = m.id LEFT JOIN movies m ON pm.movies_id = m.id
LEFT JOIN directus_files df_movie ON m.art = df_movie.id LEFT JOIN directus_files df_movie ON m.art = df_movie.id
@ -126,7 +125,7 @@ SELECT
'url', s.slug 'url', s.slug
), ),
'type', 'tv' 'type', 'tv'
) ORDER BY s.year DESC) ) ORDER BY s.year ASC)
FROM posts_shows ps FROM posts_shows ps
LEFT JOIN shows s ON ps.shows_id = s.id LEFT JOIN shows s ON ps.shows_id = s.id
LEFT JOIN directus_files df_show ON s.art = df_show.id LEFT JOIN directus_files df_show ON s.art = df_show.id

View file

@ -39,7 +39,7 @@ SELECT
), ),
'type', 'music' 'type', 'music'
) )
ORDER BY a.name_string ASC ORDER BY a.total_plays DESC
) )
FROM books_artists ba FROM books_artists ba
LEFT JOIN artists a ON ba.artists_id = a.id LEFT JOIN artists a ON ba.artists_id = a.id
@ -62,7 +62,7 @@ SELECT
), ),
'type', 'movies' 'type', 'movies'
) )
ORDER BY m.year DESC ORDER BY m.year ASC
) )
FROM movies_books mb FROM movies_books mb
LEFT JOIN movies m ON mb.movies_id = m.id LEFT JOIN movies m ON mb.movies_id = m.id
@ -94,7 +94,7 @@ SELECT
), ),
'type', 'tv' 'type', 'tv'
) )
ORDER BY s.year DESC ORDER BY s.year ASC
) )
FROM shows_books sb FROM shows_books sb
LEFT JOIN shows s ON sb.shows_id = s.id LEFT JOIN shows s ON sb.shows_id = s.id

View file

@ -59,7 +59,7 @@ SELECT
), ),
'type', 'music' 'type', 'music'
) )
ORDER BY a.name_string ORDER BY a.total_plays DESC
) )
FROM movies_artists ma FROM movies_artists ma
LEFT JOIN artists a ON ma.artists_id = a.id LEFT JOIN artists a ON ma.artists_id = a.id
@ -105,7 +105,7 @@ SELECT
), ),
'type', 'tv' 'type', 'tv'
) )
ORDER BY s.year DESC ORDER BY s.year ASC
) )
FROM shows_movies sm FROM shows_movies sm
LEFT JOIN shows s ON sm.shows_id = s.id LEFT JOIN shows s ON sm.shows_id = s.id
@ -135,7 +135,7 @@ SELECT
), ),
'type', 'movies' 'type', 'movies'
) )
ORDER BY rm.year DESC ORDER BY rm.year ASC
) )
FROM related_movies r FROM related_movies r
LEFT JOIN movies rm ON r.related_movies_id = rm.id LEFT JOIN movies rm ON r.related_movies_id = rm.id

View file

@ -113,7 +113,7 @@ SELECT
), ),
'type', 'movies' 'type', 'movies'
) )
ORDER BY m.year DESC ORDER BY m.year ASC
) )
FROM movies_artists ma FROM movies_artists ma
LEFT JOIN movies m ON ma.movies_id = m.id LEFT JOIN movies m ON ma.movies_id = m.id
@ -136,7 +136,7 @@ SELECT
), ),
'type', 'tv' 'type', 'tv'
) )
ORDER BY s.year DESC ORDER BY s.year ASC
) )
FROM shows_artists sa FROM shows_artists sa
LEFT JOIN shows s ON sa.shows_id = s.id LEFT JOIN shows s ON sa.shows_id = s.id
@ -164,7 +164,7 @@ SELECT
), ),
'type', 'music' 'type', 'music'
) )
ORDER BY related_ar.name_string ORDER BY related_ar.total_plays DESC
) )
FROM related_artists ra FROM related_artists ra
LEFT JOIN artists related_ar ON ra.related_artists_id = related_ar.id LEFT JOIN artists related_ar ON ra.related_artists_id = related_ar.id

View file

@ -7,44 +7,96 @@ SELECT
to_char(g.total_plays, 'FM999,999,999,999') AS total_plays, to_char(g.total_plays, 'FM999,999,999,999') AS total_plays,
g.wiki_link, g.wiki_link,
g.slug AS url, g.slug AS url,
( (
SELECT SELECT json_agg(
json_agg(json_build_object('name', a.name_string, 'url', a.slug, 'image', CONCAT('/', df_artist.filename_disk), 'total_plays', to_char(a.total_plays, 'FM999,999,999,999')) json_build_object(
ORDER BY a.total_plays DESC) 'name', a.name_string,
FROM 'url', a.slug,
artists a 'image', CONCAT(globals.cdn_url, '/', df_artist.filename_disk),
'total_plays', to_char(a.total_plays, 'FM999,999,999,999'),
'grid', json_build_object(
'title', a.name_string,
'image', CONCAT(globals.cdn_url, '/', df_artist.filename_disk),
'alt', CONCAT(to_char(a.total_plays, 'FM999,999,999,999'), ' plays of ', a.name_string),
'subtext', CONCAT(to_char(a.total_plays, 'FM999,999,999,999'), ' plays'),
'url', a.slug
),
'type', 'music'
)
ORDER BY a.total_plays DESC
)
FROM artists a
LEFT JOIN directus_files df_artist ON a.art = df_artist.id LEFT JOIN directus_files df_artist ON a.art = df_artist.id
WHERE WHERE a.genres = g.id
a.genres = g.id) AS artists, ) AS artists,
( (
SELECT SELECT json_agg(
json_agg(json_build_object('title', b.title, 'author', b.author, 'url', b.slug) json_build_object(
ORDER BY b.title ASC) 'title', b.title,
FROM 'author', b.author,
books b 'url', b.slug,
'image', CONCAT(globals.cdn_url, '/', df_book.filename_disk),
'grid', json_build_object(
'title', b.title,
'image', CONCAT(globals.cdn_url, '/', df_book.filename_disk),
'alt', CONCAT('Cover for ', b.title, ' by ', b.author),
'subtext', b.author,
'url', b.slug
),
'type', 'books'
)
ORDER BY b.title ASC
)
FROM books b
JOIN genres_books gb ON gb.books_id = b.id JOIN genres_books gb ON gb.books_id = b.id
WHERE LEFT JOIN directus_files df_book ON b.art = df_book.id
gb.genres_id = g.id) AS books, WHERE gb.genres_id = g.id
( ) AS books,
SELECT (
json_agg(json_build_object('title', m.title, 'year', m.year, 'url', m.slug) SELECT json_agg(
ORDER BY m.year DESC) json_build_object(
FROM 'title', m.title,
movies m 'year', m.year,
'url', m.slug,
'image', CONCAT(globals.cdn_url, '/', df_movie.filename_disk),
'grid', json_build_object(
'title', m.title,
'image', CONCAT(globals.cdn_url, '/', df_movie.filename_disk),
'alt', CONCAT('Poster for ', m.title),
'subtext', m.year,
'url', m.slug
),
'type', 'movies'
)
ORDER BY m.year ASC
)
FROM movies m
JOIN genres_movies gm ON gm.movies_id = m.id JOIN genres_movies gm ON gm.movies_id = m.id
WHERE LEFT JOIN directus_files df_movie ON m.art = df_movie.id
gm.genres_id = g.id) AS movies, WHERE gm.genres_id = g.id
( ) AS movies,
SELECT (
json_agg(json_build_object('title', p.title, 'date', p.date, 'url', p.slug) SELECT json_agg(
ORDER BY p.date DESC) json_build_object(
FROM 'title', p.title,
posts_genres pg 'date', p.date,
'url', p.slug,
'grid', json_build_object(
'title', p.title,
'image', CONCAT(globals.cdn_url, '/', df_post.filename_disk),
'alt', p.title,
'subtext', TO_CHAR(p.date, 'FMMonth DD, YYYY'),
'url', p.slug
),
'type', 'posts'
)
ORDER BY p.date DESC
)
FROM posts_genres pg
LEFT JOIN posts p ON pg.posts_id = p.id LEFT JOIN posts p ON pg.posts_id = p.id
WHERE LEFT JOIN directus_files df_post ON p.image = df_post.id
pg.genres_id = g.id) AS posts WHERE pg.genres_id = g.id
FROM ) AS posts
genres g FROM genres g
ORDER BY CROSS JOIN optimized_globals globals
g.id ASC; ORDER BY g.id ASC;

View file

@ -69,7 +69,7 @@ SELECT
), ),
'type', 'movies' 'type', 'movies'
) )
ORDER BY m.year DESC ORDER BY m.year ASC
) )
FROM shows_movies sm FROM shows_movies sm
LEFT JOIN movies m ON sm.movies_id = m.id LEFT JOIN movies m ON sm.movies_id = m.id
@ -128,7 +128,7 @@ SELECT
), ),
'type', 'tv' 'type', 'tv'
) )
ORDER BY rs.year DESC ORDER BY rs.year ASC
) )
FROM related_shows sr FROM related_shows sr
LEFT JOIN shows rs ON sr.related_shows_id = rs.id LEFT JOIN shows rs ON sr.related_shows_id = rs.id
@ -155,7 +155,7 @@ SELECT
), ),
'type', 'music' 'type', 'music'
) )
ORDER BY a.name_string ORDER BY a.total_plays DESC
) )
FROM shows_artists sa FROM shows_artists sa
LEFT JOIN artists a ON sa.artists_id = a.id LEFT JOIN artists a ON sa.artists_id = a.id

View file

@ -2,8 +2,11 @@
function renderMediaGrid(array $items, int $count = 0, string $loading = 'lazy') { function renderMediaGrid(array $items, int $count = 0, string $loading = 'lazy') {
$limit = $count > 0 ? $count : count($items); $limit = $count > 0 ? $count : count($items);
$firstType = $items[0]['type'] ?? ($items[0]['grid']['type'] ?? '');
$shapeClass = in_array($firstType, ['books', 'movies', 'tv']) ? 'vertical' : 'square';
echo '<div class="media-grid ' . $shapeClass . '">';
echo '<div class="media-grid">';
foreach (array_slice($items, 0, $limit) as $item) { foreach (array_slice($items, 0, $limit) as $item) {
$grid = $item['grid'] ?? $item; $grid = $item['grid'] ?? $item;
$alt = htmlspecialchars($grid['alt'] ?? ''); $alt = htmlspecialchars($grid['alt'] ?? '');
@ -12,7 +15,7 @@
$subtext = htmlspecialchars($grid['subtext'] ?? ''); $subtext = htmlspecialchars($grid['subtext'] ?? '');
$url = $grid['url'] ?? null; $url = $grid['url'] ?? null;
$type = $item['type'] ?? ''; $type = $item['type'] ?? '';
$isVertical = in_array($type, ['books', 'movies', 'shows']); $isVertical = in_array($type, ['books', 'movies', 'tv']);
$imageClass = $isVertical ? 'vertical' : 'square'; $imageClass = $isVertical ? 'vertical' : 'square';
$width = $isVertical ? 120 : 150; $width = $isVertical ? 120 : 150;
$height = $isVertical ? 184 : 150; $height = $isVertical ? 184 : 150;
@ -44,6 +47,7 @@
echo '</div>'; echo '</div>';
echo $closeLink; echo $closeLink;
} }
echo '</div>'; echo '</div>';
} }