From 22c69347998f1ca076f9131567903cd983cb5960 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Thu, 1 Jan 2026 14:56:20 -0400 Subject: content: generateAlbumCommentaryPage: proper word count --- .../dependencies/generateAlbumCommentaryPage.js | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/content/dependencies/generateAlbumCommentaryPage.js b/src/content/dependencies/generateAlbumCommentaryPage.js index 4c203877..febaba19 100644 --- a/src/content/dependencies/generateAlbumCommentaryPage.js +++ b/src/content/dependencies/generateAlbumCommentaryPage.js @@ -1,4 +1,6 @@ -import {empty, stitchArrays} from '#sugar'; +import multilingualWordCount from 'word-count'; + +import {accumulateSum, empty, stitchArrays} from '#sugar'; export default { query(album) { @@ -37,6 +39,11 @@ export default { relations.albumNavAccent = relation('generateAlbumNavAccent', album, null); + relations.bodiesForWordCount = + [album.commentary, ...album.tracks.map(t => t.commentary)] + .flat() + .map(entry => relation('transformContent', entry.body)); + if (!empty(album.commentary)) { relations.albumCommentaryHeading = relation('generateContentHeading'); @@ -155,13 +162,23 @@ export default { const workingOptions = {}; if (data.entryCount >= 1) { + const wordCount = + accumulateSum( + relations.bodiesForWordCount.flatMap(body => + multilingualWordCount( + html.resolve( + body.slot('mode', 'multiline'), + {normalize: 'plain'})))); + + const {entryCount} = data; + workingOptions.words = html.tag('b', - language.formatWordCount(data.wordCount, {unit: true})); + language.formatWordCount(wordCount, {unit: true})); workingOptions.entries = html.tag('b', - language.countCommentaryEntries(data.entryCount, {unit: true})); + language.countCommentaryEntries(entryCount, {unit: true})); } if (data.entryCount === 0) { -- cgit 1.3.0-6-gf8a5