« get me outta code hell

generateListAllAdditionalFilesChunk.js « dependencies « content « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/content/dependencies/generateListAllAdditionalFilesChunk.js
blob: b046ccaf903c3f07e3df44ea88fdb7610fa02332 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import {empty, stitchArrays} from '#sugar';

export default {
  extraDependencies: ['html', 'language'],

  slots: {
    title: {
      type: 'html',
      mutable: false,
    },

    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,
                                  }),
                              })))),
                    ])))))),
    ]);
  },
};