diff options
Diffstat (limited to 'src/content/dependencies/generateChronologyLinks.js')
-rw-r--r-- | src/content/dependencies/generateChronologyLinks.js | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/src/content/dependencies/generateChronologyLinks.js b/src/content/dependencies/generateChronologyLinks.js index 8ec6ee0a..7f24ded7 100644 --- a/src/content/dependencies/generateChronologyLinks.js +++ b/src/content/dependencies/generateChronologyLinks.js @@ -4,6 +4,16 @@ export default { extraDependencies: ['html', 'language'], slots: { + allowCollapsing: { + type: 'boolean', + default: true, + }, + + showOnly: { + type: 'boolean', + default: false, + }, + chronologyInfoSets: { validate: v => v.strictArrayOf( @@ -11,6 +21,8 @@ export default { headingString: v.isString, contributions: v.strictArrayOf(v.validateProperties({ index: v.isCountingNumber, + only: v.isBoolean, + artistDirectory: v.isDirectory, artistLink: v.isHTML, previousLink: v.isHTML, nextLink: v.isHTML, @@ -24,22 +36,35 @@ export default { return html.blank(); } + let infoSets = slots.chronologyInfoSets; + + if (!slots.showOnly) { + infoSets = infoSets + .map(({contributions, ...entry}) => ({ + ...entry, + contributions: + contributions + .filter(({only}) => !only), + })) + .filter(({contributions}) => !empty(contributions)); + } + const totalContributionCount = accumulateSum( - slots.chronologyInfoSets, + infoSets, ({contributions}) => contributions.length); if (totalContributionCount === 0) { return html.blank(); } - if (totalContributionCount > 8) { + if (slots.allowCollapsing && totalContributionCount > 8) { return html.tag('div', {class: 'chronology'}, language.$('misc.chronology.seeArtistPages')); } return html.tags( - slots.chronologyInfoSets.map(({ + infoSets.map(({ headingString, contributions, }) => @@ -48,16 +73,21 @@ export default { artistLink, previousLink, nextLink, + only, }) => { const heading = html.tag('span', {class: 'heading'}, language.$(headingString, { - index: language.formatIndex(index), + index: + (only + ? language.formatString('misc.chronology.heading.onlyIndex') + : language.formatIndex(index)), + artist: artistLink, })); const navigation = - (previousLink || nextLink) && + !only && html.tag('span', {class: 'buttons'}, language.formatUnitList([ previousLink?.slots({ |