diff options
Diffstat (limited to 'src/content/dependencies/generateAlbumInfoPage.js')
-rw-r--r-- | src/content/dependencies/generateAlbumInfoPage.js | 314 |
1 files changed, 142 insertions, 172 deletions
diff --git a/src/content/dependencies/generateAlbumInfoPage.js b/src/content/dependencies/generateAlbumInfoPage.js index d4ea52de..d0788523 100644 --- a/src/content/dependencies/generateAlbumInfoPage.js +++ b/src/content/dependencies/generateAlbumInfoPage.js @@ -1,13 +1,11 @@ -import {sortAlbumsTracksChronologically} from '#sort'; import {empty} from '#sugar'; -import getChronologyRelations from '../util/getChronologyRelations.js'; - export default { contentDependencies: [ + 'generateAdditionalNamesBox', 'generateAlbumAdditionalFilesList', + 'generateAlbumArtworkColumn', 'generateAlbumBanner', - 'generateAlbumCoverArtwork', 'generateAlbumNavAccent', 'generateAlbumReleaseInfo', 'generateAlbumSecondaryNav', @@ -15,156 +13,105 @@ export default { 'generateAlbumSocialEmbed', 'generateAlbumStyleRules', 'generateAlbumTrackList', - 'generateChronologyLinks', - 'generateCommentarySection', + 'generateCommentaryEntry', '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); - } - - // Section: Release info + relations: (relation, album) => ({ + layout: + relation('generatePageLayout'), - relations.releaseInfo = - relation('generateAlbumReleaseInfo', album); + albumStyleRules: + relation('generateAlbumStyleRules', album, null), - // Section: Extra links + socialEmbed: + relation('generateAlbumSocialEmbed', album), - const extra = sections.extra = {}; + albumNavAccent: + relation('generateAlbumNavAccent', album, null), - if (album.tracks.some(t => t.hasUniqueCoverArt)) { - extra.galleryLink = - relation('linkAlbumGallery', album); - } + secondaryNav: + relation('generateAlbumSecondaryNav', album), - if (album.commentary || album.tracks.some(t => t.commentary)) { - extra.commentaryLink = - relation('linkAlbumCommentary', album); - } + sidebar: + relation('generateAlbumSidebar', album, null), - // Section: Track list + additionalNamesBox: + relation('generateAdditionalNamesBox', album.additionalNames), - relations.trackList = - relation('generateAlbumTrackList', album); + artworkColumn: + relation('generateAlbumArtworkColumn', album), - // Section: Additional files + banner: + (album.hasBannerArt + ? relation('generateAlbumBanner', album) + : null), - if (!empty(album.additionalFiles)) { - const additionalFiles = sections.additionalFiles = {}; + contentHeading: + relation('generateContentHeading'), - additionalFiles.heading = - relation('generateContentHeading'); + releaseInfo: + relation('generateAlbumReleaseInfo', album), - additionalFiles.additionalFilesList = - relation('generateAlbumAdditionalFilesList', album, album.additionalFiles); - } + galleryLink: + (album.tracks.some(t => t.hasUniqueCoverArt) + ? relation('linkAlbumGallery', album) + : null), - // Section: Artist commentary + commentaryLink: + ([album, ...album.tracks].some(({commentary}) => !empty(commentary)) + ? relation('linkAlbumCommentary', album) + : null), - if (album.commentary) { - sections.artistCommentary = - relation('generateCommentarySection', album.commentary); - } + trackList: + relation('generateAlbumTrackList', album), - return relations; - }, + additionalFilesList: + relation('generateAlbumAdditionalFilesList', + album, + album.additionalFiles), - data(album) { - const data = {}; + artistCommentaryEntries: + album.commentary + .map(entry => relation('generateCommentaryEntry', entry)), - data.name = album.name; - data.color = album.color; + creditSourceEntries: + album.creditSources + .map(entry => relation('generateCommentaryEntry', entry)), + }), - if (!empty(album.additionalFiles)) { - data.numAdditionalFiles = album.additionalFiles.length; - } + data: (album) => ({ + name: + album.name, - data.dateAddedToWiki = album.dateAddedToWiki; + color: + album.color, - return data; - }, + dateAddedToWiki: + album.dateAddedToWiki, + }), - 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: - relations.cover - ?.slots({ - alt: language.$('misc.alt.albumCover'), - }) - ?? null, + additionalNames: relations.additionalNamesBox, + + artworkColumnContent: + relations.artworkColumn, mainContent: [ relations.releaseInfo, @@ -173,38 +120,53 @@ 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')), + language.$(capsule, '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')), - }), - - !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()), + + !html.isBlank(relations.creditSourceEntries) && + language.encapsulate(capsule, 'readCreditSources', capsule => + language.$(capsule, { + link: + html.tag('a', + {href: '#credit-sources'}, + language.$(capsule, 'link')), + })), + ])), relations.trackList, @@ -212,24 +174,43 @@ export default { {[html.onlyIfContent]: true}, {[html.joinChildren]: html.tag('br')}, - [ - language.$('releaseInfo.addedToWiki', { + 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 && [ - sec.additionalFiles.heading + relations.additionalFilesList, + ])), + + html.tags([ + relations.contentHeading.clone() .slots({ - attributes: {id: 'additional-files'}, - title: language.$('releaseInfo.additionalFiles.heading'), + attributes: {id: 'artist-commentary'}, + title: language.$('misc.artistCommentary'), }), - sec.additionalFiles.additionalFilesList, - ], + relations.artistCommentaryEntries, + ]), + + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'credit-sources'}, + title: language.$('misc.creditSources'), + }), - sec.artistCommentary, + relations.creditSourceEntries, + ]), ], navLinkStyle: 'hierarchical', @@ -245,16 +226,6 @@ export default { }, ], - navContent: - relations.chronologyLinks.slots({ - chronologyInfoSets: [ - { - headingString: 'misc.chronology.heading.coverArt', - contributions: relations.coverArtistChronologyContributions, - }, - ], - }), - banner: relations.banner ?? null, bannerPosition: 'top', @@ -263,6 +234,5 @@ export default { leftSidebar: relations.sidebar, socialEmbed: relations.socialEmbed, - }); - }, + })), }; |