« get me outta code hell

content, data: Album.hideDuration - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateAlbumGalleryStatsLine.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-07-13 17:43:05 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-07-13 17:43:05 -0300
commita58f782de9ed40d4673725cb78c1f2bae7bc31fc (patch)
tree7756916a11b610d79debafde300cc47b21517b23 /src/content/dependencies/generateAlbumGalleryStatsLine.js
parent0023f84094ebfebd6f7556b89061bc8a356a0fb0 (diff)
content, data: Album.hideDuration
Diffstat (limited to 'src/content/dependencies/generateAlbumGalleryStatsLine.js')
-rw-r--r--src/content/dependencies/generateAlbumGalleryStatsLine.js84
1 files changed, 52 insertions, 32 deletions
diff --git a/src/content/dependencies/generateAlbumGalleryStatsLine.js b/src/content/dependencies/generateAlbumGalleryStatsLine.js
index 75bffb36..09d9a30b 100644
--- a/src/content/dependencies/generateAlbumGalleryStatsLine.js
+++ b/src/content/dependencies/generateAlbumGalleryStatsLine.js
@@ -3,36 +3,56 @@ import {getTotalDuration} from '#wiki-data';
 export default {
   extraDependencies: ['html', 'language'],
 
-  data(album) {
-    return {
-      name: album.name,
-      date: album.date,
-      duration: getTotalDuration(album.tracks),
-      numTracks: album.tracks.length,
-    };
-  },
-
-  generate(data, {html, language}) {
-    const parts = ['albumGalleryPage.statsLine'];
-    const options = {};
-
-    options.tracks =
-      html.tag('b',
-        language.countTracks(data.numTracks, {unit: true}));
-
-    options.duration =
-      html.tag('b',
-        language.formatDuration(data.duration, {unit: true}));
-
-    if (data.date) {
-      parts.push('withDate');
-      options.date =
-        html.tag('b',
-          language.formatDate(data.date));
-    }
-
-    return (
-      html.tag('p', {class: 'quick-info'},
-        language.formatString(...parts, options)));
-  },
+  data: (album) => ({
+    date:
+      album.date,
+
+    hideDuration:
+      album.hideDuration,
+
+    duration:
+      (album.hideDuration
+        ? null
+        : getTotalDuration(album.tracks)),
+
+    tracks:
+      (album.hideDuration
+        ? null
+        : album.tracks.length),
+  }),
+
+  generate: (data, {html, language}) =>
+    html.tag('p', {class: 'quick-info'},
+      {[html.onlyIfContent]: true},
+
+      language.encapsulate('albumGalleryPage.statsLine', workingCapsule => {
+        const workingOptions = {};
+
+        if (data.hideDuration && !data.date) {
+          return html.blank();
+        }
+
+        if (!data.hideDuration) {
+          workingOptions.tracks =
+            html.tag('b',
+              language.countTracks(data.tracks, {unit: true}));
+
+          workingOptions.duration =
+            html.tag('b',
+              language.formatDuration(data.duration, {unit: true}));
+        }
+
+        if (data.date) {
+          workingCapsule += '.withDate';
+          workingOptions.date =
+            html.tag('b',
+              language.formatDate(data.date));
+        }
+
+        if (data.hideDuration) {
+          workingCapsule += '.noDuration';
+        }
+
+        return language.$(workingCapsule, workingOptions);
+      })),
 };