mirror of
https://gitplac.si/aljaxus/upn-qr.git
synced 2025-12-17 04:00:59 +00:00
improve user experience in form
preload QR image before setting it - prevent flickering remove "update" button, listen to input events on input fields prevent constant updates by debouncing the updateQR call
This commit is contained in:
@@ -30,13 +30,11 @@ div {
|
|||||||
row-gap: .5rem;
|
row-gap: .5rem;
|
||||||
column-gap: 1rem;
|
column-gap: 1rem;
|
||||||
}
|
}
|
||||||
.form > div:last-child {
|
|
||||||
grid-column-end: -1;
|
|
||||||
}
|
|
||||||
.code {
|
.code {
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
background-position: center center;
|
background-position: center center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
background-image: url("/public/invalid-content.png");
|
||||||
margin: 2rem;
|
margin: 2rem;
|
||||||
}
|
}
|
||||||
.card {
|
.card {
|
||||||
@@ -81,18 +79,26 @@ div {
|
|||||||
<input value="<%= val %>" <%= readonly %> type="<%= i.t %>" placeholder="<%= i.p %>" name="<%= i.n %>">
|
<input value="<%= val %>" <%= readonly %> type="<%= i.t %>" placeholder="<%= i.p %>" name="<%= i.n %>">
|
||||||
</div>
|
</div>
|
||||||
<% } %>
|
<% } %>
|
||||||
<div>
|
<!-- <div>
|
||||||
<input type="submit" value="Update details" id="update-details">
|
<input type="submit" value="Update details" id="update-details">
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
<script>
|
<script>
|
||||||
const btn = document.getElementById("update-details")
|
const inputs = document.getElementsByTagName("input")
|
||||||
const qrcode = document.getElementById("qrcode")
|
const qrcode = document.getElementById("qrcode")
|
||||||
function val (name) {
|
function val (name) {
|
||||||
return document.getElementsByName(name)?.[0]?.value || ""
|
return document.getElementsByName(name)?.[0]?.value || ""
|
||||||
}
|
}
|
||||||
|
let debounce = null
|
||||||
|
function updateQRdeb () {
|
||||||
|
clearTimeout(debounce)
|
||||||
|
debounce = setTimeout(() => {
|
||||||
|
clearTimeout(debounce)
|
||||||
|
updateQR()
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
function updateQR (e) {
|
function updateQR (e) {
|
||||||
const qstring = [
|
const qstring = [
|
||||||
["client_name", val("client-name")],
|
["client_name", val("client-name")],
|
||||||
@@ -107,9 +113,14 @@ function updateQR (e) {
|
|||||||
["issuer_address", val("issuer-address")],
|
["issuer_address", val("issuer-address")],
|
||||||
["issuer_city", val("issuer-city")],
|
["issuer_city", val("issuer-city")],
|
||||||
].map(v => `${v[0]}=${v[1]}`).join("&")
|
].map(v => `${v[0]}=${v[1]}`).join("&")
|
||||||
qrcode.style.setProperty('background-image', `url("/api/qrcode?${qstring}"), url("/public/invalid-content.png")`)
|
const newurl = `/api/qrcode?${qstring}`
|
||||||
|
const preloadImg = new Image();
|
||||||
|
preloadImg.addEventListener("load", () => qrcode.style.setProperty('background-image', `url("${newurl}"), url("/public/invalid-content.png")`))
|
||||||
|
preloadImg.src=newurl;
|
||||||
|
}
|
||||||
|
for (el of inputs) {
|
||||||
|
el.addEventListener("input", updateQRdeb)
|
||||||
}
|
}
|
||||||
btn.addEventListener("click", updateQR)
|
|
||||||
|
|
||||||
updateQR()
|
updateQR()
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user