UNPKG

@canalplus/readme.doc

Version:

Readme's an Extremely Accessible Documentation MakEr

84 lines (83 loc) 4.18 kB
import * as path from "path"; import { encode } from "html-entities"; import { getGithubSvg, toUriCompatibleRelativePath } from "./utils.js"; /** * Construct exhaustive list of documentation links as an HTML string. * @param {Array.<Object>} links * @param {number} currentLinkIdx * @param {Array.<number>} currentPageIndexes * @param {string} currentPath * @returns {string} */ export default function generatePageListHtml(links, currentLinkIdx, currentPageIndexes, currentPath) { const currentDir = path.dirname(currentPath); const linksHtml = links .map((l, linkIdx) => { switch (l.type) { case "local-doc": { const isActiveCat = linkIdx === currentLinkIdx; const catActiveClasses = isActiveCat ? " opened active" : ""; const catHtml = `<li class="page-list-item">` + `<div class="page-list-group${catActiveClasses}">` + encode(l.displayName) + `</div><ul class="page-list-cat-group">`; return (catHtml + l.pages .map((currentPage, pageidx) => { const isPageActive = isActiveCat && pageidx === currentPageIndexes[0]; const { displayName } = currentPage; if (!currentPage.isPageGroup) { const pageActiveClasses = isPageActive ? " active" : ""; const relativeUri = toUriCompatibleRelativePath(currentPage.outputFile, currentDir); return (`<li class="page-list-item${pageActiveClasses}">` + `<a href="${encode(relativeUri)}">` + encode(displayName) + `</a></li>`); } const pageActiveClasses = (isPageActive ? " active" : "") + (isPageActive || currentPage.defaultOpen ? " opened" : ""); const pageGroupHtml = `<li>` + `<div class="page-list-item page-list-group${pageActiveClasses}">` + encode(displayName) + `</div><ul class="page-list-group-group">`; return (pageGroupHtml + currentPage.pages .map((currentSubPage, spIdx) => { const spActiveClasses = isPageActive && spIdx === currentPageIndexes[1] ? " active" : ""; const { displayName: subDisplayName, outputFile: subOutputFile, } = currentSubPage; const relativeUri = toUriCompatibleRelativePath(subOutputFile, currentDir); return (`<li class="page-list-item${spActiveClasses}">` + `<a href="${encode(relativeUri)}">` + encode(subDisplayName) + `</a></li>`); }) .join("\n") + "</ul></li>"); }) .join("\n") + "</ul></li>"); } case "external-link": { const cleanedHref = encode(l.link); return (`<li class="page-list-item">` + `<a href="${cleanedHref}">` + encode(l.displayName) + "</a></li>"); } case "github-link": const cleanedHref = encode(l.link); return (`<li class="page-list-item">` + `<a aria-label="Link to repository" href="${cleanedHref}">` + getGithubSvg() + "</a></li>"); case "search": return ""; case "version": return ""; } }) .join("\n"); return `<ul class="page-list-wrapper">` + linksHtml + "</ul>"; }