diff options
Diffstat (limited to 'src/data/things/album.js')
-rw-r--r-- | src/data/things/album.js | 406 |
1 files changed, 220 insertions, 186 deletions
diff --git a/src/data/things/album.js b/src/data/things/album.js index ca25b7e2..45cadc12 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -75,7 +75,13 @@ export class Album extends Thing { TrackSection, WikiInfo, }) => ({ - // Update & expose + // > Update & expose - Internal relationships + + trackSections: thingList({ + class: input.value(TrackSection), + }), + + // > Update & expose - Identifying metadata name: name('Unnamed Album'), directory: directory(), @@ -96,109 +102,129 @@ export class Album extends Thing { alwaysReferenceTracksByDirectory: flag(false), suffixTrackDirectories: flag(false), - countTracksInArtistTotals: flag(true), - - color: color(), - urls: urls(), + bandcampAlbumIdentifier: simpleString(), + bandcampArtworkIdentifier: simpleString(), additionalNames: thingList({ class: input.value(AdditionalName), }), - bandcampAlbumIdentifier: simpleString(), - bandcampArtworkIdentifier: simpleString(), - date: simpleDate(), - trackArtDate: simpleDate(), dateAddedToWiki: simpleDate(), - coverArtDate: [ - withCoverArtDate({ - from: input.updateValue({ - validate: isDate, - }), - }), + // > Update & expose - Credits and contributors - exposeDependency({dependency: '#coverArtDate'}), - ], + artistContribs: contributionList({ + date: 'date', + artistProperty: input.value('albumArtistContributions'), + }), - coverArtFileExtension: [ + // > Update & expose - General configuration + + countTracksInArtistTotals: flag(true), + + hasTrackNumbers: flag(true), + isListedOnHomepage: flag(true), + isListedInGalleries: flag(true), + + // > Update & expose - General metadata + + color: color(), + + urls: urls(), + + // > Update & expose - Artworks + + coverArtworks: [ + // This works, lol, because this array describes `expose.transform` for + // the coverArtworks property, and compositions generally access the + // update value, not what's exposed by property access out in the open. + // There's no recursion going on here. exitWithoutArtwork({ contribs: 'coverArtistContribs', artworks: 'coverArtworks', + value: input.value([]), }), - fileExtension('jpg'), + constitutibleArtworkList.fromYAMLFieldSpec + .call(this, 'Cover Artwork'), ], - trackCoverArtFileExtension: fileExtension('jpg'), + coverArtistContribs: [ + withCoverArtDate(), - wallpaperFileExtension: [ - exitWithoutArtwork({ - contribs: 'wallpaperArtistContribs', - artwork: 'wallpaperArtwork', + contributionList({ + date: '#coverArtDate', + artistProperty: input.value('albumCoverArtistContributions'), }), - - fileExtension('jpg'), ], - bannerFileExtension: [ - exitWithoutArtwork({ - contribs: 'bannerArtistContribs', - artwork: 'bannerArtwork', + coverArtDate: [ + withCoverArtDate({ + from: input.updateValue({ + validate: isDate, + }), }), - fileExtension('jpg'), + exposeDependency({dependency: '#coverArtDate'}), ], - wallpaperStyle: [ + coverArtFileExtension: [ exitWithoutArtwork({ - contribs: 'wallpaperArtistContribs', - artwork: 'wallpaperArtwork', + contribs: 'coverArtistContribs', + artworks: 'coverArtworks', }), - simpleString(), + fileExtension('jpg'), ], - wallpaperParts: [ - // kinda nonsensical or at least unlikely lol, but y'know + coverArtDimensions: [ exitWithoutArtwork({ - contribs: 'wallpaperArtistContribs', - artwork: 'wallpaperArtwork', - value: input.value([]), + contribs: 'coverArtistContribs', + artworks: 'coverArtworks', }), - wallpaperParts(), + dimensions(), ], - bannerStyle: [ + artTags: [ exitWithoutArtwork({ - contribs: 'bannerArtistContribs', - artwork: 'bannerArtwork', + contribs: 'coverArtistContribs', + artworks: 'coverArtworks', + value: input.value([]), }), - simpleString(), + referenceList({ + class: input.value(ArtTag), + find: soupyFind.input('artTag'), + }), ], - coverArtDimensions: [ + referencedArtworks: [ exitWithoutArtwork({ contribs: 'coverArtistContribs', artworks: 'coverArtworks', + value: input.value([]), }), - dimensions(), + referencedArtworkList(), ], - trackDimensions: dimensions(), + trackCoverArtistContribs: contributionList({ + // May be null, indicating cover art was added for tracks on the date + // each track specifies, or else the track's own release date. + date: 'trackArtDate', - bannerDimensions: [ - exitWithoutArtwork({ - contribs: 'bannerArtistContribs', - artwork: 'bannerArtwork', - }), + // This is the "correct" value, but it gets overwritten - with the same + // value - regardless. + artistProperty: input.value('trackCoverArtistContributions'), + }), - dimensions(), - ], + trackArtDate: simpleDate(), + + trackCoverArtFileExtension: fileExtension('jpg'), + + trackDimensions: dimensions(), wallpaperArtwork: [ exitWithoutDependency({ @@ -211,121 +237,113 @@ export class Album extends Thing { .call(this, 'Wallpaper Artwork'), ], - bannerArtwork: [ - exitWithoutDependency({ - dependency: 'bannerArtistContribs', - mode: input.value('empty'), - value: input.value(null), - }), + wallpaperArtistContribs: [ + withCoverArtDate(), - constitutibleArtwork.fromYAMLFieldSpec - .call(this, 'Banner Artwork'), + contributionList({ + date: '#coverArtDate', + artistProperty: input.value('albumWallpaperArtistContributions'), + }), ], - coverArtworks: [ - // This works, lol, because this array describes `expose.transform` for - // the coverArtworks property, and compositions generally access the - // update value, not what's exposed by property access out in the open. - // There's no recursion going on here. + wallpaperFileExtension: [ exitWithoutArtwork({ - contribs: 'coverArtistContribs', - artworks: 'coverArtworks', - value: input.value([]), + contribs: 'wallpaperArtistContribs', + artwork: 'wallpaperArtwork', }), - constitutibleArtworkList.fromYAMLFieldSpec - .call(this, 'Cover Artwork'), + fileExtension('jpg'), ], - hasTrackNumbers: flag(true), - isListedOnHomepage: flag(true), - isListedInGalleries: flag(true), + wallpaperStyle: [ + exitWithoutArtwork({ + contribs: 'wallpaperArtistContribs', + artwork: 'wallpaperArtwork', + }), - commentary: thingList({ - class: input.value(CommentaryEntry), - }), + simpleString(), + ], - creditingSources: thingList({ - class: input.value(CreditingSourcesEntry), - }), + wallpaperParts: [ + // kinda nonsensical or at least unlikely lol, but y'know + exitWithoutArtwork({ + contribs: 'wallpaperArtistContribs', + artwork: 'wallpaperArtwork', + value: input.value([]), + }), - additionalFiles: thingList({ - class: input.value(AdditionalFile), - }), + wallpaperParts(), + ], - trackSections: thingList({ - class: input.value(TrackSection), - }), + bannerArtwork: [ + exitWithoutDependency({ + dependency: 'bannerArtistContribs', + mode: input.value('empty'), + value: input.value(null), + }), - artistContribs: contributionList({ - date: 'date', - artistProperty: input.value('albumArtistContributions'), - }), + constitutibleArtwork.fromYAMLFieldSpec + .call(this, 'Banner Artwork'), + ], - coverArtistContribs: [ + bannerArtistContribs: [ withCoverArtDate(), contributionList({ date: '#coverArtDate', - artistProperty: input.value('albumCoverArtistContributions'), + artistProperty: input.value('albumBannerArtistContributions'), }), ], - trackCoverArtistContribs: contributionList({ - // May be null, indicating cover art was added for tracks on the date - // each track specifies, or else the track's own release date. - date: 'trackArtDate', - - // This is the "correct" value, but it gets overwritten - with the same - // value - regardless. - artistProperty: input.value('trackCoverArtistContributions'), - }), + bannerFileExtension: [ + exitWithoutArtwork({ + contribs: 'bannerArtistContribs', + artwork: 'bannerArtwork', + }), - wallpaperArtistContribs: [ - withCoverArtDate(), + fileExtension('jpg'), + ], - contributionList({ - date: '#coverArtDate', - artistProperty: input.value('albumWallpaperArtistContributions'), + bannerDimensions: [ + exitWithoutArtwork({ + contribs: 'bannerArtistContribs', + artwork: 'bannerArtwork', }), - ], - bannerArtistContribs: [ - withCoverArtDate(), + dimensions(), + ], - contributionList({ - date: '#coverArtDate', - artistProperty: input.value('albumBannerArtistContributions'), + bannerStyle: [ + exitWithoutArtwork({ + contribs: 'bannerArtistContribs', + artwork: 'bannerArtwork', }), + + simpleString(), ], + // > Update & expose - Groups + groups: referenceList({ class: input.value(Group), find: soupyFind.input('group'), }), - artTags: [ - exitWithoutArtwork({ - contribs: 'coverArtistContribs', - artworks: 'coverArtworks', - value: input.value([]), - }), + // > Update & expose - Content entries - referenceList({ - class: input.value(ArtTag), - find: soupyFind.input('artTag'), - }), - ], + commentary: thingList({ + class: input.value(CommentaryEntry), + }), - referencedArtworks: [ - exitWithoutArtwork({ - contribs: 'coverArtistContribs', - artworks: 'coverArtworks', - value: input.value([]), - }), + creditingSources: thingList({ + class: input.value(CreditingSourcesEntry), + }), - referencedArtworkList(), - ], + // Additional files + + additionalFiles: thingList({ + class: input.value(AdditionalFile), + }), // Update only @@ -515,21 +533,14 @@ export class Album extends Thing { static [Thing.yamlDocumentSpec] = { fields: { - 'Album': {property: 'name'}, + // Identifying metadata + 'Album': {property: 'name'}, 'Directory': {property: 'directory'}, 'Directory Suffix': {property: 'directorySuffix'}, 'Suffix Track Directories': {property: 'suffixTrackDirectories'}, - 'Always Reference By Directory': {property: 'alwaysReferenceByDirectory'}, - 'Always Reference Tracks By Directory': { - property: 'alwaysReferenceTracksByDirectory', - }, - - 'Additional Names': { - property: 'additionalNames', - transform: parseAdditionalNames, - }, + 'Always Reference Tracks By Directory': {property: 'alwaysReferenceTracksByDirectory'}, 'Bandcamp Album ID': { property: 'bandcampAlbumIdentifier', @@ -541,20 +552,46 @@ export class Album extends Thing { transform: String, }, - 'Count Tracks In Artist Totals': {property: 'countInArtistTotals'}, + 'Additional Names': { + property: 'additionalNames', + transform: parseAdditionalNames, + }, 'Date': { property: 'date', transform: parseDate, }, - 'Color': {property: 'color'}, - 'URLs': {property: 'urls'}, + 'Date Added': { + property: 'dateAddedToWiki', + transform: parseDate, + }, + + // Credits and contributors + + 'Artists': { + property: 'artistContribs', + transform: parseContributors, + }, + + // General configuration + + 'Count Tracks In Artist Totals': {property: 'countInArtistTotals'}, 'Has Track Numbers': {property: 'hasTrackNumbers'}, 'Listed on Homepage': {property: 'isListedOnHomepage'}, 'Listed in Galleries': {property: 'isListedInGalleries'}, + // General metadata + + 'Color': {property: 'color'}, + + 'URLs': {property: 'urls'}, + + // Artworks + // (Note - this YAML section is deliberately ordered differently + // than the corresponding property descriptors.) + 'Cover Artwork': { property: 'coverArtworks', transform: @@ -598,27 +635,29 @@ export class Album extends Thing { }), }, + 'Cover Artists': { + property: 'coverArtistContribs', + transform: parseContributors, + }, + 'Cover Art Date': { property: 'coverArtDate', transform: parseDate, }, - 'Default Track Cover Art Date': { - property: 'trackArtDate', - transform: parseDate, + 'Cover Art Dimensions': { + property: 'coverArtDimensions', + transform: parseDimensions, }, - 'Date Added': { - property: 'dateAddedToWiki', - transform: parseDate, + 'Default Track Cover Artists': { + property: 'trackCoverArtistContribs', + transform: parseContributors, }, - 'Cover Art File Extension': {property: 'coverArtFileExtension'}, - 'Track Art File Extension': {property: 'trackCoverArtFileExtension'}, - - 'Cover Art Dimensions': { - property: 'coverArtDimensions', - transform: parseDimensions, + 'Default Track Cover Art Date': { + property: 'trackArtDate', + transform: parseDate, }, 'Default Track Dimensions': { @@ -631,8 +670,6 @@ export class Album extends Thing { transform: parseContributors, }, - 'Wallpaper File Extension': {property: 'wallpaperFileExtension'}, - 'Wallpaper Style': {property: 'wallpaperStyle'}, 'Wallpaper Parts': { @@ -645,14 +682,31 @@ export class Album extends Thing { transform: parseContributors, }, - 'Banner Style': {property: 'bannerStyle'}, - 'Banner File Extension': {property: 'bannerFileExtension'}, - 'Banner Dimensions': { property: 'bannerDimensions', transform: parseDimensions, }, + 'Banner Style': {property: 'bannerStyle'}, + + 'Cover Art File Extension': {property: 'coverArtFileExtension'}, + 'Track Art File Extension': {property: 'trackCoverArtFileExtension'}, + 'Wallpaper File Extension': {property: 'wallpaperFileExtension'}, + 'Banner File Extension': {property: 'bannerFileExtension'}, + + 'Art Tags': {property: 'artTags'}, + + 'Referenced Artworks': { + property: 'referencedArtworks', + transform: parseAnnotatedReferences, + }, + + // Groups + + 'Groups': {property: 'groups'}, + + // Content entries + 'Commentary': { property: 'commentary', transform: parseCommentary, @@ -663,36 +717,16 @@ export class Album extends Thing { transform: parseCreditingSources, }, + // Additional files + 'Additional Files': { property: 'additionalFiles', transform: parseAdditionalFiles, }, - 'Referenced Artworks': { - property: 'referencedArtworks', - transform: parseAnnotatedReferences, - }, + // Shenanigans 'Franchises': {ignore: true}, - - 'Artists': { - property: 'artistContribs', - transform: parseContributors, - }, - - 'Cover Artists': { - property: 'coverArtistContribs', - transform: parseContributors, - }, - - 'Default Track Cover Artists': { - property: 'trackCoverArtistContribs', - transform: parseContributors, - }, - - 'Groups': {property: 'groups'}, - 'Art Tags': {property: 'artTags'}, - 'Review Points': {ignore: true}, }, |