From 0cd7e34d0fa2fe019a37472bd2ecf14db05f63fb Mon Sep 17 00:00:00 2001 From: Florrie Date: Sat, 6 Jun 2020 18:40:05 -0300 Subject: loads of code shenanigans --- upd8.js | 221 ++++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 116 insertions(+), 105 deletions(-) (limited to 'upd8.js') diff --git a/upd8.js b/upd8.js index 26e1314d..fecdc442 100644 --- a/upd8.js +++ b/upd8.js @@ -543,9 +543,11 @@ async function processAlbumDataFile(file) { const artDateValue = new Date(artDate); - const trackURLs = (getListField(section, 'URLs') || []).filter(Boolean); + const hasURLs = getBasicField(section, 'Has URLs') !== 'no'; - if (!trackURLs.length) { + const trackURLs = hasURLs && (getListField(section, 'URLs') || []).filter(Boolean); + + if (hasURLs && !trackURLs.length) { return {error: `The track "${trackName}" should have at least one URL specified.`}; } @@ -682,6 +684,10 @@ function stringifyFlashData() { }, 1); } +function stringifyArtistData() { + return JSON.stringify(artistData, null, 1); +} + // 8asic function for writing any site page. Handles all the 8asename, // directory, and site-template shenanigans! async function writePage(directoryParts, titleOrHead, body) { @@ -836,6 +842,7 @@ function writeMiscellaneousPages() { // Yo, this file is gener8ted. Don't mess around with it! window.albumData = ${stringifyAlbumData()}; window.flashData = ${stringifyFlashData()}; + window.artistData = ${stringifyArtistData()}; `) ]); } @@ -864,21 +871,21 @@ async function writeAlbumPage(album) { cover art

${album.name}

- ${album.artists && `By ${getArtistString(album.artists)}.
`} + ${album.artists && `By ${getArtistString(album.artists)}.
` || ``} ${album.coverArtists && `Cover art by ${joinNoOxford(album.coverArtists.map(({ who, what }) => fixWS` ${who}${what && ` (${getContributionString({what})})`} - `))}.
`} + `))}.
` || ``} Released ${getDateString(album)}. - ${+album.artDate !== +album.date && `
Art released ${getDateString({date: album.artDate})}.`} + ${+album.artDate !== +album.date && `
Art released ${getDateString({date: album.artDate})}.` || ``}

