summaryrefslogtreecommitdiff
path: root/_site
diff options
context:
space:
mode:
authorDESKTOP-RBH716R\Admin2022-09-19 07:56:27 +0000
committerDESKTOP-RBH716R\Admin2022-09-19 07:56:27 +0000
commitea71f77c45fcc66c3a847af71c6b000351b47cfa (patch)
tree3ffc00676ff2c08352fa1517d54976b501969e6f /_site
parent58f0df300663bbf0916b736b128cb6cdbda8e2bb (diff)
downloadmassgrave.dev-ea71f77c45fcc66c3a847af71c6b000351b47cfa.zip
Add MSDL
Diffstat (limited to '_site')
-rw-r--r--_site/data/products.json9
-rw-r--r--_site/favicon.icobin0 -> 5430 bytes
-rw-r--r--_site/img/cover.pngbin0 -> 168552 bytes
-rw-r--r--_site/js/msdl.js206
-rw-r--r--_site/msdl.html63
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
new file mode 100644
index 0000000..e478721
--- /dev/null
+++ b/_site/favicon.ico
Binary files differ
diff --git a/_site/img/cover.png b/_site/img/cover.png
new file mode 100644
index 0000000..9bd4bea
--- /dev/null
+++ b/_site/img/cover.png
Binary files differ
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>