« 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
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
parentaee74d1a422ca41a2f7fac7cf4cbc5e9285243a8 (diff)
content, data: Track.datePosted, etc
Diffstat (limited to 'src/data/things')
-rw-r--r--src/data/things/Track.js31
-rw-r--r--src/data/things/album/Album.js36
2 files changed, 53 insertions, 14 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],
diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js
index 47abb73a..1a07656a 100644
--- a/src/data/things/album/Album.js
+++ b/src/data/things/album/Album.js
@@ -223,7 +223,8 @@ export class Album extends Thing {
 
     additionalNames: thingList(V(AdditionalName)),
 
-    date: simpleDate(),
+    dateReleased: simpleDate(),
+    datePosted: simpleDate(),
     dateAddedToWiki: simpleDate(),
 
     // > Update & expose - Credits and contributors
@@ -527,6 +528,27 @@ export class Album extends Thing {
       withFlattenedList('#trackSections.tracks'),
       exposeDependency('#flattenedList'),
     ],
+
+    date: [
+      exposeDependencyOrContinue('dateReleased'),
+      exposeDependencyOrContinue('datePosted'),
+      exposeConstant(V(null)),
+    ],
+
+    dateStyle: [
+      exitWithoutDependency('date'),
+
+      {
+        dependencies: ['_dateReleased', '_datePosted'],
+        compute: ({
+          ['_dateReleased']: dateReleased,
+          ['_datePosted']: datePosted,
+        }) =>
+          (dateReleased ? 'released'
+         : datePosted   ? 'posted'
+                        : null),
+      },
+    ]
   });
 
   static [Thing.getSerializeDescriptors] = ({
@@ -721,15 +743,9 @@ export class Album extends Thing {
         transform: parseAdditionalNames,
       },
 
-      'Date': {
-        property: 'date',
-        transform: parseDate,
-      },
-
-      'Date Added': {
-        property: 'dateAddedToWiki',
-        transform: parseDate,
-      },
+      'Date': {property: 'dateReleased', transform: parseDate},
+      'Date Posted': {property: 'datePosted', transform: parseDate},
+      'Date Added': {property: 'dateAddedToWiki', transform: parseDate},
 
       // Credits and contributors