diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-02-11 11:12:07 -0400 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-02-12 07:43:59 -0400 |
commit | c45d45759395725128c030ac387bb20b80aada1e (patch) | |
tree | dd71e8354268ca5c48101b0b225144db982cc5cb /src/content | |
parent | 19d9c3a3d16ed08b2d0c9e09259ffb79a27cd3e9 (diff) |
content, data: generateWikiHomepageAlbum{Carousel,Grid}Row
Diffstat (limited to 'src/content')
4 files changed, 128 insertions, 118 deletions
diff --git a/src/content/dependencies/generateWikiHomepageAlbumCarouselRow.js b/src/content/dependencies/generateWikiHomepageAlbumCarouselRow.js new file mode 100644 index 00000000..3068d951 --- /dev/null +++ b/src/content/dependencies/generateWikiHomepageAlbumCarouselRow.js @@ -0,0 +1,39 @@ +import {stitchArrays} from '#sugar'; + +export default { + contentDependencies: ['generateCoverCarousel', 'image', 'linkAlbum'], + + relations: (relation, row) => ({ + coverCarousel: + relation('generateCoverCarousel'), + + links: + row.albums + .map(album => relation('linkAlbum', album)), + + images: + row.albums + .map(album => relation('image', album.artTags)), + }), + + data: (row) => ({ + paths: + row.albums.map(album => + (album.hasCoverArt + ? ['media.albumCover', album.directory, album.coverArtFileExtension] + : null)), + }), + + generate: (data, relations) => + relations.coverCarousel.slots({ + links: + relations.links, + + images: + stitchArrays({ + image: relations.images, + path: data.paths, + }).map(({image, path}) => + image.slot('path', path)), + }), +}; diff --git a/src/content/dependencies/generateWikiHomepageAlbumGridRow.js b/src/content/dependencies/generateWikiHomepageAlbumGridRow.js new file mode 100644 index 00000000..c1d2c79d --- /dev/null +++ b/src/content/dependencies/generateWikiHomepageAlbumGridRow.js @@ -0,0 +1,83 @@ +import {empty, stitchArrays} from '#sugar'; +import {getNewAdditions, getNewReleases} from '#wiki-data'; + +export default { + contentDependencies: ['generateCoverGrid', 'image', 'linkAlbum'], + extraDependencies: ['language', 'wikiData'], + + sprawl({albumData}, row) { + const sprawl = {}; + + switch (row.sourceGroup) { + case 'new-releases': + sprawl.albums = getNewReleases(row.countAlbumsFromGroup, {albumData}); + break; + + case 'new-additions': + sprawl.albums = getNewAdditions(row.countAlbumsFromGroup, {albumData}); + break; + + default: + sprawl.albums = + (row.sourceGroup + ? row.sourceGroup.albums + .slice() + .reverse() + .filter(album => album.isListedOnHomepage) + .slice(0, row.countAlbumsFromGroup) + : []); + } + + if (!empty(row.sourceAlbums)) { + sprawl.albums.push(...row.sourceAlbums); + } + + return sprawl; + }, + + relations: (relation, sprawl, _row) => ({ + coverGrid: + relation('generateCoverGrid'), + + links: + sprawl.albums + .map(album => relation('linkAlbum', album)), + + images: + sprawl.albums + .map(album => relation('image', album.artTags)), + }), + + data: (sprawl, _row) => ({ + names: + sprawl.albums + .map(album => album.name), + + paths: + sprawl.albums + .map(album => + (album.hasCoverArt + ? ['media.albumCover', album.directory, album.coverArtFileExtension] + : null)), + }), + + generate: (data, relations, {language}) => + relations.coverGrid.slots({ + links: relations.links, + names: data.names, + + images: + stitchArrays({ + image: relations.images, + path: data.paths, + name: data.names, + }).map(({image, path, name}) => + image.slots({ + path, + missingSourceContent: + language.$('misc.coverGrid.noCoverArt', { + album: name, + }), + })), + }), +}; diff --git a/src/content/dependencies/generateWikiHomepageAlbumsRow.js b/src/content/dependencies/generateWikiHomepageAlbumsRow.js deleted file mode 100644 index 258e5fe1..00000000 --- a/src/content/dependencies/generateWikiHomepageAlbumsRow.js +++ /dev/null @@ -1,115 +0,0 @@ -import {empty, stitchArrays} from '#sugar'; -import {getNewAdditions, getNewReleases} from '#wiki-data'; - -export default { - contentDependencies: [ - 'generateCoverCarousel', - 'generateCoverGrid', - 'image', - 'linkAlbum', - ], - - extraDependencies: ['language', 'wikiData'], - - sprawl({albumData}, row) { - const sprawl = {}; - - switch (row.sourceGroup) { - case 'new-releases': - sprawl.albums = getNewReleases(row.countAlbumsFromGroup, {albumData}); - break; - - case 'new-additions': - sprawl.albums = getNewAdditions(row.countAlbumsFromGroup, {albumData}); - break; - - default: - sprawl.albums = - (row.sourceGroup - ? row.sourceGroup.albums - .slice() - .reverse() - .filter(album => album.isListedOnHomepage) - .slice(0, row.countAlbumsFromGroup) - : []); - } - - if (!empty(row.sourceAlbums)) { - sprawl.albums.push(...row.sourceAlbums); - } - - return sprawl; - }, - - relations: (relation, sprawl, row) => ({ - coverGrid: - (row.displayStyle === 'grid' - ? relation('generateCoverGrid') - : null), - - coverCarousel: - (row.displayStyle === 'carousel' - ? relation('generateCoverCarousel') - : null), - - links: - sprawl.albums - .map(album => relation('linkAlbum', album)), - - images: - sprawl.albums - .map(album => relation('image', album.artTags)), - }), - - data: (sprawl, row) => ({ - displayStyle: - row.displayStyle, - - names: - (row.displayStyle === 'grid' - ? sprawl.albums - .map(album => album.name) - : null), - - paths: - sprawl.albums - .map(album => - (album.hasCoverArt - ? ['media.albumCover', album.directory, album.coverArtFileExtension] - : null)), - }), - - generate(data, relations, {language}) { - // Grids and carousels share some slots! Very convenient. - const commonSlots = {}; - - commonSlots.links = - relations.links; - - commonSlots.images = - stitchArrays({ - image: relations.images, - path: data.paths, - name: data.names ?? data.paths.slice().fill(null), - }).map(({image, path, name}) => - image.slots({ - path, - missingSourceContent: - language.$('misc.coverGrid.noCoverArt', { - [language.onlyIfOptions]: ['album'], - album: name, - }), - })); - - switch (data.displayStyle) { - case 'grid': - return relations.coverGrid.slots({ - ...commonSlots, - names: data.names, - }); - - case 'carousel': - return relations.coverCarousel.slots(commonSlots); - } - }, -}; diff --git a/src/content/dependencies/generateWikiHomepageSection.js b/src/content/dependencies/generateWikiHomepageSection.js index 963c5dde..49a474da 100644 --- a/src/content/dependencies/generateWikiHomepageSection.js +++ b/src/content/dependencies/generateWikiHomepageSection.js @@ -2,7 +2,8 @@ export default { contentDependencies: [ 'generateColorStyleAttribute', 'generateWikiHomepageActionsRow', - 'generateWikiHomepageAlbumsRow', + 'generateWikiHomepageAlbumCarouselRow', + 'generateWikiHomepageAlbumGridRow', ], extraDependencies: ['html'], @@ -15,8 +16,10 @@ export default { homepageSection.rows.map(row => (row.type === 'actions' ? relation('generateWikiHomepageActionsRow', row) - : row.type === 'albums' - ? relation('generateWikiHomepageAlbumsRow', row) + : row.type === 'album carousel' + ? relation('generateWikiHomepageAlbumCarouselRow', row) + : row.type === 'album grid' + ? relation('generateWikiHomepageAlbumGridRow', row) : null)), }), |