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",
"version": "7.0.1",
"version": "7.0.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "coryd.dev",
"version": "7.0.1",
"version": "7.0.2",
"license": "MIT",
"dependencies": {
"minisearch": "^7.1.2",

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -8,43 +8,95 @@ SELECT
g.wiki_link,
g.slug AS url,
(
SELECT
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'))
ORDER BY a.total_plays DESC)
FROM
artists a
SELECT json_agg(
json_build_object(
'name', a.name_string,
'url', a.slug,
'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
WHERE
a.genres = g.id) AS artists,
WHERE a.genres = g.id
) AS artists,
(
SELECT
json_agg(json_build_object('title', b.title, 'author', b.author, 'url', b.slug)
ORDER BY b.title ASC)
FROM
books b
SELECT json_agg(
json_build_object(
'title', b.title,
'author', b.author,
'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
WHERE
gb.genres_id = g.id) AS books,
LEFT JOIN directus_files df_book ON b.art = df_book.id
WHERE gb.genres_id = g.id
) AS books,
(
SELECT
json_agg(json_build_object('title', m.title, 'year', m.year, 'url', m.slug)
ORDER BY m.year DESC)
FROM
movies m
SELECT json_agg(
json_build_object(
'title', m.title,
'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
WHERE
gm.genres_id = g.id) AS movies,
LEFT JOIN directus_files df_movie ON m.art = df_movie.id
WHERE gm.genres_id = g.id
) AS movies,
(
SELECT
json_agg(json_build_object('title', p.title, 'date', p.date, 'url', p.slug)
ORDER BY p.date DESC)
FROM
posts_genres pg
SELECT json_agg(
json_build_object(
'title', p.title,
'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
WHERE
pg.genres_id = g.id) AS posts
FROM
genres g
ORDER BY
g.id ASC;
LEFT JOIN directus_files df_post ON p.image = df_post.id
WHERE pg.genres_id = g.id
) AS posts
FROM genres g
CROSS JOIN optimized_globals globals
ORDER BY g.id ASC;

View file

@ -69,7 +69,7 @@ SELECT
),
'type', 'movies'
)
ORDER BY m.year DESC
ORDER BY m.year ASC
)
FROM shows_movies sm
LEFT JOIN movies m ON sm.movies_id = m.id
@ -128,7 +128,7 @@ SELECT
),
'type', 'tv'
)
ORDER BY rs.year DESC
ORDER BY rs.year ASC
)
FROM related_shows sr
LEFT JOIN shows rs ON sr.related_shows_id = rs.id
@ -155,7 +155,7 @@ SELECT
),
'type', 'music'
)
ORDER BY a.name_string
ORDER BY a.total_plays DESC
)
FROM shows_artists sa
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') {
$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) {
$grid = $item['grid'] ?? $item;
$alt = htmlspecialchars($grid['alt'] ?? '');
@ -12,7 +15,7 @@
$subtext = htmlspecialchars($grid['subtext'] ?? '');
$url = $grid['url'] ?? null;
$type = $item['type'] ?? '';
$isVertical = in_array($type, ['books', 'movies', 'shows']);
$isVertical = in_array($type, ['books', 'movies', 'tv']);
$imageClass = $isVertical ? 'vertical' : 'square';
$width = $isVertical ? 120 : 150;
$height = $isVertical ? 184 : 150;
@ -44,6 +47,7 @@
echo '</div>';
echo $closeLink;
}
echo '</div>';
}