diff options
Diffstat (limited to 'src/data/things')
| -rw-r--r-- | src/data/things/Track.js | 31 | ||||
| -rw-r--r-- | src/data/things/album/Album.js | 36 |
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 |