diff options
Diffstat (limited to 'src')
4 files changed, 85 insertions, 96 deletions
diff --git a/src/content/dependencies/generateAlbumAdditionalFilesList.js b/src/content/dependencies/generateAlbumAdditionalFilesList.js index 9fbd1553..07441f24 100644 --- a/src/content/dependencies/generateAlbumAdditionalFilesList.js +++ b/src/content/dependencies/generateAlbumAdditionalFilesList.js @@ -5,7 +5,7 @@ export default { 'generateAdditionalFilesList', 'generateAdditionalFilesListChunk', 'generateAdditionalFilesListChunkItem', - 'linkAlbumAdditionalFile', + 'linkAdditionalFile', 'transformContent', ], @@ -21,18 +21,17 @@ export default { chunkDescriptions: additionalFiles - .map(({description}) => - relation('transformContent', description)), + .map(file => relation('transformContent', file.description)), chunkItems: additionalFiles - .map(({filenames}) => filenames + .map(file => file.paths .map(() => relation('generateAdditionalFilesListChunkItem'))), chunkItemFileLinks: additionalFiles - .map(({filenames}) => filenames - .map(filename => relation('linkAlbumAdditionalFile', album, filename))), + .map(file => file.filenames + .map(filename => relation('linkAdditionalFile', file, filename))), }), data: (album, additionalFiles) => ({ @@ -40,11 +39,11 @@ export default { chunkTitles: additionalFiles - .map(({title}) => title), + .map(file => file.title), - chunkItemFilenames: + chunkItemPaths: additionalFiles - .map(({filenames}) => filenames), + .map(file => file.paths), }), slots: { @@ -71,13 +70,13 @@ export default { stitchArrays({ items: relations.chunkItems, fileLinks: relations.chunkItemFileLinks, - filenames: data.chunkItemFilenames, - }).map(({items, fileLinks, filenames}) => + paths: data.chunkItemPaths, + }).map(({items, fileLinks, paths}) => stitchArrays({ item: items, fileLink: fileLinks, - filename: filenames, - }).map(({item, fileLink, filename}) => + path: paths, + }).map(({item, fileLink, path}) => item.slots({ fileLink: fileLink, fileSize: @@ -85,7 +84,7 @@ export default { ? getSizeOfMediaFile( urls .from('media.root') - .to('media.albumAdditionalFile', data.albumDirectory, filename)) + .to(...path)) : 0), }))), }), diff --git a/src/content/dependencies/linkAdditionalFile.js b/src/content/dependencies/linkAdditionalFile.js new file mode 100644 index 00000000..a8a940b1 --- /dev/null +++ b/src/content/dependencies/linkAdditionalFile.js @@ -0,0 +1,29 @@ +export default { + contentDependencies: ['linkTemplate'], + + query: (file, filename) => ({ + index: + file.filenames.indexOf(filename), + }), + + relations: (relation, _query, _file, _filename) => ({ + linkTemplate: + relation('linkTemplate'), + }), + + data: (query, file, filename) => ({ + filename, + + // Kinda jank, but eh. + path: + (query.index >= 0 + ? file.paths.at(query.index) + : null), + }), + + generate: (data, relations) => + relations.linkTemplate.slots({ + path: data.path, + content: data.filename, + }), +}; diff --git a/src/content/dependencies/linkAlbumAdditionalFile.js b/src/content/dependencies/linkAlbumAdditionalFile.js deleted file mode 100644 index 527133db..00000000 --- a/src/content/dependencies/linkAlbumAdditionalFile.js +++ /dev/null @@ -1,24 +0,0 @@ -export default { - contentDependencies: ['linkTemplate'], - - relations(relation) { - return { - linkTemplate: relation('linkTemplate'), - }; - }, - - data(album, filename) { - return { - albumDirectory: album.directory, - filename, - }; - }, - - generate(data, relations) { - return relations.linkTemplate - .slots({ - path: ['media.albumAdditionalFile', data.albumDirectory, data.filename], - content: data.filename, - }); - }, -}; diff --git a/src/content/dependencies/listAllAdditionalFilesTemplate.js b/src/content/dependencies/listAllAdditionalFilesTemplate.js index 9b890526..90be6440 100644 --- a/src/content/dependencies/listAllAdditionalFilesTemplate.js +++ b/src/content/dependencies/listAllAdditionalFilesTemplate.js @@ -7,7 +7,7 @@ export default { 'generateListAllAdditionalFilesChunk', 'linkAlbum', 'linkTrack', - 'linkAlbumAdditionalFile', + 'linkAdditionalFile', ], extraDependencies: ['html', 'language', 'wikiData'], @@ -28,63 +28,37 @@ export default { // as though they do implement those fields, but don't have any // additional files of that type. - const albumAdditionalFileObjects = + const albumAdditionalFileLists = albums .map(album => album[property] ?? []); - const trackAdditionalFileObjects = + const trackAdditionalFileLists = tracks .map(byAlbum => byAlbum .map(track => track[property] ?? [])); // Filter out tracks that don't have any additional files. - stitchArrays({tracks, trackAdditionalFileObjects}) - .forEach(({tracks, trackAdditionalFileObjects}) => { - filterMultipleArrays(tracks, trackAdditionalFileObjects, - (track, trackAdditionalFileObjects) => !empty(trackAdditionalFileObjects)); + stitchArrays({tracks, trackAdditionalFileLists}) + .forEach(({tracks, trackAdditionalFileLists}) => { + filterMultipleArrays(tracks, trackAdditionalFileLists, + (track, trackAdditionalFileLists) => !empty(trackAdditionalFileLists)); }); // Filter out albums that don't have any tracks, // nor any additional files of their own. - filterMultipleArrays(albums, albumAdditionalFileObjects, tracks, trackAdditionalFileObjects, - (album, albumAdditionalFileObjects, tracks, trackAdditionalFileObjects) => - !empty(albumAdditionalFileObjects) || - !empty(trackAdditionalFileObjects)); - - // Map additional file objects into titles and lists of file names. - - const albumAdditionalFileTitles = - albumAdditionalFileObjects - .map(byAlbum => byAlbum - .map(({title}) => title)); - - const albumAdditionalFileFilenames = - albumAdditionalFileObjects - .map(byAlbum => byAlbum - .map(({filenames}) => filenames)); - - const trackAdditionalFileTitles = - trackAdditionalFileObjects - .map(byAlbum => byAlbum - .map(byTrack => byTrack - .map(({title}) => title))); - - const trackAdditionalFileFilenames = - trackAdditionalFileObjects - .map(byAlbum => byAlbum - .map(byTrack => byTrack - .map(({filenames}) => filenames))); + filterMultipleArrays(albums, albumAdditionalFileLists, tracks, trackAdditionalFileLists, + (album, albumAdditionalFileLists, tracks, trackAdditionalFileLists) => + !empty(albumAdditionalFileLists) || + !empty(trackAdditionalFileLists)); return { spec, albums, tracks, - albumAdditionalFileTitles, - albumAdditionalFileFilenames, - trackAdditionalFileTitles, - trackAdditionalFileFilenames, + albumAdditionalFileLists, + trackAdditionalFileLists, }; }, @@ -111,30 +85,41 @@ export default { .map(() => relation('generateListAllAdditionalFilesChunk'))), albumAdditionalFileLinks: - stitchArrays({ - album: query.albums, - filenames: query.albumAdditionalFileFilenames, - }).map(({album, filenames: byAlbum}) => - byAlbum - .map(filenames => filenames - .map(filename => relation('linkAlbumAdditionalFile', album, filename)))), + query.albumAdditionalFileLists + .map(files => files + .map(file => file.filenames + .map(filename => relation('linkAdditionalFile', file, filename)))), trackAdditionalFileLinks: - stitchArrays({ - album: query.albums, - filenames: query.trackAdditionalFileFilenames, - }).map(({album, filenames: byAlbum}) => - byAlbum - .map(byTrack => byTrack - .map(filenames => filenames - .map(filename => relation('linkAlbumAdditionalFile', album, filename))))), + query.trackAdditionalFileLists + .map(byAlbum => byAlbum + .map(files => files + .map(file => file.filenames + .map(filename => relation('linkAdditionalFile', file, filename))))), }), data: (query) => ({ - albumAdditionalFileTitles: query.albumAdditionalFileTitles, - trackAdditionalFileTitles: query.trackAdditionalFileTitles, - albumAdditionalFileFilenames: query.albumAdditionalFileFilenames, - trackAdditionalFileFilenames: query.trackAdditionalFileFilenames, + albumAdditionalFileTitles: + query.albumAdditionalFileLists + .map(files => files + .map(file => file.title)), + + trackAdditionalFileTitles: + query.trackAdditionalFileLists + .map(byAlbum => byAlbum + .map(files => files + .map(file => file.title))), + + albumAdditionalFileFilenames: + query.albumAdditionalFileLists + .map(files => files + .map(file => file.filenames)), + + trackAdditionalFileFilenames: + query.trackAdditionalFileLists + .map(byAlbum => byAlbum + .map(files => files + .map(file => file.filenames))), }), slots: { |