207 lines
5.3 KiB
JavaScript
207 lines
5.3 KiB
JavaScript
|
const langsUrl = "https://www.microsoft.com/en-us/api/controls/contentinclude/html?pageId=cd06bda8-ff9c-4a6e-912a-b92a21f42526&host=www.microsoft.com&segments=software-download%2cwindows11&query=&action=getskuinformationbyproductedition&sdVersion=2";
|
||
|
const downUrl = "https://www.microsoft.com/en-us/api/controls/contentinclude/html?pageId=cfa9e580-a81e-4a4b-a846-7b21bf4e2e5b&host=www.microsoft.com&segments=software-download%2Cwindows11&query=&action=GetProductDownloadLinksBySku&sdVersion=2";
|
||
|
|
||
|
const sessionId = document.getElementById('msdl-session-id');
|
||
|
const msContent = document.getElementById('msdl-ms-content');
|
||
|
const pleaseWait = document.getElementById('msdl-please-wait');
|
||
|
const processingError = document.getElementById('msdl-processing-error');
|
||
|
|
||
|
const productsList = document.getElementById('products-list');
|
||
|
const backToProductsDiv = document.getElementById('back-to-products');
|
||
|
|
||
|
var msdlXhr = new XMLHttpRequest();
|
||
|
|
||
|
function uuidv4() {
|
||
|
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
|
||
|
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function updateVars() {
|
||
|
var id = document.getElementById('product-languages').value;
|
||
|
if(id == "") {
|
||
|
document.getElementById('submit-sku').disabled = 1;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
id = JSON.parse(id);
|
||
|
document.getElementById('submit-sku').disabled = 0;
|
||
|
|
||
|
return id;
|
||
|
}
|
||
|
|
||
|
function checkForError(content) {
|
||
|
var errorMessage = document.getElementById('errorModalMessage');
|
||
|
|
||
|
if(errorMessage) {
|
||
|
processingError.style.display = "block";
|
||
|
content.style.display = "none";
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function updateContent(content, response) {
|
||
|
content.innerHTML = response;
|
||
|
return !checkForError(content);
|
||
|
}
|
||
|
|
||
|
function abortAndHide() {
|
||
|
msdlXhr.abort();
|
||
|
|
||
|
msContent.style.display = 'none';
|
||
|
pleaseWait.style.display = 'none';
|
||
|
processingError.style.display = 'none';
|
||
|
|
||
|
window.location.hash = "";
|
||
|
}
|
||
|
|
||
|
function fixSubmitSku() {
|
||
|
var submitSku = document.getElementById('submit-sku');
|
||
|
submitSku.setAttribute("onClick", "getDownload();");
|
||
|
}
|
||
|
|
||
|
function fixProdLang() {
|
||
|
var prodLang = document.getElementById('product-languages');
|
||
|
prodLang.setAttribute("onChange", "updateVars();");
|
||
|
}
|
||
|
|
||
|
function fixLanguageList() {
|
||
|
fixSubmitSku();
|
||
|
fixProdLang();
|
||
|
}
|
||
|
|
||
|
function onLanguageXhrChange() {
|
||
|
if(!(this.readyState == 4 && this.status == 200))
|
||
|
return;
|
||
|
|
||
|
if(pleaseWait.style.display != "block")
|
||
|
return;
|
||
|
|
||
|
pleaseWait.style.display = "none";
|
||
|
msContent.style.display = "block";
|
||
|
|
||
|
if(!updateContent(msContent, this.responseText))
|
||
|
return;
|
||
|
|
||
|
fixLanguageList();
|
||
|
updateVars();
|
||
|
}
|
||
|
|
||
|
function onDownloadsXhrChange() {
|
||
|
if(!(this.readyState == 4 && this.status == 200))
|
||
|
return;
|
||
|
|
||
|
if(pleaseWait.style.display != "block")
|
||
|
return;
|
||
|
|
||
|
pleaseWait.style.display = "none";
|
||
|
msContent.style.display = "block";
|
||
|
|
||
|
if(!updateContent(msContent, this.responseText))
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
function getLanguages(productId) {
|
||
|
sessionId.value = uuidv4();
|
||
|
|
||
|
msContent.style.display = "none";
|
||
|
pleaseWait.style.display = "block";
|
||
|
|
||
|
var url = langsUrl + "&productEditionId=" + encodeURIComponent(productId) +
|
||
|
"&sessionId=" + encodeURIComponent(sessionId.value);
|
||
|
|
||
|
msdlXhr.abort();
|
||
|
msdlXhr.onreadystatechange = onLanguageXhrChange;
|
||
|
msdlXhr.open("GET", url, true);
|
||
|
msdlXhr.send();
|
||
|
}
|
||
|
|
||
|
function getDownload() {
|
||
|
msContent.style.display = "none";
|
||
|
pleaseWait.style.display = "block";
|
||
|
|
||
|
var id = updateVars();
|
||
|
|
||
|
var url = downUrl + "&skuId=" + encodeURIComponent(id['id']) +
|
||
|
"&language=" + encodeURIComponent(id['language'])+
|
||
|
"&sessionId=" + encodeURIComponent(sessionId.value);
|
||
|
|
||
|
msdlXhr.abort();
|
||
|
msdlXhr.onreadystatechange = onDownloadsXhrChange;
|
||
|
msdlXhr.open("GET", url, true);
|
||
|
msdlXhr.send();
|
||
|
}
|
||
|
|
||
|
function backToProducts() {
|
||
|
abortAndHide();
|
||
|
|
||
|
backToProductsDiv.style.display = 'none';
|
||
|
productsList.style.display = 'block';
|
||
|
}
|
||
|
|
||
|
function prepareDownload(id) {
|
||
|
productsList.style.display = 'none';
|
||
|
backToProductsDiv.style.display = 'block';
|
||
|
|
||
|
return getLanguages(id);
|
||
|
}
|
||
|
|
||
|
function createTable(data) {
|
||
|
var table = document.getElementById('products-table-body');
|
||
|
for(value in data) {
|
||
|
var a = document.createElement('a')
|
||
|
a.href = "#" + value;
|
||
|
a.setAttribute("onClick", "prepareDownload(" + value + ");");
|
||
|
a.appendChild(document.createTextNode(data[value]))
|
||
|
|
||
|
var tr = table.insertRow();
|
||
|
|
||
|
var td = tr.insertCell();
|
||
|
td.appendChild(a);
|
||
|
|
||
|
var td2 = tr.insertCell();
|
||
|
td2.appendChild(document.createTextNode(value))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function checkHash() {
|
||
|
var hash = window.location.hash;
|
||
|
if(hash.length == 0)
|
||
|
return
|
||
|
|
||
|
prepareDownload(hash.substring(1))
|
||
|
}
|
||
|
|
||
|
function preparePage(resp) {
|
||
|
var data = JSON.parse(resp);
|
||
|
|
||
|
createTable(data['products']);
|
||
|
|
||
|
pleaseWait.style.display = 'none';
|
||
|
productsList.style.display = 'block';
|
||
|
|
||
|
checkHash();
|
||
|
}
|
||
|
|
||
|
var xhr = new XMLHttpRequest();
|
||
|
|
||
|
xhr.onreadystatechange = function() {
|
||
|
if(this.readyState != 4)
|
||
|
return;
|
||
|
|
||
|
if(this.status != 200) {
|
||
|
pleaseWait.style.display = 'none';
|
||
|
processingError.style.display = 'block';
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
preparePage(this.responseText);
|
||
|
};
|
||
|
|
||
|
xhr.open("GET", 'data/products.json', true);
|
||
|
xhr.send();
|
||
|
|
||
|
pleaseWait.style.display = 'block';
|