From cd875ccdd0653aa6d9fde7ec7e7307390bb84263 Mon Sep 17 00:00:00 2001 From: Lorenz Leutgeb Date: Sat, 2 May 2026 18:41:16 +0200 Subject: [PATCH] perf: Move Scripts to Head and Defer --- _includes/latest-release.html | 23 +++------------- _layouts/index.html | 21 ++++----------- _layouts/page.html | 5 +++- _pages/download.md | 51 ++++++----------------------------- assets/js/copy.js | 12 +++++++++ assets/js/download.js | 38 ++++++++++++++++++++++++++ assets/js/latest-release.js | 21 +++++++++++++++ index.md | 3 +++ 8 files changed, 94 insertions(+), 80 deletions(-) create mode 100644 assets/js/copy.js create mode 100644 assets/js/download.js create mode 100644 assets/js/latest-release.js diff --git a/_includes/latest-release.html b/_includes/latest-release.html index fa46628..ee91789 100644 --- a/_includes/latest-release.html +++ b/_includes/latest-release.html @@ -21,24 +21,7 @@ + + document.addEventListener('DOMContentLoaded', () => updateLatestRelease("{{ site.data.releases.radicle.timestamp }}")); + \ No newline at end of file diff --git a/_layouts/index.html b/_layouts/index.html index 0aacbad..df3e92f 100644 --- a/_layouts/index.html +++ b/_layouts/index.html @@ -2,13 +2,17 @@ {% include meta.html %} - + {% for url in page.preconnect %} {% endfor %} +{% for script in page.scripts %} + +{% endfor %} + @@ -37,20 +41,5 @@ {{ content }} {% include fixed.html %} - - diff --git a/_layouts/page.html b/_layouts/page.html index b4cb69a..3c34381 100644 --- a/_layouts/page.html +++ b/_layouts/page.html @@ -6,6 +6,10 @@ {% for url in page.preconnect %} {% endfor %} + {% for script in page.scripts %} + + {% endfor %} + {% include header.html %} @@ -13,6 +17,5 @@ {{ content }} {% include fixed.html %} - diff --git a/_pages/download.md b/_pages/download.md index 54c2965..b657d9c 100644 --- a/_pages/download.md +++ b/_pages/download.md @@ -6,6 +6,8 @@ binary: ["unknown-linux-musl", "apple-darwin"] arch: ["x86_64", "aarch64"] preconnect: - https://files.radicle.dev +scripts: + - download --- This is Radicle's download page, which references various ways of downloading Radicle to your machine. @@ -170,46 +172,9 @@ This will place binaries in `~/.radicle/bin` and manuals in `~/.radicle/man`, and overwrite any existing Radicle binaries. + document.addEventListener('DOMContentLoaded', () => { + {% for release in site.releases %} + getRelease("{{ release.name }}", "{{ release.base }}", "{{ release.id }}", "{{ site.data.releases[release.id].timestamp }}"); + {% endfor %} + }); + \ No newline at end of file diff --git a/assets/js/copy.js b/assets/js/copy.js new file mode 100644 index 0000000..585de71 --- /dev/null +++ b/assets/js/copy.js @@ -0,0 +1,12 @@ +const copyButton = document.getElementById("install"); +const copyResult = document.getElementById("install-copy"); +const textToCopy = document.getElementById("install-command").innerText; + +copyButton.addEventListener("click", async function () { + try { + await navigator.clipboard.writeText(textToCopy); + copyResult.innerText = "copied"; + } catch (err) { + console.error("Failed to copy text: ", err); + } +}); \ No newline at end of file diff --git a/assets/js/download.js b/assets/js/download.js new file mode 100644 index 0000000..1a2a477 --- /dev/null +++ b/assets/js/download.js @@ -0,0 +1,38 @@ +function getRelease(name, urlBase, releaseId, knownTimestamp) { + const releases = document.getElementById(`${releaseId}-releases`); + + fetch(`${urlBase}/${releaseId}.json`) + .then(res => res.json()) + .then(data => { + if (data.timestamp === knownTimestamp) { + console.info(`Release data for ${name} is up to date.`) + return; + } + + const version = data.version; + const commit = data.commit; + const release = document.getElementById(`${releaseId}-release-header`); + const releaseName = document.getElementById(`${releaseId}-release-name`); + const releaseInfo = document.getElementById(`${releaseId}-release-info`); + + document.querySelectorAll(`#${releaseId}-releases [data-release-binary]`).forEach((row) => { + const arch = row.dataset.releaseArch; + const binary = row.dataset.releaseBinary; + const archive = `${releaseId}-${version}-${arch}-${binary}.tar.xz`; + const url = `${urlBase}/${archive}`; + + row.querySelector(".release-arch").innerText = arch; + row.querySelector(".release-url").innerText = archive; + row.querySelector(".release-sig").innerText = ".sig"; + row.querySelector(".release-checksum").innerText = ".sha256"; + + row.querySelector(".release-url").href = url; + row.querySelector(".release-sig").href = `${url}.sig`; + row.querySelector(".release-checksum").href = `${url}.sha256`; + }); + + release.classList.remove("loading"); + releaseName.innerText = `${name} ${version}`; + releaseInfo.innerHTML = `Built from commit ${commit} on ${new Date(data.timestamp * 1000).toISOString()}.`; + }); +} \ No newline at end of file diff --git a/assets/js/latest-release.js b/assets/js/latest-release.js new file mode 100644 index 0000000..9e62750 --- /dev/null +++ b/assets/js/latest-release.js @@ -0,0 +1,21 @@ +async function updateLatestRelease(knownTimestamp) { + const release = document.getElementById('release'); + + fetch("https://files.radicle.dev/releases/latest/radicle.json") + .then(res => res.json()) + .then(data => { + if (data.timestamp === knownTimestamp) { + console.info("Release data is up to date.") + return; + } + + const version = data.version; + const commit = data.commit; + const release = document.getElementById("release"); + const releaseInfo = document.getElementById("release-info"); + + releaseInfo.innerText = `Radicle ${version}`; + document.getElementById("release-commit").innerText = commit; + document.getElementById("release-timestamp").innerText = `(${new Date(data.timestamp * 1000).toISOString()})`; + }); +} \ No newline at end of file diff --git a/index.md b/index.md index e6e216b..9aee694 100644 --- a/index.md +++ b/index.md @@ -3,6 +3,9 @@ title: "Radicle: the sovereign forge" layout: index preconnect: - https://files.radicle.dev +scripts: + - copy + - latest-release --- # Synopsis