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
  | 
export default {
  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'),
    }),
};
  |