/* Copyright © 2025 - 2026 Jakob L. Kreuze This file is part of SRS Anywhere. SRS Anywhere is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. SRS Anywhere is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with SRS Anywhere. If not, see . */ function enableInputs() { const target = document.querySelector('#cards-input'); const el1 = document.createElement('input'); el1.type = "text"; el1.id = "network-password"; const el2 = document.createElement('button'); el2.id = "open-network"; el2.innerText = "Go!"; const el3 = document.createElement('br'); target.before(el1, el2, el3); } function enableNetworkFeatures() { enableInputs(); const passwordField = document.getElementById('network-password'); const urlParams = new URLSearchParams(window.location.search); let password = localStorage.getItem('password') || urlParams.get('password'); if (password) { passwordField.value = password; } const btn = document.getElementById('open-network'); if (!btn) { console.warn('Button with id="open-network" not found.'); return; } btn.addEventListener('click', function () { const password = passwordField.value; const xhr = new XMLHttpRequest(); xhr.open('GET', '/cgi-bin/deck.py', true); xhr.setRequestHeader('PASSWORD', password); xhr.onreadystatechange = function () { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status >= 200 && xhr.status < 300) { localStorage.setItem('password', password); loadCards(JSON.parse(xhr.responseText)); } else { reportException(xhr.statusText); } } }; xhr.send(); }); const downloadJSONOld = downloadJSON; downloadJSON = (obj) => { try { const password = document.getElementById('network-password').value; const xhr = new XMLHttpRequest(); xhr.open('POST', '/cgi-bin/deck.py', true); xhr.setRequestHeader('PASSWORD', password); xhr.onreadystatechange = function () { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status < 200 || xhr.status >= 300) { reportException(xhr.statusText); const jsonString = JSON.stringify(obj, null, 2); const blob = new Blob([jsonString], { type: 'application/json' }); const url = URL.createObjectURL(blob); // Create a "ghost" anchor to trigger the download const a = document.createElement('a'); a.href = url; a.download = 'data.json'; // Append to body, click it, and remove it immediately document.body.appendChild(a); a.click(); document.body.removeChild(a); // Clean up the URL object to free up memory URL.revokeObjectURL(url); } } }; xhr.send(JSON.stringify(window.allCards, null, 2)); } catch (e) { reportException(e); downloadJSONOld(obj); } } } window.addEventListener("load", () => { if (SRS_ANYWHERE_CONFIG.network) { enableNetworkFeatures(); } });