From 77485b754dbb3d08e437b4157f3eafb5871624b9 Mon Sep 17 00:00:00 2001
From: Aiden Bai <aiden.bai05@gmail.com>
Date: Tue, 03 May 2022 15:47:42 +0000
Subject: [PATCH] Fix popover

---
 layouts/_default/single.html   |    3 
 /dev/null                      |    7 --
 layouts/_default/section.html  |    1 
 assets/js/router.js            |   25 ++++++++
 assets/js/popover.js           |   40 ++++++-------
 layouts/_default/taxonomy.html |    1 
 layouts/index.html             |    4 -
 layouts/_default/term.html     |    1 
 layouts/partials/head.html     |   49 +++++++---------
 9 files changed, 67 insertions(+), 64 deletions(-)

diff --git a/assets/js/popover.js b/assets/js/popover.js
index ee0477e..460c245 100644
--- a/assets/js/popover.js
+++ b/assets/js/popover.js
@@ -1,5 +1,5 @@
 function htmlToElement(html) {
-  const template = document.createElement('template')
+  const template = document.createElement("template")
   html = html.trim()
   template.innerHTML = html
   return template.content.firstChild
@@ -7,29 +7,27 @@
 
 function initPopover(baseURL) {
   const basePath = baseURL.replace(window.location.origin, "")
-  document.addEventListener("DOMContentLoaded", () => {
-    fetchData.then(({ content }) => {
-      const links = [...document.getElementsByClassName("internal-link")]
-      links
-        .filter(li => li.dataset.src)
-        .forEach(li => {
-          const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")]
-          if (linkDest) {
-            const popoverElement = `<div class="popover">
+  fetchData.then(({ content }) => {
+    const links = [...document.getElementsByClassName("internal-link")]
+    links
+      .filter((li) => li.dataset.src)
+      .forEach((li) => {
+        const linkDest = content[li.dataset.src.replace(/\/$/g, "").replace(basePath, "")]
+        if (linkDest) {
+          const popoverElement = `<div class="popover">
     <h3>${linkDest.title}</h3>
     <p>${removeMarkdown(linkDest.content).split(" ", 20).join(" ")}...</p>
     <p class="meta">${new Date(linkDest.lastmodified).toLocaleDateString()}</p>
 </div>`
-            const el = htmlToElement(popoverElement)
-            li.appendChild(el)
-            li.addEventListener("mouseover", () => {
-              el.classList.add("visible")
-            })
-            li.addEventListener("mouseout", () => {
-              el.classList.remove("visible")
-            })
-          }
-        })
-    })
+          const el = htmlToElement(popoverElement)
+          li.appendChild(el)
+          li.addEventListener("mouseover", () => {
+            el.classList.add("visible")
+          })
+          li.addEventListener("mouseout", () => {
+            el.classList.remove("visible")
+          })
+        }
+      })
   })
 }
diff --git a/assets/js/router.js b/assets/js/router.js
new file mode 100644
index 0000000..5c874ee
--- /dev/null
+++ b/assets/js/router.js
@@ -0,0 +1,25 @@
+import { router, navigate } from "https://unpkg.com/million/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
+  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)
+}
diff --git a/layouts/_default/section.html b/layouts/_default/section.html
index 1a4aae0..abdf0b0 100644
--- a/layouts/_default/section.html
+++ b/layouts/_default/section.html
@@ -19,7 +19,6 @@
     </article>
     {{partial "contact.html" .}}
 </div>
-{{partial "popover.html" .}}
 </body>
 
 </html>
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index 88a859c..91eda29 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -22,11 +22,10 @@
           <li><a href="{{ .Permalink }}">{{ .LinkTitle | humanize }}</a></li>
           {{ end }}
       </ul>
-      {{partial "toc.html" .}} 
+      {{partial "toc.html" .}}
       {{partial "textprocessing.html" . }}
     </article>
     {{partial "footer.html" .}}
-    {{partial "popover.html" .}}
 </div>
 </body>
 
diff --git a/layouts/_default/taxonomy.html b/layouts/_default/taxonomy.html
index b7a45b1..e0a1e87 100644
--- a/layouts/_default/taxonomy.html
+++ b/layouts/_default/taxonomy.html
@@ -28,7 +28,6 @@
     </article>
     {{partial "contact.html" .}}
 </div>
-{{partial "popover.html" .}}
 </body>
 
 </html>
diff --git a/layouts/_default/term.html b/layouts/_default/term.html
index 16ea85c..58f024b 100644
--- a/layouts/_default/term.html
+++ b/layouts/_default/term.html
@@ -19,7 +19,6 @@
     </article>
     {{partial "contact.html" .}}
 </div>
-{{partial "popover.html" .}}
 </body>
 
 </html>
diff --git a/layouts/index.html b/layouts/index.html
index ee33d7c..224c997 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -13,12 +13,10 @@
         {{partial "darkmode.html" .}}
     </header>
     <article>
-        {{partial "toc.html" .}} 
+        {{partial "toc.html" .}}
         {{partial "textprocessing.html" . }}
     </article>
     {{partial "footer.html" .}}
-    {{partial "popover.html" .}}
 </div>
 </body>
 </html>
-
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
index 37938a5..60ff782 100644
--- a/layouts/partials/head.html
+++ b/layouts/partials/head.html
@@ -35,6 +35,10 @@
   <script src="{{$darkMode.Permalink}}"></script>
   {{partial "katex.html" .}}
 
+  {{ $popover := resources.Get "js/popover.js" | resources.Fingerprint "md5" |
+  resources.Minify }}
+  <script src="{{$popover.Permalink}}"></script>
+
   <!--  Preload page vars  -->
   {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint
   "md5" | resources.Minify | }} {{$contentIndex := resources.Get
@@ -59,36 +63,25 @@
         }))
   </script>
   {{if $.Site.Data.config.enableSPA}}
+  {{ $router := resources.Get "js/router.js" | resources.Fingerprint "md5" |
+  resources.Minify }}
   <script type="module">
-    import { router, navigate } from "https://unpkg.com/million/dist/router.mjs";
-    // SPA navigation for access later
-    window.navigate = navigate;
-    // We only mutate document.title and content within .singlePage element
-    router(".singlePage");
-    const callback = () => {
-      // 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 = "";
+    import { init } from '{{$router.Permalink}}';
+    init(() => {
+      drawGraph(
+        {{strings.TrimRight "/" .Page.Permalink}},
+        {{strings.TrimRight "/" .Site.BaseURL}},
+        {{$.Site.Data.graphConfig.paths}},
+        {{$.Site.Data.graphConfig.depth}},
+        {{$.Site.Data.graphConfig.enableDrag}},
+        {{$.Site.Data.graphConfig.enableLegend}},
+        {{$.Site.Data.graphConfig.enableZoom}}
+      );
 
-        drawGraph(
-          {{strings.TrimRight "/" .Page.Permalink}},
-          {{strings.TrimRight "/" .Site.BaseURL}},
-          {{$.Site.Data.graphConfig.paths}},
-          {{$.Site.Data.graphConfig.depth}},
-          {{$.Site.Data.graphConfig.enableDrag}},
-          {{$.Site.Data.graphConfig.enableLegend}},
-          {{$.Site.Data.graphConfig.enableZoom}}
-        );
-      };
-      requestAnimationFrame(draw);
-    };
-    // We need on initial load, then subsequent redirs
-    window.addEventListener("million:navigate", callback);
-    window.addEventListener("DOMContentLoaded", callback);
+      {{if $.Site.Data.config.enableLinkPreview}}
+        initPopover({{strings.TrimRight "/" .Site.BaseURL }})
+      {{end}}
+    });
   </script>
   {{else}}
   <script>window.navigate = (url) => window.location.href = url</script>
diff --git a/layouts/partials/popover.html b/layouts/partials/popover.html
deleted file mode 100644
index 1d16622..0000000
--- a/layouts/partials/popover.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{{if $.Site.Data.config.enableLinkPreview}}
-{{ $js := resources.Get "js/popover.js" |  resources.Fingerprint "md5" | resources.Minify }}
-<script src="{{ $js.Permalink }}"></script>
-<script>
-  initPopover({{strings.TrimRight "/" .Site.BaseURL }})
-</script>
-{{end}}
\ No newline at end of file

--
Gitblit v1.10.0