diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/content/dependencies/generateContributionLinks.js | 23 | ||||
-rw-r--r-- | src/content/dependencies/generateIconForURL.js | 51 | ||||
-rw-r--r-- | src/misc-templates.js | 46 |
3 files changed, 63 insertions, 57 deletions
diff --git a/src/content/dependencies/generateContributionLinks.js b/src/content/dependencies/generateContributionLinks.js index a79c8234..18bc409d 100644 --- a/src/content/dependencies/generateContributionLinks.js +++ b/src/content/dependencies/generateContributionLinks.js @@ -3,37 +3,40 @@ import {empty} from '../../util/sugar.js'; export default { contentDependencies: [ 'linkArtist', + 'generateIconForURL', ], extraDependencies: [ 'html', - 'iconifyURL', 'language', ], - relations(relation, contributions) { + relations(relation, contributions, {showIcons = false} = {}) { const relations = {}; relations.artistLinks = contributions.map(({who}) => relation('linkArtist', who)); + if (showIcons) { + relations.artistIcons = + contributions.map(({who}) => + who.urls.map(url => + relation('generateIconForURL', url))); + } + return relations; }, data(contributions, { showContribution = false, showIcons = false, - }) { + } = {}) { const data = {}; - data.showContribution = showContribution; - data.showIcons = showIcons; - data.contributionData = contributions.map(({who, what}) => ({ hasContributionPart: !!(showContribution && what), hasExternalPart: !!(showIcons && !empty(who.urls)), - artistUrls: who.urls, contribution: showContribution && what, })); @@ -42,23 +45,21 @@ export default { generate(data, relations, { html, - iconifyURL, language, }) { return language.formatConjunctionList( data.contributionData.map(({ hasContributionPart, hasExternalPart, - artistUrls, contribution, }, index) => { const artistLink = relations.artistLinks[index]; + const artistIcons = relations.artistIcons?.[index]; const externalLinks = hasExternalPart && html.tag('span', {[html.noEdgeWhitespace]: true, class: 'icons'}, - language.formatUnitList( - artistUrls.map(url => iconifyURL(url, {language})))); + language.formatUnitList(artistIcons)); return ( (hasContributionPart diff --git a/src/content/dependencies/generateIconForURL.js b/src/content/dependencies/generateIconForURL.js new file mode 100644 index 00000000..4473ccbf --- /dev/null +++ b/src/content/dependencies/generateIconForURL.js @@ -0,0 +1,51 @@ +const BANDCAMP_DOMAINS = [ + 'bc.s3m.us', + 'music.solatrux.com', +]; + +const MASTODON_DOMAINS = [ + 'types.pl', +]; + +export default { + extraDependencies: ['html', 'language', 'to'], + + data(url) { + return {url}; + }, + + generate(data, {html, language, to}) { + const domain = new URL(data.url).hostname; + const [id, msg] = ( + domain.includes('bandcamp.com') + ? ['bandcamp', language.$('misc.external.bandcamp')] + : BANDCAMP_DOMAINS.includes(domain) + ? ['bandcamp', language.$('misc.external.bandcamp.domain', {domain})] + : MASTODON_DOMAINS.includes(domain) + ? ['mastodon', language.$('misc.external.mastodon.domain', {domain})] + : domain.includes('youtu') + ? ['youtube', language.$('misc.external.youtube')] + : domain.includes('soundcloud') + ? ['soundcloud', language.$('misc.external.soundcloud')] + : domain.includes('tumblr.com') + ? ['tumblr', language.$('misc.external.tumblr')] + : domain.includes('twitter.com') + ? ['twitter', language.$('misc.external.twitter')] + : domain.includes('deviantart.com') + ? ['deviantart', language.$('misc.external.deviantart')] + : domain.includes('instagram.com') + ? ['instagram', language.$('misc.external.bandcamp')] + : domain.includes('newgrounds.com') + ? ['newgrounds', language.$('misc.external.newgrounds')] + : ['globe', language.$('misc.external.domain', {domain})]); + + return html.tag('a', + {href: data.url, class: 'icon'}, + html.tag('svg', [ + html.tag('title', msg), + html.tag('use', { + href: to('shared.staticFile', `icons.svg#icon-${id}`), + }), + ])); + }, +}; diff --git a/src/misc-templates.js b/src/misc-templates.js index 11a95c7c..39e62ddf 100644 --- a/src/misc-templates.js +++ b/src/misc-templates.js @@ -18,10 +18,6 @@ import { sortChronologically, } from './util/wiki-data.js'; -const BANDCAMP_DOMAINS = ['bc.s3m.us', 'music.solatrux.com']; - -const MASTODON_DOMAINS = ['types.pl']; - // "Additional Files" listing function unbound_generateAdditionalFilesShortcut(additionalFiles, { @@ -337,48 +333,6 @@ function unbound_fancifyFlashURL(url, flash, { : link); } -function unbound_iconifyURL(url, { - html, - language, - to, -}) { - const domain = new URL(url).hostname; - const [id, msg] = ( - domain.includes('bandcamp.com') - ? ['bandcamp', language.$('misc.external.bandcamp')] - : BANDCAMP_DOMAINS.includes(domain) - ? ['bandcamp', language.$('misc.external.bandcamp.domain', {domain})] - : MASTODON_DOMAINS.includes(domain) - ? ['mastodon', language.$('misc.external.mastodon.domain', {domain})] - : domain.includes('youtu') - ? ['youtube', language.$('misc.external.youtube')] - : domain.includes('soundcloud') - ? ['soundcloud', language.$('misc.external.soundcloud')] - : domain.includes('tumblr.com') - ? ['tumblr', language.$('misc.external.tumblr')] - : domain.includes('twitter.com') - ? ['twitter', language.$('misc.external.twitter')] - : domain.includes('deviantart.com') - ? ['deviantart', language.$('misc.external.deviantart')] - : domain.includes('instagram.com') - ? ['instagram', language.$('misc.external.bandcamp')] - : domain.includes('newgrounds.com') - ? ['newgrounds', language.$('misc.external.newgrounds')] - : ['globe', language.$('misc.external.domain', {domain})]); - - return html.tag('a', - { - href: url, - class: 'icon', - }, - html.tag('svg', [ - html.tag('title', msg), - html.tag('use', { - href: to('shared.staticFile', `icons.svg#icon-${id}`), - }), - ])); -} - // Grids function unbound_getGridHTML({ |