fix(associated-media): sorts + grid sizing
This commit is contained in:
parent
6a41304b5f
commit
3dac23b171
9 changed files with 116 additions and 61 deletions
4
package-lock.json
generated
4
package-lock.json
generated
|
@ -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",
|
||||
|
|
|
@ -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": {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -7,44 +7,96 @@ SELECT
|
|||
to_char(g.total_plays, 'FM999,999,999,999') AS total_plays,
|
||||
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,
|
||||
(
|
||||
SELECT
|
||||
json_agg(json_build_object('title', b.title, 'author', b.author, 'url', b.slug)
|
||||
ORDER BY b.title ASC)
|
||||
FROM
|
||||
books b
|
||||
WHERE a.genres = g.id
|
||||
) AS artists,
|
||||
(
|
||||
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,
|
||||
(
|
||||
SELECT
|
||||
json_agg(json_build_object('title', m.title, 'year', m.year, 'url', m.slug)
|
||||
ORDER BY m.year DESC)
|
||||
FROM
|
||||
movies m
|
||||
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,
|
||||
'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,
|
||||
(
|
||||
SELECT
|
||||
json_agg(json_build_object('title', p.title, 'date', p.date, 'url', p.slug)
|
||||
ORDER BY p.date DESC)
|
||||
FROM
|
||||
posts_genres pg
|
||||
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,
|
||||
'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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>';
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue