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 d27abaa6..92dca106 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 ba002d85..dabc4da7 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())
- .filter(album => [album, ...album.tracks].some(x => x.commentary))
- .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')
- }
-
- ${C.sortByDate(albumData.slice())
- .map(album => [album, ...album.tracks])
- .filter(x => x.some(y => y.commentary))
- .map(([ album, ...tracks ]) => fixWS`
-
- ${album.commentary && fixWS`
-
- ${transformMultiline(album.commentary)}
-
- `}
- ${tracks.filter(t => t.commentary).map(track => fixWS`
-
-
- ${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`
+
+
${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`
+
+
+ ${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