Aiden Bai
2022-05-27 bc32bbeaed10eac3094fcaa899ca626dc8e56771
assets/js/router.js
@@ -1,25 +1,16 @@
import { router, navigate } from "https://unpkg.com/million/dist/router.mjs"
import { router, navigate, reload, prefetch } from "https://unpkg.com/million@1.9.3/dist/router.mjs"
export const init = (loader) => {
  // SPA navigation for access later
  window.navigate = navigate
  // We only mutate document.title and content within .singlePage element
export const attachSPARouting = (draw) => {
  // Attach SPA functions to the global Million namespace
  window.Million = {
    router,
    navigate,
    reload,
    prefetch,
  };
  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)
  reload(draw)
  window.addEventListener("DOMContentLoaded", () => requestAnimationFrame(draw))
}