diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-07-17 17:12:09 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-07-17 17:12:47 -0300 |
commit | 816ae960d2c1cf995cb241b26abf5f30780f6b81 (patch) | |
tree | 2387a279f821a92e1a821bd74cb8f68ede9816be /src/content/dependencies/generateGroupGalleryPageAlbumGrid.js | |
parent | 769466e939ed63037335efbfe1cef7df3e3c9472 (diff) |
content: gGGPAlbumGrid: tabs
Diffstat (limited to 'src/content/dependencies/generateGroupGalleryPageAlbumGrid.js')
-rw-r--r-- | src/content/dependencies/generateGroupGalleryPageAlbumGrid.js | 85 |
1 files changed, 74 insertions, 11 deletions
diff --git a/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js b/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js index ab768633..25e57a67 100644 --- a/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js +++ b/src/content/dependencies/generateGroupGalleryPageAlbumGrid.js @@ -1,26 +1,65 @@ -import {stitchArrays} from '#sugar'; +import {empty, stitchArrays} from '#sugar'; import {getTotalDuration} from '#wiki-data'; export default { - contentDependencies: ['generateCoverGrid', 'image', 'linkAlbum'], - extraDependencies: ['language'], + contentDependencies: [ + 'generateArtistCredit', + 'generateCoverGrid', + 'image', + 'linkAlbum', + ], - relations: (relation, albums, _group) => ({ + extraDependencies: ['language', 'wikiData'], + + query: (albums, group) => ({ + notedGroups: + albums.map(album => { + const contextGroup = group; + + const candidateGroups = + album.groups + .filter(group => !group.excludeFromGalleryTabs) + .filter(group => group.category !== contextGroup.category); + + return candidateGroups.at(0) ?? null; + }), + + notedArtistContribs: + albums.map(album => { + if ( + album.artistContribs.length === 1 && + !empty(group.closelyLinkedArtists) && + (album.artistContribs[0].artist.name === + group.closelyLinkedArtists[0].artist.name) + ) { + return []; + } + + return album.artistContribs; + }), + }), + + relations: (relation, query, albums, _group) => ({ coverGrid: relation('generateCoverGrid'), + artistCredits: + query.notedArtistContribs + .map(contribs => relation('generateArtistCredit', contribs, [])), + links: - albums.map(album => - relation('linkAlbum', album)), + albums + .map(album => relation('linkAlbum', album)), images: - albums.map(album => - (album.hasCoverArt - ? relation('image', album.coverArtworks[0]) - : relation('image'))) + albums + .map(album => + (album.hasCoverArt + ? relation('image', album.coverArtworks[0]) + : relation('image'))) }), - data: (albums, group) => ({ + data: (query, albums, group) => ({ names: albums.map(album => album.name), @@ -36,6 +75,10 @@ export default { ? null : getTotalDuration(album.tracks))), + groupNames: + query.notedGroups + .map(group => group ? group.name : null), + notFromThisGroup: albums.map(album => !album.groups.includes(group)), }), @@ -62,6 +105,26 @@ export default { itemAttributes: data.styles.map(style => ({'data-style': style})), + tab: + language.encapsulate(capsule, 'tab', capsule => + stitchArrays({ + groupName: data.groupNames, + artistCredit: relations.artistCredits, + }).map(({groupName, artistCredit}) => + (groupName + ? language.$(capsule, 'group', { + group: groupName, + }) + : artistCredit + ? artistCredit?.slots({ + normalStringKey: + capsule + '.artists', + + normalFeaturingStringKey: + capsule + '.artists.featuring', + }) + : null))), + info: stitchArrays({ style: data.styles, |