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 a492b9b..656ef4a 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 54ae7a3..a7ccdb5 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 f4fd4bb..d7e8534 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 ef7bb61..6dfd2d2 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 9733c04..592d859 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 d214386..166e1fd 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 107f240..4085dd5 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" . }}