| | |
| | | import { router, navigate } from "https://unpkg.com/million@1.8.9-0/dist/router.mjs" |
| | | |
| | | export const init = (loader) => { |
| | | export const attachSPARouting = (draw) => { |
| | | // SPA navigation for access later |
| | | window.navigate = navigate |
| | | // We only mutate document.title and content within .singlePage element |
| | | router(".singlePage") |
| | | // We need on initial load, then subsequent redirs |
| | | window.addEventListener("million:navigate", () => callback(loader)) |
| | | window.addEventListener("DOMContentLoaded", () => callback(loader)) |
| | | } |
| | | |
| | | export const callback = (loader) => { |
| | | // requestAnimationFrame() delays graph draw until SPA routing is finished |
| | | const draw = () => { |
| | | const container = document.getElementById("graph-container") |
| | | // retry if the graph is not ready |
| | | if (!container) return requestAnimationFrame(draw) |
| | | // clear the graph in case there is anything within it |
| | | container.textContent = "" |
| | | |
| | | loader() |
| | | } |
| | | requestAnimationFrame(draw) |
| | | window.addEventListener("million:navigate", () => requestAnimationFrame(draw)) |
| | | window.addEventListener("DOMContentLoaded", () => requestAnimationFrame(draw)) |
| | | } |