summaryrefslogtreecommitdiff
path: root/static/js
diff options
context:
space:
mode:
Diffstat (limited to 'static/js')
-rw-r--r--static/js/redirect.js36
-rw-r--r--static/js/releases.js44
2 files changed, 80 insertions, 0 deletions
diff --git a/static/js/redirect.js b/static/js/redirect.js
new file mode 100644
index 00000000..e11560d1
--- /dev/null
+++ b/static/js/redirect.js
@@ -0,0 +1,36 @@
+// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT
+
+// Client-side redirects for fragments (anchors)
+//
+// It should be possible to do this with server-side redirects, but it was never implemented or
+// standardized. For reference:
+//
+// https://www.w3.org/People/Bos/redirect
+// https://www.w3.org/Protocols/HTTP/Fragment/draft-bos-http-redirect-00.txt
+
+const redirects = new Map([
+ ["/#device-support", "/faq#device-support"],
+ ["/#roadmap", "/faq#roadmap"],
+ ["/#copyright-and-licensing", "/faq#copyright-and-licensing"],
+ ["/usage#default-connections", "/faq#default-connections"],
+ ["/releases#marlin-stable", "/faq#legacy-devices"],
+ ["/releases#sailfish-stable", "/faq#legacy-devices"],
+ ["/releases#marlin-beta", "/faq#legacy-devices"],
+ ["/releases#sailfish-beta", "/faq#legacy-devices"],
+ ["/faq#dns", "/faq#custom-dns"],
+ ["/build#upgrading-to-android-10", "/build#generating-release-signing-keys"],
+]);
+
+function handle_hash() {
+ if (window.location.hash) {
+ const redirect = redirects.get(window.location.pathname + window.location.hash);
+ if (redirect) {
+ window.location.replace(redirect);
+ }
+ }
+}
+
+handle_hash();
+addEventListener("hashchange", handle_hash, false);
+
+// @license-end
diff --git a/static/js/releases.js b/static/js/releases.js
new file mode 100644
index 00000000..53b782d1
--- /dev/null
+++ b/static/js/releases.js
@@ -0,0 +1,44 @@
+// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT
+
+const baseUrl = "https://releases.grapheneos.org/";
+const versionBaseUrl = "https://github.com/GrapheneOS/platform_manifest/releases/tag/";
+const devices = ["sunfish", "coral", "flame", "bonito", "sargo", "crosshatch", "blueline", "taimen", "walleye"];
+const channels = ["stable", "beta"];
+
+for (const channel of channels) {
+ for (const device of devices) {
+ fetch(baseUrl + device + "-" + channel).then(response => {
+ if (!response.ok) {
+ return Promise.reject();
+ }
+ return response.text();
+ }).then(text => {
+ const metadata = text.trim().split(" ");
+
+ const factoryFilename = device + "-factory-" + metadata[0] + ".zip";
+ const factoryUrl = baseUrl + factoryFilename;
+
+ const updateFilename = device + "-ota_update-" + metadata[0] + ".zip";
+ const updateUrl = baseUrl + updateFilename;
+
+ const tag = metadata[2] + "." + metadata[0];
+
+ const release = document.getElementById(device + "-" + channel);
+ const links = release.getElementsByTagName("a");
+
+ links[1].innerText = tag;
+ links[1].setAttribute("href", versionBaseUrl + tag);
+
+ links[2].innerText = factoryFilename;
+ links[2].setAttribute("href", factoryUrl);
+
+ links[3].innerText = factoryFilename + ".sig";
+ links[3].setAttribute("href", factoryUrl + ".sig");
+
+ links[4].innerText = updateFilename;
+ links[4].setAttribute("href", updateUrl);
+ });
+ }
+}
+
+// @license-end