Rename API and generalize router API
This commit is contained in:
		
							parent
							
								
									771ebd8031
								
							
						
					
					
						commit
						d38f9bec70
					
				
					 2 changed files with 13 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -1,25 +1,12 @@
 | 
			
		|||
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))
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,9 +66,15 @@
 | 
			
		|||
  {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" |
 | 
			
		||||
  resources.Minify }}
 | 
			
		||||
  <script type="module">
 | 
			
		||||
    import { init } from '{{$router.Permalink}}';
 | 
			
		||||
    import { attachSPARouting } from '{{$router.Permalink}}';
 | 
			
		||||
    // NOTE: everything within this callback will be executed for every page navigation. This is a good place to put JavaScript that loads or modifies data on the page.
 | 
			
		||||
    init(() => {
 | 
			
		||||
    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 = ""
 | 
			
		||||
 | 
			
		||||
      drawGraph(
 | 
			
		||||
        {{strings.TrimRight "/" .Page.Permalink}},
 | 
			
		||||
        {{strings.TrimRight "/" .Site.BaseURL}},
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +88,8 @@
 | 
			
		|||
      {{if $.Site.Data.config.enableLinkPreview}}
 | 
			
		||||
        initPopover({{strings.TrimRight "/" .Site.BaseURL }})
 | 
			
		||||
      {{end}}
 | 
			
		||||
    });
 | 
			
		||||
    };
 | 
			
		||||
    attachSPARouting(draw);
 | 
			
		||||
  </script>
 | 
			
		||||
  {{else}}
 | 
			
		||||
  <script>window.navigate = (url) => window.location.href = url</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue