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
|
import {sortAlbumsTracksChronologically, sortContributionsChronologically}
from '#sort';
import {chunkArtistTrackContributions} from '#wiki-data';
export default {
contentDependencies: ['generateColorStyleAttribute'],
extraDependencies: ['html', 'language'],
query(track, artist) {
const relevantInfoPageChunkingContributions =
track.allReleases
.flatMap(release => [
...release.artistContribs,
...release.contributorContribs,
])
.filter(c => c.artist === artist);
sortContributionsChronologically(
relevantInfoPageChunkingContributions,
sortAlbumsTracksChronologically);
const contributionChunks =
chunkArtistTrackContributions(relevantInfoPageChunkingContributions);
const trackChunks =
contributionChunks
.map(chunksInAlbum => chunksInAlbum
.map(chunksInTrack => chunksInTrack[0].thing));
const trackChunksForThisAlbum =
trackChunks
.filter(tracks => tracks[0].album === track.album);
const containingChunkIndex =
trackChunksForThisAlbum
.findIndex(tracks => tracks.includes(track));
return {containingChunkIndex};
},
relations: (relation, _query, track, _artist) => ({
colorStyle:
relation('generateColorStyleAttribute', track.album.color),
}),
data: (query, track, _artist) => ({
albumName:
track.album.name,
albumDirectory:
track.album.directory,
containingChunkIndex:
query.containingChunkIndex,
}),
generate: (data, relations, {html, language}) =>
html.tag('a',
{href: `#tracks-${data.albumDirectory}-${data.containingChunkIndex}`},
relations.colorStyle.slot('context', 'primary-only'),
language.sanitize(data.albumName)),
};
|