diff options
Diffstat (limited to 'src/common-util/wiki-data.js')
| -rw-r--r-- | src/common-util/wiki-data.js | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/src/common-util/wiki-data.js b/src/common-util/wiki-data.js index 21e15725..14ae8e96 100644 --- a/src/common-util/wiki-data.js +++ b/src/common-util/wiki-data.js @@ -262,17 +262,14 @@ export function getArtistAvatar(artist, {to}) { // Used in multiple content functions for the artist info page, // because shared logic is torture oooooooooooooooo. export function chunkArtistTrackContributions(contributions) { - const date = contrib => contrib.date; - const album = contrib => (contrib.thing.isTrack ? contrib.thing.album : contrib.thing); return ( - // First chunk by (contribution) date and album. + // First chunk by (contribution) album. chunkByConditions(contributions, [ - (a, b) => +date(a) !== +date(b), (a, b) => album(a) !== album(b), ]).map(contribs => // Then, *within* the boundaries of the existing chunks, @@ -283,6 +280,55 @@ export function chunkArtistTrackContributions(contributions) { ]))); } +// Ditto. More shared logic for the artist page. +export function selectRepresentativeArtistContributorContribs(contribs) { + const creditedAsNormalArtist = + contribs + .some(contrib => + contrib.thingProperty === 'artistContribs' && + !contrib.isFeaturingCredit); + + const creditedAsContributor = + contribs + .some(contrib => contrib.thingProperty === 'contributorContribs'); + + const annotatedContribs = + contribs + .filter(contrib => !empty(contrib.annotationParts)); + + const annotatedArtistContribs = + annotatedContribs + .filter(contrib => contrib.thingProperty === 'artistContribs'); + + const annotatedContributorContribs = + annotatedContribs + .filter(contrib => contrib.thingProperty === 'contributorContribs'); + + // Don't display annotations associated with crediting in the + // Contributors field if the artist is also credited as an Artist + // *and* the Artist-field contribution is non-annotated. This is + // so that we don't misrepresent the artist - the contributor + // annotation tends to be for "secondary" and performance roles. + // For example, this avoids crediting Marcy Nabors on Renewed + // Return seemingly only for "bass clarinet" when they're also + // the one who composed and arranged Renewed Return! + if ( + creditedAsNormalArtist && + creditedAsContributor && + empty(annotatedArtistContribs) + ) { + return null; + } else if ( + !empty(annotatedArtistContribs) || + !empty(annotatedContributorContribs) + ) { + return [ + ...annotatedArtistContribs, + ...annotatedContributorContribs, + ]; + } +} + // Big-ass homepage row functions export function getNewAdditions(numAlbums, {albumData}) { |