From a312b897e99251ff9d53014dbb86c7a3b7b6609c Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Sun, 1 Jan 2023 17:43:35 -0400 Subject: specify homepage navbar links & order in data ...rather than just making a guess off the order files are listed by directory access, and using out-of-place 'Show in Navigation Bar' --- src/data/things/homepage-layout.js | 6 ++++++ src/data/things/static-page.js | 1 - src/data/yaml.js | 5 +++-- src/page/homepage.js | 31 +++++++++++++++---------------- src/util/link.js | 6 +++++- 5 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/data/things/homepage-layout.js b/src/data/things/homepage-layout.js index 344716c..c18e811 100644 --- a/src/data/things/homepage-layout.js +++ b/src/data/things/homepage-layout.js @@ -7,6 +7,7 @@ export class HomepageLayout extends Thing { HomepageLayoutRow, validators: { + isStringNonEmpty, validateArrayItems, validateInstanceOf, }, @@ -15,6 +16,11 @@ export class HomepageLayout extends Thing { sidebarContent: Thing.common.simpleString(), + navbarLinks: { + flags: {update: true, expose: true}, + update: {validate: validateArrayItems(isStringNonEmpty)}, + }, + rows: { flags: {update: true, expose: true}, diff --git a/src/data/things/static-page.js b/src/data/things/static-page.js index 226e0b6..3d8d474 100644 --- a/src/data/things/static-page.js +++ b/src/data/things/static-page.js @@ -25,6 +25,5 @@ export class StaticPage extends Thing { directory: Thing.common.directory(), content: Thing.common.simpleString(), stylesheet: Thing.common.simpleString(), - showInNavigationBar: Thing.common.flag(true), }); } diff --git a/src/data/yaml.js b/src/data/yaml.js index 6ddd3a1..02e56d6 100644 --- a/src/data/yaml.js +++ b/src/data/yaml.js @@ -377,8 +377,6 @@ export const processStaticPageDocument = makeProcessDocument(T.StaticPage, { content: 'Content', stylesheet: 'Style', - - showInNavigationBar: 'Show in Navigation Bar', }, }); @@ -403,6 +401,7 @@ export const processWikiInfoDocument = makeProcessDocument(T.WikiInfo, { export const processHomepageLayoutDocument = makeProcessDocument(T.HomepageLayout, { propertyFieldMapping: { sidebarContent: 'Sidebar Content', + navbarLinks: 'Navbar Links', }, ignoredFields: ['Homepage'], @@ -896,6 +895,8 @@ export const dataSteps = [ processDocument: processStaticPageDocument, save(staticPageData) { + sortAlphabetically(staticPageData); + return {staticPageData}; }, }, diff --git a/src/page/homepage.js b/src/page/homepage.js index d34f117..882daf7 100644 --- a/src/page/homepage.js +++ b/src/page/homepage.js @@ -1,6 +1,10 @@ // Homepage specification. -import {empty} from '../util/sugar.js'; +import { + bindOpts, + empty, + withEntries, +} from '../util/sugar.js'; import { getNewAdditions, @@ -193,21 +197,16 @@ export function writeTargetless({wikiData}) { links: [ link.home('', {text: wikiInfo.nameShort, class: 'current', to}), - wikiInfo.enableListings && - link.listingIndex('', { - text: language.$('listingIndex.title'), - to, - }), - - wikiInfo.enableNews && - link.newsIndex('', {text: language.$('newsIndex.title'), to}), - - wikiInfo.enableFlashesAndGames && - link.flashIndex('', {text: language.$('flashIndex.title'), to}), - - ...staticPageData - .filter((page) => page.showInNavigationBar) - .map((page) => link.staticPage(page, {text: page.nameShort})), + ...html.fragment( + homepageLayout.navbarLinks?.map(text => + transformInline(text, { + link: + withEntries(link, entries => + entries.map(([key, fn]) => + [key, bindOpts(fn, { + preferShortName: true, + })])), + }))), ] .filter(Boolean) .map((html) => ({html})), diff --git a/src/util/link.js b/src/util/link.js index 7d53edc..e692255 100644 --- a/src/util/link.js +++ b/src/util/link.js @@ -38,6 +38,7 @@ const linkHelper = class: className = '', color: color2 = true, hash = '', + preferShortName = false, }) => { let href = hrefFn(thing, {to}); @@ -65,7 +66,10 @@ const linkHelper = : '', class: className, }, - text || thing.name + (text || + (preferShortName + ? thing.nameShort ?? thing.name + : thing.name)) ); }; -- cgit 1.3.0-6-gf8a5