- ${album.urls.length && `

Listen on ${joinNoOxford(album.urls.map(url => fancifyURL(url, {album: true})), 'or')}.

`} + ${album.urls.length && `

Listen on ${joinNoOxford(album.urls.map(url => fancifyURL(url, {album: true})), 'or')}.

` || ``} <${listTag}> ${album.tracks.map(track => fixWS`
  • ${track.name} ${track.artists !== album.artists && fixWS` by ${getArtistString(track.artists)} - `} + ` || ``}
  • `).join('\n')} @@ -887,7 +894,7 @@ async function writeAlbumPage(album) {
    ${transformMultiline(album.commentary)}
    - `} + ` || ``} @@ -913,25 +920,32 @@ async function writeTrackPage(track) { cover art

    ${track.name}

    - By ${getArtistString(track.artists)}.
    - ${track.coverArtists && `Cover art by ${joinNoOxford(track.coverArtists.map(({ who, what }) => fixWS` + By ${getArtistString(track.artists)}. + ${track.coverArtists && `
    Cover art by ${joinNoOxford(track.coverArtists.map(({ who, what }) => fixWS` ${who}${what && ` (${getContributionString({what})})`} - `))}.
    `} - Released ${getDateString(track)}. - ${+track.artDate !== +track.date && `
    Art released ${getDateString({date: track.artDate})}.`} + `))}.` || ``} + ${track.album.directory !== C.UNRELEASED_TRACKS_DIRECTORY && `
    Released ${getDateString(track)}.` || ``} + ${+track.artDate !== +track.date && `
    Art released ${getDateString({date: track.artDate})}.` || ``}

    -

    Listen on ${joinNoOxford(track.urls.map(fancifyURL), 'or')}.

    + ${track.urls.length ? fixWS` +

    Listen on ${joinNoOxford(track.urls.map(fancifyURL), 'or')}.

    + ` : fixWS` +

    This track has no URLs at which it can be listened.

    + `} ${track.contributors.length && fixWS`

    Contributors:

    - `} + ` || ``} ${tracksReferenced.length && fixWS`

    Tracks that ${track.name} references:

    - `} + ` || ``} ${tracksThatReference.length && fixWS`

    Tracks that reference ${track.name}:

    @@ -956,7 +970,7 @@ async function writeTrackPage(track) { `).join('\n')} - `} + ` || ``} ${ttrFanon.length && fixWS`
    Fandom:
      @@ -967,27 +981,27 @@ async function writeTrackPage(track) { `).join('\n')}
    - `} + ` || ``}
    - `} + ` || ``} ${flashesThatFeature.length && fixWS`

    Flashes & games that feature ${track.name}:

    - `} + ` || ``} ${track.lyrics && fixWS`

    Lyrics:

    ${transformMultiline(track.lyrics)}
    - `} + ` || ``} ${track.commentary && fixWS`

    Artist commentary:

    ${transformMultiline(track.commentary)}
    - `} + ` || ``} @@ -1023,9 +1037,9 @@ async function writeArtistPage(artistName) { return fixWS`
  • ${track.name} - ${track.artists.includes(artistName) && track.artists.length > 1 && `(with ${getArtistString(track.artists.filter(a => a !== artistName))})`} - ${contrib.what && `(${getContributionString(contrib) || 'contributed'})`} - ${flashes.length && `
    (Featured in ${joinNoOxford(flashes.map(getFlashLinkHTML))})
    `} + ${track.artists.includes(artistName) && track.artists.length > 1 && `(with ${getArtistString(track.artists.filter(a => a !== artistName))})` || ``} + ${contrib.what && `(${getContributionString(contrib) || 'contributed'})` || ``} + ${flashes.length && `
    (Featured in ${joinNoOxford(flashes.map(getFlashLinkHTML))})
    ` || ``}
  • `; }); @@ -1184,7 +1198,7 @@ async function writeFlashPage(flash) { / ${flash.name}
    - ${chronologyButtons(flash, { + ${chronologyLinks(flash, { headingWord: 'flash/game', sourceData: flashData, filters: [ @@ -1193,47 +1207,46 @@ async function writeFlashPage(flash) { toArtist: ({ who }) => who } ] - })} + }) || ``}

    ${flash.name}

    cover art

    Released ${getDateString(flash)}.

    - ${flash.page && `

    Play on Homestuck (${isNaN(Number(flash.page)) ? 'secret page' : `page ${flash.page}`}).

    `} + ${flash.page && `

    Play on Homestuck (${isNaN(Number(flash.page)) ? 'secret page' : `page ${flash.page}`}).

    ` || ``} ${flash.contributors.length && fixWS`

    Contributors:

      @@ -1241,10 +1254,10 @@ async function writeFlashPage(flash) {
    • ${artistNames.includes(who) ? `${who}` : who - } ${what && `(${getContributionString({what})})`}
    • + }${what && ` (${getContributionString({what})})`} `).join('\n')}
    - `} + ` || ``}

    Tracks featured in ${flash.name.replace(/\.$/, '')}:

      ${flash.tracks.map(ref => { @@ -1429,13 +1442,13 @@ function writeListingPages() {
      ${transformMultiline(album.commentary)}
      - `} + ` || ``} ${tracks.filter(t => t.commentary).map(track => fixWS`

      ${track.name}

      ${transformMultiline(track.commentary)}
      - `).join('\n')} + `).join('\n') || ``} `) .join('\n') } @@ -1516,10 +1529,10 @@ function generateHeaderForListings(listingDescriptors, currentDirectoryParts) { ? currentDirectoryParts.join('/') : currentDirectoryParts }/index.html">` + ( - (currentDirectoryParts === 'all-commentary') ? `All Commentary` : - (currentDirectoryParts === 'random') ? `Random Pages` : + currentDirectoryParts === 'all-commentary' ? `All Commentary` : + currentDirectoryParts === 'random' ? `Random Pages` : listingDescriptors.find(([ ldDirectoryParts ]) => ldDirectoryParts === currentDirectoryParts)[1] - ) + ``} + ) + `` || ``} `; } @@ -1535,14 +1548,14 @@ function generateLinkIndexForListings(listingDescriptors, currentDirectoryParts) return fixWS` @@ -1664,7 +1677,7 @@ function fancifyURL(url, {album = false} = {}) { }`; } -function chronologyButtons(currentTrack, { +function chronologyLinks(currentTrack, { mapProperty, toArtist, filters, // {property, toArtist} @@ -1703,7 +1716,7 @@ function chronologyButtons(currentTrack, { return fixWS`
      ${heading} - ${parts.length && `(${parts.join(', ')})`} + ${parts.length && `(${parts.join(', ')})` || ``}
      `; }).filter(Boolean).join('\n'); @@ -1717,15 +1730,31 @@ function generateHeaderForAlbum(album, currentTrack = null) {

      Home / ${album.name} - ${currentTrack && `/ ${currentTrack.name}`} - ${album.tracks.length > 1 && `(${[ - previous && `Previous`, - next && `Next`, - `${currentTrack ? 'Random' : 'Random Track'}` - ].filter(Boolean).join(', ')})`} + ${currentTrack && `/ ${currentTrack.name}` || ` `} + ${album.tracks.length > 1 && fixWS` + (${[ + previous && `Previous`, + next && `Next`, + `${currentTrack ? 'Random' : 'Random Track'}` + ].filter(Boolean).join(', ')}) + ` || ``}

      - ${currentTrack === null && chronologyButtons(album, { + ${currentTrack && chronologyLinks(currentTrack, { + headingWord: 'track', + sourceData: allTracks, + filters: [ + { + mapProperty: 'artists', + toArtist: artist => artist + }, + { + mapProperty: 'contributors', + toArtist: ({ who }) => who + } + ] + }) || ``} + ${chronologyLinks(currentTrack || album, { headingWord: 'cover art', sourceData: justEverythingSortedByArtDateMan, filters: [ @@ -1734,33 +1763,7 @@ function generateHeaderForAlbum(album, currentTrack = null) { toArtist: ({ who }) => who } ] - })} - ${currentTrack && fixWS` - ${chronologyButtons(currentTrack, { - headingWord: 'track', - sourceData: allTracks, - filters: [ - { - mapProperty: 'artists', - toArtist: artist => artist - }, - { - mapProperty: 'contributors', - toArtist: ({ who }) => who - } - ] - })} - ${chronologyButtons(currentTrack, { - headingWord: 'cover art', - sourceData: justEverythingSortedByArtDateMan, - filters: [ - { - mapProperty: 'coverArtists', - toArtist: ({ who }) => who - } - ] - })} - `} + }) || ``}
      `; } @@ -1770,9 +1773,7 @@ function generateSidebarForAlbum(album, currentTrack = null) { return fixWS`

      ${album.name}

      <${listTag}> - ${album.tracks.map(track => fixWS` -
    • ${track.name}
    • - `).join('\n')} + ${album.tracks.map(track => `${track.name}`).join('\n')} ` } @@ -1858,6 +1859,11 @@ function rebaseURLs(directory, html) { }); } +function classes(...args) { + const values = args.filter(Boolean); + return values.length ? ` class="${values.join(' ')}"` : ''; +} + async function main() { // 8ut wait, you might say, how do we know which al8um these data files // correspond to???????? You wouldn't dare suggest we parse the actual @@ -1925,7 +1931,12 @@ async function main() { } allTracks = C.getAllTracks(albumData); - artistNames = C.getArtistNames(albumData, flashData); + artistNames = Array.from(new Set([ + ...albumData.reduce((acc, album) => acc.concat((album.coverArtists || []).map(({ who }) => who), album.tracks.reduce((acc, track) => acc.concat(track.artists, (track.coverArtists || []).map(({ who }) => who)), [])), []), + ...flashData.filter(flash => !flash.act8r8k).reduce((acc, flash) => acc.concat(flash.contributors.map(({ who }) => who)), []), + ...artistData.filter(artist => !artist.alias).map(artist => artist.name) + ])); + artistNames.sort((a, b) => a.toLowerCase() < b.toLowerCase() ? -1 : a.toLowerCase() > b.toLowerCase() ? 1 : 0); officialAlbumData = albumData.filter(album => !album.isFanon); -- cgit 1.3.0-6-gf8a5