« get me outta code hell

data, content: TrackSection.hasTrackNumbers - 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>2025-12-10 17:32:11 -0400
committer(quasar) nebula <qznebula@protonmail.com>2025-12-10 17:32:11 -0400
commit69ae43806f57daf9a29caf5ee3de14ec53bcaac1 (patch)
tree5d4bbd1aafe9a2c0b91b4e13aef349f3762dbb4a /src
parent6b440b13585fd90614df42752a56d895c805256f (diff)
data, content: TrackSection.hasTrackNumbers
closes #566 PRETTY SWEET !!!
examples here: https://discord.com/channels/749042497610842152/779895315750715422/1448422818944647429
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateAlbumSidebarTrackSection.js2
-rw-r--r--src/content/dependencies/generateAlbumTrackList.js40
-rw-r--r--src/data/things/album.js51
3 files changed, 51 insertions, 42 deletions
diff --git a/src/content/dependencies/generateAlbumSidebarTrackSection.js b/src/content/dependencies/generateAlbumSidebarTrackSection.js
index 68281bfe..3ceab866 100644
--- a/src/content/dependencies/generateAlbumSidebarTrackSection.js
+++ b/src/content/dependencies/generateAlbumSidebarTrackSection.js
@@ -15,7 +15,7 @@ export default {
     const data = {};
 
     data.hasTrackNumbers =
-      album.hasTrackNumbers &&
+      trackSection.hasTrackNumbers &&
       !empty(trackSection.tracks);
 
     data.isTrackPage = !!track;
diff --git a/src/content/dependencies/generateAlbumTrackList.js b/src/content/dependencies/generateAlbumTrackList.js
index 93cb420b..d40fb259 100644
--- a/src/content/dependencies/generateAlbumTrackList.js
+++ b/src/content/dependencies/generateAlbumTrackList.js
@@ -76,7 +76,7 @@ export default {
     const data = {};
 
     data.displayMode = query.displayMode;
-    data.hasTrackNumbers = album.hasTrackNumbers;
+    data.albumHasTrackNumbers = album.hasTrackNumbers;
 
     switch (query.displayMode) {
       case 'trackSections':
@@ -93,15 +93,16 @@ export default {
           album.trackSections
             .map(section => section.tracks.length > 1);
 
-        if (album.hasTrackNumbers) {
-          data.trackSectionsStartCountingFrom =
-            album.trackSections
-              .map(section => section.startCountingFrom);
-        } else {
-          data.trackSectionsStartCountingFrom =
-            album.trackSections
-              .map(() => null);
-        }
+        data.trackSectionsHaveTrackNumbers =
+          album.trackSections
+            .map(section => section.hasTrackNumbers);
+
+        data.trackSectionsStartCountingFrom =
+          album.trackSections
+            .map(section =>
+              (section.hasTrackNumbers
+                ? section.startCountingFrom
+                : null));
 
         break;
     }
@@ -119,8 +120,6 @@ export default {
   },
 
   generate(data, relations, slots, {html, language}) {
-    const listTag = (data.hasTrackNumbers ? 'ol' : 'ul');
-
     const slotItems = items =>
       items.map(item =>
         item.slots({
@@ -139,6 +138,7 @@ export default {
             name: data.trackSectionNames,
             duration: data.trackSectionDurations,
             durationApproximate: data.trackSectionDurationsApproximate,
+            hasTrackNumbers: data.trackSectionsHaveTrackNumbers,
             startCountingFrom: data.trackSectionsStartCountingFrom,
           }).map(({
               heading,
@@ -148,6 +148,7 @@ export default {
               name,
               duration,
               durationApproximate,
+              hasTrackNumbers,
               startCountingFrom,
             }) => [
               language.encapsulate('trackList.section', capsule =>
@@ -180,16 +181,19 @@ export default {
                   {[html.onlyIfContent]: true},
                   description),
 
-                html.tag(listTag,
-                  data.hasTrackNumbers &&
-                    {start: startCountingFrom},
-
-                  slotItems(items)),
+                (hasTrackNumbers
+                  ? html.tag('ol', {start: startCountingFrom},
+                      slotItems(items))
+                  : html.tag('ul', slotItems(items))),
               ]),
             ]));
 
       case 'tracks':
-        return html.tag(listTag, slotItems(relations.items));
+        if (data.albumHasTrackNumbers) {
+          return html.tag('ol', slotItems(relations.items));
+        } else {
+          return html.tag('ul', slotItems(relations.items));
+        }
 
       default:
         return html.blank();
diff --git a/src/data/things/album.js b/src/data/things/album.js
index f9d7a3a3..31d94ef1 100644
--- a/src/data/things/album.js
+++ b/src/data/things/album.js
@@ -979,20 +979,24 @@ export class TrackSection extends Thing {
       exposeDependency({dependency: '#album.color'}),
     ],
 
+    hasTrackNumbers: [
+      exposeUpdateValueOrContinue({
+        validate: input.value(isBoolean),
+      }),
+
+      withPropertyFromObject('album', V('hasTrackNumbers')),
+      exposeDependency('#album.hasTrackNumbers'),
+    ],
+
     startCountingFrom: [
       exposeUpdateValueOrContinue({
         validate: input.value(isNumber),
       }),
 
-      exitWithoutDependency({
-        dependency: 'album',
-        value: input.value(1),
-      }),
+      withPropertyFromObject('album', V('hasTrackNumbers')),
+      exitWithoutDependency('#album.hasTrackNumbers', V(1), V('falsy')),
 
-      withPropertyFromObject({
-        object: 'album',
-        property: input.value('trackSections'),
-      }),
+      withPropertyFromObject('album', V('trackSections')),
 
       withNearbyItemFromList({
         list: '#album.trackSections',
@@ -1002,19 +1006,10 @@ export class TrackSection extends Thing {
         '#nearbyItem': '#previousTrackSection',
       }),
 
-      exitWithoutDependency({
-        dependency: '#previousTrackSection',
-        value: input.value(1),
-      }),
-
-      withPropertyFromObject({
-        object: '#previousTrackSection',
-        property: input.value('continueCountingFrom'),
-      }),
+      exitWithoutDependency('#previousTrackSection', V(1)),
 
-      exposeDependency({
-        dependency: '#previousTrackSection.continueCountingFrom',
-      }),
+      withPropertyFromObject('#previousTrackSection', V('continueCountingFrom')),
+      exposeDependency('#previousTrackSection.continueCountingFrom'),
     ],
 
     dateOriginallyReleased: simpleDate(),
@@ -1071,9 +1066,18 @@ export class TrackSection extends Thing {
     ],
 
     continueCountingFrom: [
-      withLengthOfList({
-        list: 'tracks',
-      }),
+      withPropertyFromObject('album', V('hasTrackNumbers')),
+      exitWithoutDependency('#album.hasTrackNumbers', V(null), V('falsy')),
+
+      {
+        dependencies: ['hasTrackNumbers', 'startCountingFrom'],
+        compute: (continuation, {hasTrackNumbers, startCountingFrom}) =>
+          (hasTrackNumbers
+            ? continuation()
+            : continuation.exit(startCountingFrom)),
+      },
+
+      withLengthOfList('tracks'),
 
       {
         dependencies: ['startCountingFrom', '#tracks.length'],
@@ -1104,6 +1108,7 @@ export class TrackSection extends Thing {
       'Suffix Track Directories': {property: 'suffixTrackDirectories'},
 
       'Color': {property: 'color'},
+      'Has Track Numbers': {property: 'hasTrackNumbers'},
       'Start Counting From': {property: 'startCountingFrom'},
 
       'Date Originally Released': {