diff options
Diffstat (limited to 'src/content/dependencies/generateFlashInfoPage.js')
-rw-r--r-- | src/content/dependencies/generateFlashInfoPage.js | 239 |
1 files changed, 105 insertions, 134 deletions
diff --git a/src/content/dependencies/generateFlashInfoPage.js b/src/content/dependencies/generateFlashInfoPage.js index 05964936..d06f0c01 100644 --- a/src/content/dependencies/generateFlashInfoPage.js +++ b/src/content/dependencies/generateFlashInfoPage.js @@ -19,180 +19,151 @@ export default { query(flash) { const query = {}; - if (flash.page || !empty(flash.urls)) { - query.urls = []; + query.urls = []; - if (flash.page) { - query.urls.push(`https://homestuck.com/story/${flash.page}`); - } + if (flash.page) { + query.urls.push(`https://homestuck.com/story/${flash.page}`); + } - if (!empty(flash.urls)) { - query.urls.push(...flash.urls); - } + if (!empty(flash.urls)) { + query.urls.push(...flash.urls); } return query; }, - relations(relation, query, flash) { - const relations = {}; - const sections = relations.sections = {}; - - relations.layout = - relation('generatePageLayout'); + relations: (relation, query, flash) => ({ + layout: + relation('generatePageLayout'), - relations.sidebar = - relation('generateFlashActSidebar', flash.act, flash); + sidebar: + relation('generateFlashActSidebar', flash.act, flash), - if (query.urls) { - relations.externalLinks = - query.urls.map(url => relation('linkExternal', url)); - } - - // TODO: Flashes always have cover art (#175) - /* eslint-disable-next-line no-constant-condition */ - if (true) { - relations.cover = - relation('generateFlashCoverArtwork', flash); - } + externalLinks: + query.urls + .map(url => relation('linkExternal', url)), - // Section: navigation bar + cover: + relation('generateFlashCoverArtwork', flash), - const nav = sections.nav = {}; + contentHeading: + relation('generateContentHeading'), - nav.flashActLink = - relation('linkFlashAct', flash.act); + flashActLink: + relation('linkFlashAct', flash.act), - nav.flashNavAccent = - relation('generateFlashNavAccent', flash); + flashNavAccent: + relation('generateFlashNavAccent', flash), - // Section: Featured tracks - - if (!empty(flash.featuredTracks)) { - const featuredTracks = sections.featuredTracks = {}; - - featuredTracks.heading = - relation('generateContentHeading'); - - featuredTracks.list = - relation('generateTrackList', flash.featuredTracks); - } - - // Section: Contributors - - if (!empty(flash.contributorContribs)) { - const contributors = sections.contributors = {}; - - contributors.heading = - relation('generateContentHeading'); - - contributors.list = - relation('generateContributionList', flash.contributorContribs); - } - - // Section: Artist commentary - - if (flash.commentary) { - sections.artistCommentary = - relation('generateCommentarySection', flash.commentary); - } + featuredTracksList: + relation('generateTrackList', flash.featuredTracks), - return relations; - }, + contributorContributionList: + relation('generateContributionList', flash.contributorContribs), - data(query, flash) { - const data = {}; + artistCommentarySection: + relation('generateCommentarySection', flash.commentary), + }), - data.name = flash.name; - data.color = flash.color; - data.date = flash.date; + data: (_query, flash) => ({ + name: + flash.name, - return data; - }, + color: + flash.color, - generate(data, relations, {html, language}) { - const {sections: sec} = relations; + date: + flash.date, + }), - return relations.layout.slots({ - title: - language.$('flashPage.title', { - flash: data.name, - }), + generate: (data, relations, {html, language}) => + language.encapsulate('flashPage', pageCapsule => + relations.layout.slots({ + title: + language.$(pageCapsule, 'title', { + flash: data.name, + }), - color: data.color, - headingMode: 'sticky', + color: data.color, + headingMode: 'sticky', - cover: - (relations.cover - ? relations.cover.slots({ - alt: language.$('misc.alt.flashArt'), - }) - : null), + cover: + (relations.cover + ? relations.cover.slots({ + alt: language.$('misc.alt.flashArt'), + }) + : null), - mainContent: [ - html.tag('p', - language.$('releaseInfo.released', { - date: language.formatDate(data.date), - })), + mainContent: [ + html.tag('p', + language.$('releaseInfo.released', { + date: language.formatDate(data.date), + })), - relations.externalLinks && html.tag('p', + {[html.onlyIfContent]: true}, + language.$('releaseInfo.playOn', { + [language.onlyIfOptions]: ['links'], + links: language.formatDisjunctionList( relations.externalLinks .map(link => link.slot('context', 'flash'))), })), - html.tag('p', - {[html.onlyIfContent]: true}, - {[html.joinChildren]: html.tag('br')}, - - [ - sec.artistCommentary && - 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.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: 'features'}, + title: + language.$('releaseInfo.tracksFeatured', { + flash: html.tag('i', data.name), + }), }), - ]), - sec.featuredTracks && [ - sec.featuredTracks.heading - .slots({ - id: 'features', - title: - language.$('releaseInfo.tracksFeatured', { - flash: html.tag('i', data.name), - }), - }), + relations.featuredTracksList, + ]), - sec.featuredTracks.list, - ], + html.tags([ + relations.contentHeading.clone() + .slots({ + attributes: {id: 'contributors'}, + title: language.$('releaseInfo.contributors'), + }), - sec.contributors && [ - sec.contributors.heading - .slots({ - id: 'contributors', - title: language.$('releaseInfo.contributors'), + relations.contributorContributionList.slots({ + chronologyKind: 'flash', }), + ]), - sec.contributors.list, + relations.artistCommentarySection, ], - sec.artistCommentary, - ], - - navLinkStyle: 'hierarchical', - navLinks: [ - {auto: 'home'}, - {html: sec.nav.flashActLink.slot('color', false)}, - {auto: 'current'}, - ], + navLinkStyle: 'hierarchical', + navLinks: [ + {auto: 'home'}, + {html: relations.flashActLink.slot('color', false)}, + {auto: 'current'}, + ], - navBottomRowContent: sec.nav.flashNavAccent, + navBottomRowContent: relations.flashNavAccent, - leftSidebar: relations.sidebar, - }); - }, + leftSidebar: relations.sidebar, + })), }; |