101 lines
3.5 KiB
JavaScript
101 lines
3.5 KiB
JavaScript
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;
|
|
if (parentNode.querySelector(".installer-button") !== null){
|
|
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);
|
|
}
|