Load download links from live API

This commit is contained in:
Holden
2026-06-27 00:38:53 -05:00
parent e208f1ad5a
commit b1090d2dc9
7 changed files with 253 additions and 118 deletions

View File

@@ -0,0 +1,81 @@
---
import { getLatestDownloads } from "../lib/downloads";
const latestDownloads = await getLatestDownloads();
const downloads = latestDownloads.success ? latestDownloads.data : [];
const defaultDownload = downloads[0];
---
<div class="masthead-download" data-downloads={JSON.stringify(downloads)}>
{
defaultDownload ? (
<a
href={defaultDownload.href}
class="btn btn-primary btn-large"
data-download-button
aria-label={`Download TenWholeYears for ${defaultDownload.label}`}
>
Download for {defaultDownload.label}
</a>
) : (
<a href="/downloads/" class="btn btn-primary btn-large">
View Downloads
</a>
)
}
<div class="subtext">
<span>or</span>
<a href="/downloads/" class="masthead-platforms">Other Platforms</a>
</div>
</div>
<script is:inline>
$(() => {
const $downloadRoot = $("[data-downloads]");
if (!$downloadRoot.length) return;
const $downloadButton = $downloadRoot.find("[data-download-button]");
if (!$downloadButton.length) return;
let downloads = [];
try {
downloads = JSON.parse(
$downloadRoot.attr("data-downloads") || "[]",
);
} catch {
return;
}
const findDownload = (platform) =>
$.grep(downloads, (download) => download.platform === platform)[0];
const getDetectedPlatform = () => {
const userAgentDataPlatform =
navigator.userAgentData?.platform?.toLowerCase() || "";
const userAgent = navigator.userAgent.toLowerCase();
const platform = navigator.platform.toLowerCase();
const browserPlatform = `${userAgentDataPlatform} ${userAgent} ${platform}`;
if (
browserPlatform.includes("android") ||
browserPlatform.includes("oculus") ||
browserPlatform.includes("quest")
) {
return "meta";
}
if (browserPlatform.includes("linux")) return "linux";
if (browserPlatform.includes("win")) return "windows";
return "windows";
};
const download = findDownload(getDetectedPlatform()) || downloads[0];
if (!download) return;
$downloadButton
.attr("href", download.href)
.attr("aria-label", `Download TenWholeYears for ${download.label}`)
.text(`Download for ${download.label}`);
});
</script>