Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-docgen

Documentation publishing for Pudu: articles, API references, navigation, search, and static websites

0.1.0Apache-2.01

InstallClose

Layout.pudu

Pudu168 lines10.6 KB

GitHub ↗
1/** @Docgen.Theme.Layout — the default page layout and its overridable partials */2module PuduLangDocgen.Theme.Layout34/// The `layout.html` template.5const LAYOUT: Array[Str] = [6  "<!doctype html>",7  "<html\{\{#lang\}\} lang=\"\{\{lang\}\}\"\{\{/lang\}\} data-root=\"\{\{root\}\}\" data-theme=\"auto\">",8  "\{\{>head\}\}",9  "<body class=\"kind-\{\{kind\}\} layout-\{\{layout\}\}\">",10  "<a class=\"skip-link\" href=\"#main\">\{\{text.skip\}\}</a>",11  "\{\{^chromeless\}\}\{\{>header\}\}\{\{/chromeless\}\}",12  "<div class=\"page\">",13  "\{\{#showToc\}\}\{\{>sidebar\}\}\{\{/showToc\}\}",14  "<main id=\"main\" class=\"main\" tabindex=\"-1\">",15  "\{\{#showBreadcrumb\}\}\{\{>breadcrumb\}\}\{\{/showBreadcrumb\}\}",16  "\{\{>actions\}\}",17  "<article class=\"content\">",18  "\{\{\{body\}\}\}",19  "</article>",20  "\{\{>pager\}\}",21  "</main>",22  "\{\{#showAffix\}\}\{\{>affix\}\}\{\{/showAffix\}\}",23  "</div>",24  "\{\{#showFooter\}\}\{\{>footer\}\}\{\{/showFooter\}\}",25  "\{\{>scripts\}\}",26  "</body>",27  "</html>"28]2930/// The `partials/actions.html` template.31const PARTIAL_ACTIONS: Array[Str] = [32  "\{\{#hasActions\}\}<div class=\"page-actions\">",33  "\{\{#lastModified\}\}<span class=\"page-date\">\{\{text.updated\}\} <time datetime=\"\{\{lastModified\}\}\">\{\{lastModified\}\}</time></span>\{\{/lastModified\}\}",34  "\{\{#editUrl\}\}<a class=\"page-action\" href=\"\{\{editUrl\}\}\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M11.1 1.3a1.5 1.5 0 0 1 2.1 0l1.5 1.5a1.5 1.5 0 0 1 0 2.1l-8.5 8.5-3.7 1.1 1.1-3.7zM4.9 11.2l-.4 1.3 1.3-.4 6.7-6.7-.9-.9z\"/></svg>\{\{text.edit\}\}</a>\{\{/editUrl\}\}",35  "\{\{#pdfUrl\}\}<a class=\"page-action pdf\" href=\"\{\{pdfUrl\}\}\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M7.25 1h1.5v8.19l2.72-2.72 1.06 1.06L8 12.06 3.47 7.53l1.06-1.06 2.72 2.72zM2 13.5h12V15H2z\"/></svg>\{\{text.pdf\}\}</a>\{\{/pdfUrl\}\}",36  "</div>\{\{/hasActions\}\}"37]3839/// The `partials/affix.html` template.40const PARTIAL_AFFIX: Array[Str] = [41  "<aside class=\"affix\" aria-label=\"\{\{text.inThisArticle\}\}\">",42  "<div class=\"affix-inner\">",43  "<h2 class=\"affix-title\">\{\{text.inThisArticle\}\}</h2>",44  "<ul>\{\{#headings\}\}<li class=\"level-\{\{level\}\}\"><a href=\"#\{\{id\}\}\">\{\{title\}\}</a></li>\{\{/headings\}\}</ul>",45  "</div>",46  "</aside>"47]4849/// The `partials/breadcrumb.html` template.50const PARTIAL_BREADCRUMB: Array[Str] = [51  "<nav class=\"breadcrumb\" aria-label=\"\{\{text.breadcrumb\}\}\"><ol>\{\{#breadcrumb\}\}<li>\{\{#href\}\}<a href=\"\{\{href\}\}\">\{\{name\}\}</a>\{\{/href\}\}\{\{^href\}\}<span aria-current=\"page\">\{\{name\}\}</span>\{\{/href\}\}</li>\{\{/breadcrumb\}\}</ol></nav>"52]5354/// The `partials/footer.html` template.55const PARTIAL_FOOTER: Array[Str] = [56  "<footer class=\"site-footer\">",57  "<div class=\"footer-inner\">\{\{#footer\}\}\{\{\{footer\}\}\}\{\{/footer\}\}\{\{^footer\}\}<div class=\"footer-bar\">",58  "<span class=\"footer-name\">\{\{siteName\}\}</span>",59  "\{\{#hasFooterLinks\}\}<nav class=\"footer-links\" aria-label=\"\{\{text.footer\}\}\"><ul>\{\{#footerLinks\}\}<li><a href=\"\{\{href\}\}\">\{\{name\}\}</a></li>\{\{/footerLinks\}\}</ul></nav>\{\{/hasFooterLinks\}\}",60  "\{\{#copyright\}\}<p class=\"footer-copyright\">\{\{copyright\}\}</p>\{\{/copyright\}\}",61  "</div>\{\{/footer\}\}</div>",62  "</footer>"63]6465/// The `partials/head.html` template.66const PARTIAL_HEAD: Array[Str] = [67  "<head>",68  "<meta charset=\"utf-8\">",69  "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">",70  "<title>\{\{title\}\}\{\{#siteTitle\}\} | \{\{siteTitle\}\}\{\{/siteTitle\}\}</title>",71  "<meta name=\"generator\" content=\"pudu-lang-docgen\">",72  "\{\{#description\}\}<meta name=\"description\" content=\"\{\{description\}\}\">\{\{/description\}\}",73  "\{\{#keywords\}\}<meta name=\"keywords\" content=\"\{\{keywords\}\}\">\{\{/keywords\}\}",74  "\{\{#author\}\}<meta name=\"author\" content=\"\{\{author\}\}\">\{\{/author\}\}",75  "\{\{#noindex\}\}<meta name=\"robots\" content=\"noindex, nofollow\">\{\{/noindex\}\}",76  "\{\{#canonical\}\}<link rel=\"canonical\" href=\"\{\{canonical\}\}\">\{\{/canonical\}\}",77  "<meta property=\"og:type\" content=\"\{\{ogType\}\}\">",78  "<meta property=\"og:title\" content=\"\{\{title\}\}\">",79  "<meta property=\"og:site_name\" content=\"\{\{siteName\}\}\">",80  "\{\{#description\}\}<meta property=\"og:description\" content=\"\{\{description\}\}\">\{\{/description\}\}",81  "\{\{#canonical\}\}<meta property=\"og:url\" content=\"\{\{canonical\}\}\">\{\{/canonical\}\}",82  "\{\{#image\}\}<meta property=\"og:image\" content=\"\{\{image\}\}\">\{\{/image\}\}",83  "\{\{#lang\}\}<meta property=\"og:locale\" content=\"\{\{lang\}\}\">\{\{/lang\}\}",84  "<meta name=\"twitter:card\" content=\"\{\{#image\}\}summary_large_image\{\{/image\}\}\{\{^image\}\}summary\{\{/image\}\}\">",85  "<meta name=\"twitter:title\" content=\"\{\{title\}\}\">",86  "\{\{#description\}\}<meta name=\"twitter:description\" content=\"\{\{description\}\}\">\{\{/description\}\}",87  "\{\{#image\}\}<meta name=\"twitter:image\" content=\"\{\{image\}\}\">\{\{/image\}\}",88  "\{\{#twitter\}\}<meta name=\"twitter:site\" content=\"\{\{twitter\}\}\">\{\{/twitter\}\}",89  "\{\{#extraMeta\}\}<meta name=\"\{\{name\}\}\" content=\"\{\{content\}\}\">",90  "\{\{/extraMeta\}\}",91  "<meta name=\"color-scheme\" content=\"light dark\">",92  "\{\{#themeColor\}\}<meta name=\"theme-color\" content=\"\{\{themeColor\}\}\">\{\{/themeColor\}\}",93  "\{\{#favicon\}\}<link rel=\"icon\" href=\"\{\{favicon\}\}\">\{\{/favicon\}\}",94  "\{\{#touchIcon\}\}<link rel=\"apple-touch-icon\" href=\"\{\{touchIcon\}\}\">\{\{/touchIcon\}\}",95  "<link rel=\"stylesheet\" href=\"\{\{root\}\}_assets/site.css\">",96  "\{\{#customStyle\}\}<link rel=\"stylesheet\" href=\"\{\{customStyle\}\}\">\{\{/customStyle\}\}",97  "\{\{#structuredData\}\}<script type=\"application/ld+json\">\{\{\{structuredData\}\}\}</script>\{\{/structuredData\}\}",98  "\{\{#analytics\}\}<script async src=\"https://www.googletagmanager.com/gtag/js?id=\{\{analytics\}\}\"></script>",99  "<script>window.dataLayer=window.dataLayer||[];function gtag()\{dataLayer.push(arguments)\}gtag(\"js\",new Date());gtag(\"config\",\"\{\{analytics\}\}\");</script>\{\{/analytics\}\}",100  "<script>try\{var t=localStorage.getItem(\"docgen-theme\");if(t)document.documentElement.setAttribute(\"data-theme\",t)\}catch(e)\{\}</script>",101  "</head>"102]103104/// The `partials/header.html` template.105const PARTIAL_HEADER: Array[Str] = [106  "<header class=\"site-header\">",107  "<div class=\"header-inner\">",108  "\{\{#showToc\}\}<button type=\"button\" class=\"icon-button menu-toggle\" aria-controls=\"sidebar\" aria-expanded=\"false\" aria-label=\"\{\{text.menu\}\}\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M1 3h14v1.5H1zm0 4.25h14v1.5H1zM1 11.5h14V13H1z\"/></svg></button>\{\{/showToc\}\}",109  "<a class=\"brand\" href=\"\{\{logoUrl\}\}\">\{\{#logo\}\}<img class=\"brand-logo\" src=\"\{\{logo\}\}\" alt=\"\" width=\"24\" height=\"24\">\{\{/logo\}\}<span class=\"brand-name\">\{\{siteName\}\}</span></a>",110  "\{\{#showNavbar\}\}<nav id=\"navbar\" class=\"navbar\" aria-label=\"\{\{text.primary\}\}\"><ul>\{\{#navbar\}\}<li><a href=\"\{\{href\}\}\"\{\{#active\}\} aria-current=\"true\" class=\"active\"\{\{/active\}\}>\{\{name\}\}</a></li>\{\{/navbar\}\}</ul></nav>\{\{/showNavbar\}\}",111  "<div class=\"header-tools\">",112  "\{\{#searchEnabled\}\}<div class=\"search\" role=\"search\">",113  "<svg class=\"search-icon\" viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M6.5 1a5.5 5.5 0 0 1 4.38 8.82l3.65 3.65-1.06 1.06-3.65-3.65A5.5 5.5 0 1 1 6.5 1zm0 1.5a4 4 0 1 0 0 8 4 4 0 0 0 0-8z\"/></svg>",114  "<input id=\"search-input\" type=\"search\" placeholder=\"\{\{text.search\}\}\" aria-label=\"\{\{text.search\}\}\" autocomplete=\"off\" spellcheck=\"false\" aria-controls=\"search-results\" aria-expanded=\"false\">",115  "<div id=\"search-results\" class=\"search-results\" role=\"listbox\" hidden></div>",116  "</div>\{\{/searchEnabled\}\}",117  "\{\{#showNavbar\}\}<button type=\"button\" class=\"icon-button nav-toggle\" aria-controls=\"navbar\" aria-expanded=\"false\" aria-label=\"\{\{text.primary\}\}\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M2 6.5h2.5V9H2zm4.75 0h2.5V9h-2.5zm4.75 0H14V9h-2.5z\"/></svg></button>\{\{/showNavbar\}\}",118  "<button type=\"button\" class=\"icon-button theme-toggle\" aria-label=\"\{\{text.theme\}\}\" title=\"\{\{text.theme\}\}\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1zm0 1.5v11a5.5 5.5 0 0 1 0-11z\"/></svg></button>",119  "</div>",120  "</div>",121  "</header>"122]123124/// The `partials/pager.html` template.125const PARTIAL_PAGER: Array[Str] = [126  "\{\{#hasPager\}\}<nav class=\"pager\" aria-label=\"\{\{text.pager\}\}\">",127  "\{\{#previous\}\}<a class=\"pager-link previous\" href=\"\{\{href\}\}\" rel=\"prev\"><span class=\"pager-label\">\{\{text.previous\}\}</span><span class=\"pager-title\">\{\{name\}\}</span></a>\{\{/previous\}\}",128  "\{\{#next\}\}<a class=\"pager-link next\" href=\"\{\{href\}\}\" rel=\"next\"><span class=\"pager-label\">\{\{text.next\}\}</span><span class=\"pager-title\">\{\{name\}\}</span></a>\{\{/next\}\}",129  "</nav>\{\{/hasPager\}\}"130]131132/// The `partials/scripts.html` template.133const PARTIAL_SCRIPTS: Array[Str] = [134  "<script src=\"\{\{root\}\}_assets/site.js\" defer></script>",135  "\{\{#mermaid\}\}<script src=\"\{\{mermaidScript\}\}\" defer></script>\{\{/mermaid\}\}",136  "\{\{#math\}\}<script src=\"\{\{mathScript\}\}\" defer></script>\{\{/math\}\}",137  "\{\{#customScript\}\}<script src=\"\{\{customScript\}\}\" defer></script>\{\{/customScript\}\}"138]139140/// The `partials/sidebar.html` template.141const PARTIAL_SIDEBAR: Array[Str] = [142  "<aside id=\"sidebar\" class=\"sidebar\" aria-label=\"\{\{text.contents\}\}\">",143  "<div class=\"sidebar-inner\">",144  "\{\{#showTocFilter\}\}<div class=\"toc-filter\"><input type=\"search\" placeholder=\"\{\{text.filter\}\}\" aria-label=\"\{\{text.filter\}\}\" autocomplete=\"off\"></div>\{\{/showTocFilter\}\}",145  "<nav class=\"toc\" aria-label=\"\{\{text.contents\}\}\">",146  "\{\{\{toc\}\}\}",147  "</nav>",148  "</div>",149  "</aside>"150]151152/// Template names and texts: `layout` and `partials/<name>`, each replaceable by a file of153/// the same name in a template folder.154export fn templates() -> Array[(Str, Str)] {155  [156    ("layout", LAYOUT.join("\n")),157    ("partials/actions", PARTIAL_ACTIONS.join("\n")),158    ("partials/affix", PARTIAL_AFFIX.join("\n")),159    ("partials/breadcrumb", PARTIAL_BREADCRUMB.join("\n")),160    ("partials/footer", PARTIAL_FOOTER.join("\n")),161    ("partials/head", PARTIAL_HEAD.join("\n")),162    ("partials/header", PARTIAL_HEADER.join("\n")),163    ("partials/pager", PARTIAL_PAGER.join("\n")),164    ("partials/scripts", PARTIAL_SCRIPTS.join("\n")),165    ("partials/sidebar", PARTIAL_SIDEBAR.join("\n"))166  ]167}168