« 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: 659cf4e5e8d22b7a812585e6642cc31743995e09 (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
85
86
87
88
89
90
91
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,
            }) =>
              language.encapsulate('listingPage', slots.stringsKey, 'file', capsule =>
                (additionalFileLinks.length === 1
                  ? html.tag('li',
                      additionalFileLinks[0].slots({
                        content:
                          language.$(capsule, {
                            title: additionalFileTitle,
                          }),
                      }))

               : additionalFileLinks.length === 0
                  ? html.tag('li',
                      language.$(capsule, 'withNoFiles', {
                        title: additionalFileTitle,
                      }))

                  : html.tag('li', {class: 'has-details'},
                      html.tag('details', [
                        html.tag('summary',
                          html.tag('span',
                            language.$(capsule, '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.$(capsule, {
                                      title: additionalFileFile,
                                    }),
                                })))),
                      ]))))))),
    ]);
  },
};