From 11ec1991c60e1ba2d2b6d76074f3333491a35bec Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 4 Oct 2023 15:27:23 -0300 Subject: content: generateArtTagInfoPage (stub, mostly) --- src/content/dependencies/generateArtTagInfoPage.js | 143 +++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/content/dependencies/generateArtTagInfoPage.js (limited to 'src/content') diff --git a/src/content/dependencies/generateArtTagInfoPage.js b/src/content/dependencies/generateArtTagInfoPage.js new file mode 100644 index 00000000..3576351c --- /dev/null +++ b/src/content/dependencies/generateArtTagInfoPage.js @@ -0,0 +1,143 @@ +import {unique} from '#sugar'; + +export default { + contentDependencies: [ + 'generateArtTagNavLinks', + 'generateContentHeading', + 'generatePageLayout', + 'linkArtTag', + 'linkExternal', + 'transformContent', + ], + + extraDependencies: ['html', 'language', 'wikiData'], + + sprawl: ({wikiInfo}) => ({ + enableListings: wikiInfo.enableListings, + }), + + query(sprawl, artTag) { + const directThings = artTag.directlyTaggedInThings; + const indirectThings = artTag.indirectlyTaggedInThings; + const allThings = unique([...directThings, ...indirectThings]); + + return {directThings, indirectThings, allThings}; + }, + + relations: (relation, query, sprawl, artTag) => ({ + layout: + relation('generatePageLayout'), + + navLinks: + relation('generateArtTagNavLinks', artTag), + + contentHeading: + relation('generateContentHeading'), + + description: + relation('transformContent', artTag.description), + + extraReadingLinks: + artTag.extraReadingURLs + .map(url => relation('linkExternal', url)), + + directAncestorLinks: + artTag.directAncestorArtTags + .map(artTag => relation('linkArtTag', artTag)), + + directDescendantLinks: + artTag.directDescendantArtTags + .map(artTag => relation('linkArtTag', artTag)), + }), + + data: (query, sprawl, artTag) => ({ + enableListings: + sprawl.enableListings, + + name: + artTag.name, + + color: + artTag.color, + + numArtworks: + query.allThings.length, + + names: + query.allThings.map(thing => thing.name), + + paths: + query.allThings.map(thing => + (thing.album + ? ['media.trackCover', thing.album.directory, thing.directory, thing.coverArtFileExtension] + : ['media.albumCover', thing.directory, thing.coverArtFileExtension])), + + onlyFeaturedIndirectly: + query.allThings.map(thing => + !query.directThings.includes(thing)), + }), + + generate: (data, relations, {html, language}) => + language.encapsulate('artTagInfoPage', pageCapsule => + relations.layout.slots({ + title: + language.$(pageCapsule, 'title', { + tag: data.name, + }), + + headingMode: 'static', + color: data.color, + + mainContent: [ + html.tag('p', + {[html.onlyIfContent]: true}, + + language.$('releaseInfo.readMoreOn', { + [language.onlyIfOptions]: ['links'], + + links: language.formatDisjunctionList(relations.extraReadingLinks), + })), + + html.tag('blockquote', + {[html.onlyIfContent]: true}, + + relations.description + .slot('mode', 'multiline')), + + html.tags([ + relations.contentHeading.clone() + .slots({ + title: + language.$(pageCapsule, 'descendsFromTags', { + tag: language.sanitize(data.name), + }), + }), + + html.tag('ul', + {[html.onlyIfContent]: true}, + + relations.directAncestorLinks + .map(link => html.tag('li', link))), + ]), + + html.tags([ + relations.contentHeading.clone() + .slots({ + title: + language.$(pageCapsule, 'descendantTags', { + tag: language.sanitize(data.name), + }), + }), + + html.tag('ul', + {[html.onlyIfContent]: true}, + + relations.directDescendantLinks + .map(link => html.tag('li', link))), + ]), + ], + + navLinkStyle: 'hierarchical', + navLinks: relations.navLinks.content, + })), +}; -- cgit 1.3.0-6-gf8a5