Skip to content

Commit 7cbd640

Browse files
improve: footer back to top link is now more universal
1 parent 3428662 commit 7cbd640

1 file changed

Lines changed: 40 additions & 7 deletions

File tree

src/export/project.ts

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ export async function exporter(argument: ProjectExportArguments, json: any) {
455455
<footer class="text-muted py-3">
456456
<div class="container">
457457
<p class="float-end">
458-
<a href="#">Back to top</a>
458+
<a href="#" aria-label="Go to top">↑ Top</a>
459459
</p>
460460
<p>${
461461
json.footer ||
@@ -630,6 +630,7 @@ function generateNavbar(navbar: any, hasSearch: boolean = false): string {
630630
const bg = navbar?.background || '#0B6E75'
631631
const theme = navbar?.theme === 'light' ? 'navbar-light' : 'navbar-dark'
632632
const brand = navbar?.brand || ''
633+
const brandUrl = navbar?.url || '#'
633634
const links: any[] = navbar?.links || []
634635

635636
let linkItems = ''
@@ -651,20 +652,52 @@ function generateNavbar(navbar: any, hasSearch: boolean = false): string {
651652
: ''
652653

653654
return `
654-
<nav class="navbar navbar-expand-lg ${theme} sticky-top" style="background-color: ${bg};">
655-
<div class="container">
656-
<a class="navbar-brand" href="#">${brand}</a>
657-
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
655+
<nav class="navbar navbar-expand ${theme} sticky-top" id="mainNavbar" style="background-color: ${bg};">
656+
<div class="container-fluid px-4">
657+
<a class="navbar-brand" href="${brandUrl}">${brand}</a>
658+
<button class="navbar-toggler d-none" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
658659
<span class="navbar-toggler-icon"></span>
659660
</button>
660661
<div class="collapse navbar-collapse" id="navbarNav">
661-
<ul class="navbar-nav ms-auto">
662+
<ul class="navbar-nav ms-auto flex-nowrap" style="white-space:nowrap;">
662663
${linkItems}
663664
${searchItem}
664665
</ul>
665666
</div>
666667
</div>
667-
</nav>`
668+
</nav>
669+
<script>
670+
(function() {
671+
var nav = document.getElementById('mainNavbar');
672+
var toggler = nav.querySelector('.navbar-toggler');
673+
var collapse = document.getElementById('navbarNav');
674+
var brand = nav.querySelector('.navbar-brand');
675+
676+
function check() {
677+
// Measure in expanded state (navbar-expand makes collapse display:flex via Bootstrap CSS)
678+
nav.classList.add('navbar-expand');
679+
collapse.classList.remove('show');
680+
681+
var navWidth = nav.offsetWidth;
682+
var brandWidth = brand ? brand.offsetWidth : 0;
683+
var listWidth = collapse.scrollWidth;
684+
685+
var overflows = (brandWidth + listWidth + 48) > navWidth;
686+
if (overflows) {
687+
nav.classList.remove('navbar-expand');
688+
toggler.classList.remove('d-none');
689+
collapse.classList.remove('show');
690+
} else {
691+
// navbar-expand already set above; Bootstrap CSS shows collapse as flex automatically
692+
toggler.classList.add('d-none');
693+
}
694+
}
695+
696+
document.addEventListener('DOMContentLoaded', check);
697+
var ro = new ResizeObserver(check);
698+
ro.observe(nav);
699+
})();
700+
</script>`
668701
}
669702

670703
function removeContext(obj) {

0 commit comments

Comments
 (0)