diff options
| author | DESKTOP-RBH716R\Admin | 2022-09-19 07:56:27 +0000 |
|---|---|---|
| committer | DESKTOP-RBH716R\Admin | 2022-09-19 07:56:27 +0000 |
| commit | ea71f77c45fcc66c3a847af71c6b000351b47cfa (patch) | |
| tree | 3ffc00676ff2c08352fa1517d54976b501969e6f /_site | |
| parent | 58f0df300663bbf0916b736b128cb6cdbda8e2bb (diff) | |
| download | massgrave.dev-ea71f77c45fcc66c3a847af71c6b000351b47cfa.zip | |
Add MSDL
Diffstat (limited to '_site')
| -rw-r--r-- | _site/data/products.json | 9 | ||||
| -rw-r--r-- | _site/favicon.ico | bin | 0 -> 5430 bytes | |||
| -rw-r--r-- | _site/img/cover.png | bin | 0 -> 168552 bytes | |||
| -rw-r--r-- | _site/js/msdl.js | 206 | ||||
| -rw-r--r-- | _site/msdl.html | 63 |
5 files changed, 278 insertions, 0 deletions
diff --git a/_site/data/products.json b/_site/data/products.json new file mode 100644 index 0000000..c17cce5 --- /dev/null +++ b/_site/data/products.json @@ -0,0 +1,9 @@ +{ + "products": { + "52": "Windows 8.1 (Build 9600)", + "55": "Windows 8.1 N (Build 9600)", + "2084": "Windows 10 21H2 (Build 19044.1288)", + "2093": "Windows 11 21H2 (Build 22000.318)", + "2360": "Windows 11 22H2 (Waiting to be live)" + } +} diff --git a/_site/favicon.ico b/_site/favicon.ico Binary files differnew file mode 100644 index 0000000..e478721 --- /dev/null +++ b/_site/favicon.ico diff --git a/_site/img/cover.png b/_site/img/cover.png Binary files differnew file mode 100644 index 0000000..9bd4bea --- /dev/null +++ b/_site/img/cover.png diff --git a/_site/js/msdl.js b/_site/js/msdl.js new file mode 100644 index 0000000..12015f3 --- /dev/null +++ b/_site/js/msdl.js @@ -0,0 +1,206 @@ +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'; diff --git a/_site/msdl.html b/_site/msdl.html new file mode 100644 index 0000000..e3652af --- /dev/null +++ b/_site/msdl.html @@ -0,0 +1,63 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta property="description" content="Microsoft Software Download Listing lets you browse and download products from Microsoft Software Download."> + + <meta property="twitter:card" content="summary_large_image"> + <meta property="og:site_name" content="Microsoft Software Download Listing"> + <meta property="og:title" content="Microsoft Software Download Listing"> + <meta property="og:type" content="website"> + <meta property="og:description" content="Microsoft Software Download Listing lets you browse and download products from Microsoft Software Download."> + <meta property="og:image" content="https://eraseyourknees.github.io/msdl/img/cover.png"> + <meta property="og:url" content="https://eraseyourknees.github.io/msdl/"> + + <title>Microsoft Software Download Listing</title> + + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css"> + <script defer src="js/msdl.js"></script> + </head> + <body> + + <a href="https://github.com/eraseyourknees/msdl"> + <b>Credits: eraseyourknees</b> + </a> + + <noscript> + <p>This page requires JavaScript to work.</p> + </noscript> + + <div id="products-list" style="display: none;"> + <h2>Select product</h2> + <table style="table-layout: auto;"> + <thead> + <tr> + <th>Product</th> + <th>ID</th> + </tr> + </thead> + <tbody id="products-table-body"></tbody> + </table> + </div> + + <div id="msdl-ms-content" style="display: none;"></div> + + <div id="msdl-please-wait" style="display: none;"> + <h2>Please wait...</h2> + <p>Please wait while the data you requested is being retrieved.</p> + </div> + + <div id="msdl-processing-error" style="display: none;"> + <h2>Error</h2> + <p>An error has occurred while processing your request.</p> + </div> + + <div id="back-to-products" style="display: none;"> + <hr> + <button onClick="backToProducts();">Go back to the product list</button> + </div> + + <input id="msdl-session-id" type="hidden"> + </body> +</html> |
