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",
|
"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",
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
JOIN genres_books gb ON gb.books_id = b.id
|
'image', CONCAT(globals.cdn_url, '/', df_book.filename_disk),
|
||||||
WHERE
|
'grid', json_build_object(
|
||||||
gb.genres_id = g.id) AS books,
|
'title', b.title,
|
||||||
(
|
'image', CONCAT(globals.cdn_url, '/', df_book.filename_disk),
|
||||||
SELECT
|
'alt', CONCAT('Cover for ', b.title, ' by ', b.author),
|
||||||
json_agg(json_build_object('title', m.title, 'year', m.year, 'url', m.slug)
|
'subtext', b.author,
|
||||||
ORDER BY m.year DESC)
|
'url', b.slug
|
||||||
FROM
|
),
|
||||||
movies m
|
'type', 'books'
|
||||||
JOIN genres_movies gm ON gm.movies_id = m.id
|
)
|
||||||
WHERE
|
ORDER BY b.title ASC
|
||||||
gm.genres_id = g.id) AS movies,
|
)
|
||||||
(
|
FROM books b
|
||||||
SELECT
|
JOIN genres_books gb ON gb.books_id = b.id
|
||||||
json_agg(json_build_object('title', p.title, 'date', p.date, 'url', p.slug)
|
LEFT JOIN directus_files df_book ON b.art = df_book.id
|
||||||
ORDER BY p.date DESC)
|
WHERE gb.genres_id = g.id
|
||||||
FROM
|
) AS books,
|
||||||
posts_genres pg
|
(
|
||||||
LEFT JOIN posts p ON pg.posts_id = p.id
|
SELECT json_agg(
|
||||||
WHERE
|
json_build_object(
|
||||||
pg.genres_id = g.id) AS posts
|
'title', m.title,
|
||||||
FROM
|
'year', m.year,
|
||||||
genres g
|
'url', m.slug,
|
||||||
ORDER BY
|
'image', CONCAT(globals.cdn_url, '/', df_movie.filename_disk),
|
||||||
g.id ASC;
|
'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
|
||||||
|
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
|
||||||
|
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'
|
'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
|
||||||
|
|
|
@ -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>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue