diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2023-10-06 00:55:16 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-02-25 20:03:26 -0400 |
commit | 6ff9a13abcf19ffb685c31f8bdf85b431912e6bf (patch) | |
tree | 86a688811eb2998a8d83a577e7bfd935716e0774 | |
parent | 9ee6afe0007c555c8b19ef90d4fb63907d002830 (diff) |
content: generateArtTagInfoPage: descendant gallery links
-rw-r--r-- | src/content/dependencies/generateArtTagInfoPage.js | 115 | ||||
-rw-r--r-- | src/strings-default.yaml | 14 |
2 files changed, 90 insertions, 39 deletions
diff --git a/src/content/dependencies/generateArtTagInfoPage.js b/src/content/dependencies/generateArtTagInfoPage.js index 929aef07..72463987 100644 --- a/src/content/dependencies/generateArtTagInfoPage.js +++ b/src/content/dependencies/generateArtTagInfoPage.js @@ -1,4 +1,4 @@ -import {empty, unique} from '#sugar'; +import {empty, stitchArrays, unique} from '#sugar'; export default { contentDependencies: [ @@ -19,11 +19,22 @@ export default { }), query(sprawl, artTag) { - const directThings = artTag.directlyTaggedInThings; - const indirectThings = artTag.indirectlyTaggedInThings; - const allThings = unique([...directThings, ...indirectThings]); + const query = {}; - return {directThings, indirectThings, allThings}; + query.directThings = + artTag.directlyTaggedInThings; + + query.indirectThings = + artTag.indirectlyTaggedInThings; + + query.allThings = + unique([...query.directThings, ...query.indirectThings]); + + query.allDescendantsHaveMoreDescendants = + artTag.directDescendantArtTags + .every(descendant => !empty(descendant.directDescendantArtTags)); + + return query; }, relations: (relation, query, sprawl, artTag) => ({ @@ -55,9 +66,15 @@ export default { artTag.directAncestorArtTags .map(artTag => relation('linkArtTagInfo', artTag)), - directDescendantLinks: + directDescendantInfoLinks: artTag.directDescendantArtTags .map(artTag => relation('linkArtTagInfo', artTag)), + + directDescendantGalleryLinks: + artTag.directDescendantArtTags.map(artTag => + (query.allDescendantsHaveMoreDescendants + ? null + : relation('linkArtTagInfo', artTag))), }), data: (query, sprawl, artTag) => ({ @@ -160,37 +177,61 @@ export default { links: language.formatDisjunctionList(relations.extraReadingLinks), })), - 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))), - ]), + language.encapsulate(pageCapsule, 'descendsFromTags', listCapsule => + html.tags([ + relations.contentHeading.clone() + .slots({ + title: + language.$(listCapsule, { + tag: language.sanitize(data.name), + }), + }), + + html.tag('ul', + {[html.onlyIfContent]: true}, + + relations.directAncestorLinks + .map(link => + html.tag('li', + language.$(listCapsule, 'item', { + tag: link, + })))), + ])), + + language.encapsulate(pageCapsule, 'descendantTags', listCapsule => + html.tags([ + relations.contentHeading.clone() + .slots({ + title: + language.$(listCapsule, { + tag: language.sanitize(data.name), + }), + }), + + html.tag('ul', + {[html.onlyIfContent]: true}, + + stitchArrays({ + infoLink: relations.directDescendantInfoLinks, + galleryLink: relations.directDescendantGalleryLinks, + }).map(({infoLink, galleryLink}) => + html.tag('li', + language.encapsulate(listCapsule, 'item', itemCapsule => + language.encapsulate(itemCapsule, workingCapsule => { + const workingOptions = {}; + + workingOptions.tag = infoLink; + + if (!html.isBlank(galleryLink)) { + workingCapsule += '.withGallery'; + workingOptions.gallery = + galleryLink.slot('content', + language.$(itemCapsule, 'withGallery.gallery')); + } + + return language.$(workingCapsule, workingOptions); + }))))), + ])), ], navLinkStyle: 'hierarchical', diff --git a/src/strings-default.yaml b/src/strings-default.yaml index 4ef9624c..a552febd 100644 --- a/src/strings-default.yaml +++ b/src/strings-default.yaml @@ -1313,8 +1313,18 @@ artTagInfoPage: directlyAndIndirectly: >- This tag is directly featured in {ARTWORKS_DIRECTLY}, and indirectly in {ARTWORKS_INDIRECTLY} more, for a total of {ARTWORKS_TOTAL}. - descendantTags: "Tags that descend from {TAG}:" - descendsFromTags: "Tags that {TAG} descends from:" + descendsFromTags: + _: "Tags that {TAG} descends from:" + item: "{TAG}" + + descendantTags: + _: "Tags that descend from {TAG}:" + + item: + _: "{TAG}" + withGallery: + _: "{TAG} ({GALLERY})" + gallery: "Gallery" # # artTagGalleryPage: |