From 7e0f2e44497adeade4aa5a99da897be29cb49016 Mon Sep 17 00:00:00 2001 From: Claudio Yanes Date: Fri, 4 Mar 2022 02:25:30 +0000 Subject: [PATCH] Fix fetchData The fetchData function suffer from a race condition. If the function is called before the promise finishes, it will result in another pair of HTTP request. This does not only make the function useless but Actually, it makes it harmful as the data might be redownloaded twice. Now fetchData is not a function but rather the promise by itself. Previous callers are expected to await the variable instead, this should be not concern as awaiting a promise multiple time in JavaScript is completely safe. --- .github/workflows/deploy.yaml | 2 +- .gitignore | 4 ++-- assets/js/graph.js | 2 +- assets/js/popover.js | 2 +- assets/js/search.js | 2 +- layouts/partials/backlinks.html | 4 ++-- layouts/partials/head.html | 26 ++++++++------------------ 7 files changed, 16 insertions(+), 26 deletions(-) diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index a492b9b0..656ef4a7 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -16,7 +16,7 @@ jobs: with: index: true input: content - output: static + output: assets/indices root: . - name: Setup Hugo diff --git a/.gitignore b/.gitignore index 54ae7a3f..a7ccdb59 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,5 @@ public resources .idea content/.obsidian -static/linkIndex.json -static/contentIndex.json \ No newline at end of file +assets/indices/linkIndex.json +assets/indices/contentIndex.json diff --git a/assets/js/graph.js b/assets/js/graph.js index f4fd4bb6..d7e85343 100644 --- a/assets/js/graph.js +++ b/assets/js/graph.js @@ -1,5 +1,5 @@ async function drawGraph(url, baseUrl, pathColors, depth, enableDrag, enableLegend, enableZoom) { - const { index, links, content } = await fetchData() + const { index, links, content } = await fetchData const curPage = url.replace(baseUrl, "") const parseIdsFromLinks = (links) => [...(new Set(links.flatMap(link => ([link.source, link.target]))))] diff --git a/assets/js/popover.js b/assets/js/popover.js index ef7bb615..6dfd2d2d 100644 --- a/assets/js/popover.js +++ b/assets/js/popover.js @@ -8,7 +8,7 @@ function htmlToElement(html) { function initPopover(base) { const baseUrl = base.replace(window.location.origin, "") // is this useless? document.addEventListener("DOMContentLoaded", () => { - fetchData().then(({content}) => { + fetchData.then(({content}) => { const links = [...document.getElementsByClassName("internal-link")] links.forEach(li => { const linkDest = content[li.dataset.src.replace(baseUrl, "")] diff --git a/assets/js/search.js b/assets/js/search.js index 9733c048..592d8595 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -81,7 +81,7 @@ const removeMarkdown = ( } }) - const { content } = await fetchData() + const { content } = await fetchData for (const [key, value] of Object.entries(content)) { contentIndex.add({ id: key, diff --git a/layouts/partials/backlinks.html b/layouts/partials/backlinks.html index d2143869..166e1fde 100644 --- a/layouts/partials/backlinks.html +++ b/layouts/partials/backlinks.html @@ -3,9 +3,9 @@ {{$url := urls.Parse .Site.BaseURL }} {{$host := strings.TrimRight "/" $url.Path }} {{$curPage := strings.TrimPrefix $host (strings.TrimRight "/" .Page.RelPermalink) }} - {{$linkIndex := getJSON "/static/linkIndex.json"}} + {{$linkIndex := getJSON "/assets/indices/linkIndex.json"}} {{$inbound := index $linkIndex.index.backlinks $curPage}} - {{$contentTable := getJSON "/static/contentIndex.json"}} + {{$contentTable := getJSON "/assets/indices/contentIndex.json"}} {{if $inbound}} {{$cleanedInbound := apply (apply $inbound "index" "." "source") "replace" "." " " "-"}} {{- range $cleanedInbound | uniq -}} diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 107f2403..4085dd52 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -21,35 +21,25 @@ + {{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }} + {{$contentIndex := resources.Get "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify }} {{ template "_internal/google_analytics.html" . }}