77 lines
3.2 KiB
HTML
77 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" xmlns:th="https://www.thymeleaf.org/">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Title</title>
|
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
|
<link th:href="@{/styles/authenticate.css}" rel="stylesheet" />
|
|
</head>
|
|
|
|
<body class="center-screen">
|
|
|
|
<h1 th:text="|Dir wurde ein Code an ${name} gesendet!|"></h1>
|
|
<h2>Bitte gebe den Authentifizierungscode ein</h2>
|
|
<form action="#" id="passForm" th:action="@{/vote}" method="post">
|
|
<input id="voterName" type="hidden" name="name" th:value="${name}" />
|
|
<input id="authCode" type="hidden" name="code" value="" />
|
|
<input type="text" placeholder="•" class="passInput" name="pass[]" maxlength="1" autocomplete="off" required pattern="\d{1}" autofocus>
|
|
<input type="text" placeholder="•" class="passInput" name="pass[]" maxlength="1" autocomplete="off" required pattern="\d{1}">
|
|
<input type="text" placeholder="•" class="passInput" name="pass[]" maxlength="1" autocomplete="off" required pattern="\d{1}">
|
|
<input type="text" placeholder="•" class="passInput" name="pass[]" maxlength="1" autocomplete="off" required pattern="\d{1}">
|
|
<input type="text" placeholder="•" class="passInput" name="pass[]" maxlength="1" autocomplete="off" required pattern="\d{1}">
|
|
<input type="text" placeholder="•" class="passInput" name="pass[]" maxlength="1" autocomplete="off" required pattern="\d{1}">
|
|
|
|
</form>
|
|
<button class="submitButton" id="signup_button" onclick="getCode()">Abstimmen</button>
|
|
<div th:if="${codeExpired}">
|
|
<h2 class="errorCode">Der Code ist nicht mehr gültig!<br>Fordere einen neuen an</h2>
|
|
</div>
|
|
|
|
<div th:if="${codeFalse}">
|
|
<h2 class="errorCode">Der eingegebene Code ist falsch</h2>
|
|
</div>
|
|
|
|
<script>
|
|
const $inp = $(".passInput");
|
|
|
|
$inp.on({
|
|
paste(ev) { // Handle Pasting
|
|
const clip = ev.originalEvent.clipboardData.getData('text').trim();
|
|
// Allow numbers only
|
|
if (!/\d{6}/.test(clip)) return ev.preventDefault(); // Invalid. Exit here
|
|
// Split string to Array or characters
|
|
const s = [...clip];
|
|
// Populate inputs. Focus last input.
|
|
$inp.val(i => s[i]).eq(5).focus();
|
|
},
|
|
input(ev) { // Handle typing
|
|
|
|
const i = $inp.index(this);
|
|
if (this.value) $inp.eq(i + 1).focus();
|
|
},
|
|
keydown(ev) { // Handle Deleting
|
|
|
|
const i = $inp.index(this);
|
|
if (!this.value && ev.key === "Backspace" && i) $inp.eq(i - 1).focus();
|
|
}
|
|
});
|
|
|
|
function getCode() {
|
|
groupInputs = document.querySelectorAll(".passInput");
|
|
var code = "";
|
|
groupInputs.forEach(input => {
|
|
console.log("Input: " + input.value);
|
|
code += input.value;
|
|
});
|
|
console.log("Code: " + code);
|
|
output = document.getElementById("authCode");
|
|
output.value = code;
|
|
document.getElementById("passForm").submit();
|
|
}
|
|
</script>
|
|
|
|
</body>
|
|
|
|
|
|
</html> |