« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things
diff options
context:
space:
mode:
Diffstat (limited to 'src/data/things')
-rw-r--r--src/data/things/album.js3
-rw-r--r--src/data/things/artist.js1
-rw-r--r--src/data/things/artwork.js87
-rw-r--r--src/data/things/flash.js1
-rw-r--r--src/data/things/track.js1
5 files changed, 91 insertions, 2 deletions
diff --git a/src/data/things/album.js b/src/data/things/album.js
index 8a25a8ac..c71b9820 100644
--- a/src/data/things/album.js
+++ b/src/data/things/album.js
@@ -516,6 +516,7 @@ export class Album extends Thing {
         property: 'coverArtworks',
         transform:
           parseArtwork({
+            thingProperty: 'coverArtworks',
             dimensionsFromThingProperty: 'coverArtDimensions',
             fileExtensionFromThingProperty: 'coverArtFileExtension',
             dateFromThingProperty: 'coverArtDate',
@@ -531,6 +532,7 @@ export class Album extends Thing {
         transform:
           parseArtwork({
             single: true,
+            thingProperty: 'bannerArtwork',
             dimensionsFromThingProperty: 'bannerDimensions',
             fileExtensionFromThingProperty: 'bannerFileExtension',
             dateFromThingProperty: 'date',
@@ -544,6 +546,7 @@ export class Album extends Thing {
         transform:
           parseArtwork({
             single: true,
+            thingProperty: 'wallpaperArtwork',
             dimensionsFromThingProperty: null,
             fileExtensionFromThingProperty: 'wallpaperFileExtension',
             dateFromThingProperty: 'date',
diff --git a/src/data/things/artist.js b/src/data/things/artist.js
index 87e1c563..9e329c74 100644
--- a/src/data/things/artist.js
+++ b/src/data/things/artist.js
@@ -213,6 +213,7 @@ export class Artist extends Thing {
         transform:
           parseArtwork({
             single: true,
+            thingProperty: 'avatarArtwork',
             fileExtensionFromThingProperty: 'avatarFileExtension',
           }),
       },
diff --git a/src/data/things/artwork.js b/src/data/things/artwork.js
index 2a97fd6d..3cdb07d0 100644
--- a/src/data/things/artwork.js
+++ b/src/data/things/artwork.js
@@ -24,7 +24,7 @@ import {
   parseDimensions,
 } from '#yaml';
 
-import {withPropertyFromObject} from '#composite/data';
+import {withIndexInList, withPropertyFromObject} from '#composite/data';
 
 import {
   exitWithoutDependency,
@@ -44,6 +44,7 @@ import {
 import {
   contentString,
   directory,
+  flag,
   reverseReferenceList,
   simpleString,
   soupyFind,
@@ -52,7 +53,13 @@ import {
   wikiData,
 } from '#composite/wiki-properties';
 
-import {withDate} from '#composite/things/artwork';
+import {
+  withAttachedArtwork,
+  withContainingArtworkList,
+  withContribsFromAttachedArtwork,
+  withPropertyFromAttachedArtwork,
+  withDate,
+} from '#composite/things/artwork';
 
 export class Artwork extends Thing {
   static [Thing.referenceType] = 'artwork';
@@ -68,6 +75,7 @@ export class Artwork extends Thing {
     }),
 
     thing: thing(),
+    thingProperty: simpleString(),
 
     label: simpleString(),
     source: contentString(),
@@ -152,6 +160,8 @@ export class Artwork extends Thing {
       }),
     ],
 
+    attachAbove: flag(false),
+
     artistContribsFromThingProperty: simpleString(),
     artistContribsArtistProperty: simpleString(),
 
@@ -169,6 +179,12 @@ export class Artwork extends Thing {
         mode: input.value('empty'),
       }),
 
+      withContribsFromAttachedArtwork(),
+
+      exposeDependencyOrContinue({
+        dependency: '#attachedArtwork.artistContribs',
+      }),
+
       exitWithoutDependency({
         dependency: 'artistContribsFromThingProperty',
         value: input.value([]),
@@ -207,6 +223,14 @@ export class Artwork extends Thing {
         mode: input.value('empty'),
       }),
 
+      withPropertyFromAttachedArtwork({
+        property: input.value('artTags'),
+      }),
+
+      exposeDependencyOrContinue({
+        dependency: '#attachedArtwork.artTags',
+      }),
+
       exitWithoutDependency({
         dependency: 'artTagsFromThingProperty',
         value: input.value([]),
@@ -302,6 +326,51 @@ export class Artwork extends Thing {
     referencedByArtworks: reverseReferenceList({
       reverse: soupyReverse.input('artworksWhichReference'),
     }),
+
+    isMainArtwork: [
+      withContainingArtworkList(),
+
+      exitWithoutDependency({
+        dependency: '#containingArtworkList',
+        value: input.value(null),
+      }),
+
+      {
+        dependencies: [input.myself(), '#containingArtworkList'],
+        compute: ({
+          [input.myself()]: myself,
+          ['#containingArtworkList']: list,
+        }) =>
+          list[0] === myself,
+      },
+    ],
+
+    mainArtwork: [
+      withContainingArtworkList(),
+
+      exitWithoutDependency({
+        dependency: '#containingArtworkList',
+        value: input.value(null),
+      }),
+
+      {
+        dependencies: ['#containingArtworkList'],
+        compute: ({'#containingArtworkList': list}) =>
+          list[0],
+      },
+    ],
+
+    attachedArtwork: [
+      withAttachedArtwork(),
+
+      exposeDependency({
+        dependency: '#attachedArtwork',
+      }),
+    ],
+
+    attachingArtworks: reverseReferenceList({
+      reverse: soupyReverse.input('artworksWhichAttach'),
+    }),
   });
 
   static [Thing.yamlDocumentSpec] = {
@@ -322,6 +391,8 @@ export class Artwork extends Thing {
         transform: parseDate,
       },
 
+      'Attach Above': {property: 'attachAbove'},
+
       'Artists': {
         property: 'artistContribs',
         transform: parseContributors,
@@ -358,6 +429,18 @@ export class Artwork extends Thing {
       date: ({artwork}) => artwork.date,
     },
 
+    artworksWhichAttach: {
+      bindTo: 'artworkData',
+
+      referencing: referencingArtwork =>
+        (referencingArtwork.attachAbove
+          ? [referencingArtwork]
+          : []),
+
+      referenced: referencingArtwork =>
+        [referencingArtwork.attachedArtwork],
+    },
+
     artworksWhichFeature: {
       bindTo: 'artworkData',
 
diff --git a/src/data/things/flash.js b/src/data/things/flash.js
index dac674dd..a0bcb523 100644
--- a/src/data/things/flash.js
+++ b/src/data/things/flash.js
@@ -230,6 +230,7 @@ export class Flash extends Thing {
         transform:
           parseArtwork({
             single: true,
+            thingProperty: 'coverArtwork',
             fileExtensionFromThingProperty: 'coverArtFileExtension',
             dimensionsFromThingProperty: 'coverArtDimensions',
           }),
diff --git a/src/data/things/track.js b/src/data/things/track.js
index ae7be170..57aaa90d 100644
--- a/src/data/things/track.js
+++ b/src/data/things/track.js
@@ -558,6 +558,7 @@ export class Track extends Thing {
         property: 'trackArtworks',
         transform:
           parseArtwork({
+            thingProperty: 'trackArtworks',
             dimensionsFromThingProperty: 'coverArtDimensions',
             fileExtensionFromThingProperty: 'coverArtFileExtension',
             dateFromThingProperty: 'coverArtDate',