forked from adafruit/circuitpython-org
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdownload.js
99 lines (92 loc) · 3.43 KB
/
download.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
document.addEventListener('DOMContentLoaded',function() {
var languageSelect = document.querySelectorAll(".language-select select");
languageSelect.forEach(function(select) {
select.onchange = languageSelectHandler;
});
// get the language from memory
var storedLanguage = null;
if (window.localStorage) {
storedLanguage = localStorage.getItem("language");
if (storedLanguage != null && storedLanguage != "") {
language = storedLanguage;
updateLanguageMenus([language]);
}
}
// or get the language from the browser
if (storedLanguage == null) {
var script = document.createElement('script');
script.setAttribute('src', '//accounts.adafruit.com/users/locale?callback=setLocale');
document.body.appendChild(script);
}
// set the board ID based on query string
const hereurl = new URL(window.location.href);
const board_id = hereurl.searchParams.get("unknown_id");
if(board_id) {
for(var link of document.querySelectorAll("a")) {
if(link.href.search("bin/unknown") > 0) {
link.href = link.href.replace("bin/unknown", `bin/${board_id}`);
}
}
// change the title too
const title_tag = document.querySelector("#download-page h1");
var unknown_title = board_id.replaceAll("_"," ");
unknown_title = unknown_title[0].toUpperCase() + unknown_title.substr(1);
title_tag.textContent = unknown_title;
document.title = `${unknown_title} Download`;
}
},false);
// update the links of the download buttons for the given langage menu item
function updateFileLinks(option, language) {
var files = option.value.split(',');
parentNode = option.parentNode.parentNode.parentNode;
files.forEach(function(file) {
var extension = file.substr(file.lastIndexOf('.') + 1);
parentNode.querySelector(".download-button." + extension).href = file;
parentNode.querySelector(".installer-button").setAttribute(extension + "file", file);
});
}
// update language menus
function updateLanguageMenus(languages) {
var languageSelect = document.querySelectorAll(".language-select select");
languageSelect.forEach(function(select) {
var options = select.options;
// find and set one menu with one language
function findAndSetLocale(language) {
for (var i = 0; i < options.length; i++) {
if (language.toLowerCase() == options[i].dataset.locale.toLowerCase()) {
options[i].selected = true;
updateFileLinks(options[i],language);
return true;
}
}
return false;
}
// match languages to menu items
for (var j = 0; j < languages.length; j++) {
var language = languages[j];
// test the full language-region string first
if (findAndSetLocale(language)) return;
var pos = language.search("-");
if (pos > 0) {
// test the language string to catch eg: "fr-FR" as "fr"
var shortLang = language.substr(0,pos);
if (findAndSetLocale(shortLang)) return;
}
}
});
}
function languageSelectHandler(event) {
// set language from selection
var selectedOption = event.target.selectedOptions[0];
var selectedLanguage = selectedOption.dataset.locale;
// save to memory
if (window.localStorage && event.target) {
localStorage.setItem("language",selectedLanguage);
}
// synchronize all the menus if possible
updateLanguageMenus([selectedLanguage]);
}
function setLocale(response) {
var languages = response.languages;
updateLanguageMenus(languages);
}