From 8461875e45c33fdec5a904b8137a9342bafc6c46 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 16 May 2025 11:17:37 -0300 Subject: data: AdditionalFile --- src/data/things/additional-file.js | 36 ++++++++++++++++++++++++++++++++++++ src/data/things/album.js | 6 ++++-- src/data/things/index.js | 2 ++ src/data/things/track.js | 16 ++++++++++++---- 4 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 src/data/things/additional-file.js (limited to 'src/data/things') 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), -- cgit 1.3.0-6-gf8a5