« get me outta code hell

content, css, data: Album.style "meta" - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
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
commitbbddc3020b0a9e2353d27fca15ec922a97198c13 (patch)
treeedb1b4c316c7d4b630cf06c4ecec0b1733fb915f /src
parent7ec55d7fe6e3d247d525cb1d52b44c153030e32b (diff)
content, css, data: Album.style "meta"
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateAlbumSidebar.js36
-rw-r--r--src/content/dependencies/generateTrackInfoPage.js10
-rw-r--r--src/content/dependencies/generateTrackInfoPageOtherReleasesLine.js36
-rw-r--r--src/content/dependencies/generateTrackInfoPageOtherReleasesLines.js26
-rw-r--r--src/content/dependencies/generateTrackReleaseBox.js9
-rw-r--r--src/data/things/album/Album.js1
-rw-r--r--src/static/css/page.css15
-rw-r--r--src/strings-default.yaml14
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"