diff options
Diffstat (limited to 'src/content/dependencies/generateCommentaryIndexPage.js')
| -rw-r--r-- | src/content/dependencies/generateCommentaryIndexPage.js | 87 |
1 files changed, 43 insertions, 44 deletions
diff --git a/src/content/dependencies/generateCommentaryIndexPage.js b/src/content/dependencies/generateCommentaryIndexPage.js index d68ba42e..ced5dddd 100644 --- a/src/content/dependencies/generateCommentaryIndexPage.js +++ b/src/content/dependencies/generateCommentaryIndexPage.js @@ -1,13 +1,16 @@ import {sortChronologically} from '#sort'; -import {accumulateSum, filterMultipleArrays, stitchArrays} from '#sugar'; -export default { - contentDependencies: ['generatePageLayout', 'linkAlbumCommentary'], - extraDependencies: ['html', 'language', 'wikiData'], +import { + accumulateSum, + empty, + filterMultipleArrays, + stitchArrays, + transposeArrays, +} from '#sugar'; - sprawl({albumData}) { - return {albumData}; - }, +export default { + sprawl: ({albumData}) => + ({albumData}), query(sprawl) { const query = {}; @@ -15,50 +18,45 @@ export default { query.albums = sortChronologically(sprawl.albumData.slice()); - const entries = + query.entries = query.albums.map(album => [album, ...album.tracks] - .filter(({commentary}) => commentary) .flatMap(({commentary}) => commentary)); - query.wordCounts = - entries.map(entries => - accumulateSum( - entries, - entry => entry.body.split(' ').length)); - - query.entryCounts = - entries.map(entries => entries.length); - - filterMultipleArrays(query.albums, query.wordCounts, query.entryCounts, - (album, wordCount, entryCount) => entryCount >= 1); + filterMultipleArrays(query.albums, query.entries, + (_album, entries) => !empty(entries)); return query; }, - relations(relation, query) { - return { - layout: - relation('generatePageLayout'), + relations: (relation, query) => ({ + layout: + relation('generatePageLayout'), - albumLinks: - query.albums - .map(album => relation('linkAlbumCommentary', album)), - }; - }, + albumLinks: + query.albums + .map(album => relation('linkAlbumCommentary', album)), - data(query) { - return { - wordCounts: query.wordCounts, - entryCounts: query.entryCounts, + albumTotals: + query.entries + .map(entries => relation('getContentEntryTotals', entries)), + }), - totalWordCount: accumulateSum(query.wordCounts), - totalEntryCount: accumulateSum(query.entryCounts), - }; - }, + generate(relations, {html, language}) { + const [wordCounts, entryCounts] = + transposeArrays( + relations.albumTotals.map(totals => [ + totals.wordCount, + totals.entryCount, + ])); + + const totalWordCount = + accumulateSum(wordCounts); - generate: (data, relations, {html, language}) => - language.encapsulate('commentaryIndex', pageCapsule => + const totalEntryCount = + accumulateSum(entryCounts); + + return language.encapsulate('commentaryIndex', pageCapsule => relations.layout.slots({ title: language.$(pageCapsule, 'title'), @@ -69,11 +67,11 @@ export default { html.tag('p', language.$(pageCapsule, 'infoLine', { words: html.tag('b', - language.formatWordCount(data.totalWordCount, {unit: true})), + language.formatWordCount(totalWordCount, {unit: true})), entries: html.tag('b', - language.countCommentaryEntries(data.totalEntryCount, {unit: true})), + language.countCommentaryEntries(totalEntryCount, {unit: true})), })), language.encapsulate(pageCapsule, 'albumList', listCapsule => [ @@ -83,8 +81,8 @@ export default { html.tag('ul', stitchArrays({ albumLink: relations.albumLinks, - wordCount: data.wordCounts, - entryCount: data.entryCounts, + wordCount: wordCounts, + entryCount: entryCounts, }).map(({albumLink, wordCount, entryCount}) => html.tag('li', language.$(listCapsule, 'item', { @@ -100,5 +98,6 @@ export default { {auto: 'home'}, {auto: 'current'}, ], - })), + })); + }, }; |