From 32ab33828c3fb3e5b62e811d61b2a6a45c1e1390 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sat, 6 Feb 2021 13:24:26 -0400 Subject: generate individual news entry pages --- static/site.css | 6 ++-- upd8.js | 109 ++++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 87 insertions(+), 28 deletions(-) diff --git a/static/site.css b/static/site.css index 585fca0..bf3303a 100644 --- a/static/site.css +++ b/static/site.css @@ -313,11 +313,13 @@ footer > :last-child { margin-bottom: 5px; } -.sidebar article h2 { +.sidebar article h2, +.news-index h2 { border-bottom: 1px dotted white; } -.sidebar article h2 time { +.sidebar article h2 time, +.news-index time { float: right; font-weight: normal; } diff --git a/upd8.js b/upd8.js index 5ff1a8b..a837bef 100755 --- a/upd8.js +++ b/upd8.js @@ -954,9 +954,9 @@ async function processNewsDataFile(file) { return {error: 'Expected "Name" field!'}; } - const id = getBasicField(section, 'ID'); - if (!id) { - return {error: 'Expected "ID" field!'}; + const directory = getBasicField(section, 'Directory') || getBasicField(section, 'ID'); + if (!directory) { + return {error: 'Expected "Directory" field!'}; } let body = getMultilineField(section, 'Body'); @@ -979,10 +979,10 @@ async function processNewsDataFile(file) { return { name, + directory, body, bodyShort, - date, - id + date }; }); } @@ -1822,9 +1822,9 @@ async function writeHomepage() {

News

${newsData.slice(0, 3).map((entry, i) => fixWS`
-

${entry.name}

+

${entry.name}

${transformMultiline(entry.bodyShort)} - ${entry.bodyShort !== entry.body && `(View rest of entry!)`} + ${entry.bodyShort !== entry.body && `(View rest of entry!)`}
`).join('\n')} ` : `

News requested in content description but this feature isn't enabled

`) @@ -1852,6 +1852,77 @@ async function writeHomepage() { }); } +function writeNewsPages() { + if (!wikiInfo.features.news) { + return; + } + + return progressPromiseAll('Writing news pages.', queue([ + writeNewsIndex, + ...newsData.map(curry(writeNewsPage)) + ], queueSize)); +} + +async function writeNewsIndex() { + await writePage([C.NEWS_DIRECTORY], { + title: 'News', + main: { + content: fixWS` +
+

News

+ ${newsData.map(entry => fixWS` + + `).join('\n')} +
+ ` + }, + nav: { + links: [ + ['./', wikiInfo.shortName], + [`${C.NEWS_DIRECTORY}/`, 'News'] + ] + } + }); +} + +async function writeNewsPage(entry) { + // The newsData list is sorted reverse chronologically (newest ones first), + // so the way we find next/previous entries is flipped from normal. + const index = newsData.indexOf(entry) + const previous = newsData[index + 1]; + const next = newsData[index - 1]; + const nextPreviousLinks = [ + previous && `Previous`, + next && `Next` + ].filter(Boolean).join(', '); + + await writePage([C.NEWS_DIRECTORY, entry.directory], { + title: `News - ${entry.name}`, + main: { + content: fixWS` +
+

${entry.name}

+

(Published ${getDateString(entry)}.)

+ ${transformMultiline(entry.body)} +
+ ` + }, + nav: { + links: [ + ['./', wikiInfo.shortName], + [`${C.NEWS_DIRECTORY}/`, 'News'], + [null, getDateString(entry) + ':'], + [`${C.NEWS_DIRECTORY}/${entry.directory}/`, entry.name], + nextPreviousLinks && [null, `(${nextPreviousLinks})`] + ] + } + }); +} + function writeMiscellaneousPages() { return progressPromiseAll('Writing miscellaneous pages.', [ writeHomepage(), @@ -1904,25 +1975,6 @@ function writeMiscellaneousPages() { nav: {simple: true} }), - wikiInfo.features.news && - writePage([C.NEWS_DIRECTORY], { - title: 'News', - main: { - content: fixWS` -
-

News

- ${newsData.map(entry => fixWS` - - `).join('\n')} -
- ` - }, - nav: {simple: true} - }), - writeFile(path.join(outputPath, 'data.json'), fixWS` { "albumData": ${stringifyAlbumData()}, @@ -4062,6 +4114,9 @@ async function main() { } return; } + + C.sortByDate(newsData); + newsData.reverse(); } { @@ -4301,6 +4356,7 @@ async function main() { group: {type: 'flag'}, list: {type: 'flag'}, misc: {type: 'flag'}, + news: {type: 'flag'}, static: {type: 'flag'}, tag: {type: 'flag'}, track: {type: 'flag'}, @@ -4313,6 +4369,7 @@ async function main() { await writeSymlinks(); if (buildAll || buildFlags.misc) await writeMiscellaneousPages(); if (buildAll || buildFlags.static) await writeStaticPages(); + if (buildAll || buildFlags.news) await writeNewsPages(); if (buildAll || buildFlags.list) await writeListingPages(); if (buildAll || buildFlags.tag) await writeTagPages(); if (buildAll || buildFlags.group) await writeGroupPages(); -- cgit 1.3.0-6-gf8a5