« get me outta code hell

content, data: MusicVideo.date - 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-01-17 04:46:11 -0400
committer(quasar) nebula <qznebula@protonmail.com>2026-01-17 04:46:11 -0400
commitda43a2365d18216a6fc54f073b7ec85cc4e7dafc (patch)
treeb2ade98b7899a861442484f3db3e24ee030b3878 /src
parente2c11819c26e97f6715b4327f564e8601fd04cb3 (diff)
content, data: MusicVideo.date
Diffstat (limited to 'src')
-rw-r--r--src/content/dependencies/generateMusicVideo.js22
-rw-r--r--src/content/dependencies/generateSingleArtworkColumn.js2
-rw-r--r--src/content/dependencies/generateTrackArtworkColumn.js2
-rw-r--r--src/data/things/music-video.js15
-rw-r--r--src/strings-default.yaml6
5 files changed, 29 insertions, 18 deletions
diff --git a/src/content/dependencies/generateMusicVideo.js b/src/content/dependencies/generateMusicVideo.js
index a61cd5b7..7f0108af 100644
--- a/src/content/dependencies/generateMusicVideo.js
+++ b/src/content/dependencies/generateMusicVideo.js
@@ -1,5 +1,5 @@
 export default {
-  relations: (relation, musicVideo) => ({
+  relations: (relation, musicVideo, thing) => ({
     image:
       relation('image', {
         path: musicVideo.path,
@@ -7,6 +7,9 @@ export default {
         dimensions: musicVideo.coverArtDimensions,
       }),
 
+    datetimestamp:
+      relation('generateAbsoluteDatetimestamp', musicVideo.date, thing.date),
+
     artistCredit:
       relation('generateArtistCredit', musicVideo.artistContribs, []),
 
@@ -14,7 +17,7 @@ export default {
       relation('generateArtistCredit', musicVideo.contributorContribs, []),
   }),
 
-  data: (musicVideo) => ({
+  data: (musicVideo, _track) => ({
     label:
       musicVideo.label,
 
@@ -46,16 +49,25 @@ export default {
 
           [
             language.encapsulate(capsule, 'by', workingCapsule => {
-              const additionalStringOptions = {};
+              const workingOptions = {};
 
               if (data.label) {
                 workingCapsule += '.customLabel';
-                additionalStringOptions.label = data.label;
+                workingOptions.label = data.label;
+              }
+
+              const {datetimestamp} = relations;
+
+              datetimestamp.setSlot('style', 'year-difference');
+
+              if (!html.isBlank(datetimestamp)) {
+                workingCapsule += '.withDate';
+                workingOptions.date = datetimestamp;
               }
 
               return relations.artistCredit.slots({
                 normalStringKey: workingCapsule,
-                additionalStringOptions,
+                additionalStringOptions: workingOptions,
 
                 showAnnotation: true,
                 showChronology: true,
diff --git a/src/content/dependencies/generateSingleArtworkColumn.js b/src/content/dependencies/generateSingleArtworkColumn.js
index 52537186..32c448ad 100644
--- a/src/content/dependencies/generateSingleArtworkColumn.js
+++ b/src/content/dependencies/generateSingleArtworkColumn.js
@@ -5,7 +5,7 @@ export default {
 
     trackMusicVideos:
       track.musicVideos.map(musicVideo =>
-        relation('generateMusicVideo', musicVideo)),
+        relation('generateMusicVideo', musicVideo, track)),
   }),
 
   generate: (relations, {html}) =>
diff --git a/src/content/dependencies/generateTrackArtworkColumn.js b/src/content/dependencies/generateTrackArtworkColumn.js
index dde37376..feaed604 100644
--- a/src/content/dependencies/generateTrackArtworkColumn.js
+++ b/src/content/dependencies/generateTrackArtworkColumn.js
@@ -13,7 +13,7 @@ export default {
 
     trackMusicVideos:
       track.musicVideos.map(musicVideo =>
-        relation('generateMusicVideo', musicVideo)),
+        relation('generateMusicVideo', musicVideo, track)),
   }),
 
   generate: (relations, {html}) =>
diff --git a/src/data/things/music-video.js b/src/data/things/music-video.js
index 267349e8..6c1e3ba6 100644
--- a/src/data/things/music-video.js
+++ b/src/data/things/music-video.js
@@ -5,7 +5,7 @@ import {input, V} from '#composite';
 import find from '#find';
 import Thing from '#thing';
 import {isDate, isStringNonEmpty, isURL} from '#validators';
-import {parseContributors} from '#yaml';
+import {parseContributors, parseDate} from '#yaml';
 
 import {exposeConstant, exposeUpdateValueOrContinue}
   from '#composite/control-flow';
@@ -72,21 +72,14 @@ export class MusicVideo extends Thing {
     fields: {
       'Label': {property: 'label'},
       'Directory': {property: 'unqualifiedDirectory'},
-      'Date': {property: 'date'},
+      'Date': {property: 'date', transform: parseDate},
       'URL': {property: 'url'},
 
       'Cover Art File Extension': {property: 'coverArtFileExtension'},
       'Cover Art Dimensions': {property: 'coverArtDimensions'},
 
-      'Artists': {
-        property: 'artistContribs',
-        transform: parseContributors,
-      },
-
-      'Contributors': {
-        property: 'contributorContribs',
-        transform: parseContributors,
-      },
+      'Artists': {property: 'artistContribs', transform: parseContributors},
+      'Contributors': {property: 'contributorContribs', transform: parseContributors},
     },
   };
 
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index 6cdb9727..565330e0 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -997,6 +997,12 @@ misc:
     by: "Music video by {ARTISTS}"
     by.customLabel: "{LABEL} by {ARTISTS}"
 
+    by.withDate: >-
+      Music video ({DATE}) by {ARTISTS}
+
+    by.customLabel.withDate: >-
+      {LABEL} ({DATE}) by {ARTISTS}
+
     contributors: "Contributors: {ARTISTS}"
 
   # coverGrid: