diff options
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/composite/things/art-tag/index.js | 1 | ||||
-rw-r--r-- | src/data/composite/things/art-tag/withAncestorArtTagBaobabTree.js | 46 | ||||
-rw-r--r-- | src/data/things/art-tag.js | 8 | ||||
-rw-r--r-- | src/data/things/language.js | 1 |
4 files changed, 55 insertions, 1 deletions
diff --git a/src/data/composite/things/art-tag/index.js b/src/data/composite/things/art-tag/index.js index 0c365ce2..bbd38293 100644 --- a/src/data/composite/things/art-tag/index.js +++ b/src/data/composite/things/art-tag/index.js @@ -1 +1,2 @@ export {default as withAllDescendantArtTags} from './withAllDescendantArtTags.js'; +export {default as withAncestorArtTagBaobabTree} from './withAncestorArtTagBaobabTree.js'; diff --git a/src/data/composite/things/art-tag/withAncestorArtTagBaobabTree.js b/src/data/composite/things/art-tag/withAncestorArtTagBaobabTree.js new file mode 100644 index 00000000..e084a42b --- /dev/null +++ b/src/data/composite/things/art-tag/withAncestorArtTagBaobabTree.js @@ -0,0 +1,46 @@ +// Gets all the art tags which are ancestors of this one as a "baobab tree" - +// what you'd typically think of as roots are all up in the air! Since this +// really is backwards from the way that the art tag tree is written in data, +// chances are pretty good that there will be many of the exact same "leaf" +// nodes - art tags which don't themselves have any ancestors. In the actual +// data structure, each node is a Map, with keys for each ancestor and values +// for each ancestor's own baobab (thus a branching structure, just like normal +// trees in this regard). + +import {input, templateCompositeFrom} from '#composite'; + +import {raiseOutputWithoutDependency} from '#composite/control-flow'; +import {withReverseReferenceList} from '#composite/wiki-data'; +import {soupyReverse} from '#composite/wiki-properties'; + +export default templateCompositeFrom({ + annotation: `withAncestorArtTagBaobabTree`, + + outputs: ['#ancestorArtTagBaobabTree'], + + steps: () => [ + withReverseReferenceList({ + reverse: soupyReverse.input('artTagsWhichDirectlyAncestor'), + }).outputs({ + ['#reverseReferenceList']: '#directAncestorArtTags', + }), + + raiseOutputWithoutDependency({ + dependency: '#directAncestorArtTags', + mode: input.value('empty'), + output: input.value({'#ancestorArtTagBaobabTree': new Map()}), + }), + + { + dependencies: ['#directAncestorArtTags'], + compute: (continuation, { + ['#directAncestorArtTags']: directAncestorArtTags, + }) => continuation({ + ['#ancestorArtTagBaobabTree']: + new Map( + directAncestorArtTags + .map(artTag => [artTag, artTag.ancestorArtTagBaobabTree])), + }), + }, + ], +}); diff --git a/src/data/things/art-tag.js b/src/data/things/art-tag.js index 60a4340d..f023eb76 100644 --- a/src/data/things/art-tag.js +++ b/src/data/things/art-tag.js @@ -24,7 +24,8 @@ import { wikiData, } from '#composite/wiki-properties'; -import {withAllDescendantArtTags} from '#composite/things/art-tag'; +import {withAllDescendantArtTags, withAncestorArtTagBaobabTree} + from '#composite/things/art-tag'; export class ArtTag extends Thing { static [Thing.referenceType] = 'tag'; @@ -113,6 +114,11 @@ export class ArtTag extends Thing { directAncestorArtTags: reverseReferenceList({ reverse: soupyReverse.input('artTagsWhichDirectlyAncestor'), }), + + ancestorArtTagBaobabTree: [ + withAncestorArtTagBaobabTree(), + exposeDependency({dependency: '#ancestorArtTagBaobabTree'}), + ], }); static [Thing.findSpecs] = { diff --git a/src/data/things/language.js b/src/data/things/language.js index 800c4471..98ce12c6 100644 --- a/src/data/things/language.js +++ b/src/data/things/language.js @@ -896,6 +896,7 @@ const countHelper = (stringKey, optionName = stringKey) => Object.assign(Language.prototype, { countAdditionalFiles: countHelper('additionalFiles', 'files'), countAlbums: countHelper('albums'), + countArtTags: countHelper('artTags', 'tags'), countArtworks: countHelper('artworks'), countCommentaryEntries: countHelper('commentaryEntries', 'entries'), countContributions: countHelper('contributions'), |