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
  | 
import {empty} from '#sugar';
export default {
  query: (contrib) => ({
    kind:
      (contrib.thing.thingProperty === 'bannerArtwork'
        ? 'banner'
     : contrib.thing.thingProperty === 'wallpaperArtwork'
        ? 'wallpaper'
     : contrib.thing.thingProperty === 'coverArtworks'
        ? 'album-cover'
        : 'track-cover'),
  }),
  relations: (relation, query, contrib) => ({
    template:
      relation('generateArtistInfoPageChunkItem'),
    trackLink:
      (query.kind === 'track-cover'
        ? relation('linkTrack', contrib.thing.thing)
        : null),
    otherArtistLinks:
      relation('generateArtistInfoPageOtherArtistLinks', [contrib]),
    originDetails:
      relation('transformContent', contrib.thing.originDetails),
  }),
  data: (query, contrib) => ({
    kind:
      query.kind,
    annotation:
      contrib.annotation,
    label:
      contrib.thing.label,
  }),
  slots: {
    filterEditsForWiki: {
      type: 'boolean',
      default: false,
    },
  },
  generate: (data, relations, slots, {html, language}) =>
    relations.template.slots({
      otherArtistLinks: relations.otherArtistLinks,
      annotation:
        language.encapsulate('artistPage.creditList.entry.artwork.accent', workingCapsule => {
          const workingOptions = {};
          const artworkLabel = data.label;
          if (artworkLabel) {
            workingCapsule += '.withLabel';
            workingOptions.label =
              language.typicallyLowerCase(artworkLabel);
          }
          const contribAnnotation =
            (slots.filterEditsForWiki
              ? data.annotation?.replace(/^edits for wiki(: )?/, '')
              : data.annotation);
          if (contribAnnotation) {
            workingCapsule += '.withAnnotation';
            workingOptions.annotation = contribAnnotation;
          }
          if (empty(Object.keys(workingOptions))) {
            return html.blank();
          }
          return language.$(workingCapsule, workingOptions);
        }),
      content:
        language.encapsulate('artistPage.creditList.entry', capsule =>
          (data.kind === 'track-cover'
            ? language.$(capsule, 'track', {
                track: relations.trackLink,
              })
            : html.tag('i',
                language.encapsulate(capsule, 'album', capsule =>
                  (data.kind === 'wallpaper'
                    ? language.$(capsule, 'wallpaperArt')
                 : data.kind === 'banner'
                    ? language.$(capsule, 'bannerArt')
                    : language.$(capsule, 'coverArt')))))),
      originDetails:
        relations.originDetails.slots({
          mode: 'inline',
          absorbPunctuationFollowingExternalLinks: false,
        }),
    }),
};
  |