diff --git a/scala3doc/resources/dotty_res/scripts/fast-navigation-loader.js b/scala3doc/resources/dotty_res/scripts/fast-navigation-loader.js new file mode 100644 index 000000000000..c52b097635eb --- /dev/null +++ b/scala3doc/resources/dotty_res/scripts/fast-navigation-loader.js @@ -0,0 +1,54 @@ +navigationPageText = fetch(pathToRoot + "navigation.html").then(response => response.text()) + +window.addEventListener('DOMContentLoaded', () => { + navigationPageText.then(data => { + document.getElementById("sideMenu").innerHTML = data; + }).then(() => { + document.querySelectorAll(".overview > a").forEach(link => { + link.setAttribute("href", pathToRoot + link.getAttribute("href")); + }) + }).then(() => { + document.querySelectorAll(".sideMenuPart").forEach(nav => { + if (!nav.classList.contains("hidden")) nav.classList.add("hidden") + }) + }).then(() => { + revealNavigationForCurrentPage() + }) + + /* Smooth scrolling support for going to the top of the page */ + document.querySelectorAll('.footer a[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', function (e) { + e.preventDefault(); + + document.querySelector(this.getAttribute('href')).scrollIntoView({ + behavior: 'smooth' + }); + }); + }); +}) + +revealNavigationForCurrentPage = () => { + let pageId = document.getElementById("content").attributes["pageIds"].value.toString(); + let parts = document.querySelectorAll(".sideMenuPart"); + let found = 0; + do { + parts.forEach(part => { + if (part.attributes['pageId'].value.indexOf(pageId) !== -1 && found === 0) { + found = 1; + if (part.classList.contains("hidden")){ + part.classList.remove("hidden"); + part.setAttribute('data-active',""); + } + revealParents(part) + } + }); + pageId = pageId.substring(0, pageId.lastIndexOf("/")) + } while (pageId.indexOf("/") !== -1 && found === 0) +}; + +revealParents = (part) => { + if (part.classList.contains("sideMenuPart")) { + if (part.classList.contains("hidden")) part.classList.remove("hidden"); + revealParents(part.parentNode) + } +}; \ No newline at end of file diff --git a/scala3doc/src/dotty/dokka/preprocessors/ScalaEmbeddedResourceApppender.scala b/scala3doc/src/dotty/dokka/preprocessors/ScalaEmbeddedResourceApppender.scala index 5bc2dc891608..650b86856cd1 100644 --- a/scala3doc/src/dotty/dokka/preprocessors/ScalaEmbeddedResourceApppender.scala +++ b/scala3doc/src/dotty/dokka/preprocessors/ScalaEmbeddedResourceApppender.scala @@ -11,8 +11,9 @@ class ScalaEmbeddedResourceAppender extends PageTransformer { page.getName, page.getContent, page.getDri, - // Remove default CSS and add our own + // Remove default CSS and navigation loader and add our own versions (page.getEmbeddedResources.asScala + .filterNot(_ == "scripts/navigation-loader.js") .filterNot(_.endsWith(".css")) ++ Seq( "styles/nord-light.css", "styles/scalastyle.css", @@ -37,6 +38,7 @@ class ScalaEmbeddedResourceAppender extends PageTransformer { "scripts/components/FilterGroup.js", "scripts/components/Filter.js", "scripts/data.js", + "scripts/fast-navigation-loader.js" )).asJava, page.getChildren )