diff options
Diffstat (limited to 'src/data/things/artwork.js')
-rw-r--r-- | src/data/things/artwork.js | 87 |
1 files changed, 85 insertions, 2 deletions
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', |