UNPKG

@kth/kth-node-web-common

Version:

Common components for node-web projects

68 lines (59 loc) 1.67 kB
// @ts-check const Handlebars = require('handlebars') const log = require('@kth/log') /** * @param {{url: string, label: string}[]} pathList * @param {string} lang * * @returns {string} HTML as string * */ function getBreadcrumbsMarkup(pathList, lang) { /** * list of anchor tags * @type {string[]} */ const listItems = [] pathList.forEach(({ url, label }) => { listItems.push(`<a href="${url}">${label}</a>`) }) const ariaLabel = /^sv/.test(lang) ? 'Brödsmulor' : 'Breadcrumbs' const output = ` <nav id="breadcrumbs" aria-label="${ariaLabel}" class="kth-breadcrumbs"> <ol class="kth-breadcrumbs__list"> ${listItems.reduce((items, item) => items + `<li>${item}</li>`, '')} </ol> </nav> `.replace(/,/g, '') return output } /** * @param {{url: string, label: string}[]} pathList * @param {string} lang, e.g. "en" * * @returns {Handlebars.SafeString|null} HTML as safe string (no need to escape) * * Example * {{breadcrumbs pathList lang}} */ function breadcrumbs(pathList, lang) { const pathListIsValid = Array.isArray(pathList) && pathList.every( item => typeof item.label === 'string' && item.label !== '' && typeof item.url === 'string' && item.url !== '' ) if (!pathListIsValid) { log.warn('[breadcrumbs] helper requires first parameter to be a list of path item objects') return null } const output = getBreadcrumbsMarkup(pathList, lang) return new Handlebars.SafeString(output) } function registerBreadcrumbHelper() { Handlebars.registerHelper('breadcrumbs', breadcrumbs) } module.exports = { registerBreadcrumbHelper, breadcrumbs, getBreadcrumbsMarkup, }