SignatureCardFrontend/prod/script.js
2023-05-30 16:17:58 -04:00

160 lines
5.4 KiB
JavaScript

function handleCheckbox() {
const extensionInput = document.getElementById("extensionInput");
const directLineInput = document.getElementById("directLineInput");
if (document.getElementById("directLineCheckbox").checked) {
extensionInput.style.display = "none";
directLineInput.style.display = "block";
document.getElementById("extension").value = "";
} else {
extensionInput.style.display = "block";
directLineInput.style.display = "none";
document.getElementById("directLine").value = "";
}
}
let backendUrl = "https://vcard.caiu.org/backend"
let locations = JSON.parse("{}");
function loadLocations() {
let locationsList = document.getElementById("location");
fetchWithTimeout(backendUrl + "/data/locations", {
timeout: 5000,
method: 'GET',
mode: 'cors',
headers: {
'Accept': 'application/json'
}
}).then(response => {
response.text().then(text => {
locations = JSON.parse(text);
locationsList.innerText = "";
for (let i = 0; i < locations.length; i++) {
locationsList.options[locationsList.options.length] = new Option(locations[i].name, locations[i].id);
}
})
});
}
function submitForm() {
let body =
"{" +
"\"name\":\"" + document.getElementById("full_name").value + "\"," +
"\"title\":\"" + document.getElementById("title").value + "\"," +
"\"email\":\"" + document.getElementById("email").value + "\"," +
"\"locationId\":\"" + document.getElementById("location").value + "\"," +
"\"extension\":\"" + document.getElementById("extension").value + "\"," +
"\"directNumber\":\"" + document.getElementById("directLine").value + "\"," +
"\"cellNumber\":\"" + document.getElementById("cellNumber").value + "\"," +
"\"size\":" + document.querySelector('input[name = outlookVer]:checked').value +
"}";
fetchWithTimeout(backendUrl + "/generate", {
timeout: 5000,
method: 'POST',
mode: 'cors',
Headers: {
'Accept': 'image/png',
},
body: body
}).then(async response => {
downloadImage(await response.arrayBuffer());
});
document.getElementById("full_name").value = "";
document.getElementById("title").value = "";
document.getElementById("email").value = "";
document.getElementById("extension").value = "";
document.getElementById("directLine").value = "";
document.getElementById("cellNumber").value = "";
}
function downloadImage(arrayBuffer) {
const blob = new Blob([arrayBuffer], { type: "image/png" });
const cardElement = document.getElementById("vcard");
const imgElement = document.getElementById("cardImg");
let urlCreator = window.URL || window.webkitURL;
let imageUrl = urlCreator.createObjectURL(blob);
cardElement.href = imageUrl;
cardElement.style.display = 'unset';
imgElement.src = imageUrl;
cardElement.download = "card.png";
cardElement.click();
}
function loadFromExistingCard() {
const data = new FormData();
data.append("card", document.getElementById("existingFile").files[0]);
fetchWithTimeout(backendUrl + "/edit", {
timeout: 5000,
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json'
},
body: data
}).then(response => response.json()).then(json => {
document.getElementById("full_name").value = json.Name;
document.getElementById("title").value = json.Title;
document.getElementById("email").value = json.Email;
document.getElementById("location").value = json.Location;
if (json.Extension === "") {
let directLineCheckbox = document.getElementById("directLineCheckbox");
if (directLineCheckbox.value === "on") {
document.getElementById("directLine").value = json.DirectNumber;
}
} else {
document.getElementById("extension").value = json.Extension;
}
document.getElementById("cellNumber").value = json.CellNumber;
});
}
function toggleDarkMode() {
if (getCookie("darkMode") === "on") document.cookie = "darkMode=off";
else document.cookie = "darkMode=on";
refreshDarkMode();
}
function refreshDarkMode() {
let darkMode = getCookie("darkMode") === "on";
if (darkMode) {
document.body.classList.add("dark-theme");
document.getElementById("theme").checked = true;
} else {
if (document.body.classList.contains("dark-theme")) {
document.body.classList.remove("dark-theme");
}
document.getElementById("theme").checked = false;
}
}
async function fetchWithTimeout(resource, options = {}) {
const { timeout = 8000 } = options;
const controller = new AbortController();
const id = setTimeout(() => controller.abort(), timeout);
const response = await fetch(resource, {
...options,
signal: controller.signal
});
clearTimeout(id);
return response;
}
function getCookie(cookieName) {
let cookieArray = document.cookie.split(";");
for (let i = 0; i < cookieArray.length; i++) {
let cookie = cookieArray[i].split("=");
if (cookie[0].trim() === cookieName) {
return cookie[1];
}
}
console.warn("Cookie \"" + cookieName + "\" does not exist");
document.cookie = cookieName + "=";
return "";
}