diff options
author | (quasar) nebula <qznebula@protonmail.com> | 2023-08-09 09:42:15 -0300 |
---|---|---|
committer | (quasar) nebula <qznebula@protonmail.com> | 2023-08-09 09:43:09 -0300 |
commit | c4b40f4b7fa7ef5439845538af22cc9076e4cb9c (patch) | |
tree | f6532309e7ae7fd7455cdfa90dd67c62b8959634 /src/content/dependencies/generateListAllAdditionalFilesChunk.js | |
parent | 725482638dcc96632c3a9cf2b885f4128c50a1c1 (diff) |
content: listAll{Additional,SheetMusic,MidiProject}Files
Diffstat (limited to 'src/content/dependencies/generateListAllAdditionalFilesChunk.js')
-rw-r--r-- | src/content/dependencies/generateListAllAdditionalFilesChunk.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/content/dependencies/generateListAllAdditionalFilesChunk.js b/src/content/dependencies/generateListAllAdditionalFilesChunk.js new file mode 100644 index 00000000..29ef2c05 --- /dev/null +++ b/src/content/dependencies/generateListAllAdditionalFilesChunk.js @@ -0,0 +1,77 @@ +import {empty, stitchArrays} from '../../util/sugar.js'; + +export default { + extraDependencies: ['html', 'language'], + + slots: { + title: {type: 'html'}, + + additionalFileTitles: { + validate: v => v.strictArrayOf(v.isHTML), + }, + + additionalFileLinks: { + validate: v => v.strictArrayOf(v.strictArrayOf(v.isHTML)), + }, + + additionalFileFiles: { + validate: v => v.strictArrayOf(v.strictArrayOf(v.isString)), + }, + + stringsKey: {type: 'string'}, + }, + + generate(slots, {html, language}) { + if (empty(slots.additionalFileLinks)) { + return html.blank(); + } + + return html.tags([ + html.tag('dt', slots.title), + html.tag('dd', + html.tag('ul', + stitchArrays({ + additionalFileTitle: slots.additionalFileTitles, + additionalFileLinks: slots.additionalFileLinks, + additionalFileFiles: slots.additionalFileFiles, + }).map(({ + additionalFileTitle, + additionalFileLinks, + additionalFileFiles, + }) => + (additionalFileLinks.length === 1 + ? html.tag('li', + additionalFileLinks[0].slots({ + content: + language.$(`listingPage.${slots.stringsKey}.file`, { + title: additionalFileTitle, + }), + })) + + : html.tag('li', {class: 'has-details'}, + html.tag('details', [ + html.tag('summary', + html.tag('span', + language.$(`listingPage.${slots.stringsKey}.file.withMultipleFiles`, { + title: + html.tag('span', {class: 'group-name'}, additionalFileTitle), + files: + language.countAdditionalFiles(additionalFileLinks.length, {unit: true}), + }))), + + html.tag('ul', + stitchArrays({ + additionalFileLink: additionalFileLinks, + additionalFileFile: additionalFileFiles, + }).map(({additionalFileLink, additionalFileFile}) => + html.tag('li', + additionalFileLink.slots({ + content: + language.$(`listingPage.${slots.stringsKey}.file`, { + title: additionalFileFile, + }), + })))), + ])))))), + ]); + }, +}; |