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
|
export default {
query(_artist, contribs) {
const query = {};
query.additionalFile = contribs[0].thing;
query.albumOrTrack = query.additionalFile.thing;
query.album =
(query.albumOrTrack.isAlbum
? query.albumOrTrack
: query.albumOrTrack.album);
return query;
},
relations: (relation, query, artist, _contribs) => ({
template:
relation('generateArtistInfoPageChunkItem'),
trackLink:
(query.albumOrTrack.isTrack
? relation('linkTrack', query.albumOrTrack)
: null),
artistCredit:
relation('generateArtistCredit',
query.additionalFile.artistContribs,
[artist.mockSimpleContribution]),
}),
data: (query, _artist, contribs) => ({
for:
(query.albumOrTrack.isAlbum
? 'album'
: 'track'),
title:
query.additionalFile.title,
files:
query.additionalFile.filenames.length,
contribAnnotationParts:
contribs.flatMap(contrib => contrib.annotationParts),
}),
slots: {
string: {
type: 'string',
default: 'additionalFile',
},
disableStandaloneWithFiles: {
type: 'boolean',
default: false,
},
},
generate: (data, relations, slots, {html, language}) =>
relations.template.slots({
annotation:
(data.contribAnnotationParts
? language.formatUnitList(data.contribAnnotationParts)
: html.blank()),
content:
language.encapsulate('artistPage.creditList.entry', entryCapsule => {
let workingCapsule = entryCapsule;
let workingOptions = {};
workingCapsule += '.' + data.for + '.' + slots.string;
const additionalFileCapsule = workingCapsule;
if (data.for === 'track') {
workingOptions.track =
relations.trackLink;
}
if (data.title) {
relations.artistCredit.setSlots({
normalStringKey:
additionalFileCapsule + '.credit.alongsideTitle',
});
} else if (data.files && !slots.disableStandaloneWithFiles) {
relations.artistCredit.setSlots({
normalStringKey:
additionalFileCapsule + '.credit.standaloneWithFiles',
additionalStringOptions: {
files: language.countFiles(data.files, {unitOnly: true}),
},
});
} else {
relations.artistCredit.setSlots({
normalStringKey:
additionalFileCapsule + '.credit',
});
}
if (!html.isBlank(relations.artistCredit)) {
workingCapsule += '.withCredit';
workingOptions.credit = relations.artistCredit;
}
if (data.title) {
workingCapsule += '.withTitle';
workingOptions.title = language.sanitize(data.title);
}
return language.$(workingCapsule, workingOptions);
}),
}),
};
|