« get me outta code hell

generateReleaseInfoBlock.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/generateReleaseInfoBlock.js
blob: 93d889ab03924f4a52488d3e20fb6d13300aed4d (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
import {empty} from '#sugar';

export default {
  slots: {
    // This isn't mutable, but we will be inspecting items' contents.
    items: {validate: v => v.looseArrayOf(v.isHTML)},
  },

  generate(slots, {html}) {
    const tags = [];

    let paragraphLines = [];
    const closeParagraph = () => {
      if (empty(paragraphLines)) return;

      const paragraph =
        html.tag('p',
          {[html.joinChildren]: html.tag('br')},
          {[html.onlyIfContent]: true},
            paragraphLines);

      tags.push(paragraph);
      paragraphLines = [];
    };

    for (let item of slots.items) {
      item = html.Template.resolve(item);

      if (typeof item === 'string' && item.length) {
        paragraphLines.push(item);
        continue;
      }

      if (html.isBlank(item)) {
        continue;
      }

      if (item.contentOnly) {
        paragraphLines.push(item);
        continue;
      }

      if (item.tagName === 'br') {
        continue;
      }

      if (item.tagName === 'p') {
        paragraphLines.push(item.content);
        continue;
      }

      closeParagraph();
      tags.push(item);
    }

    closeParagraph();

    if (empty(tags)) {
      return html.blank();
    } else {
      return html.tags(tags);
    }
  }
};