From eb8670ee11fd0a68c02ef96227b4475f08157ace Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sat, 13 Jan 2024 15:11:03 -0400 Subject: content: generateCoverArtwork: avoid duplicate short names --- src/content/dependencies/generateCoverArtwork.js | 56 +++++++++++++++++------- 1 file changed, 39 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/content/dependencies/generateCoverArtwork.js b/src/content/dependencies/generateCoverArtwork.js index 7f720093..d0941d2e 100644 --- a/src/content/dependencies/generateCoverArtwork.js +++ b/src/content/dependencies/generateCoverArtwork.js @@ -1,25 +1,45 @@ -import {empty} from '#sugar'; +import {empty, stitchArrays} from '#sugar'; export default { contentDependencies: ['image', 'linkArtTag'], extraDependencies: ['html'], - relations(relation, artTags) { - const relations = {}; + query: (artTags) => ({ + linkableArtTags: + (artTags + ? artTags.filter(tag => !tag.isContentWarning) + : []), + }), - relations.image = - relation('image', artTags); + relations: (relation, query, artTags) => ({ + image: + relation('image', artTags), - if (artTags) { - relations.tagLinks = - artTags - .filter(tag => !tag.isContentWarning) - .map(tag => relation('linkArtTag', tag)); - } else { - relations.tagLinks = null; + tagLinks: + query.linkableArtTags + .filter(tag => !tag.isContentWarning) + .map(tag => relation('linkArtTag', tag)), + }), + + data: (query) => { + const data = {}; + + const seenShortNames = new Set(); + const duplicateShortNames = new Set(); + + for (const {nameShort: shortName} of query.linkableArtTags) { + if (seenShortNames.has(shortName)) { + duplicateShortNames.add(shortName); + } else { + seenShortNames.add(shortName); + } } - return relations; + data.preferShortName = + query.linkableArtTags + .map(artTag => !duplicateShortNames.has(artTag.nameShort)); + + return data; }, slots: { @@ -41,7 +61,7 @@ export default { }, }, - generate(relations, slots, {html}) { + generate(data, relations, slots, {html}) { switch (slots.mode) { case 'primary': return html.tags([ @@ -57,10 +77,12 @@ export default { !empty(relations.tagLinks) && html.tag('ul', {class: 'image-details'}, - relations.tagLinks - .map(tagLink => + stitchArrays({ + tagLink: relations.tagLinks, + preferShortName: data.preferShortName, + }).map(({tagLink, preferShortName}) => html.tag('li', - tagLink.slot('preferShortName', true)))), + tagLink.slot('preferShortName', preferShortName)))), ]); case 'thumbnail': -- cgit 1.3.0-6-gf8a5