From b3fa3971241c06c3f7f9d970a1304e5d4acc7f41 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sat, 6 Feb 2021 14:23:28 -0400 Subject: individual album commentary pages --- common/common.js | 1 + upd8.js | 167 ++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 104 insertions(+), 64 deletions(-) diff --git a/common/common.js b/common/common.js index d27abaa..92dca10 100644 --- a/common/common.js +++ b/common/common.js @@ -69,6 +69,7 @@ const C = { FLASH_DIRECTORY: 'flash', NEWS_DIRECTORY: 'news', GROUP_DIRECTORY: 'group', + COMMENTARY_DIRECTORY: 'commentary', JS_DISABLED_DIRECTORY: 'js-disabled', UNRELEASED_TRACKS_DIRECTORY: 'unreleased-tracks', diff --git a/upd8.js b/upd8.js index ba002d8..dabc4da 100755 --- a/upd8.js +++ b/upd8.js @@ -2060,6 +2060,9 @@ async function writeAlbumPage(album) { `} `; + + const commentaryEntries = [album, ...album.tracks].filter(x => x.commentary).length; + const listTag = getAlbumListTag(album); await writePage([C.ALBUM_DIRECTORY, album.directory], { title: album.name, @@ -2083,6 +2086,7 @@ async function writeAlbumPage(album) { ${+album.coverArtDate !== +album.date && `
Art released ${getDateString({date: album.coverArtDate})}.`}
Duration: ~${getDurationString(getTotalDuration(album.tracks))}.

+ ${commentaryEntries && `

View commentary page!

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

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

`} ${album.usesGroups ? fixWS`
@@ -3037,11 +3041,6 @@ function writeListingPages() { .map(({ tag, timesUsed }) => `
  • ${tag.name} (${s(timesUsed, 'time')})
  • `)] ].filter(Boolean); - const getWordCount = str => { - const wordCount = str.split(' ').length; - return `${Math.floor(wordCount / 100) / 10}k`; - }; - const releasedTracks = trackData.filter(track => track.album.directory !== C.UNRELEASED_TRACKS_DIRECTORY); const releasedAlbums = albumData.filter(album => album.directory !== C.UNRELEASED_TRACKS_DIRECTORY); @@ -3071,65 +3070,9 @@ function writeListingPages() { } }), - writePage([C.LISTING_DIRECTORY, 'all-commentary'], { - title: 'All Commentary', - - main: { - content: fixWS` -

    All Commentary

    -

    ${getWordCount(albumData.reduce((acc, a) => acc + [a, ...a.tracks].filter(x => x.commentary).map(x => x.commentary).join(' '), ''))} words, in all.
    Jump to a particular album:

    - - ${C.sortByDate(albumData.slice()) - .map(album => [album, ...album.tracks]) - .filter(x => x.some(y => y.commentary)) - .map(([ album, ...tracks ]) => fixWS` -

    ${album.name}

    - ${album.commentary && fixWS` -
    - ${transformMultiline(album.commentary)} -
    - `} - ${tracks.filter(t => t.commentary).map(track => fixWS` -

    ${track.name}

    -
    - ${transformMultiline(track.commentary)} -
    - `).join('\n')} - `) - .join('\n') - } - ` - }, - - sidebarLeft: { - content: generateSidebarForListings(listingDescriptors, 'all-commentary') - }, - - nav: { - links: [ - ['./', wikiInfo.shortName], - [`${C.LISTING_DIRECTORY}/`, 'Listings'], - [`${C.LISTING_DIRECTORY}/all-commentary`, 'All Commentary'] - ] - } - }), + mkdirp(path.join(outputPath, C.LISTING_DIRECTORY, 'all-commentary')) + .then(() => writeFile(path.join(outputPath, C.LISTING_DIRECTORY, 'all-commentary', 'index.html'), + generateRedirectPage('Album Commentary', `/${C.COMMENTARY_DIRECTORY}/`))), writePage([C.LISTING_DIRECTORY, 'random'], { title: 'Random Pages', @@ -3234,6 +3177,100 @@ function generateLinkIndexForListings(listingDescriptors, currentDirectoryParts) `; } +function filterAlbumsByCommentary() { + return albumData.filter(album => [album, ...album.tracks].some(x => x.commentary)); +} + +function getWordCount(str) { + const wordCount = str.split(' ').length; + return `${Math.floor(wordCount / 100) / 10}k`; +} + +function writeCommentaryPages() { + return progressPromiseAll('Writing commentary pages.', queue([ + writeCommentaryIndex, + ...filterAlbumsByCommentary().map(curry(writeAlbumCommentaryPage)) + ], queueSize)); +} + +async function writeCommentaryIndex() { + await writePage([C.COMMENTARY_DIRECTORY], { + title: 'Commentary', + + main: { + content: fixWS` +
    +

    Commentary

    +

    ${getWordCount(albumData.reduce((acc, a) => acc + [a, ...a.tracks].filter(x => x.commentary).map(x => x.commentary).join(' ')))} words across ${albumData.reduce((acc, a) => acc + [a, ...a.tracks].filter(x => x.commentary).length, 0)} entries, in all.

    +

    Choose an album:

    +
      + ${filterAlbumsByCommentary() + .map(album => fixWS` +
    • + ${album.name} + (${(() => { + const things = [album, ...album.tracks]; + const cThings = things.filter(x => x.commentary); + // const numStr = album.tracks.every(t => t.commentary) ? 'full commentary' : `${cThings.length} entries`; + const numStr = `${cThings.length}/${things.length} entries`; + return `${numStr}; ${getWordCount(cThings.map(x => x.commentary).join(' '))} words`; + })()}) +
    • + `) + .join('\n') + } +
    +
    + ` + }, + + nav: { + links: [ + ['./', wikiInfo.shortName], + [`${C.COMMENTARY_DIRECTORY}/`, 'Commentary'] + ] + } + }); +} + +async function writeAlbumCommentaryPage(album) { + await writePage([C.COMMENTARY_DIRECTORY, C.ALBUM_DIRECTORY, album.directory], { + title: `${album.name} - Commentary`, + stylesheet: getAlbumStylesheet(album), + theme: getThemeString(album), + + main: { + content: fixWS` +
    +

    ${album.name} - Commentary

    +

    ${getWordCount([album, ...album.tracks].filter(x => x.commentary).map(x => x.commentary).join(' '))} words across ${[album, ...album.tracks].filter(x => x.commentary).length} entries.

    + ${album.commentary && fixWS` +

    Album commentary

    +
    + ${transformMultiline(album.commentary)} +
    + `} + ${album.tracks.filter(t => t.commentary).map(track => fixWS` +

    ${track.name}

    +
    + ${transformMultiline(track.commentary)} +
    + `).join('\n')} +
    + ` + }, + + nav: { + links: [ + ['./', wikiInfo.shortName], + [`${C.COMMENTARY_DIRECTORY}/`, 'Commentary'], + [null, 'Album:'], + [`${C.COMMENTARY_DIRECTORY}/${C.ALBUM_DIRECTORY}/${album.directory}/`, album.name] + ] + } + }); +} + function writeTagPages() { if (!wikiInfo.features.artTagUI) { return; @@ -4365,6 +4402,7 @@ async function main() { album: {type: 'flag'}, artist: {type: 'flag'}, + commentary: {type: 'flag'}, flash: {type: 'flag'}, group: {type: 'flag'}, list: {type: 'flag'}, @@ -4385,6 +4423,7 @@ async function main() { if (buildAll || buildFlags.news) await writeNewsPages(); if (buildAll || buildFlags.list) await writeListingPages(); if (buildAll || buildFlags.tag) await writeTagPages(); + if (buildAll || buildFlags.commentary) await writeCommentaryPages(); if (buildAll || buildFlags.group) await writeGroupPages(); if (buildAll || buildFlags.album) await writeAlbumPages(); if (buildAll || buildFlags.track) await writeTrackPages(); -- cgit 1.3.0-6-gf8a5