« get me outta code hell

content, data: Track.datePosted, etc - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things/Track.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-06-04 08:55:25 -0300
committer(quasar) nebula <qznebula@protonmail.com>2026-06-04 08:55:25 -0300
commitaeed300cb9f4fc543a4fdadc294106e455900309 (patch)
tree1f317d539dd78b6c5caaad91c65246d9ff3330e2 /src/data/things/Track.js
parentaee74d1a422ca41a2f7fac7cf4cbc5e9285243a8 (diff)
content, data: Track.datePosted, etc
Diffstat (limited to 'src/data/things/Track.js')
-rw-r--r--src/data/things/Track.js31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/data/things/Track.js b/src/data/things/Track.js
index 7eff2000..6fc38e5d 100644
--- a/src/data/things/Track.js
+++ b/src/data/things/Track.js
@@ -282,6 +282,7 @@ export class Track extends Thing {
     additionalNames: thingList(V(AdditionalName)),
 
     dateFirstReleased: simpleDate(),
+    datePosted: simpleDate(),
 
     // > Update & expose - Credits and contributors
 
@@ -721,11 +722,30 @@ export class Track extends Thing {
       },
 
       exposeDependencyOrContinue('dateFirstReleased'),
+      exposeDependencyOrContinue('datePosted'),
 
       withPropertyFromObject('album', V('date')),
       exposeDependency('#album.date'),
     ],
 
+    dateStyle: [
+      exitWithoutDependency('date'),
+
+      {
+        dependencies: ['_dateFirstReleased', '_datePosted'],
+        compute: (continuation, {
+          ['_dateFirstReleased']: dateFirstReleased,
+          ['_datePosted']: datePosted,
+        }) =>
+          (dateFirstReleased ? 'released'
+         : datePosted        ? 'posted'
+                             : continuation()),
+      },
+
+      withPropertyFromObject('album', V('dateStyle')),
+      exposeDependency('#album.dateStyle'),
+    ],
+
     trackNumber: [
       // Zero is the fallback, not one, but in most albums the first track
       // (and its intended output by this composition) will be one.
@@ -1060,10 +1080,8 @@ export class Track extends Thing {
         transform: parseAdditionalNames,
       },
 
-      'Date First Released': {
-        property: 'dateFirstReleased',
-        transform: parseDate,
-      },
+      'Date First Released': {property: 'dateFirstReleased', transform: parseDate},
+      'Date Posted': {property: 'datePosted', transform: parseDate},
 
       // Credits and contributors
 
@@ -1240,6 +1258,11 @@ export class Track extends Thing {
         ],
       },
 
+      {message: `Only one unique date per track is supported`, fields: [
+        'Date First Released',
+        'Date Posted',
+      ]},
+
       {message: `Don't include URLs alongside Excluding URLs, unless Excluding URLs is false`, fields: [
         'URLs',
         ['Excluding URLs', v => v !== false],