2025-01-15 18:46:16 +03:00

71 lines
2.2 KiB
JavaScript

function readSpecsForm() {
let specs = {};
for (let field of document.forms['wizard'].elements) {
specs[field.name] = field.value;
}
return specs;
}
function writeSpecsToForm(specs) {
for (let [k, v] of Object.entries(specs)) {
document.forms['wizard'].elements[k].value = v;
}
}
async function encodeSpecs(specs) {
let byteArray = new TextEncoder().encode(JSON.stringify(specs));
let cs = new CompressionStream('deflate-raw');
let writer = cs.writable.getWriter();
writer.write(byteArray);
writer.close();
let response = new Response(cs.readable);
let respBuffer = await response.arrayBuffer();
let b64str = btoa(String.fromCharCode.apply(null, new Uint8Array(respBuffer)));
return b64str.replaceAll('=', '');
}
async function decodeSpecs(str) {
const byteArray = Uint8Array.from(atob(str), c => c.charCodeAt(0));
let ds = new DecompressionStream('deflate-raw');
let writer = ds.writable.getWriter();
writer.write(byteArray);
writer.close();
let response = new Response(ds.readable);
let respText = await response.text();
return JSON.parse(respText);
}
function displayUrl(url) {
let link = document.getElementById('ready_url_link');
link.href = url;
link.style.visibility = 'visible';
let readyUrlInput = document.getElementById('url_input');
readyUrlInput.value = url;
readyUrlInput.focus();
readyUrlInput.select();
document.getElementById('cont_url_len').innerText = `len=${url.length}`;
}
function baseUrl() {
return document.location.origin + '/api/v1/render/';
}
async function genUrl() {
let specs = readSpecsForm();
let encodedSpecs = await encodeSpecs(specs);
let url = baseUrl() + encodedSpecs;
displayUrl(url);
}
async function editUrl() {
let url = document.getElementById('url_input').value;
let specs = await decodeSpecs(url.replace(baseUrl(), ''));
writeSpecsToForm(specs);
displayUrl(url);
}
document.addEventListener('DOMContentLoaded', ev => {
document.getElementById('btn_gen_url').addEventListener('click', genUrl);
document.getElementById('btn_edit').addEventListener('click', editUrl);
});