From ec0dd58271eabd0dd9fa12fbf51f5b46b8ceb014 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Tue, 21 Mar 2023 23:28:38 -0300 Subject: data steps: album additional files list This is WIP but seems to be working! Pretty big test of the new html.template system, which needed some extension here. --- .../generateAlbumAdditionalFilesList.js | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/content/dependencies/generateAlbumAdditionalFilesList.js (limited to 'src/content/dependencies/generateAlbumAdditionalFilesList.js') diff --git a/src/content/dependencies/generateAlbumAdditionalFilesList.js b/src/content/dependencies/generateAlbumAdditionalFilesList.js new file mode 100644 index 00000000..d45fb583 --- /dev/null +++ b/src/content/dependencies/generateAlbumAdditionalFilesList.js @@ -0,0 +1,55 @@ +export default { + contentDependencies: [ + 'generateAdditionalFilesList', + 'linkAlbumAdditionalFile', + ], + + extraDependencies: [ + 'getSizeOfAdditionalFile', + 'urls', + ], + + data(album, {fileSize = true} = {}) { + return { + albumDirectory: album.directory, + fileLocations: album.additionalFiles.flatMap(({files}) => files), + showFileSizes: fileSize, + }; + }, + + relations(relation, album, {fileSize = true} = {}) { + return { + additionalFilesList: + relation('generateAdditionalFilesList', album.additionalFiles, { + fileSize, + }), + + additionalFileLinks: + Object.fromEntries( + album.additionalFiles + .flatMap(({files}) => files) + .map(file => [ + file, + relation('linkAlbumAdditionalFile', album, file), + ])), + }; + }, + + generate(data, relations, { + getSizeOfAdditionalFile, + urls, + }) { + return relations.additionalFilesList + .slot('additionalFileLinks', relations.additionalFileLinks) + .slot('additionalFileSizes', + Object.fromEntries(data.fileLocations.map(file => [ + file, + (data.showFileSizes + ? getSizeOfAdditionalFile( + urls + .from('media.root') + .to('media.albumAdditionalFile', data.albumDirectory, file)) + : 0), + ]))); + }, +}; -- cgit 1.3.0-6-gf8a5