From df244f21af6078f9456d8281da3a19e7c1e1a2f3 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 26 Jan 2026 17:49:33 -0400 Subject: data: Contribution.annotationFront, is{Featuring,EditsForWiki}Credit --- .../things/contribution/hasAnnotationFront.js | 29 ++++++++++++ src/data/composite/things/contribution/index.js | 1 + src/data/things/album/Album.js | 4 ++ .../contrib/AlbumAssetArtworkArtistContribution.js | 20 ++++++++ .../contrib/AlbumBannerArtistContribution.js | 12 +++++ .../contrib/AlbumWallpaperArtistContribution.js | 12 +++++ .../things/contrib/ArtworkArtistContribution.js | 12 +++++ src/data/things/contrib/Contribution.js | 53 ++++++++++++++++++---- .../things/contrib/MusicalArtistContribution.js | 8 ++++ src/data/things/contrib/index.js | 6 +++ 10 files changed, 148 insertions(+), 9 deletions(-) create mode 100644 src/data/composite/things/contribution/hasAnnotationFront.js create mode 100644 src/data/things/contrib/AlbumAssetArtworkArtistContribution.js create mode 100644 src/data/things/contrib/AlbumBannerArtistContribution.js create mode 100644 src/data/things/contrib/AlbumWallpaperArtistContribution.js create mode 100644 src/data/things/contrib/ArtworkArtistContribution.js (limited to 'src') diff --git a/src/data/composite/things/contribution/hasAnnotationFront.js b/src/data/composite/things/contribution/hasAnnotationFront.js new file mode 100644 index 00000000..6969268b --- /dev/null +++ b/src/data/composite/things/contribution/hasAnnotationFront.js @@ -0,0 +1,29 @@ +import {input, templateCompositeFrom} from '#composite'; + +import {exitWithoutDependency} from '#composite/control-flow'; + +export default templateCompositeFrom({ + annotation: `hasAnnotationFront`, + + inputs: { + front: input({type: 'string'}), + }, + + compose: false, + + steps: () => [ + exitWithoutDependency({ + dependency: 'annotationFront', + value: input.value(false), + }), + + { + dependencies: ['annotationFront', input('front')], + compute: ({ + ['annotationFront']: present, + [input('front')]: expected, + }) => + present === expected, + }, + ], +}); diff --git a/src/data/composite/things/contribution/index.js b/src/data/composite/things/contribution/index.js index 2bbf994d..b03ebfd2 100644 --- a/src/data/composite/things/contribution/index.js +++ b/src/data/composite/things/contribution/index.js @@ -1,3 +1,4 @@ +export {default as hasAnnotationFront} from './hasAnnotationFront.js'; export {default as inheritFromContributionPresets} from './inheritFromContributionPresets.js'; export {default as withContainingReverseContributionList} from './withContainingReverseContributionList.js'; export {default as withContributionContext} from './withContributionContext.js'; diff --git a/src/data/things/album/Album.js b/src/data/things/album/Album.js index ebec5444..48d52223 100644 --- a/src/data/things/album/Album.js +++ b/src/data/things/album/Album.js @@ -69,6 +69,8 @@ export class Album extends Thing { AdditionalFile, AdditionalName, AlbumArtistContribution, + AlbumBannerArtistContribution, + AlbumWallpaperArtistContribution, ArtTag, Artwork, CommentaryEntry, @@ -266,6 +268,7 @@ export class Album extends Thing { ], wallpaperArtistContribs: contributionList({ + class: input.value(AlbumWallpaperArtistContribution), date: 'coverArtDate', artistProperty: input.value('albumWallpaperArtistContributions'), }), @@ -308,6 +311,7 @@ export class Album extends Thing { ], bannerArtistContribs: contributionList({ + class: input.value(AlbumBannerArtistContribution), date: 'coverArtDate', artistProperty: input.value('albumBannerArtistContributions'), }), diff --git a/src/data/things/contrib/AlbumAssetArtworkArtistContribution.js b/src/data/things/contrib/AlbumAssetArtworkArtistContribution.js new file mode 100644 index 00000000..a178ca13 --- /dev/null +++ b/src/data/things/contrib/AlbumAssetArtworkArtistContribution.js @@ -0,0 +1,20 @@ +import {V} from '#composite'; +import Thing from '#thing'; + +import {exposeConstant} from '#composite/control-flow'; + +import {hasAnnotationFront} from '#composite/things/contribution'; + +import {ArtworkArtistContribution} from './ArtworkArtistContribution.js'; + +export class AlbumAssetArtworkArtistContribution extends ArtworkArtistContribution { + static [Thing.getPropertyDescriptors] = () => ({ + isAlbumAssetArtworkArtistContribution: exposeConstant(V(true)), + + recognizedAnnotationFronts: + exposeConstant(V(['edits for wiki'])), + + isEditsForWikiCredit: + hasAnnotationFront(V('edits for wiki')), + }); +} diff --git a/src/data/things/contrib/AlbumBannerArtistContribution.js b/src/data/things/contrib/AlbumBannerArtistContribution.js new file mode 100644 index 00000000..16f1c9bb --- /dev/null +++ b/src/data/things/contrib/AlbumBannerArtistContribution.js @@ -0,0 +1,12 @@ +import {V} from '#composite'; +import Thing from '#thing'; + +import {exposeConstant} from '#composite/control-flow'; + +import {AlbumAssetArtworkArtistContribution} from './AlbumAssetArtworkArtistContribution.js'; + +export class AlbumBannerArtistContribution extends AlbumAssetArtworkArtistContribution { + static [Thing.getPropertyDescriptors] = () => ({ + isAlbumBannerArtistContribution: exposeConstant(V(true)), + }); +} diff --git a/src/data/things/contrib/AlbumWallpaperArtistContribution.js b/src/data/things/contrib/AlbumWallpaperArtistContribution.js new file mode 100644 index 00000000..acd29cf8 --- /dev/null +++ b/src/data/things/contrib/AlbumWallpaperArtistContribution.js @@ -0,0 +1,12 @@ +import {V} from '#composite'; +import Thing from '#thing'; + +import {exposeConstant} from '#composite/control-flow'; + +import {AlbumAssetArtworkArtistContribution} from './AlbumAssetArtworkArtistContribution.js'; + +export class AlbumWallpaperArtistContribution extends AlbumAssetArtworkArtistContribution { + static [Thing.getPropertyDescriptors] = () => ({ + isAlbumWallpaperArtistContribution: exposeConstant(V(true)), + }); +} diff --git a/src/data/things/contrib/ArtworkArtistContribution.js b/src/data/things/contrib/ArtworkArtistContribution.js new file mode 100644 index 00000000..5b1b68d8 --- /dev/null +++ b/src/data/things/contrib/ArtworkArtistContribution.js @@ -0,0 +1,12 @@ +import {V} from '#composite'; +import Thing from '#thing'; + +import {exposeConstant} from '#composite/control-flow'; + +import {Contribution} from './Contribution.js'; + +export class ArtworkArtistContribution extends Contribution { + static [Thing.getPropertyDescriptors] = () => ({ + isArtworkArtistContribution: exposeConstant(V(true)), + }); +} diff --git a/src/data/things/contrib/Contribution.js b/src/data/things/contrib/Contribution.js index 4048709b..57a5c301 100644 --- a/src/data/things/contrib/Contribution.js +++ b/src/data/things/contrib/Contribution.js @@ -121,16 +121,51 @@ export class Contribution extends Thing { isContribution: exposeConstant(V(true)), - annotationParts: { - flags: {expose: true}, - expose: { - dependencies: ['annotation'], - compute: ({annotation}) => - (annotation - ? annotation.split(',').map(part => part.trim()) - : []), + recognizedAnnotationFronts: exposeConstant(V([])), + + annotationFront: [ + exitWithoutDependency('annotation'), + + { + dependencies: ['recognizedAnnotationFronts', 'annotation'], + compute: ({recognizedAnnotationFronts, annotation}) => + recognizedAnnotationFronts + .find(front => + annotation.startsWith(front) && ( + annotation === front || + annotation.at(front.length) === ':' || + annotation.at(front.length) === ',' + )) ?? null, }, - }, + ], + + annotationBack: [ + exitWithoutDependency('annotation'), + + exitWithoutDependency({ + dependency: 'annotationFront', + value: 'annotation', + }), + + { + dependencies: ['annotation', 'annotationFront'], + compute: ({annotation, annotationFront}) => + annotation.slice(annotationFront.length + 1).trim() + || null, + }, + ], + + annotationParts: [ + exitWithoutDependency('annotationBack', V([])), + + { + dependencies: ['annotationBack'], + compute: ({annotationBack}) => + annotationBack + .split(',') + .map(part => part.trim()), + }, + ], context: [ withContributionContext(), diff --git a/src/data/things/contrib/MusicalArtistContribution.js b/src/data/things/contrib/MusicalArtistContribution.js index b4f8d370..df26850b 100644 --- a/src/data/things/contrib/MusicalArtistContribution.js +++ b/src/data/things/contrib/MusicalArtistContribution.js @@ -3,10 +3,18 @@ import Thing from '#thing'; import {exposeConstant} from '#composite/control-flow'; +import {hasAnnotationFront} from '#composite/things/contribution'; + import {Contribution} from './Contribution.js'; export class MusicalArtistContribution extends Contribution { static [Thing.getPropertyDescriptors] = () => ({ isMusicalArtistContribution: exposeConstant(V(true)), + + recognizedAnnotationFronts: + exposeConstant(V(['featuring'])), + + isFeaturingCredit: + hasAnnotationFront(V('featuring')), }); } diff --git a/src/data/things/contrib/index.js b/src/data/things/contrib/index.js index a0629bdf..187ddb2c 100644 --- a/src/data/things/contrib/index.js +++ b/src/data/things/contrib/index.js @@ -3,3 +3,9 @@ export * from './Contribution.js'; export * from './MusicalArtistContribution.js'; export * from './AlbumArtistContribution.js'; export * from './TrackArtistContribution.js'; + +export * from './ArtworkArtistContribution.js'; + +export * from './AlbumAssetArtworkArtistContribution.js'; +export * from './AlbumBannerArtistContribution.js'; +export * from './AlbumWallpaperArtistContribution.js'; -- cgit 1.3.0-6-gf8a5