From f215bf15ae61f9ad08f8992cbf273f0b1d0ff6a0 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Wed, 21 Dec 2022 20:09:17 -0400 Subject: polish up album & album extras nav --- src/misc-templates.js | 9 ++- src/page/album-commentary.js | 23 +++----- src/page/album.js | 137 +++++++++++++++++++++++++++++++++---------- src/strings-default.json | 2 + src/upd8.js | 6 +- 5 files changed, 122 insertions(+), 55 deletions(-) diff --git a/src/misc-templates.js b/src/misc-templates.js index 5d08270..5dd9649 100644 --- a/src/misc-templates.js +++ b/src/misc-templates.js @@ -676,6 +676,7 @@ function unbound_generateNavigationLinks(current, { data, isMain = true, linkKey = 'anything', + returnAsArray = false, }) { let previousLink, nextLink; @@ -713,11 +714,13 @@ function unbound_generateNavigationLinks(current, { ...additionalLinks, ].filter(Boolean); - if (!links.length) { + if (returnAsArray) { + return links; + } else if (empty(links)) { return ''; + } else { + return language.formatUnitList(links); } - - return language.formatUnitList(links); } // Sticky heading, ooooo diff --git a/src/page/album-commentary.js b/src/page/album-commentary.js index b67dab0..74eee2b 100644 --- a/src/page/album-commentary.js +++ b/src/page/album-commentary.js @@ -1,5 +1,6 @@ // Album commentary page and index specifications. +import {generateAlbumExtrasPageNav} from './album.js'; import {accumulateSum} from '../util/sugar.js'; import {filterAlbumsByCommentary} from '../util/wiki-data.js'; @@ -38,7 +39,7 @@ export function write(album) { content: html.tag('div', {class: 'long-content'}, [ generateStickyHeadingContainer({ title: language.$('albumCommentaryPage.title', { - album: link.album(album), + album: album.name, }), }), @@ -70,21 +71,11 @@ export function write(album) { ]), }, - nav: { - linkContainerClasses: ['nav-links-hierarchy'], - links: [ - {toHome: true}, - { - path: ['localized.commentaryIndex'], - title: language.$('commentaryIndex.title'), - }, - { - html: language.$('albumCommentaryPage.nav.album', { - album: link.albumCommentary(album, {class: 'current'}), - }), - }, - ], - }, + nav: generateAlbumExtrasPageNav(album, 'commentary', { + html, + language, + link, + }), }), }; diff --git a/src/page/album.js b/src/page/album.js index ab44e65..fb738db 100644 --- a/src/page/album.js +++ b/src/page/album.js @@ -47,14 +47,9 @@ export function write(album, {wikiData}) { })); }; - const hasCommentaryEntries = - !empty([album, ...album.tracks].filter((x) => x.commentary)); const hasAdditionalFiles = !empty(album.additionalFiles); const albumDuration = getTotalDuration(album.tracks); - // TODO: code this obviously - const hasGalleryPage = true; - const displayTrackGroups = album.trackGroups && (album.trackGroups.length > 1 || @@ -237,14 +232,14 @@ export function write(album, {wikiData}) { hasAdditionalFiles && generateAdditionalFilesShortcut(album.additionalFiles), - hasGalleryPage && + checkGalleryPage(album) && language.$('releaseInfo.viewGallery', { link: link.albumGallery(album, { text: language.$('releaseInfo.viewGallery.link'), }), }), - hasCommentaryEntries && + checkCommentaryPage(album) && language.$('releaseInfo.viewCommentary', { link: link.albumCommentary(album, { text: language.$('releaseInfo.viewCommentary.link'), @@ -343,12 +338,16 @@ export function write(album, {wikiData}) { album: link.album(album, {class: 'current'}), }), }, + { + divider: false, + html: generateAlbumNavLinks(album, null, { + generateNavigationLinks, + html, + language, + link, + }), + } ], - bottomRowContent: generateAlbumNavLinks(album, null, { - generateNavigationLinks, - html, - language, - }), content: generateAlbumChronologyLinks(album, null, { generateChronologyLinks, html, @@ -373,6 +372,7 @@ export function write(album, {wikiData}) { // generateInfoGalleryLinks, // generateNavigationLinks, getAlbumCover, + getAlbumStylesheet, getGridHTML, getTrackCover, // getLinkThemeString, @@ -382,6 +382,7 @@ export function write(album, {wikiData}) { link, }) => ({ title: language.$('albumGalleryPage.title', {album: album.name}), + stylesheet: getAlbumStylesheet(album), themeColor: album.color, theme: getThemeString(album.color), @@ -429,6 +430,12 @@ export function write(album, {wikiData}) { })), ], }, + + nav: generateAlbumExtrasPageNav(album, 'gallery', { + html, + language, + link, + }), }), }; @@ -634,35 +641,101 @@ export function generateAlbumSecondaryNav(album, currentTrack, { }; } +function checkGalleryPage(_album) { + return true; +} + +function checkCommentaryPage(album) { + return !empty([album, ...album.tracks].filter((x) => x.commentary)); +} + export function generateAlbumNavLinks(album, currentTrack, { generateNavigationLinks, html, language, + link, + + currentExtra = null, + showTrackNavigation = true, + showExtraLinks = null, }) { const isTrackPage = !!currentTrack; - if (album.tracks.length <= 1) { - return ''; - } + showExtraLinks ??= currentTrack ? false : true; + + const extraLinks = showExtraLinks ? [ + checkGalleryPage(album) && + link.albumGallery(album, { + class: [currentExtra === 'gallery' && 'current'], + text: language.$('albumPage.nav.gallery'), + }), + + checkCommentaryPage(album) && + link.albumCommentary(album, { + class: [currentExtra === 'commentary' && 'current'], + text: language.$('albumPage.nav.commentary'), + }), + ].filter(Boolean) : []; + + const previousNextLinks = + showTrackNavigation && + album.tracks.length > 1 && + generateNavigationLinks(currentTrack, { + data: album.tracks, + linkKey: 'track', + returnAsArray: true, + }) + + const randomLink = + showTrackNavigation && + album.tracks.length > 1 && + html.tag('a', + { + href: '#', + 'data-random': 'track-in-album', + id: 'random-button' + }, + (isTrackPage + ? language.$('trackPage.nav.random') + : language.$('albumPage.nav.randomTrack'))); - const randomLink = html.tag('a', - { - href: '#', - 'data-random': 'track-in-album', - id: 'random-button' - }, - (isTrackPage - ? language.$('trackPage.nav.random') - : language.$('albumPage.nav.randomTrack'))); - - const navigationLinks = - generateNavigationLinks(currentTrack, { - additionalLinks: [randomLink], - data: album.tracks, - linkKey: 'track', - }); + const allLinks = [ + ...previousNextLinks || [], + ...extraLinks || [], + randomLink, + ].filter(Boolean); + + return `(${language.formatUnitList(allLinks)})`; +} + +export function generateAlbumExtrasPageNav(album, currentExtra, { + html, + language, + link, +}) { + return { + linkContainerClasses: ['nav-links-hierarchy'], + links: [ + {toHome: true}, + { + html: language.$('albumPage.nav.album', { + album: link.album(album, {class: 'current'}), + }), + }, + { + divider: false, + html: generateAlbumNavLinks(album, null, { + currentExtra, + showTrackNavigation: false, + showExtraLinks: true, - return `(${navigationLinks})`; + html, + language, + link, + }), + } + ], + }; } export function generateAlbumChronologyLinks(album, currentTrack, { diff --git a/src/strings-default.json b/src/strings-default.json index 4990bd1..ab08cdc 100644 --- a/src/strings-default.json +++ b/src/strings-default.json @@ -200,6 +200,8 @@ "albumPage.title": "{ALBUM}", "albumPage.nav.album": "{ALBUM}", "albumPage.nav.randomTrack": "Random Track", + "albumPage.nav.gallery": "Gallery", + "albumPage.nav.commentary": "Commentary", "albumGalleryPage.title": "{ALBUM} - Gallery", "albumGalleryPage.infoLine": "{TRACKS} totaling {DURATION}.", "albumGalleryPage.infoLine.withDate": "{TRACKS} totaling {DURATION}. Released {DATE}.", diff --git a/src/upd8.js b/src/upd8.js index 0de724f..20b0d28 100755 --- a/src/upd8.js +++ b/src/upd8.js @@ -1068,10 +1068,6 @@ export function generateDocumentHTML(pageInfo, { let partContent; if (typeof cur.html === 'string') { - if (!cur.html) { - logWarn`Empty HTML in nav link ${JSON.stringify(cur)}`; - console.trace(); - } partContent = cur.html; } else { const attributes = { @@ -1099,6 +1095,8 @@ export function generateDocumentHTML(pageInfo, { partContent = html.tag('a', attributes, linkTitle); } + if (!partContent) continue; + const part = html.tag('span', {class: cur.divider === false && 'no-divider'}, partContent); -- cgit 1.3.0-6-gf8a5