From bbddc3020b0a9e2353d27fca15ec922a97198c13 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 11 May 2026 19:15:17 -0300 Subject: content, css, data: Album.style "meta" --- src/content/dependencies/generateAlbumSidebar.js | 36 ++++++++++++++++++++-- src/content/dependencies/generateTrackInfoPage.js | 10 +++--- .../generateTrackInfoPageOtherReleasesLine.js | 36 +++++++++++++++++----- .../generateTrackInfoPageOtherReleasesLines.js | 26 ++++++++++++++++ .../dependencies/generateTrackReleaseBox.js | 9 +++++- 5 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 src/content/dependencies/generateTrackInfoPageOtherReleasesLines.js (limited to 'src/content') diff --git a/src/content/dependencies/generateAlbumSidebar.js b/src/content/dependencies/generateAlbumSidebar.js index 7659f361..cdd171a1 100644 --- a/src/content/dependencies/generateAlbumSidebar.js +++ b/src/content/dependencies/generateAlbumSidebar.js @@ -39,20 +39,39 @@ export default { Array.from(albumTrackMap.keys()), {getDate: album => albumTrackMap.get(album).date}); + const metaLike = + (album.style === 'meta' + ? album => album.style === 'meta' + : album => album.style !== 'meta'); + + const metaUnlike = + (album.style === 'meta' + ? album => album.style !== 'meta' + : album => album.style === 'meta'); + + const metaReleaseAlbums = + allReleaseAlbums.filter(metaUnlike); + + const regularReleaseAlbums = + allReleaseAlbums.filter(metaLike); + const currentReleaseIndex = - allReleaseAlbums.indexOf(track.album); + regularReleaseAlbums.indexOf(track.album); const earlierReleaseAlbums = - allReleaseAlbums.slice(0, currentReleaseIndex); + regularReleaseAlbums.slice(0, currentReleaseIndex); const laterReleaseAlbums = - allReleaseAlbums.slice(currentReleaseIndex + 1); + regularReleaseAlbums.slice(currentReleaseIndex + 1); query.earlierReleaseTracks = earlierReleaseAlbums.map(album => albumTrackMap.get(album)); query.laterReleaseTracks = laterReleaseAlbums.map(album => albumTrackMap.get(album)); + + query.metaReleaseTracks = + metaReleaseAlbums.map(album => albumTrackMap.get(album)); } return query; @@ -97,6 +116,13 @@ export default { .map(track => relation('generateTrackReleaseBox', track)) : null), + + metaReleaseBoxes: + (track + ? query.metaReleaseTracks + .map(track => + relation('generateTrackReleaseBox', track)) + : null), }), data: (query, _sprawl, album, track) => ({ @@ -184,6 +210,10 @@ export default { data.isTrackPage && relations.laterTrackReleaseBoxes, + data.isTrackPage && + relations.metaReleaseBoxes + .map(box => box.slot('meta', true)), + data.isTrackPage && groupBoxes, ], diff --git a/src/content/dependencies/generateTrackInfoPage.js b/src/content/dependencies/generateTrackInfoPage.js index 1d768cfc..8e8ac4f1 100644 --- a/src/content/dependencies/generateTrackInfoPage.js +++ b/src/content/dependencies/generateTrackInfoPage.js @@ -88,8 +88,8 @@ export default { readCommentaryLine: relation('generateReadCommentaryLine', track), - otherReleasesLine: - relation('generateTrackInfoPageOtherReleasesLine', track), + otherReleasesLines: + relation('generateTrackInfoPageOtherReleasesLines', track), contributorContributionList: relation('generateContributionList', track.contributorContribs), @@ -242,8 +242,10 @@ export default { })), ])), - html.tag('p', {[html.onlyIfContent]: true}, - relations.otherReleasesLine), + html.tag('p', + {[html.onlyIfContent]: true}, + {[html.joinChildren]: html.tag('br')}, + relations.otherReleasesLines), html.tags([ relations.contentHeading.clone().slots({ diff --git a/src/content/dependencies/generateTrackInfoPageOtherReleasesLine.js b/src/content/dependencies/generateTrackInfoPageOtherReleasesLine.js index a3c65872..7a4f97d5 100644 --- a/src/content/dependencies/generateTrackInfoPageOtherReleasesLine.js +++ b/src/content/dependencies/generateTrackInfoPageOtherReleasesLine.js @@ -1,22 +1,22 @@ import {onlyItem, stitchArrays} from '#sugar'; export default { - query(track) { + query(track, releases) { const query = {}; query.singleSingle = onlyItem( - track.otherReleases.filter(track => track.album.style === 'single')); + releases.filter(track => track.album.style === 'single')); query.regularReleases = (query.singleSingle - ? track.otherReleases.filter(track => track !== query.singleSingle) - : track.otherReleases); + ? releases.filter(track => track !== query.singleSingle) + : releases); return query; }, - relations: (relation, query, track) => ({ + relations: (relation, query, track, _releases) => ({ textWithTooltip: relation('generateTextWithTooltip'), @@ -42,7 +42,10 @@ export default { otherTrack, track)), }), - data: (query, _track) => ({ + data: (query, track, _releases) => ({ + ownAlbumStyle: + track.album.style, + albumNames: query.regularReleases .map(track => track.album.name), @@ -57,11 +60,26 @@ export default { : null), }), - generate: (data, relations, {html, language}) => + slots: { + meta: {type: 'boolean', default: false}, + }, + + generate: (data, relations, slots, {html, language}) => language.encapsulate('releaseInfo.alsoReleased', capsule => language.encapsulate(capsule, workingCapsule => { const workingOptions = {}; + if (slots.meta) { + workingOptions.alsoReleased = + language.$(capsule, 'included'); + } else if (data.ownAlbumStyle === 'meta') { + workingOptions.alsoReleased = + language.$(capsule, 'released'); + } else { + workingOptions.alsoReleased = + language.$(capsule, 'alsoReleased'); + } + let any = false; const albumList = @@ -88,7 +106,9 @@ export default { }), tooltip: - trackTooltip, + (slots.meta + ? null + : trackTooltip), }))); if (!html.isBlank(albumList)) { diff --git a/src/content/dependencies/generateTrackInfoPageOtherReleasesLines.js b/src/content/dependencies/generateTrackInfoPageOtherReleasesLines.js new file mode 100644 index 00000000..3940fa54 --- /dev/null +++ b/src/content/dependencies/generateTrackInfoPageOtherReleasesLines.js @@ -0,0 +1,26 @@ +export default { + query: (track) => ({ + regularReleases: + track.otherReleases.filter(track => track.album.style !== 'meta'), + + metaReleases: + track.otherReleases.filter(track => track.album.style === 'meta'), + }), + + relations: (relation, query, track) => ({ + regularReleasesLine: + relation('generateTrackInfoPageOtherReleasesLine', + track, + query.regularReleases), + + metaReleasesLine: + relation('generateTrackInfoPageOtherReleasesLine', + track, + query.metaReleases), + }), + + generate: (relations) => [ + relations.regularReleasesLine, + relations.metaReleasesLine.slot('meta', true), + ], +}; diff --git a/src/content/dependencies/generateTrackReleaseBox.js b/src/content/dependencies/generateTrackReleaseBox.js index c880fe63..415ab7c9 100644 --- a/src/content/dependencies/generateTrackReleaseBox.js +++ b/src/content/dependencies/generateTrackReleaseBox.js @@ -15,12 +15,19 @@ export default { track.album.name, }), - generate: (data, relations, {html, language}) => + slots: { + meta: {type: 'boolean', default: false}, + }, + + generate: (data, relations, slots, {html, language}) => language.encapsulate('albumSidebar.releaseBox', boxCapsule => relations.box.slots({ attributes: [ {class: 'track-release-sidebar-box'}, relations.colorStyle, + + slots.meta && + {class: 'meta-album'}, ], content: [ -- cgit 1.3.0-6-gf8a5