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 --- .../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 +++ 7 files changed, 114 insertions(+), 9 deletions(-) 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/data/things/contrib') 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