Aiden Bai
2022-05-03 77485b754dbb3d08e437b4157f3eafb5871624b9
Fix popover
1 files deleted
1 files added
7 files modified
131 ■■■■ changed files
assets/js/popover.js 40 ●●●● patch | view | raw | blame | history
assets/js/router.js 25 ●●●●● patch | view | raw | blame | history
layouts/_default/section.html 1 ●●●● patch | view | raw | blame | history
layouts/_default/single.html 3 ●●●● patch | view | raw | blame | history
layouts/_default/taxonomy.html 1 ●●●● patch | view | raw | blame | history
layouts/_default/term.html 1 ●●●● patch | view | raw | blame | history
layouts/index.html 4 ●●● patch | view | raw | blame | history
layouts/partials/head.html 49 ●●●●● patch | view | raw | blame | history
layouts/partials/popover.html 7 ●●●●● patch | view | raw | blame | history
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")
          })
        }
      })
  })
}
assets/js/router.js
New file
@@ -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)
}
layouts/_default/section.html
@@ -19,7 +19,6 @@
    </article>
    {{partial "contact.html" .}}
</div>
{{partial "popover.html" .}}
</body>
</html>
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>
layouts/_default/taxonomy.html
@@ -28,7 +28,6 @@
    </article>
    {{partial "contact.html" .}}
</div>
{{partial "popover.html" .}}
</body>
</html>
layouts/_default/term.html
@@ -19,7 +19,6 @@
    </article>
    {{partial "contact.html" .}}
</div>
{{partial "popover.html" .}}
</body>
</html>
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>
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>
layouts/partials/popover.html
File was deleted