diff options
Diffstat (limited to 'src/content/dependencies/generateArtistInfoPageCommentaryChunkedList.js')
| -rw-r--r-- | src/content/dependencies/generateArtistInfoPageCommentaryChunkedList.js | 166 |
1 files changed, 99 insertions, 67 deletions
diff --git a/src/content/dependencies/generateArtistInfoPageCommentaryChunkedList.js b/src/content/dependencies/generateArtistInfoPageCommentaryChunkedList.js index 133095ea..6b603375 100644 --- a/src/content/dependencies/generateArtistInfoPageCommentaryChunkedList.js +++ b/src/content/dependencies/generateArtistInfoPageCommentaryChunkedList.js @@ -7,20 +7,7 @@ import { } from '#sort'; export default { - contentDependencies: [ - 'generateArtistInfoPageChunk', - 'generateArtistInfoPageChunkItem', - 'generateArtistInfoPageOtherArtistLinks', - 'linkAlbum', - 'linkFlash', - 'linkFlashAct', - 'linkTrack', - 'transformContent', - ], - - extraDependencies: ['html', 'language'], - - query(artist) { + query(artist, filterWikiEditorCommentary) { const processEntry = ({ thing, entry, @@ -43,7 +30,12 @@ export default { flashAct, flash, + quoted: + !entry.headingArtists.includes(artist) && + entry.quotedArtists.includes(artist), + annotation: entry.annotation, + annotationParts: entry.annotationParts, }, }); @@ -88,6 +80,12 @@ export default { .flatMap(thing => thing.commentary .filter(entry => entry.artists.includes(artist)) + + .filter(entry => + (filterWikiEditorCommentary + ? entry.isWikiEditorCommentary + : !entry.isWikiEditorCommentary)) + .map(entry => processEntry({thing, entry}))); const processAlbumEntries = ({albums}) => @@ -147,7 +145,7 @@ export default { return {chunks}; }, - relations: (relation, query) => ({ + relations: (relation, query, _artist, filterWikiEditorCommentary) => ({ chunks: query.chunks .map(() => relation('generateArtistInfoPageChunk')), @@ -179,13 +177,16 @@ export default { itemAnnotations: query.chunks .map(({chunk}) => chunk - .map(({annotation}) => - (annotation - ? relation('transformContent', annotation) - : null))), + .map(entry => + relation('transformContent', + (filterWikiEditorCommentary + ? entry.annotationParts + .filter(part => part !== 'wiki editor') + .join(', ') + : entry.annotation)))), }), - data: (query) => ({ + data: (query, _artist, _filterWikiEditorCommentary) => ({ chunkTypes: query.chunks .map(({chunkType}) => chunkType), @@ -194,10 +195,17 @@ export default { query.chunks .map(({chunk}) => chunk .map(({itemType}) => itemType)), + + itemQuoted: + query.chunks + .map(({chunk}) => chunk + .map(({quoted}) => quoted)), }), generate: (data, relations, {html, language}) => html.tag('dl', + {[html.onlyIfContent]: true}, + stitchArrays({ chunk: relations.chunks, chunkLink: relations.chunkLinks, @@ -207,6 +215,7 @@ export default { itemLinks: relations.itemLinks, itemAnnotations: relations.itemAnnotations, itemTypes: data.itemTypes, + itemQuoted: data.itemQuoted, }).map(({ chunk, chunkLink, @@ -216,54 +225,77 @@ export default { itemLinks, itemAnnotations, itemTypes, + itemQuoted, }) => - (chunkType === 'album' - ? chunk.slots({ - mode: 'album', - albumLink: chunkLink, - items: - stitchArrays({ - item: items, - link: itemLinks, - annotation: itemAnnotations, - type: itemTypes, - }).map(({item, link, annotation, type}) => - item.slots({ - annotation: - (annotation - ? annotation.slot('mode', 'inline') - : null), - - content: - (type === 'album' - ? html.tag('i', - language.$('artistPage.creditList.entry.album.commentary')) - : language.$('artistPage.creditList.entry.track', { - track: link, - })), - })), - }) - : chunkType === 'flash-act' - ? chunk.slots({ - mode: 'flash', - flashActLink: chunkLink, - items: + language.encapsulate('artistPage.creditList.entry', capsule => { + // The citation slot, instead of annotation, gives commentary + // a specially custom look. + const citations = + stitchArrays({annotation: itemAnnotations, quoted: itemQuoted}) + .map(({annotation, quoted}) => + language.encapsulate(capsule, workingCapsule => { + const workingOptions = {}; + + let any = false; + + annotation.setSlots({ + mode: 'inline', + absorbPunctuationFollowingExternalLinks: false, + }); + + if (!html.isBlank(annotation)) { + workingCapsule += '.citation'; + workingOptions.citation = annotation; + any = true; + } + + if (quoted) { + workingCapsule += '.quoted'; + any = true; + } + + if (any) { + return language.$(workingCapsule, workingOptions); + } else { + return html.blank(); + } + })); + + let contents; + + if (chunkType === 'album') { + chunk.setSlot('mode', 'album'); + contents = + stitchArrays({link: itemLinks, type: itemTypes}) + .map(({link, type}) => + (type === 'album' + ? html.tag('i', + language.$(capsule, 'album.commentary')) + : language.$(capsule, 'track', {track: link}))); + + } else if (chunkType === 'flash-act') { + chunk.setSlot('mode', 'flash'); + contents = + itemLinks.map(link => + language.$(capsule, 'flash', {flash: link})); + + } else { + throw new Error(`Gyeep!!`); + } + + chunk.setSlots({ + link: chunkLink, + + list: + html.tag('ul', stitchArrays({ item: items, - link: itemLinks, - annotation: itemAnnotations, - }).map(({item, link, annotation}) => - item.slots({ - annotation: - (annotation - ? annotation.slot('mode', 'inline') - : null), - - content: - language.$('artistPage.creditList.entry.flash', { - flash: link, - }), - })), - }) - : null))), + citation: citations, + content: contents, + }).map(({item, citation, content}) => + item.slots({citation, content}))), + }); + + return chunk; + }))), }; |