diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-04-14 16:02:11 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-04-14 16:02:11 -0300 |
| commit | e5e836354225a1d7954613b4ae1cbd7f797ec9f3 (patch) | |
| tree | 73a3f72cf029ae4dd8af2dde51a60a93dc18efd3 /src/content/dependencies/generateTrackListItem.js | |
| parent | 34714ebea5d11289ea3013819e40a5b86e1b7f72 (diff) | |
content: generateArtistInfoPageTracksChunk: item dates
Diffstat (limited to 'src/content/dependencies/generateTrackListItem.js')
| -rw-r--r-- | src/content/dependencies/generateTrackListItem.js | 115 |
1 files changed, 79 insertions, 36 deletions
diff --git a/src/content/dependencies/generateTrackListItem.js b/src/content/dependencies/generateTrackListItem.js index c8c57534..383f0025 100644 --- a/src/content/dependencies/generateTrackListItem.js +++ b/src/content/dependencies/generateTrackListItem.js @@ -25,6 +25,9 @@ export default { }), data: (track, _contextContributions) => ({ + date: + track.date, + duration: track.duration ?? 0, @@ -47,6 +50,11 @@ export default { default: false, }, + showDate: { + validate: v => v.anyOf(v.isBoolean, v.isDate), + default: false, + }, + colorMode: { validate: v => v.is('none', 'track', 'line'), default: 'track', @@ -62,48 +70,83 @@ export default { language.encapsulate(itemCapsule, workingCapsule => { const workingOptions = {}; - workingOptions.track = - relations.trackLink - .slot('color', slots.colorMode === 'track'); + const accent = + language.encapsulate(itemCapsule, 'accent', accentCapsule => { + let workingCapsule = accentCapsule; + let workingOptions = {}; + let any = false; + + if (slots.showDate) { + any = true; + workingCapsule += '.withDate'; + workingOptions.date = + language.$(accentCapsule, 'date', { + date: + (slots.showDate === true + ? language.formatDate(data.date) + : language.formatDate(slots.showDate)), + }); + } + + if (slots.showDuration) { + any = true; + workingCapsule += '.withDuration'; + workingOptions.duration = + (data.trackHasDuration + ? language.$(accentCapsule, 'duration', { + duration: + language.formatDuration(data.duration), + }) + : relations.missingDuration); + } + + if (any) { + return language.$(workingCapsule, workingOptions); + } else { + return html.blank(); + } + }); - if (slots.showDuration) { - workingCapsule += '.withDuration'; - workingOptions.duration = - (data.trackHasDuration - ? language.$(itemCapsule, 'withDuration.duration', { - duration: - language.formatDuration(data.duration), - }) - : relations.missingDuration); + if (!html.isBlank(accent)) { + workingCapsule += '.withAccent'; + workingOptions.accent = accent; } - const chosenCredit = - (slots.showArtists === true - ? relations.acontextualCredit - : slots.showArtists === 'auto' - ? relations.contextualCredit - : null); - - if (chosenCredit) { - const artistCapsule = language.encapsulate(itemCapsule, 'withArtists'); - - chosenCredit.setSlots({ - normalStringKey: - artistCapsule + '.by', - - featuringStringKey: - artistCapsule + '.featuring', + workingOptions.track = + relations.trackLink + .slot('color', slots.colorMode === 'track'); - normalFeaturingStringKey: - artistCapsule + '.by.featuring', + const artists = + language.encapsulate(itemCapsule, 'artists', artistsCapsule => { + const chosenCredit = + (slots.showArtists === true + ? relations.acontextualCredit + : slots.showArtists === 'auto' + ? relations.contextualCredit + : null); + + if (!chosenCredit) { + return html.blank(); + } + + // This might still be blank, if the contextual credit is chosen + // and it matches its context credit. + return chosenCredit.slots({ + normalStringKey: + artistsCapsule + '.by', + + featuringStringKey: + artistsCapsule + '.featuring', + + normalFeaturingStringKey: + artistsCapsule + '.by.featuring', + }); }); - if (!html.isBlank(chosenCredit)) { - workingCapsule += '.withArtists'; - workingOptions.by = - html.tag('span', {class: 'by'}, - chosenCredit); - } + if (!html.isBlank(artists)) { + workingCapsule += '.withArtists'; + workingOptions.artists = + html.tag('span', {class: 'by'}, artists); } return language.$(workingCapsule, workingOptions); |