71 lines
2.2 KiB
JavaScript
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);
|
|
});
|