diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2025-05-01 15:32:10 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2025-05-06 12:29:06 -0300 |
commit | 301f1466b9d0e2e04d5bed6b948cae6683d61224 (patch) | |
tree | 3c597a4abbf02b2f0d75a5be7fe9680c93684c49 /src/data/composite/things | |
parent | fb73207a7a94b994b9cbf471dfa5a46df911c1fe (diff) |
data: ContentEntry.sourceURLs
Diffstat (limited to 'src/data/composite/things')
-rw-r--r-- | src/data/composite/things/content/index.js | 1 | ||||
-rw-r--r-- | src/data/composite/things/content/withSourceURLs.js | 62 |
2 files changed, 63 insertions, 0 deletions
diff --git a/src/data/composite/things/content/index.js b/src/data/composite/things/content/index.js index 474c2af2..eeedcdcd 100644 --- a/src/data/composite/things/content/index.js +++ b/src/data/composite/things/content/index.js @@ -1,4 +1,5 @@ export {default as hasAnnotationPart} from './hasAnnotationPart.js'; export {default as withAnnotationParts} from './withAnnotationParts.js'; export {default as withSourceText} from './withSourceText.js'; +export {default as withSourceURLs} from './withSourceURLs.js'; export {default as withWebArchiveDate} from './withWebArchiveDate.js'; diff --git a/src/data/composite/things/content/withSourceURLs.js b/src/data/composite/things/content/withSourceURLs.js new file mode 100644 index 00000000..7c7b0ab2 --- /dev/null +++ b/src/data/composite/things/content/withSourceURLs.js @@ -0,0 +1,62 @@ +import {input, templateCompositeFrom} from '#composite'; +import {parseInput} from '#replacer'; + +import {raiseOutputWithoutDependency} from '#composite/control-flow'; +import {withFilteredList, withMappedList} from '#composite/data'; + +import withAnnotationParts from './withAnnotationParts.js'; + +export default templateCompositeFrom({ + annotation: `withSourceURLs`, + + outputs: ['#sourceURLs'], + + steps: () => [ + withAnnotationParts({ + mode: input.value('nodes'), + }), + + raiseOutputWithoutDependency({ + dependency: '#annotationParts', + output: input.value({'#sourceURLs': []}), + }), + + { + dependencies: ['#annotationParts'], + compute: (continuation, { + ['#annotationParts']: annotationParts, + }) => continuation({ + ['#firstPartWithExternalLink']: + annotationParts + .find(nodes => nodes + .some(node => node.type === 'external-link')), + }), + }, + + raiseOutputWithoutDependency({ + dependency: '#firstPartWithExternalLink', + output: input.value({'#sourceURLs': []}), + }), + + withMappedList({ + list: '#firstPartWithExternalLink', + map: input.value(node => node.type === 'external-link'), + }).outputs({ + '#mappedList': '#externalLinkFilter', + }), + + withFilteredList({ + list: '#firstPartWithExternalLink', + filter: '#externalLinkFilter', + }).outputs({ + '#filteredList': '#externalLinks', + }), + + withMappedList({ + list: '#externalLinks', + map: input.value(node => node.data.href), + }).outputs({ + '#mappedList': '#sourceURLs', + }), + ], +}); |