« get me outta code hell

generateContentContentHeading.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/generateContentContentHeading.js
blob: 54ffa205a666866c311e0587fb318b21a280097b (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
export default {
  contentDependencies: ['generateContentHeading'],
  extraDependencies: ['html', 'language'],

  relations: (relation, _thing) => ({
    contentHeading:
      relation('generateContentHeading'),
  }),

  data: (thing) => ({
    name:
      (thing
        ? thing.name
        : null),
  }),

  slots: {
    attributes: {
      type: 'attributes',
      mutable: false,
    },

    string: {
      type: 'string',
    },

    summary: {
      type: 'boolean',
      default: false,
    },
  },

  generate: (data, relations, slots, {html, language}) =>
    relations.contentHeading.slots({
      attributes: slots.attributes,

      title:
        (() => {
          if (!slots.string) return html.blank();

          const options = {};

          if (slots.summary) {
            options.cue =
              html.tag('span', {class: 'cue'},
                language.$(slots.string, 'cue'));
          }

          if (data.name) {
            options.thing = html.tag('i', data.name);
          }

          if (slots.summary) {
            return html.tags([
              html.tag('span', {class: 'when-open'},
                language.$(slots.string, options)),

              html.tag('span', {class: 'when-collapsed'},
                language.$(slots.string, 'collapsed', options)),
            ]);
          } else {
            return language.$(slots.string, options);
          }
        })(),

      stickyTitle:
        (slots.string
          ? language.$(slots.string, 'sticky')
          : html.blank()),

      tag:
        (slots.summary
          ? 'summary'
          : 'p'),
    }),
};