« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateAlbumTrackListItem.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/dependencies/generateAlbumTrackListItem.js')
-rw-r--r--src/content/dependencies/generateAlbumTrackListItem.js150
1 files changed, 41 insertions, 109 deletions
diff --git a/src/content/dependencies/generateAlbumTrackListItem.js b/src/content/dependencies/generateAlbumTrackListItem.js
index 7d5d2c6e..44297c15 100644
--- a/src/content/dependencies/generateAlbumTrackListItem.js
+++ b/src/content/dependencies/generateAlbumTrackListItem.js
@@ -1,75 +1,36 @@
-import {compareArrays, empty} from '#sugar';
-
 export default {
-  contentDependencies: [
-    'generateAlbumTrackListMissingDuration',
-    'linkContribution',
-    'linkTrack',
-  ],
-
-  extraDependencies: ['getColors', 'html', 'language'],
-
-  query(track, album) {
-    const query = {};
+  contentDependencies: ['generateTrackListItem'],
+  extraDependencies: ['html'],
 
-    query.duration = track.duration ?? 0;
+  query: (track, album) => ({
+    trackHasDuration:
+      !!track.duration,
 
-    query.trackHasDuration = !!track.duration;
-
-    query.sectionHasDuration =
+    sectionHasDuration:
       !album.trackSections
         .some(section =>
           section.tracks.every(track => !track.duration) &&
-          section.tracks.includes(track));
-
-    query.albumHasDuration =
-      album.tracks.some(track => track.duration);
+          section.tracks.includes(track)),
 
-    return query;
-  },
+    albumHasDuration:
+      album.tracks.some(track => track.duration),
+  }),
 
-  relations(relation, query, track) {
-    const relations = {};
-
-    if (!empty(track.artistContribs)) {
-      relations.contributionLinks =
-        track.artistContribs
-          .map(contrib => relation('linkContribution', contrib));
-    }
-
-    relations.trackLink =
-      relation('linkTrack', track);
-
-    if (!query.trackHasDuration) {
-      relations.missingDuration =
-        relation('generateAlbumTrackListMissingDuration');
-    }
-
-    return relations;
-  },
+  relations: (relation, query, track) => ({
+    item:
+      relation('generateTrackListItem',
+        track,
+        track.album.artistContribs),
+  }),
 
-  data(query, track, album) {
-    const data = {};
+  data: (query, track, album) => ({
+    trackHasDuration: query.trackHasDuration,
+    sectionHasDuration: query.sectionHasDuration,
+    albumHasDuration: query.albumHasDuration,
 
-    data.duration = query.duration;
-    data.trackHasDuration = query.trackHasDuration;
-    data.sectionHasDuration = query.sectionHasDuration;
-    data.albumHasDuration = query.albumHasDuration;
-
-    if (track.color !== album.color) {
-      data.color = track.color;
-    }
-
-    data.showArtists =
-      !empty(track.artistContribs) &&
-       (empty(album.artistContribs) ||
-        !compareArrays(
-          track.artistContribs.map(contrib => contrib.artist),
-          album.artistContribs.map(contrib => contrib.artist),
-          {checkOrder: false}));
-
-    return data;
-  },
+    colorize:
+      track.color !== album.color,
+  }),
 
   slots: {
     collapseDurationScope: {
@@ -80,51 +41,22 @@ export default {
     },
   },
 
-  generate: (data, relations, slots, {getColors, html, language}) =>
-    language.encapsulate('trackList.item', itemCapsule =>
-      html.tag('li',
-        data.color &&
-          {style: `--primary-color: ${getColors(data.color).primary}`},
-
-        language.encapsulate(itemCapsule, workingCapsule => {
-          const workingOptions = {};
-
-          workingOptions.track =
-            relations.trackLink
-              .slot('color', false);
-
-          const collapseDuration =
-            (slots.collapseDurationScope === 'track'
-              ? !data.trackHasDuration
-           : slots.collapseDurationScope === 'section'
-              ? !data.sectionHasDuration
-           : slots.collapseDurationScope === 'album'
-              ? !data.albumHasDuration
-              : false);
-
-          if (!collapseDuration) {
-            workingCapsule += '.withDuration';
-            workingOptions.duration =
-              (data.trackHasDuration
-                ? language.$(itemCapsule, 'withDuration.duration', {
-                    duration:
-                      language.formatDuration(data.duration),
-                  })
-                : relations.missingDuration);
-          }
-
-          if (data.showArtists) {
-            workingCapsule += '.withArtists';
-            workingOptions.by =
-              html.tag('span', {class: 'by'},
-                html.metatag('chunkwrap', {split: ','},
-                  html.resolve(
-                    language.$(itemCapsule, 'withArtists.by', {
-                      artists:
-                        language.formatConjunctionList(relations.contributionLinks),
-                    }))));
-          }
-
-          return language.$(workingCapsule, workingOptions);
-        }))),
+  generate: (data, relations, slots) =>
+    relations.item.slots({
+      showArtists: true,
+
+      showDuration:
+        (slots.collapseDurationScope === 'track'
+          ? data.trackHasDuration
+       : slots.collapseDurationScope === 'section'
+          ? data.sectionHasDuration
+       : slots.collapseDurationScope === 'album'
+          ? data.albumHasDuration
+          : true),
+
+      colorMode:
+        (data.colorize
+          ? 'line'
+          : 'none'),
+    }),
 };