diff options
Diffstat (limited to 'src/content/dependencies/generateAlbumInfoPage.js')
-rw-r--r-- | src/content/dependencies/generateAlbumInfoPage.js | 286 |
1 files changed, 109 insertions, 177 deletions
diff --git a/src/content/dependencies/generateAlbumInfoPage.js b/src/content/dependencies/generateAlbumInfoPage.js index 739a6669..1bffe2d0 100644 --- a/src/content/dependencies/generateAlbumInfoPage.js +++ b/src/content/dependencies/generateAlbumInfoPage.js @@ -1,8 +1,3 @@ -import {sortAlbumsTracksChronologically} from '#sort'; -import {empty} from '#sugar'; - -import getChronologyRelations from '../util/getChronologyRelations.js'; - export default { contentDependencies: [ 'generateAlbumAdditionalFilesList', @@ -15,148 +10,93 @@ export default { 'generateAlbumSocialEmbed', 'generateAlbumStyleRules', 'generateAlbumTrackList', - 'generateChronologyLinks', 'generateCommentarySection', 'generateContentHeading', 'generatePageLayout', - 'linkAlbum', 'linkAlbumCommentary', 'linkAlbumGallery', - 'linkArtist', - 'linkTrack', - 'transformContent', ], extraDependencies: ['html', 'language'], - relations(relation, album) { - const relations = {}; - const sections = relations.sections = {}; - - relations.layout = - relation('generatePageLayout'); - - relations.albumStyleRules = - relation('generateAlbumStyleRules', album, null); - - relations.socialEmbed = - relation('generateAlbumSocialEmbed', album); - - relations.coverArtistChronologyContributions = - getChronologyRelations(album, { - contributions: album.coverArtistContribs ?? [], - - linkArtist: artist => relation('linkArtist', artist), - - linkThing: trackOrAlbum => - (trackOrAlbum.album - ? relation('linkTrack', trackOrAlbum) - : relation('linkAlbum', trackOrAlbum)), - - getThings(artist) { - const getDate = thing => thing.coverArtDate ?? thing.date; - - const things = [ - ...artist.albumsAsCoverArtist, - ...artist.tracksAsCoverArtist, - ].filter(getDate); - - return sortAlbumsTracksChronologically(things, {getDate}); - }, - }); - - relations.albumNavAccent = - relation('generateAlbumNavAccent', album, null); - - relations.chronologyLinks = - relation('generateChronologyLinks'); - - relations.secondaryNav = - relation('generateAlbumSecondaryNav', album); - - relations.sidebar = - relation('generateAlbumSidebar', album, null); - - if (album.hasCoverArt) { - relations.cover = - relation('generateAlbumCoverArtwork', album); - } - - if (album.hasBannerArt) { - relations.banner = - relation('generateAlbumBanner', album); - } + relations: (relation, album) => ({ + layout: + relation('generatePageLayout'), - // Section: Release info + albumStyleRules: + relation('generateAlbumStyleRules', album, null), - relations.releaseInfo = - relation('generateAlbumReleaseInfo', album); + socialEmbed: + relation('generateAlbumSocialEmbed', album), - // Section: Extra links + albumNavAccent: + relation('generateAlbumNavAccent', album, null), - const extra = sections.extra = {}; + secondaryNav: + relation('generateAlbumSecondaryNav', album), - if (album.tracks.some(t => t.hasUniqueCoverArt)) { - extra.galleryLink = - relation('linkAlbumGallery', album); - } + sidebar: + relation('generateAlbumSidebar', album, null), - if (album.commentary || album.tracks.some(t => t.commentary)) { - extra.commentaryLink = - relation('linkAlbumCommentary', album); - } + cover: + (album.hasCoverArt + ? relation('generateAlbumCoverArtwork', album) + : null), - // Section: Track list + banner: + (album.hasBannerArt + ? relation('generateAlbumBanner', album) + : null), - relations.trackList = - relation('generateAlbumTrackList', album); + contentHeading: + relation('generateContentHeading'), - // Section: Additional files + releaseInfo: + relation('generateAlbumReleaseInfo', album), - if (!empty(album.additionalFiles)) { - const additionalFiles = sections.additionalFiles = {}; + galleryLink: + (album.tracks.some(t => t.hasUniqueCoverArt) + ? relation('linkAlbumGallery', album) + : null), - additionalFiles.heading = - relation('generateContentHeading'); + commentaryLink: + (album.commentary || album.tracks.some(t => t.commentary) + ? relation('linkAlbumCommentary', album) + : null), - additionalFiles.additionalFilesList = - relation('generateAlbumAdditionalFilesList', album, album.additionalFiles); - } + trackList: + relation('generateAlbumTrackList', album), - // Section: Artist commentary + additionalFilesList: + relation('generateAlbumAdditionalFilesList', + album, + album.additionalFiles), - if (album.commentary) { - sections.artistCommentary = - relation('generateCommentarySection', album.commentary); - } + artistCommentarySection: + relation('generateCommentarySection', album.commentary), + }), - return relations; - }, + data: (album) => ({ + name: + album.name, - data(album) { - const data = {}; + color: + album.color, - data.name = album.name; - data.color = album.color; + dateAddedToWiki: + album.dateAddedToWiki, + }), - if (!empty(album.additionalFiles)) { - data.numAdditionalFiles = album.additionalFiles.length; - } - - data.dateAddedToWiki = album.dateAddedToWiki; - - return data; - }, - - generate(data, relations, {html, language}) { - const {sections: sec} = relations; - - return relations.layout - .slots({ - title: language.$('albumPage.title', {album: data.name}), - headingMode: 'sticky', + generate: (data, relations, {html, language}) => + language.encapsulate('albumPage', pageCapsule => + relations.layout.slots({ + title: + language.$(pageCapsule, 'title', { + album: data.name, + }), color: data.color, + headingMode: 'sticky', styleRules: [relations.albumStyleRules], cover: @@ -173,38 +113,44 @@ export default { {[html.onlyIfContent]: true}, {[html.joinChildren]: html.tag('br')}, - [ - sec.additionalFiles && - language.$('releaseInfo.additionalFiles.shortcut', { + language.encapsulate('releaseInfo', capsule => [ + !html.isBlank(relations.additionalFilesList) && + language.$(capsule, 'additionalFiles.shortcut', { link: html.tag('a', {href: '#additional-files'}, - language.$('releaseInfo.additionalFiles.shortcut.link')), - }), - - sec.extra.galleryLink && sec.extra.commentaryLink && - language.$('releaseInfo.viewGalleryOrCommentary', { - gallery: - sec.extra.galleryLink - .slot('content', language.$('releaseInfo.viewGalleryOrCommentary.gallery')), - commentary: - sec.extra.commentaryLink - .slot('content', language.$('releaseInfo.viewGalleryOrCommentary.commentary')), - }), - - sec.extra.galleryLink && !sec.extra.commentaryLink && - language.$('releaseInfo.viewGallery', { - link: - sec.extra.galleryLink - .slot('content', language.$('releaseInfo.viewGallery.link')), + language.$(capsule, 'additionalFiles.shortcut.link')), }), - !sec.extra.galleryLink && sec.extra.commentaryLink && - language.$('releaseInfo.viewCommentary', { - link: - sec.extra.commentaryLink - .slot('content', language.$('releaseInfo.viewCommentary.link')), - }), - ]), + (relations.galleryLink && relations.commentaryLink + ? language.encapsulate(capsule, 'viewGalleryOrCommentary', capsule => + language.$(capsule, { + gallery: + relations.galleryLink + .slot('content', language.$(capsule, 'gallery')), + + commentary: + relations.commentaryLink + .slot('content', language.$(capsule, 'commentary')), + })) + + : relations.galleryLink + ? language.encapsulate(capsule, 'viewGallery', capsule => + language.$(capsule, { + link: + relations.galleryLink + .slot('content', language.$(capsule, 'link')), + })) + + : relations.commentaryLink + ? language.encapsulate(capsule, 'viewCommentary', capsule => + language.$(capsule, { + link: + relations.commentaryLink + .slot('content', language.$(capsule, 'link')), + })) + + : html.blank()), + ])), relations.trackList, @@ -212,28 +158,25 @@ export default { {[html.onlyIfContent]: true}, {[html.joinChildren]: html.tag('br')}, - [ - data.dateAddedToWiki && - language.$('releaseInfo.addedToWiki', { - date: language.formatDate(data.dateAddedToWiki), - }), - ]), - - sec.additionalFiles && [ - sec.additionalFiles.heading - .slots({ - id: 'additional-files', - title: - language.$('releaseInfo.additionalFiles.heading', { - additionalFiles: - language.countAdditionalFiles(data.numAdditionalFiles, {unit: true}), - }), + language.encapsulate('releaseInfo', capsule => [ + language.$(capsule, 'addedToWiki', { + [language.onlyIfOptions]: ['date'], + date: language.formatDate(data.dateAddedToWiki), }), + ])), + + language.encapsulate('releaseInfo.additionalFiles', capsule => + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'additional-files'}, + title: language.$(capsule, 'heading'), + }), - sec.additionalFiles.additionalFilesList, - ], + relations.additionalFilesList, + ])), - sec.artistCommentary, + relations.artistCommentarySection, ], navLinkStyle: 'hierarchical', @@ -249,16 +192,6 @@ export default { }, ], - navContent: - relations.chronologyLinks.slots({ - chronologyInfoSets: [ - { - headingString: 'misc.chronology.heading.coverArt', - contributions: relations.coverArtistChronologyContributions, - }, - ], - }), - banner: relations.banner ?? null, bannerPosition: 'top', @@ -267,6 +200,5 @@ export default { leftSidebar: relations.sidebar, socialEmbed: relations.socialEmbed, - }); - }, + })), }; |