From 510632b89a5b8f77a8254fd8c1d144e5e12cb615 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 27 Nov 2020 10:11:45 -0400 Subject: generate alias pages for changed artist names --- upd8.js | 77 +++++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/upd8.js b/upd8.js index 5c4b5e8..b0ba0ee 100644 --- a/upd8.js +++ b/upd8.js @@ -1669,7 +1669,7 @@ async function writeTrackPage(track) { } async function writeArtistPages() { - await progressPromiseAll('Writing artist pages.', queue(artistNames.map(artistName => () => writeArtistPage(artistName)))); + await progressPromiseAll('Writing artist pages.', queue(artistData.map(artist => () => writeArtistPage(artist)))); } function getTracksByArtist(artistName) { @@ -1678,31 +1678,36 @@ function getTracksByArtist(artistName) { )); } -async function writeArtistPage(artistName) { +async function writeArtistPage(artist) { + if (artist.alias) { + return writeArtistAliasPage(artist); + } + const { + name, urls = [], note = '' - } = artistData.find(({ name }) => name === artistName) || {}; + } = artist; - const tracks = getTracksByArtist(artistName); - const artThings = justEverythingMan.filter(thing => (thing.coverArtists || []).some(({ who }) => who === artistName)); - const flashes = flashData.filter(flash => (flash.contributors || []).some(({ who }) => who === artistName)); - const commentaryThings = justEverythingMan.filter(thing => thing.commentary && thing.commentary.replace(/<\/?b>/g, '').includes('' + artistName + ':')); + const tracks = getTracksByArtist(name); + const artThings = justEverythingMan.filter(thing => (thing.coverArtists || []).some(({ who }) => who === name)); + const flashes = flashData.filter(flash => (flash.contributors || []).some(({ who }) => who === name)); + const commentaryThings = justEverythingMan.filter(thing => thing.commentary && thing.commentary.replace(/<\/?b>/g, '').includes('' + name + ':')); const unreleasedTracks = tracks.filter(track => track.album.directory === C.UNRELEASED_TRACKS_DIRECTORY); const releasedTracks = tracks.filter(track => track.album.directory !== C.UNRELEASED_TRACKS_DIRECTORY); const generateTrackList = tracks => albumChunkedList(tracks, (track, i) => { const contrib = { - who: artistName, - what: track.contributors.filter(({ who }) => who === artistName).map(({ what }) => what).join(', ') + who: name, + what: track.contributors.filter(({ who }) => who === name).map(({ what }) => what).join(', ') }; const flashes = getFlashesThatFeature(track); return fixWS` -
  • +
  • ${track.duration && `(${getDurationString(track.duration)})` || ``} ${track.name} - ${track.artists.includes(artistName) && track.artists.length > 1 && `(with ${getArtistString(track.artists.filter(a => a !== artistName))})` || ``} + ${track.artists.includes(name) && track.artists.length > 1 && `(with ${getArtistString(track.artists.filter(a => a !== name))})` || ``} ${contrib.what && `(${getContributionString(contrib) || 'contributed'})` || ``} ${flashes.length && `
    (Featured in ${joinNoOxford(flashes.map(flash => getFlashLinkHTML(flash)))})
    ` || ``}
  • @@ -1710,17 +1715,17 @@ async function writeArtistPage(artistName) { }); // Shish! - const kebab = C.getArtistDirectory(artistName); + const kebab = C.getArtistDirectory(name); const index = `${C.ARTIST_DIRECTORY}/${kebab}/`; await writePage([C.ARTIST_DIRECTORY, kebab], { - title: artistName, + title: name, main: { content: fixWS` ${ENABLE_ARTIST_AVATARS && await access(path.join(C.ARTIST_AVATAR_DIRECTORY, kebab + '.jpg')).then(() => true, () => false) && fixWS` - Artist avatar + Artist avatar `} -

    ${artistName}

    +

    ${name}

    ${note && fixWS`

    Note:

    ${note}
    @@ -1740,7 +1745,7 @@ async function writeArtistPage(artistName) {

    Tracks

    `} ${releasedTracks.length && fixWS` -

    ${artistName} has contributed ~${getDurationString(getTotalDuration(releasedTracks))} ${getTotalDuration(releasedTracks) > 3600 ? 'hours' : 'minutes'} of music collected on this wiki.

    +

    ${name} has contributed ~${getDurationString(getTotalDuration(releasedTracks))} ${getTotalDuration(releasedTracks) > 3600 ? 'hours' : 'minutes'} of music collected on this wiki.

    ${generateTrackList(releasedTracks)} `} ${unreleasedTracks.length && fixWS` @@ -1750,13 +1755,13 @@ async function writeArtistPage(artistName) { ${artThings.length && fixWS`

    Art

    ${albumChunkedList(artThings, (thing, i) => { - const contrib = thing.coverArtists.find(({ who }) => who === artistName); + const contrib = thing.coverArtists.find(({ who }) => who === name); return fixWS` -
  • +
  • ${thing.album ? fixWS` ${thing.name} ` : '(cover art)'} - ${thing.coverArtists.length > 1 && `(with ${getArtistString(thing.coverArtists.filter(({ who }) => who !== artistName))})`} + ${thing.coverArtists.length > 1 && `(with ${getArtistString(thing.coverArtists.filter(({ who }) => who !== name))})`} ${contrib.what && `(${getContributionString(contrib)})`}
  • `; @@ -1765,7 +1770,7 @@ async function writeArtistPage(artistName) { ${flashes.length && fixWS`

    Flashes & Games

    ${actChunkedList(flashes, flash => { - const contributionString = flash.contributors.filter(({ who }) => who === artistName).map(getContributionString).join(' '); + const contributionString = flash.contributors.filter(({ who }) => who === name).map(getContributionString).join(' '); return fixWS`
  • ${flash.name} @@ -1798,12 +1803,42 @@ async function writeArtistPage(artistName) { ['./', SITE_SHORT_TITLE], [`${C.LISTING_DIRECTORY}/`, 'Listings'], [null, 'Artist:'], - [`${C.ARTIST_DIRECTORY}/${kebab}/`, artistName] + [`${C.ARTIST_DIRECTORY}/${kebab}/`, name] ] } }); } +async function writeArtistAliasPage(artist) { + const { name, alias } = artist; + const kebab1 = C.getArtistDirectory(name); + const kebab2 = C.getArtistDirectory(alias); + + const directory = path.join(C.SITE_DIRECTORY, C.ARTIST_DIRECTORY, kebab1); + const file = path.join(directory, 'index.html'); + const target = `/${C.ARTIST_DIRECTORY}/${kebab2}/`; + + await mkdirp(directory); + await writeFile(file, fixWS` + + + + Moved to ${alias} + + + + + + +
    +

    Moved to ${alias}

    +

    This page has been moved to ${target}.

    +
    + + + `); +} + function albumChunkedList(tracks, getLI, showDate = true, datePropertyOrFn = 'date') { const getAlbum = thing => thing.album ? thing.album : thing; const dateFn = (typeof datePropertyOrFn === 'function' -- cgit 1.3.0-6-gf8a5