diff options
| author | (quasar) nebula <qznebula@protonmail.com> | 2026-05-11 19:15:17 -0300 |
|---|---|---|
| committer | (quasar) nebula <qznebula@protonmail.com> | 2026-05-11 19:15:17 -0300 |
| commit | bbddc3020b0a9e2353d27fca15ec922a97198c13 (patch) | |
| tree | edb1b4c316c7d4b630cf06c4ecec0b1733fb915f | |
| parent | 7ec55d7fe6e3d247d525cb1d52b44c153030e32b (diff) | |
content, css, data: Album.style "meta"
| -rw-r--r-- | src/content/dependencies/generateAlbumSidebar.js | 36 | ||||
| -rw-r--r-- | src/content/dependencies/generateTrackInfoPage.js | 10 | ||||
| -rw-r--r-- | src/content/dependencies/generateTrackInfoPageOtherReleasesLine.js | 36 | ||||
| -rw-r--r-- | src/content/dependencies/generateTrackInfoPageOtherReleasesLines.js | 26 | ||||
| -rw-r--r-- | src/content/dependencies/generateTrackReleaseBox.js | 9 | ||||
| -rw-r--r-- | src/data/things/album/Album.js | 1 | ||||
| -rw-r--r-- | src/static/css/page.css | 15 | ||||
| -rw-r--r-- | src/strings-default.yaml | 14 |
8 files changed, 126 insertions, 21 deletions
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) => ({ @@ -185,6 +211,10 @@ export default { 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: [ diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js index aeffa9c8..eaf19247 100644 --- a/src/data/things/album/Album.js +++ b/src/data/things/album/Album.js @@ -124,6 +124,7 @@ export class Album extends Thing { validate: input.value(is(...[ 'album', 'single', + 'meta', ])), }), diff --git a/src/static/css/page.css b/src/static/css/page.css index 7d5784f3..353ae873 100644 --- a/src/static/css/page.css +++ b/src/static/css/page.css @@ -750,6 +750,21 @@ border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } + + .track-release-sidebar-box.meta-album { + margin-top: 15px !important; + border-radius: 4px !important; + margin-left: 15px; + margin-right: 15px; + } + + .track-release-sidebar-box.meta-album + .track-release-sidebar-box.meta-album { + margin-top: 5px !important; + } + + .track-release-sidebar-box.meta-album + .conjoined-group-sidebar-box { + margin-top: 10px !important; + } } @layer print { diff --git a/src/strings-default.yaml b/src/strings-default.yaml index 84fd1dc8..662545be 100644 --- a/src/strings-default.yaml +++ b/src/strings-default.yaml @@ -290,20 +290,24 @@ releaseInfo: note: "Notes:" alsoReleased: + alsoReleased: "Also released" + released: "Released" + included: "Included" + onAlbums: >- - Also released on {ALBUMS}. + {ALSO_RELEASED} on {ALBUMS}. asSingle: >- - Also released {SINGLE}. + {ALSO_RELEASED} {SINGLE}. onSingle: >- - Also released {SINGLE}. + {ALSO_RELEASED} {SINGLE}. onAlbums.asSingle: >- - Also released on {ALBUMS}, and {SINGLE}. + {ALSO_RELEASED} on {ALBUMS}, and {SINGLE}. onAlbums.onSingle: >- - Also released on {ALBUMS}, and {SINGLE}. + {ALSO_RELEASED} on {ALBUMS}, and {SINGLE}. asSingle.link: "as a single" onSingle.link: "on a single" |