From ae6247c519864b4ac24d40d2af2cb2a8c4c78c17 Mon Sep 17 00:00:00 2001 From: Florrie Date: Tue, 19 Nov 2019 21:34:28 -0400 Subject: group artist page listings by album --- upd8.js | 104 +++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 61 insertions(+), 43 deletions(-) (limited to 'upd8.js') diff --git a/upd8.js b/upd8.js index c2aaad3..05df1f7 100644 --- a/upd8.js +++ b/upd8.js @@ -78,7 +78,8 @@ const access = util.promisify(fs.access); const { joinNoOxford, progressPromiseAll, - splitArray + splitArray, + th } = require('./upd8-util'); const SITE_TITLE = 'Homestuck Music Wiki'; @@ -704,54 +705,43 @@ async function writeArtistPage(artistName, albumData) { ].filter(Boolean).join(', ')}

${tracks.length && fixWS`

Tracks

-
    - ${tracks.map(track => { - const contrib = { - who: artistName, - what: [ - ...track.contributors.filter(({ who }) => who === artistName).map(({ what }) => what), - ...getTracksReferencedBy(track, allTracks).filter(track => track.artists.includes(artistName)).map(track => `[${track.name}]`) - ].filter(Boolean).join(', ') - }; - if (contrib.what && track.artists.includes(artistName)) { - const nonTracks = contrib.what.split(',').map(what => what.trim()).filter(what => !(what.startsWith('[') && what.endsWith(']'))); - contrib.what = nonTracks.join(', '); - } - return fixWS` -
  1. - ${track.name} - ${track.artists.includes(artistName) && track.artists.length > 1 && `(with ${getArtistString(track.artists.filter(a => a !== artistName))})`} - ${contrib.what && `(${getContributionString(contrib, tracks) || 'contributed'})`} - from ${track.album.name} -
  2. - `; - }).join('\n')} -
+ ${albumChunkedList(tracks, (track, i) => { + const contrib = { + who: artistName, + what: track.contributors.filter(({ who }) => who === artistName).map(({ what }) => what).join(', ') + }; + return fixWS` +
  • + ${track.name} + ${track.artists.includes(artistName) && track.artists.length > 1 && `(with ${getArtistString(track.artists.filter(a => a !== artistName))})`} + ${contrib.what && `(${getContributionString(contrib, tracks) || 'contributed'})`} +
  • + `; + })} `} ${artThings.length && fixWS`

    Art

    -
      - ${artThings.map(thing => { - const contrib = thing.coverArtists.find(({ who }) => who === artistName); - return fixWS` -
    1. - ${thing.name} - ${contrib.what && `(${getContributionString(contrib, tracks)})`} - ${thing.album ? `from ${thing.album.name}` : `(cover art)`} -
    2. - `; - }).join('\n')} -
    + ${albumChunkedList(artThings, (thing, i) => { + const contrib = thing.coverArtists.find(({ who }) => who === artistName); + return fixWS` +
  • + ${thing.album ? fixWS` + ${thing.name} + ` : '(cover art)'} + ${contrib.what && `(${getContributionString(contrib, tracks)})`} +
  • + `; + })} `} ${commentaryThings.length && fixWS`

    Commentary

    - `} @@ -760,6 +750,34 @@ async function writeArtistPage(artistName, albumData) { `); } +function albumChunkedList(tracks, getLI, showDate = true) { + const getAlbum = thing => thing.album ? thing.album : thing; + return fixWS` +
    + ${tracks.map((thing, i) => { + const li = getLI(thing, i); + const album = getAlbum(thing); + if (i === 0 || album !== getAlbum(tracks[i - 1]) || (showDate && +thing.date !== +tracks[i - 1].date)) { + const heading = fixWS` +
    + ${getAlbum(thing).name} + ${showDate && `(${getDateString(thing)})`} +
    +
      + `; + if (i > 0) { + return ['
    ', heading, li]; + } else { + return [heading, li]; + } + } else { + return [li]; + } + }).reduce((acc, arr) => acc.concat(arr), []).join('\n')} +
    + `; +} + // This function is terri8le. Sorry! function getContributionString({ what }, allTracks) { return what -- cgit 1.3.0-6-gf8a5