diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-05-16 15:40:15 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-05-16 15:40:15 -0300 |
commit | 613522d60b16aedf6893ee3a7d4aeeb539b31230 (patch) | |
tree | 0364f9d92d8aa049b253616eeb9d3e27e72dc6cd /src | |
parent | 30fbe117d5a08b8e5f1963e91fbd930935cc5a58 (diff) |
data: AdditionalName
Diffstat (limited to 'src')
-rw-r--r-- | src/data/composite/wiki-properties/additionalNameList.js | 14 | ||||
-rw-r--r-- | src/data/composite/wiki-properties/index.js | 1 | ||||
-rw-r--r-- | src/data/things/additional-name.js | 21 | ||||
-rw-r--r-- | src/data/things/album.js | 6 | ||||
-rw-r--r-- | src/data/things/art-tag.js | 12 | ||||
-rw-r--r-- | src/data/things/flash.js | 6 | ||||
-rw-r--r-- | src/data/things/index.js | 2 | ||||
-rw-r--r-- | src/data/things/track.js | 6 | ||||
-rw-r--r-- | src/data/yaml.js | 18 | ||||
-rw-r--r-- | src/validators.js | 11 |
10 files changed, 59 insertions, 38 deletions
diff --git a/src/data/composite/wiki-properties/additionalNameList.js b/src/data/composite/wiki-properties/additionalNameList.js deleted file mode 100644 index c5971d4a..00000000 --- a/src/data/composite/wiki-properties/additionalNameList.js +++ /dev/null @@ -1,14 +0,0 @@ -// A list of additional names! These can be used for a variety of purposes, -// e.g. providing extra searchable titles, localizations, romanizations or -// original titles, and so on. Each item has a name and, optionally, a -// descriptive annotation. - -import {isAdditionalNameList} from '#validators'; - -export default function() { - return { - flags: {update: true, expose: true}, - update: {validate: isAdditionalNameList}, - expose: {transform: value => value ?? []}, - }; -} diff --git a/src/data/composite/wiki-properties/index.js b/src/data/composite/wiki-properties/index.js index b45eef13..9d7f1aed 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 additionalNameList} from './additionalNameList.js'; export {default as annotatedReferenceList} from './annotatedReferenceList.js'; export {default as color} from './color.js'; export {default as commentatorArtists} from './commentatorArtists.js'; diff --git a/src/data/things/additional-name.js b/src/data/things/additional-name.js new file mode 100644 index 00000000..b96fcd50 --- /dev/null +++ b/src/data/things/additional-name.js @@ -0,0 +1,21 @@ +import Thing from '#thing'; + +import {contentString, simpleString, thing} from '#composite/wiki-properties'; + +export class AdditionalName extends Thing { + static [Thing.getPropertyDescriptors] = ({}) => ({ + // Update & expose + + thing: thing(), + + name: contentString(), + annotation: contentString(), + }); + + static [Thing.yamlDocumentSpec] = { + fields: { + 'Name': {property: 'name'}, + 'Annotation': {property: 'annotation'}, + }, + }; +} diff --git a/src/data/things/album.js b/src/data/things/album.js index 2274c92a..7a7b387d 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 { - additionalNameList, color, commentatorArtists, constitutibleArtwork, @@ -69,6 +68,7 @@ export class Album extends Thing { static [Thing.getPropertyDescriptors] = ({ AdditionalFile, + AdditionalName, ArtTag, Artwork, CommentaryEntry, @@ -102,7 +102,9 @@ export class Album extends Thing { color: color(), urls: urls(), - additionalNames: additionalNameList(), + additionalNames: thingList({ + class: input.value(AdditionalName), + }), bandcampAlbumIdentifier: simpleString(), bandcampArtworkIdentifier: simpleString(), diff --git a/src/data/things/art-tag.js b/src/data/things/art-tag.js index 57e156ee..0ec1ff31 100644 --- a/src/data/things/art-tag.js +++ b/src/data/things/art-tag.js @@ -12,7 +12,6 @@ import {exitWithoutDependency, exposeDependency, exposeUpdateValueOrContinue} from '#composite/control-flow'; import { - additionalNameList, annotatedReferenceList, color, contentString, @@ -23,6 +22,7 @@ import { name, soupyFind, soupyReverse, + thingList, urls, wikiData, } from '#composite/wiki-properties'; @@ -34,7 +34,11 @@ export class ArtTag extends Thing { static [Thing.referenceType] = 'tag'; static [Thing.friendlyName] = `Art Tag`; - static [Thing.getPropertyDescriptors] = ({Album, Track}) => ({ + static [Thing.getPropertyDescriptors] = ({ + AdditionalName, + Album, + Track, + }) => ({ // Update & expose name: name('Unnamed Art Tag'), @@ -55,7 +59,9 @@ export class ArtTag extends Thing { }, ], - additionalNames: additionalNameList(), + additionalNames: thingList({ + class: input.value(AdditionalName), + }), description: contentString(), diff --git a/src/data/things/flash.js b/src/data/things/flash.js index a0bcb523..11b19ebc 100644 --- a/src/data/things/flash.js +++ b/src/data/things/flash.js @@ -27,7 +27,6 @@ import { } from '#composite/control-flow'; import { - additionalNameList, color, commentatorArtists, constitutibleArtwork, @@ -54,6 +53,7 @@ export class Flash extends Thing { static [Thing.referenceType] = 'flash'; static [Thing.getPropertyDescriptors] = ({ + AdditionalName, CommentaryEntry, CreditingSourcesEntry, Track, @@ -127,7 +127,9 @@ export class Flash extends Thing { urls: urls(), - additionalNames: additionalNameList(), + additionalNames: thingList({ + class: input.value(AdditionalName), + }), commentary: thingList({ class: input.value(CommentaryEntry), diff --git a/src/data/things/index.js b/src/data/things/index.js index 3fda2bd1..11307b50 100644 --- a/src/data/things/index.js +++ b/src/data/things/index.js @@ -10,6 +10,7 @@ import {withEntries} from '#sugar'; import Thing from '#thing'; import * as additionalFileClasses from './additional-file.js'; +import * as additionalNameClasses from './additional-name.js'; import * as albumClasses from './album.js'; import * as artTagClasses from './art-tag.js'; import * as artistClasses from './artist.js'; @@ -28,6 +29,7 @@ import * as wikiInfoClasses from './wiki-info.js'; const allClassLists = { 'additional-file.js': additionalFileClasses, + 'additional-name.js': additionalNameClasses, '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 8072c3cb..557ba2a7 100644 --- a/src/data/things/track.js +++ b/src/data/things/track.js @@ -38,7 +38,6 @@ import { } from '#composite/wiki-data'; import { - additionalNameList, commentatorArtists, constitutibleArtworkList, contentString, @@ -86,6 +85,7 @@ export class Track extends Thing { static [Thing.getPropertyDescriptors] = ({ AdditionalFile, + AdditionalName, Album, ArtTag, Artwork, @@ -134,7 +134,9 @@ export class Track extends Thing { class: input.value(Album), }), - additionalNames: additionalNameList(), + additionalNames: thingList({ + class: input.value(AdditionalName), + }), bandcampTrackIdentifier: simpleString(), bandcampArtworkIdentifier: simpleString(), diff --git a/src/data/yaml.js b/src/data/yaml.js index f3ba3f3b..45694237 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -619,23 +619,23 @@ export function parseAdditionalFiles(entries, {subdoc, AdditionalFile}) { }); } -export function parseAdditionalNames(entries) { +export function parseAdditionalNames(entries, {subdoc, AdditionalName}) { return parseArrayEntries(entries, item => { - if (typeof item === 'object' && typeof item['Name'] === 'string') - return { - name: item['Name'], - annotation: item['Annotation'] ?? null, - }; + if (typeof item === 'object') { + return subdoc(AdditionalName, item, {bindInto: 'thing'}); + } if (typeof item !== 'string') return item; const match = item.match(extractAccentRegex); if (!match) return item; - return { - name: match.groups.main, - annotation: match.groups.accent ?? null, + const document = { + ['Name']: match.groups.main, + ['Annotation']: match.groups.accent ?? null, }; + + return subdoc(AdditionalName, document, {bindInto: 'thing'}); }); } diff --git a/src/validators.js b/src/validators.js index 3756acb9..d45560fc 100644 --- a/src/validators.js +++ b/src/validators.js @@ -979,12 +979,13 @@ export function validateWikiData({ }; } -export const isAdditionalName = validateProperties({ - name: isContentString, - annotation: optional(isContentString), -}); +export function isAdditionalName() { + throw new Error('deprecated'); +} -export const isAdditionalNameList = validateArrayItems(isAdditionalName); +export function isAdditionalNameList() { + throw new Error('deprecated'); +} // Compositional utilities |