diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-05-16 11:17:37 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-05-16 11:17:55 -0300 |
commit | 8461875e45c33fdec5a904b8137a9342bafc6c46 (patch) | |
tree | b3d6baae1b1d72abaacf52ebf07d9ff3ec515df2 /src/data | |
parent | 1e700dfcc1e31376e1a6809f3c5841560e1e16d7 (diff) |
data: AdditionalFile
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/composite/wiki-properties/additionalFiles.js | 30 | ||||
-rw-r--r-- | src/data/composite/wiki-properties/index.js | 1 | ||||
-rw-r--r-- | src/data/things/additional-file.js | 36 | ||||
-rw-r--r-- | src/data/things/album.js | 6 | ||||
-rw-r--r-- | src/data/things/index.js | 2 | ||||
-rw-r--r-- | src/data/things/track.js | 16 | ||||
-rw-r--r-- | src/data/yaml.js | 8 |
7 files changed, 56 insertions, 43 deletions
diff --git a/src/data/composite/wiki-properties/additionalFiles.js b/src/data/composite/wiki-properties/additionalFiles.js deleted file mode 100644 index 6760527a..00000000 --- a/src/data/composite/wiki-properties/additionalFiles.js +++ /dev/null @@ -1,30 +0,0 @@ -// This is a somewhat more involved data structure - it's for additional -// or "bonus" files associated with albums or tracks (or anything else). -// It's got this form: -// -// [ -// {title: 'Booklet', files: ['Booklet.pdf']}, -// { -// title: 'Wallpaper', -// description: 'Cool Wallpaper!', -// files: ['1440x900.png', '1920x1080.png'] -// }, -// {title: 'Alternate Covers', description: null, files: [...]}, -// ... -// ] -// - -import {isAdditionalFileList} from '#validators'; - -// TODO: Not templateCompositeFrom. - -export default function() { - return { - flags: {update: true, expose: true}, - update: {validate: isAdditionalFileList}, - expose: { - transform: (additionalFiles) => - additionalFiles ?? [], - }, - }; -} diff --git a/src/data/composite/wiki-properties/index.js b/src/data/composite/wiki-properties/index.js index d5e7657e..b45eef13 100644 --- a/src/data/composite/wiki-properties/index.js +++ b/src/data/composite/wiki-properties/index.js @@ -3,7 +3,6 @@ // Entries here may depend on entries in #composite/control-flow, // #composite/data, and #composite/wiki-data. -export {default as additionalFiles} from './additionalFiles.js'; export {default as additionalNameList} from './additionalNameList.js'; export {default as annotatedReferenceList} from './annotatedReferenceList.js'; export {default as color} from './color.js'; diff --git a/src/data/things/additional-file.js b/src/data/things/additional-file.js new file mode 100644 index 00000000..3bf3dce9 --- /dev/null +++ b/src/data/things/additional-file.js @@ -0,0 +1,36 @@ +import {input} from '#composite'; +import Thing from '#thing'; +import {isString, validateArrayItems} from '#validators'; + +import {contentString, simpleString} from '#composite/wiki-properties'; + +import {exposeConstant, exposeUpdateValueOrContinue} + from '#composite/control-flow'; + +export class AdditionalFile extends Thing { + static [Thing.getPropertyDescriptors] = ({}) => ({ + // Update & expose + + title: simpleString(), + + description: contentString(), + + files: [ + exposeUpdateValueOrContinue({ + validate: input.value(validateArrayItems(isString)), + }), + + exposeConstant({ + value: input.value(null), + }), + ], + }); + + static [Thing.yamlDocumentSpec] = { + fields: { + 'Title': {property: 'title'}, + 'Description': {property: 'description'}, + 'Files': {property: 'files'}, + }, + }; +} diff --git a/src/data/things/album.js b/src/data/things/album.js index c71b9820..37d01233 100644 --- a/src/data/things/album.js +++ b/src/data/things/album.js @@ -33,7 +33,6 @@ import {exitWithoutContribs, withDirectory, withCoverArtDate} from '#composite/wiki-data'; import { - additionalFiles, additionalNameList, color, commentatorArtists, @@ -69,6 +68,7 @@ export class Album extends Thing { static [Thing.referenceType] = 'album'; static [Thing.getPropertyDescriptors] = ({ + AdditionalFile, ArtTag, Artwork, CommentaryEntry, @@ -216,7 +216,9 @@ export class Album extends Thing { class: input.value(CreditingSourcesEntry), }), - additionalFiles: additionalFiles(), + additionalFiles: thingList({ + class: input.value(AdditionalFile), + }), trackSections: thingList({ class: input.value(TrackSection), diff --git a/src/data/things/index.js b/src/data/things/index.js index b832ab75..3fda2bd1 100644 --- a/src/data/things/index.js +++ b/src/data/things/index.js @@ -9,6 +9,7 @@ import * as serialize from '#serialize'; import {withEntries} from '#sugar'; import Thing from '#thing'; +import * as additionalFileClasses from './additional-file.js'; import * as albumClasses from './album.js'; import * as artTagClasses from './art-tag.js'; import * as artistClasses from './artist.js'; @@ -26,6 +27,7 @@ import * as trackClasses from './track.js'; import * as wikiInfoClasses from './wiki-info.js'; const allClassLists = { + 'additional-file.js': additionalFileClasses, 'album.js': albumClasses, 'art-tag.js': artTagClasses, 'artist.js': artistClasses, diff --git a/src/data/things/track.js b/src/data/things/track.js index 57aaa90d..2c5e4fd7 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -38,7 +38,6 @@ import { } from '#composite/wiki-data'; import { - additionalFiles, additionalNameList, commentatorArtists, constitutibleArtworkList, @@ -86,6 +85,7 @@ export class Track extends Thing { static [Thing.referenceType] = 'track'; static [Thing.getPropertyDescriptors] = ({ + AdditionalFile, Album, ArtTag, Artwork, @@ -240,9 +240,17 @@ export class Track extends Thing { }), ], - additionalFiles: additionalFiles(), - sheetMusicFiles: additionalFiles(), - midiProjectFiles: additionalFiles(), + additionalFiles: thingList({ + class: input.value(AdditionalFile), + }), + + sheetMusicFiles: thingList({ + class: input.value(AdditionalFile), + }), + + midiProjectFiles: thingList({ + class: input.value(AdditionalFile), + }), mainReleaseTrack: singleReference({ class: input.value(Track), diff --git a/src/data/yaml.js b/src/data/yaml.js index 6abb3fb7..80fb2e87 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -611,15 +611,11 @@ export function parseContributors(entries) { }); } -export function parseAdditionalFiles(entries) { +export function parseAdditionalFiles(entries, {subdoc, AdditionalFile}) { return parseArrayEntries(entries, item => { if (typeof item !== 'object') return item; - return { - title: item['Title'], - description: item['Description'] ?? null, - files: item['Files'], - }; + return subdoc(AdditionalFile, item); }); } |