diff options
Diffstat (limited to 'src/content')
4 files changed, 86 insertions, 66 deletions
diff --git a/src/content/dependencies/generateAdditionalFilesListChunk.js b/src/content/dependencies/generateAdditionalFilesListChunk.js index 75bac56a..27753b7f 100644 --- a/src/content/dependencies/generateAdditionalFilesListChunk.js +++ b/src/content/dependencies/generateAdditionalFilesListChunk.js @@ -1,7 +1,7 @@ import {stitchArrays} from '#sugar'; export default { - relations: (relation, query, file) => ({ + relations: (relation, file) => ({ description: relation('transformContent', file.description), @@ -13,7 +13,7 @@ export default { relation('generateArtistCredit', file.artistContribs, []), }), - data: (_query, file) => ({ + data: (file) => ({ title: file.title, diff --git a/src/content/dependencies/generateArtistInfoPageAdditionalFilesChunkItem.js b/src/content/dependencies/generateArtistInfoPageAdditionalFilesChunkItem.js index 8352edba..c1dc8787 100644 --- a/src/content/dependencies/generateArtistInfoPageAdditionalFilesChunkItem.js +++ b/src/content/dependencies/generateArtistInfoPageAdditionalFilesChunkItem.js @@ -1,3 +1,5 @@ +import {stitchArrays} from '#sugar'; + export default { query(_artist, contribs) { const query = {}; @@ -27,6 +29,11 @@ export default { relation('generateArtistCredit', query.additionalFile.artistContribs, [artist.mockSimpleContribution]), + + fileLinks: + query.additionalFile.filenames + .map(filename => + relation('linkAdditionalFile', query.additionalFile, filename)), }), data: (query, _artist, contribs) => ({ @@ -38,8 +45,8 @@ export default { title: query.additionalFile.title, - files: - query.additionalFile.filenames.length, + filenames: + query.additionalFile.filenames, contribAnnotationParts: contribs.flatMap(contrib => contrib.annotationParts), @@ -57,59 +64,75 @@ export default { }, }, - generate: (data, relations, slots, {html, language}) => - relations.template.slots({ + generate(data, relations, slots, {html, language}) { + const numFiles = data.filenames.length; + const capsule = + language.encapsulate( + 'artistPage.creditList.entry', data.for, slots.string); + + relations.template.setSlots({ annotation: - (data.contribAnnotationParts - ? language.formatUnitList(data.contribAnnotationParts) - : html.blank()), - - content: - language.encapsulate('artistPage.creditList.entry', entryCapsule => { - let workingCapsule = entryCapsule; - let workingOptions = {}; - - workingCapsule += '.' + data.for + '.' + slots.string; - - const additionalFileCapsule = workingCapsule; - - if (data.for === 'track') { - workingOptions.track = - relations.trackLink; - } - - if (data.title) { - relations.artistCredit.setSlots({ - normalStringKey: - additionalFileCapsule + '.credit.alongsideTitle', - }); - } else if (data.files && !slots.disableStandaloneWithFiles) { - relations.artistCredit.setSlots({ - normalStringKey: - additionalFileCapsule + '.credit.standaloneWithFiles', - - additionalStringOptions: { - files: language.countFiles(data.files, {unitOnly: true}), - }, - }); - } else { - relations.artistCredit.setSlots({ - normalStringKey: - additionalFileCapsule + '.credit', - }); - } - - if (!html.isBlank(relations.artistCredit)) { - workingCapsule += '.withCredit'; - workingOptions.credit = relations.artistCredit; - } - - if (data.title) { - workingCapsule += '.withTitle'; - workingOptions.title = language.sanitize(data.title); - } - - return language.$(workingCapsule, workingOptions); - }), - }), + language.formatUnitList(data.contribAnnotationParts), + }); + + const titleLine = + language.encapsulate(capsule, workingCapsule => { + const workingOptions = {}; + + const titlePart = + (data.title + ? language.sanitize(data.title) + : language.$(capsule, 'placeholderTitle')); + + workingOptions.title = + (numFiles <= 1 + ? relations.fileLinks[0].slot('content', titlePart) + : html.tag('b', titlePart)); + + if (data.for === 'track') { + workingOptions.track = relations.trackLink; + } + + relations.artistCredit.setSlots({ + normalStringKey: capsule + '.credit', + }); + + if (!html.isBlank(relations.artistCredit)) { + workingCapsule += '.withCredit'; + workingOptions.credit = relations.artistCredit; + } + + if (numFiles === 0) { + workingCapsule += '.withNoFiles'; + } else if (numFiles >= 2) { + workingCapsule += '.withMultipleFiles'; + workingOptions.files = + language.countFiles(numFiles, {unit: true}); + } + + return language.$(workingCapsule, workingOptions); + }); + + if (relations.fileLinks.length <= 1) { + relations.template.setSlot('content', titleLine); + } else { + const summary = + html.tag('summary', + html.tag('span', titleLine)); + + const list = + html.tag('ul', + stitchArrays({ + link: relations.fileLinks, + filename: data.filenames, + }).map(({link, filename}) => + html.tag('li', + link.slot('content', language.sanitize(filename))))); + + const details = html.tag('details', [summary, list]); + relations.template.setSlot('content', details); + } + + return relations.template; + }, }; diff --git a/src/content/dependencies/generateListAllAdditionalFilesChunk.js b/src/content/dependencies/generateListAllAdditionalFilesChunk.js index fea565cb..ddbaa69d 100644 --- a/src/content/dependencies/generateListAllAdditionalFilesChunk.js +++ b/src/content/dependencies/generateListAllAdditionalFilesChunk.js @@ -67,9 +67,9 @@ export default { : language.$(capsule, 'placeholderTitle')); workingOptions.title = - (links.length <= 1 - ? links[0].slot('content', titlePart) - : html.tag('b', titlePart)); + (links.length === 0 ? titlePart + : links.length === 1 ? links[0].slot('content', titlePart) + : html.tag('b', titlePart)); artistCredit.setSlots({ normalStringKey: capsule + '.credit', @@ -114,7 +114,7 @@ export default { })))); return ( - html.tag('li', {class: 'has-details'}, + html.tag('li', html.tag('details', [summary, list])) ); })))), diff --git a/src/content/dependencies/transformContent.js b/src/content/dependencies/transformContent.js index 62a547e4..b2d878ac 100644 --- a/src/content/dependencies/transformContent.js +++ b/src/content/dependencies/transformContent.js @@ -465,13 +465,10 @@ export default { {title: language.encapsulate('misc.external.opensInNewTab', capsule => language.$(capsule, { - link: + platform: language.formatExternalLink(link, { style: 'platform', }), - - annotation: - language.$(capsule, 'annotation'), }).toString())}, content); |