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
|
import {empty} from '#sugar';
import {selectRepresentativeArtistContributorContribs} from '#wiki-data';
export default {
query(_artist, contribs) {
const query = {};
query.musicVideo = contribs[0].thing;
query.albumOrTrack = query.musicVideo.thing;
query.album =
(query.albumOrTrack.isAlbum
? query.albumOrTrack
: query.albumOrTrack.album);
query.displayedContributions =
selectRepresentativeArtistContributorContribs(contribs);
return query;
},
relations: (relation, query, artist, _contribs) => ({
template:
relation('generateArtistInfoPageChunkItem'),
trackLink:
(query.albumOrTrack.isTrack
? relation('linkTrack', query.albumOrTrack)
: null),
artistCredit:
relation('generateArtistCredit',
query.musicVideo.artistContribs,
(empty(query.album.artistContribs)
? [artist.mockSimpleContribution]
: query.album.artistContribs)),
externalLinks:
query.musicVideo.urls
.map(url => relation('linkExternal', url)),
}),
data: (query, _artist, contribs) => ({
date: contribs[0].date,
for:
(query.albumOrTrack.isAlbum
? 'album'
: 'track'),
title: query.musicVideo.title,
label: query.musicVideo.label,
contribAnnotationParts:
(query.displayedContributions
? query.displayedContributions
.flatMap(contrib => contrib.annotationParts)
: null),
}),
generate: (data, relations, {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 + '.musicVideo';
const musicVideoCapsule = workingCapsule;
if (data.for === 'track') {
workingOptions.track =
relations.trackLink;
}
if (data.date) {
workingCapsule += '.withDate';
workingOptions.date = language.formatDate(data.date);
}
relations.artistCredit.setSlots({
normalStringKey:
musicVideoCapsule + '.credit' +
(data.title ? '.alongsideTitle'
: data.label ? '.alongsideLabel'
: ''),
});
if (!html.isBlank(relations.artistCredit)) {
workingCapsule += '.withCredit';
workingOptions.credit = relations.artistCredit;
}
if (data.title) {
workingCapsule += '.withTitle';
workingOptions.title = language.sanitize(data.title);
} else if (data.label) {
workingCapsule += '.withLabel';
workingOptions.label = language.sanitize(data.label);
}
if (!empty(relations.externalLinks)) {
workingCapsule += '.withLinks';
workingOptions.links =
language.formatUnitList(relations.externalLinks);
}
return language.$(workingCapsule, workingOptions);
}),
}),
};
|