diff --git a/data/products.json b/data/products.json index 4786437..9022b5b 100644 --- a/data/products.json +++ b/data/products.json @@ -71,9 +71,6 @@ "1805": "Windows 10 Education 20H2", "1806": "Windows 10 20H2 Home China", "1807": "Windows 10 20H2", - "1879": "Windows 10 Education 20H2 v2", - "1880": "Windows 10 20H2 v2", - "1881": "Windows 10 20H2 v2 Home China", "1882": "Windows 10 20H2 v2", "1883": "Windows 10 20H2 v2 Home China", "1884": "Windows 10 Education 20H2 v2", diff --git a/index.html b/index.html index 0db4505..3a5a8bd 100644 --- a/index.html +++ b/index.html @@ -18,7 +18,7 @@ Microsoft Software Download Listing - + diff --git a/js/msdl.js b/js/msdl.js index a1c0f6e..90e6702 100644 --- a/js/msdl.js +++ b/js/msdl.js @@ -13,11 +13,9 @@ const useSharedSessionDiv = document.getElementById('use-shared-session'); const sharedSessionGUID = "47cbc254-4a79-4be6-9866-9c625eb20911"; -var msdlXhr = new XMLHttpRequest(); - -var availableProducts = {}; - -var sharedSession = false; +let availableProducts = {}; +let sharedSession = false; +let skuId; function uuidv4() { return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => @@ -26,64 +24,32 @@ function uuidv4() { } function updateVars() { - var id = document.getElementById('product-languages').value; + let 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"; - useSharedSessionDiv.style.display = "block"; - return true; - } - - return false; + return JSON.parse(id)['id']; } function updateContent(content, response) { content.innerHTML = response; - return !checkForError(content); -} + let errorMessage = document.getElementById('errorModalMessage'); -function abortAndHide() { - backToProductsDiv.style.display = 'none'; - useSharedSessionDiv.style.display = 'none'; - productsList.style.display = 'block'; + if (errorMessage) { + processingError.style.display = "block"; + useSharedSessionDiv.style.display = "block"; + return false; + } - msdlXhr.abort(); - - msContent.style.display = 'none'; - pleaseWait.style.display = 'none'; - processingError.style.display = 'none'; -} - -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(); + return true; } function onLanguageXhrChange() { - if (!(this.readyState == 4 && this.status == 200)) + if (!(this.status == 200)) return; if (pleaseWait.style.display != "block") @@ -95,12 +61,17 @@ function onLanguageXhrChange() { if (!updateContent(msContent, this.responseText)) return; - fixLanguageList(); + let submitSku = document.getElementById('submit-sku'); + submitSku.setAttribute("onClick", "getDownload();"); + + let prodLang = document.getElementById('product-languages'); + prodLang.setAttribute("onChange", "updateVars();"); + updateVars(); } function onDownloadsXhrChange() { - if (!(this.readyState == 4 && this.status == 200)) + if (!(this.status == 200)) return; if (pleaseWait.style.display != "block") @@ -115,73 +86,83 @@ function onDownloadsXhrChange() { } function getLanguages(productId) { - msContent.style.display = "none"; - pleaseWait.style.display = "block"; - - var url = langsUrl + "&productEditionId=" + encodeURIComponent(productId) + + let url = langsUrl + "&productEditionId=" + productId + "&sessionId=" + (sharedSession ? sharedSessionGUID : sessionId.value); - msdlXhr.abort(); - msdlXhr.onreadystatechange = onLanguageXhrChange; - msdlXhr.open("GET", url, true); - msdlXhr.send(); + let xhr = new XMLHttpRequest(); + xhr.onload = onLanguageXhrChange; + xhr.open("GET", url, true); + xhr.send(); } function getDownload() { msContent.style.display = "none"; pleaseWait.style.display = "block"; - var id = updateVars(); + skuId = skuId ? skuId : updateVars(); - var url = downUrl + "&skuId=" + encodeURIComponent(id['id']) + - "&language=" + encodeURIComponent(id['language']) + - "&sessionId=" + (sharedSession ? sharedSessionGUID : sessionId.value); + let url = downUrl + "&skuId=" + skuId + "&sessionId=" + (sharedSession ? sharedSessionGUID : sessionId.value); - msdlXhr.abort(); - msdlXhr.onreadystatechange = onDownloadsXhrChange; - msdlXhr.open("GET", url, true); - msdlXhr.send(); + let xhr = new XMLHttpRequest(); + xhr.onload = onDownloadsXhrChange; + xhr.open("GET", url, true); + xhr.send(); } function backToProducts() { - abortAndHide(); + backToProductsDiv.style.display = 'none'; + useSharedSessionDiv.style.display = 'none'; + productsList.style.display = 'block'; + msContent.style.display = 'none'; + pleaseWait.style.display = 'none'; + processingError.style.display = 'none'; + window.location.hash = ""; + skuId = null; } function useSharedSession() { sharedSession = true; - abortAndHide(); - prepareDownload(window.location.hash.substring(1)) + pleaseWait.style.display = "block"; + useSharedSessionDiv.style.display = 'none'; + processingError.style.display = 'none'; + + let url = langsUrl + "&productEditionId=" + window.location.hash.substring(1) + "&sessionId=" + sharedSessionGUID; + let xhr = new XMLHttpRequest(); + xhr.onload = getDownload; + xhr.open("GET", url); + xhr.send(); } function prepareDownload(id) { productsList.style.display = 'none'; backToProductsDiv.style.display = 'block'; + pleaseWait.style.display = "block"; const xhr = new XMLHttpRequest(); - xhr.onreadystatechange = () => { getLanguages(id) }; + xhr.onerror = () => { getLanguages(id) }; xhr.open("GET", sessionUrl + sessionId.value, true); xhr.send(); } function addTableElement(table, value, data) { - var a = document.createElement('a') + let a = document.createElement('a') a.href = "#" + value; a.setAttribute("onClick", "prepareDownload(" + value + ");"); a.appendChild(document.createTextNode(data[value])) - var tr = table.insertRow(); + let tr = table.insertRow(); - var td = tr.insertCell(); + let td = tr.insertCell(); td.appendChild(a); - var td2 = tr.insertCell(); + let td2 = tr.insertCell(); td2.appendChild(document.createTextNode(value)) } function createTable(data, search) { - var table = document.getElementById('products-table-body'); - var regex = new RegExp('' + search + '', 'ig'); + let table = document.getElementById('products-table-body'); + let regex = new RegExp('' + search + '', 'ig'); table.innerHTML = ""; @@ -194,18 +175,18 @@ function createTable(data, search) { } function updateResults() { - var search = document.getElementById('search-products'); + let search = document.getElementById('search-products'); createTable(availableProducts, search.value); } function setSearch(query) { - var search = document.getElementById('search-products'); + let search = document.getElementById('search-products'); search.value = query; updateResults(); } function checkHash() { - var hash = window.location.hash; + let hash = window.location.hash; if (hash.length == 0) return @@ -213,7 +194,7 @@ function checkHash() { } function preparePage(resp) { - var products = JSON.parse(resp); + let products = JSON.parse(resp); if (!products['products']) { pleaseWait.style.display = 'none'; processingError.style.display = 'block'; @@ -229,12 +210,11 @@ function preparePage(resp) { checkHash(); } -var xhr = new XMLHttpRequest(); +sessionId.value = uuidv4(); -xhr.onreadystatechange = function () { - if (this.readyState != 4) - return; +let xhr = new XMLHttpRequest(); +xhr.onload = function () { if (this.status != 200) { pleaseWait.style.display = 'none'; processingError.style.display = 'block'; @@ -244,8 +224,6 @@ xhr.onreadystatechange = function () { preparePage(this.responseText); }; -sessionId.value = uuidv4(); - xhr.open("GET", 'data/products.json', true); xhr.send();