diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..be1b0f0 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/index.html b/index.html index c4ead91..e3dbe5d 100644 --- a/index.html +++ b/index.html @@ -5,6 +5,7 @@ + *DEV* CAIU VCard Creator *DEV* \ No newline at end of file diff --git a/script.js b/script.js index 455a12b..c723152 100644 --- a/script.js +++ b/script.js @@ -37,7 +37,6 @@ function submitForm() { mode: 'cors', Headers: { 'Accept': 'image/png', - 'Content-Type': 'application/json' }, body: body }).then(async response => { @@ -46,18 +45,32 @@ function submitForm() { } function loadFromExistingCard() { + const data = new FormData(); + data.append("card", document.getElementById("existingFile").files[0]); + fetchWithTimeout(backendUrl + "/backend/edit", { timeout: 5000, method: 'POST', mode: 'cors', - Headers: { - 'Accept': 'application/json', - 'Content-Type': 'image/png' + headers: { + 'Accept': 'application/json' }, - body: document.getElementById("existingFile").files[0] - }).then(response => response.json(res => { - - })) + 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 getLocations() { @@ -161,4 +174,37 @@ function downloadImage(arrayBuffer) { setTimeout(() => { URL.revokeObjectURL(link.href); }, 100); +} + +function toggleDarkMode() { + const darkMode = document.body.classList.contains("dark-theme"); + if (darkMode) { + document.body.classList.remove("dark-theme"); + } else { + document.body.classList.add("dark-theme"); + } +} + +function getCookie(cookieName) { + let cookieArray = document.cookie.split(";"); + for (let i = 0; i < cookieArray.length; i++) { + let cookie = cookieArray[i].split("="); + if (cookie[0] === cookieName) { + return cookie[1]; + } + } + console.log("Unable to get cookie ", cookieName); + return ""; +} + +function setCookie(cookieName, cookieValue) { + let cookieArray = document.cookie.split(";"); + for (let i = 0; i < cookieArray.length; i++) { + let cookie = cookieArray[i].split("="); + if (cookie[0] === cookieName) { + cookie[1] = cookieValue; + document.getElementById("displayedUrl").innerHTML = "Current Backend Url: " + backendUrl; + console.log("Set backendUrl to ", backendUrl); + } + } } \ No newline at end of file diff --git a/static/css/darkmode.css b/static/css/darkmode.css new file mode 100644 index 0000000..6b83b48 --- /dev/null +++ b/static/css/darkmode.css @@ -0,0 +1,266 @@ +:root { + --trans-dur: 0.3s; +} + +/* Default */ +.theme { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-tap-highlight-color: transparent; +} + +.icon, +.toggle { + z-index: 1; +} + +.icon, +.icon-part { + position: absolute; +} + +.icon { + display: block; + top: 0.75em; + left: 0.75em; + width: 1.5em; + height: 1.5em; + -webkit-transition: var(--trans-dur); + transition: var(--trans-dur); +} + +.icon-part { + border-radius: 50%; + -webkit-box-shadow: 0.4em -0.4em 0 0.5em hsl(0,0%,100%) inset; + box-shadow: 0.4em -0.4em 0 0.5em hsl(0,0%,100%) inset; + top: calc(50% - 0.5em); + left: calc(50% - 0.5em); + width: 1em; + height: 1em; + -webkit-transition: opacity var(--trans-dur) ease-in-out, + -webkit-box-shadow var(--trans-dur) ease-in-out, + -webkit-transform var(--trans-dur) ease-in-out; + transition: opacity var(--trans-dur) ease-in-out, + -webkit-box-shadow var(--trans-dur) ease-in-out, + -webkit-transform var(--trans-dur) ease-in-out; + transition: box-shadow var(--trans-dur) ease-in-out, + opacity var(--trans-dur) ease-in-out, + transform var(--trans-dur) ease-in-out; + transition: box-shadow var(--trans-dur) ease-in-out, + opacity var(--trans-dur) ease-in-out, + transform var(--trans-dur) ease-in-out, + -webkit-box-shadow var(--trans-dur) ease-in-out, + -webkit-transform var(--trans-dur) ease-in-out; + -webkit-transform: scale(0.5); + -ms-transform: scale(0.5); + transform: scale(0.5); +} + +.icon-part ~ .icon-part { + background-color: hsl(0,0%,100%); + border-radius: 0.05em; + top: 50%; + left: calc(50% - 0.05em); + -webkit-transform: rotate(0deg) translateY(0.5em); + -ms-transform: rotate(0deg) translateY(0.5em); + transform: rotate(0deg) translateY(0.5em); + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + transform-origin: 50% 0; + width: 0.1em; + height: 0.2em; +} + +.icon-part:nth-child(3) { + -webkit-transform: rotate(45deg) translateY(0.45em); + -ms-transform: rotate(45deg) translateY(0.45em); + transform: rotate(45deg) translateY(0.45em); +} + +.icon-part:nth-child(4) { + -webkit-transform: rotate(90deg) translateY(0.45em); + -ms-transform: rotate(90deg) translateY(0.45em); + transform: rotate(90deg) translateY(0.45em); +} + +.icon-part:nth-child(5) { + -webkit-transform: rotate(135deg) translateY(0.45em); + -ms-transform: rotate(135deg) translateY(0.45em); + transform: rotate(135deg) translateY(0.45em); +} + +.icon-part:nth-child(6) { + -webkit-transform: rotate(180deg) translateY(0.45em); + -ms-transform: rotate(180deg) translateY(0.45em); + transform: rotate(180deg) translateY(0.45em); +} + +.icon-part:nth-child(7) { + -webkit-transform: rotate(225deg) translateY(0.45em); + -ms-transform: rotate(225deg) translateY(0.45em); + transform: rotate(225deg) translateY(0.45em); +} + +.icon-part:nth-child(8) { + -webkit-transform: rotate(270deg) translateY(0.5em); + -ms-transform: rotate(270deg) translateY(0.5em); + transform: rotate(270deg) translateY(0.5em); +} + +.icon-part:nth-child(9) { + -webkit-transform: rotate(315deg) translateY(0.5em); + -ms-transform: rotate(315deg) translateY(0.5em); + transform: rotate(315deg) translateY(0.5em); +} + +.label, +.toggle, +.toggle-wrap { + position: relative; +} + +.toggle, +.toggle:before { + display: block; +} + +.toggle { + background-color: hsl(48,90%,85%); + border-radius: 25% / 50%; + -webkit-box-shadow: 0 0 0 0.125em var(--secondary); + box-shadow: 0 0 0 0.125em var(--secondary); + padding: 0.25em !important; + width: 6em; + height: 3em; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-transition: background-color var(--trans-dur) ease-in-out, + -webkit-box-shadow 0.15s ease-in-out, + -webkit-transform var(--trans-dur) ease-in-out; + transition: background-color var(--trans-dur) ease-in-out, + -webkit-box-shadow 0.15s ease-in-out, + -webkit-transform var(--trans-dur) ease-in-out; + transition: background-color var(--trans-dur) ease-in-out, + box-shadow 0.15s ease-in-out, + transform var(--trans-dur) ease-in-out; + transition: background-color var(--trans-dur) ease-in-out, + box-shadow 0.15s ease-in-out, + transform var(--trans-dur) ease-in-out, + -webkit-box-shadow 0.15s ease-in-out, + -webkit-transform var(--trans-dur) ease-in-out; +} + +.toggle:before { + background-color: hsl(48,90%,55%); + border-radius: 50%; + content: ""; + width: 2.5em; + height: 2.5em; + -webkit-transition: 0.3s; + transition: 0.3s; +} + +.toggle:focus { + -webkit-box-shadow: 0 0 0 0.125em var(--primary); + box-shadow: 0 0 0 0.125em var(--primary); + outline: transparent; +} + +/* Checked */ +.toggle:checked { + background-color: hsl(198,90%,15%); +} + +.toggle:checked:before, +.toggle:checked ~ .icon { + -webkit-transform: translateX(3em); + -ms-transform: translateX(3em); + transform: translateX(3em); +} + +.toggle:checked:before { + background-color: hsl(198,90%,55%); +} + +.toggle:checked ~ .icon .icon-part:nth-child(1) { + -webkit-box-shadow: 0.2em -0.2em 0 0.2em hsl(0,0%,100%) inset; + box-shadow: 0.2em -0.2em 0 0.2em hsl(0,0%,100%) inset; + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); + top: 0.25em; + left: 0.25em; +} + +.toggle:checked ~ .icon .icon-part ~ .icon-part { + opacity: 0; +} + +.toggle:checked ~ .icon .icon-part:nth-child(2) { + -webkit-transform: rotate(45deg) translateY(0.8em); + -ms-transform: rotate(45deg) translateY(0.8em); + transform: rotate(45deg) translateY(0.8em); +} + +.toggle:checked ~ .icon .icon-part:nth-child(3) { + -webkit-transform: rotate(90deg) translateY(0.8em); + -ms-transform: rotate(90deg) translateY(0.8em); + transform: rotate(90deg) translateY(0.8em); +} + +.toggle:checked ~ .icon .icon-part:nth-child(4) { + -webkit-transform: rotate(135deg) translateY(0.8em); + -ms-transform: rotate(135deg) translateY(0.8em); + transform: rotate(135deg) translateY(0.8em); +} + +.toggle:checked ~ .icon .icon-part:nth-child(5) { + -webkit-transform: rotate(180deg) translateY(0.8em); + -ms-transform: rotate(180deg) translateY(0.8em); + transform: rotate(180deg) translateY(0.8em); +} + +.toggle:checked ~ .icon .icon-part:nth-child(6) { + -webkit-transform: rotate(225deg) translateY(0.8em); + -ms-transform: rotate(225deg) translateY(0.8em); + transform: rotate(225deg) translateY(0.8em); +} + +.toggle:checked ~ .icon .icon-part:nth-child(7) { + -webkit-transform: rotate(270deg) translateY(0.8em); + -ms-transform: rotate(270deg) translateY(0.8em); + transform: rotate(270deg) translateY(0.8em); +} + +.toggle:checked ~ .icon .icon-part:nth-child(8) { + -webkit-transform: rotate(315deg) translateY(0.8em); + -ms-transform: rotate(315deg) translateY(0.8em); + transform: rotate(315deg) translateY(0.8em); +} + +.toggle:checked ~ .icon .icon-part:nth-child(9) { + -webkit-transform: rotate(360deg) translateY(0.8em); + -ms-transform: rotate(360deg) translateY(0.8em); + transform: rotate(360deg) translateY(0.8em); +} + +.toggle-wrap { + margin: 0 0.75em; +} + +@supports selector(:focus-visible) { + .toggle:focus { + -webkit-box-shadow: 0 0 0 0.125em var(--secondary); + box-shadow: 0 0 0 0.125em var(--secondary); + } + + .toggle:focus-visible { + -webkit-box-shadow: 0 0 0 0.125em var(--primary); + box-shadow: 0 0 0 0.125em var(--primary); + } +} \ No newline at end of file diff --git a/stylesheet.css b/stylesheet.css index bb69c8d..f7a7dd6 100644 --- a/stylesheet.css +++ b/stylesheet.css @@ -1,3 +1,18 @@ +:root { + --text-color: #212529; + --background-color: #ffffff; +} + +.dark-theme { + --text-color: #ffffff; + --background-color: #212121; +} + +body { + color: var(--text-color); + background-color: var(--background-color); +} + .nav-align { width: fit-content; vertical-align: middle; @@ -41,9 +56,9 @@ } .connected { - background: #28a745; + background: var(--success); } .disconnected { - background: #dc3545; + background: var(--danger); } \ No newline at end of file