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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
  | 
export default {
  query: (artwork) => ({
    attachedArtistContribs:
      (artwork.attachedArtwork
        ? artwork.attachedArtwork.artistContribs
        : null)
  }),
  relations: (relation, query, artwork) => ({
    credit:
      relation('generateArtistCredit',
        artwork.artistContribs,
        query.attachedArtistContribs ?? []),
    source:
      relation('transformContent', artwork.source),
    originDetails:
      relation('transformContent', artwork.originDetails),
    albumLink:
      (artwork.thing.isAlbum
        ? relation('linkAlbum', artwork.thing)
        : null),
    datetimestamp:
      relation('generateAbsoluteDatetimestamp',
        artwork.date,
        artwork.thing.date),
  }),
  data: (query, artwork) => ({
    label:
      artwork.label,
    forAlbum:
      artwork.thing.isAlbum,
    forSingleStyleAlbum:
      artwork.thing.isAlbum &&
      artwork.thing.style === 'single',
    showFilename:
      artwork.showFilename,
  }),
  generate: (data, relations, {html, language, pagePath}) =>
    language.encapsulate('misc.coverArtwork', capsule =>
      html.tag('p', {class: 'image-details'},
        {[html.onlyIfContent]: true},
        {class: 'origin-details'},
        (() => {
          relations.datetimestamp.setSlot('style', 'year-difference');
          const artworkBy =
            language.encapsulate(capsule, 'artworkBy', workingCapsule => {
              const workingOptions = {};
              if (data.label) {
                workingCapsule += '.customLabel';
                workingOptions.label = data.label;
              }
              if (!html.isBlank(relations.datetimestamp)) {
                workingCapsule += '.withYear';
                workingOptions.year = relations.datetimestamp;
              }
              return relations.credit.slots({
                showAnnotation: true,
                showExternalLinks: true,
                showChronology: true,
                showWikiEdits: true,
                trimAnnotation: false,
                chronologyKind: 'coverArt',
                normalStringKey: workingCapsule,
                additionalStringOptions: workingOptions,
              });
            });
          const trackArtFromAlbum =
            pagePath[0] === 'track' &&
            data.forAlbum &&
            !data.forSingleStyleAlbum &&
              language.$(capsule, 'trackArtFromAlbum', {
                album:
                  relations.albumLink.slot('color', false),
              });
          const source =
            language.encapsulate(capsule, 'source', workingCapsule => {
              const workingOptions = {
                [language.onlyIfOptions]: ['source'],
                source: relations.source.slot('mode', 'inline'),
              };
              if (html.isBlank(artworkBy) && data.label) {
                workingCapsule += '.customLabel';
                workingOptions.label = data.label;
              }
              if (html.isBlank(artworkBy) && !html.isBlank(relations.datetimestamp)) {
                workingCapsule += '.withYear';
                workingOptions.year = relations.datetimestamp;
              }
              return language.$(workingCapsule, workingOptions);
            });
          const label =
            html.isBlank(artworkBy) &&
            html.isBlank(source) &&
            language.encapsulate(capsule, 'customLabel', workingCapsule => {
              const workingOptions = {
                [language.onlyIfOptions]: ['label'],
                label: data.label,
              };
              if (!html.isBlank(relations.datetimestamp)) {
                workingCapsule += '.withYear';
                workingOptions.year = relations.datetimestamp;
              }
              return language.$(workingCapsule, workingOptions);
            });
          const year =
            html.isBlank(artworkBy) &&
            html.isBlank(source) &&
            html.isBlank(label) &&
            language.$(capsule, 'year', {
              [language.onlyIfOptions]: ['year'],
              year: relations.datetimestamp,
            });
          const originDetailsLine =
            html.tag('span', {class: 'origin-details-line'},
              {[html.onlyIfContent]: true},
              relations.originDetails.slots({
                mode: 'inline',
                absorbPunctuationFollowingExternalLinks: false,
              }));
          const filenameLine =
            html.tag('span', {class: 'filename-line'},
              {[html.onlyIfContent]: true},
              html.tag('code', {class: 'filename'},
                {[html.onlyIfContent]: true},
                language.sanitize(data.showFilename)));
          return [
            html.tags([
              artworkBy,
              trackArtFromAlbum,
              source,
              label,
              year,
            ], {[html.joinChildren]: html.tag('br')}),
            originDetailsLine,
            filenameLine,
          ];
        })())),
};
  |