From 99261a74b1f3298144d8c5c6d676d63ad27a1299 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 14 Jun 2024 22:10:12 -0300 Subject: content: encapsulate everything --- src/content/dependencies/generateTrackInfoPage.js | 449 ++++++++++++---------- 1 file changed, 238 insertions(+), 211 deletions(-) (limited to 'src/content/dependencies/generateTrackInfoPage.js') diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js index 1cbbc8a8..95eaf35b 100644 --- a/src/content/dependencies/generateTrackInfoPage.js +++ b/src/content/dependencies/generateTrackInfoPage.js @@ -134,251 +134,278 @@ export default { }), generate: (data, relations, {html, language}) => - relations.layout.slots({ - title: language.$('trackPage.title', {track: data.name}), - headingMode: 'sticky', - - additionalNames: relations.additionalNamesBox, - - color: data.color, - styleRules: [relations.albumStyleRules], - - cover: - (relations.cover - ? relations.cover.slots({ - alt: language.$('misc.alt.trackCover'), - }) - : null), - - mainContent: [ - relations.releaseInfo, - - html.tag('p', - {[html.onlyIfContent]: true}, - {[html.joinChildren]: html.tag('br')}, - - [ - !html.isBlank(relations.sheetMusicFilesList) && - language.$('releaseInfo.sheetMusicFiles.shortcut', { - link: html.tag('a', - {href: '#sheet-music-files'}, - language.$('releaseInfo.sheetMusicFiles.shortcut.link')), - }), + language.encapsulate('trackPage', pageCapsule => + relations.layout.slots({ + title: + language.$(pageCapsule, 'title', { + track: data.name, + }), - !html.isBlank(relations.midiProjectFilesList) && - language.$('releaseInfo.midiProjectFiles.shortcut', { - link: html.tag('a', - {href: '#midi-project-files'}, - language.$('releaseInfo.midiProjectFiles.shortcut.link')), - }), + headingMode: 'sticky', - !html.isBlank(relations.additionalFilesList) && - language.$('releaseInfo.additionalFiles.shortcut', { - link: html.tag('a', - {href: '#midi-project-files'}, - language.$('releaseInfo.additionalFiles.shortcut.link')), - }), + additionalNames: relations.additionalNamesBox, + + color: data.color, + styleRules: [relations.albumStyleRules], + + cover: + (relations.cover + ? relations.cover.slots({ + alt: language.$('misc.alt.trackCover'), + }) + : null), + + mainContent: [ + relations.releaseInfo, - !html.isBlank(relations.artistCommentarySection) && - language.$('releaseInfo.readCommentary', { - link: html.tag('a', - {href: '#artist-commentary'}, - language.$('releaseInfo.readCommentary.link')), + html.tag('p', + {[html.onlyIfContent]: true}, + {[html.joinChildren]: html.tag('br')}, + + language.encapsulate('releaseInfo', capsule => [ + !html.isBlank(relations.sheetMusicFilesList) && + language.encapsulate(capsule, 'sheetMusicFiles.shortcut', capsule => + language.$(capsule, { + link: + html.tag('a', + {href: '#sheet-music-files'}, + language.$(capsule, 'link')), + })), + + !html.isBlank(relations.midiProjectFilesList) && + language.encapsulate(capsule, 'midiProjectFiles.shortcut', capsule => + language.$(capsule, { + link: + html.tag('a', + {href: '#midi-project-files'}, + language.$(capsule, 'link')), + })), + + !html.isBlank(relations.additionalFilesList) && + language.encapsulate(capsule, 'additionalFiles.shortcut', capsule => + language.$(capsule, { + link: + html.tag('a', + {href: '#midi-project-files'}, + language.$(capsule, 'link')), + })), + + !html.isBlank(relations.artistCommentarySection) && + language.encapsulate(capsule, 'readCommentary', capsule => + language.$(capsule, { + link: + html.tag('a', + {href: '#artist-commentary'}, + language.$(capsule, 'link')), + })), + ])), + + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'also-released-as'}, + title: language.$('releaseInfo.alsoReleasedAs'), }), + + relations.otherReleasesList, ]), - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'also-released-as'}, - title: language.$('releaseInfo.alsoReleasedAs'), - }), - - relations.otherReleasesList, - ]), - - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'contributors'}, - title: language.$('releaseInfo.contributors'), - }), - - relations.contributorContributionList, - ]), - - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'references'}, - - title: - language.$('releaseInfo.tracksReferenced', { - track: html.tag('i', data.name), - }), + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'contributors'}, + title: language.$('releaseInfo.contributors'), + }), - stickyTitle: - language.$('releaseInfo.tracksReferenced.sticky'), - }), + relations.contributorContributionList, + ]), - relations.referencedTracksList, - ]), + html.tags([ + language.encapsulate('releaseInfo.tracksReferenced', capsule => + relations.contentHeading.clone() + .slots({ + attributes: {id: 'references'}, - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'samples'}, + title: + language.$(capsule, { + track: + html.tag('i', data.name), + }), - title: - language.$('releaseInfo.tracksSampled', { - track: html.tag('i', data.name), - }), + stickyTitle: + language.$(capsule, 'sticky'), + })), - stickyTitle: - language.$('releaseInfo.tracksSampled.sticky'), - }), + relations.referencedTracksList, + ]), - relations.sampledTracksList, - ]), + html.tags([ + language.encapsulate('releaseInfo.tracksSampled', capsule => + relations.contentHeading.clone() + .slots({ + attributes: {id: 'samples'}, - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'referenced-by'}, + title: + language.$(capsule, { + track: + html.tag('i', data.name), + }), - title: - language.$('releaseInfo.tracksThatReference', { - track: html.tag('i', data.name), - }), + stickyTitle: + language.$(capsule, 'sticky'), + })), - stickyTitle: - language.$('releaseInfo.tracksThatReference.sticky'), - }), + relations.sampledTracksList, + ]), - relations.referencedByTracksList - .slots({ - headingString: 'releaseInfo.tracksThatReference', - }), - ]), + language.encapsulate('releaseInfo.tracksThatReference', capsule => + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'referenced-by'}, - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'sampled-by'}, + title: + language.$(capsule, { + track: html.tag('i', data.name), + }), - title: - language.$('releaseInfo.tracksThatSample', { - track: html.tag('i', data.name), + stickyTitle: + language.$(capsule, 'sticky'), }), - stickyTitle: - language.$('releaseInfo.tracksThatSample.sticky'), - }), + relations.referencedByTracksList + .slots({ + headingString: capsule, + }), + ])), - relations.sampledByTracksList - .slots({ - headingString: 'releaseInfo.tracksThatSample', - }), - ]), + language.encapsulate('releaseInfo.tracksThatSample', capsule => + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'sampled-by'}, - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'featured-in'}, + title: + language.$(capsule, { + track: html.tag('i', data.name), + }), - title: - language.$('releaseInfo.flashesThatFeature', { - track: html.tag('i', data.name), + stickyTitle: + language.$(capsule, 'sticky'), }), - stickyTitle: - language.$('releaseInfo.flashesThatFeature.sticky'), - }), + relations.sampledByTracksList + .slots({ + headingString: capsule, + }), + ])), - relations.flashesThatFeatureList, - ]), + html.tags([ + language.encapsulate('releaseInfo.flashesThatFeature', capsule => + relations.contentHeading.clone() + .slots({ + attributes: {id: 'featured-in'}, - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'lyrics'}, - title: language.$('releaseInfo.lyrics'), - }), + title: + language.$(capsule, { + track: html.tag('i', data.name), + }), - html.tag('blockquote', - {[html.onlyIfContent]: true}, - relations.lyrics.slot('mode', 'lyrics')), - ]), - - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'sheet-music-files'}, - title: language.$('releaseInfo.sheetMusicFiles.heading'), - }), - - relations.sheetMusicFilesList, - ]), - - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'midi-project-files'}, - title: language.$('releaseInfo.midiProjectFiles.heading'), - }), - - relations.midiProjectFilesList, - ]), - - html.tags([ - relations.contentHeading.clone() - .slots({ - attributes: {id: 'additional-files'}, - title: language.$('releaseInfo.additionalFiles.heading'), - }), - - relations.additionalFilesList, - ]), - - relations.artistCommentarySection, - ], - - navLinkStyle: 'hierarchical', - navLinks: [ - {auto: 'home'}, - {html: relations.albumLink.slot('color', false)}, - { - html: - (data.hasTrackNumbers - ? language.$('trackPage.nav.track.withNumber', { - number: data.trackNumber, - track: relations.trackLink - .slot('attributes', {class: 'current'}), - }) - : language.$('trackPage.nav.track', { - track: relations.trackLink - .slot('attributes', {class: 'current'}), + stickyTitle: + language.$(capsule, 'sticky'), })), - }, - ], - navBottomRowContent: - relations.albumNavAccent.slots({ - showTrackNavigation: true, - showExtraLinks: false, - }), + relations.flashesThatFeatureList, + ]), - navContent: - relations.chronologyLinks, + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'lyrics'}, + title: language.$('releaseInfo.lyrics'), + }), - secondaryNav: - relations.secondaryNav - .slot('mode', 'track'), + html.tag('blockquote', + {[html.onlyIfContent]: true}, + relations.lyrics.slot('mode', 'lyrics')), + ]), - leftSidebar: relations.sidebar, + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'sheet-music-files'}, + title: language.$('releaseInfo.sheetMusicFiles.heading'), + }), - socialEmbed: relations.socialEmbed, - }), + relations.sheetMusicFilesList, + ]), + + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'midi-project-files'}, + title: language.$('releaseInfo.midiProjectFiles.heading'), + }), + + relations.midiProjectFilesList, + ]), + + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'additional-files'}, + title: language.$('releaseInfo.additionalFiles.heading'), + }), + + relations.additionalFilesList, + ]), + + relations.artistCommentarySection, + ], + + navLinkStyle: 'hierarchical', + + navLinks: [ + {auto: 'home'}, + + {html: relations.albumLink.slot('color', false)}, + + { + html: + language.encapsulate(pageCapsule, 'nav.track', capsule => { + const options = {}; + + options.track = + relations.trackLink + .slot('attributes', {class: 'current'}); + + if (data.hasTrackNumbers) { + capsule += '.withNumber'; + options.number = data.trackNumber; + } + + return language.$(capsule, options); + }), + }, + ], + + navBottomRowContent: + relations.albumNavAccent.slots({ + showTrackNavigation: true, + showExtraLinks: false, + }), + + navContent: + relations.chronologyLinks, + + secondaryNav: + relations.secondaryNav + .slot('mode', 'track'), + + leftSidebar: relations.sidebar, + + socialEmbed: relations.socialEmbed, + })), }; /* -- cgit 1.3.0-6-gf8a5