diff options
Diffstat (limited to 'src/content/dependencies/linkContribution.js')
-rw-r--r-- | src/content/dependencies/linkContribution.js | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/src/content/dependencies/linkContribution.js b/src/content/dependencies/linkContribution.js index cb57aa4..1a51c38 100644 --- a/src/content/dependencies/linkContribution.js +++ b/src/content/dependencies/linkContribution.js @@ -1,4 +1,4 @@ -import {empty} from '#sugar'; +import {empty, stitchArrays} from '#sugar'; export default { contentDependencies: [ @@ -14,7 +14,7 @@ export default { const relations = {}; relations.artistLink = - relation('linkArtist', contribution.who); + relation('linkArtist', contribution.artist); relations.textWithTooltip = relation('generateTextWithTooltip'); @@ -22,9 +22,9 @@ export default { relations.tooltip = relation('generateTooltip'); - if (!empty(contribution.who.urls)) { + if (!empty(contribution.artist.urls)) { relations.artistIcons = - contribution.who.urls + contribution.artist.urls .map(url => relation('linkExternalAsIcon', url)); } @@ -33,7 +33,8 @@ export default { data(contribution) { return { - what: contribution.what, + contribution: contribution.annotation, + urls: contribution.artist.urls, }; }, @@ -49,7 +50,7 @@ export default { }, generate(data, relations, slots, {html, language}) { - const hasContribution = !!(slots.showContribution && data.what); + const hasContribution = !!(slots.showContribution && data.contribution); const hasExternalIcons = !!(slots.showIcons && relations.artistIcons); const parts = ['misc.artistLink']; @@ -74,19 +75,43 @@ export default { {[html.joinChildren]: ''}, content: - relations.artistIcons - .map(icon => - icon.slots({ + stitchArrays({ + icon: relations.artistIcons, + url: data.urls, + }).map(({icon, url}) => { + icon.setSlots({ context: 'artist', withText: true, - })), + }); + + let platformText = + language.formatExternalLink(url, { + context: 'artist', + style: 'platform', + }); + + // This is a pretty ridiculous hack, but we currently + // don't have a way of telling formatExternalLink to *not* + // use the fallback string, which just formats the URL as + // its host/domain... so is technically detectable. + if (platformText.toString() === (new URL(url)).host) { + platformText = + language.$('misc.artistLink.noExternalLinkPlatformName'); + } + + const platformSpan = + html.tag('span', {class: 'icon-platform'}, + platformText); + + return [icon, platformSpan]; + }), }), }) : relations.artistLink); if (hasContribution) { parts.push('withContribution'); - options.contrib = data.what; + options.contrib = data.contribution; } if (hasExternalIcons && slots.iconMode === 'inline') { |