ftracker/web/index.html

171 lines
3.7 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>FTracker</title>
<meta name="theme-color" content="#c50e1f">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<style>
html, body {
margin: 0;
padding: 0;
height: 100%;
background: #ddd;
font-family: sans-serif;
}
h1 {
margin: 0;
padding: 16px;
text-transform: uppercase;
color: #eee;
background: #c50e1f;
text-align: center;
}
form {
padding: 16px;
}
label {
display: block;
font-size: 16px;
margin-bottom: 16px;
color: #444;
}
label#agreelabel {
height: 32px;
line-height: 32px;
}
label span {
width: calc(100% - 50px);
display: inline-block;
vertical-align: middle;
line-height: normal;
}
input {
border: none;
padding: 16px;
font-size: 16px;
}
input[type=text] {
color: #000;
width: calc(100% - 32px);
}
input[type=submit] {
background: #c50e1f;
text-transform: uppercase;
font-weight: bold;
color: #fff;
width: 100%;
}
input[type=checkbox] {
transform: translateY(-3px);
float: left;
height: 32px;
width: 32px;
margin-right: 8px;
}
</style>
<script>
// 1st script, prepares values needed for writing document
var cbt = {
'arrival': 'I have read and will adhere to the <a href="/guidelines" target="_blank">protection guidelines</a>',
'departure': 'I have cleaned my workspace'
}
function getParams() {
var h = document.location.href
var qparam = h.split('?')[1] || null
if (qparam == null) {
alert("Query parameter(s) missing")
return null
}
var vals = qparam.split('=')
if (vals.length < 2 || !cbt.hasOwnProperty(vals[0])) {
alert("Invalid query parameter")
return null
}
return {
action: vals[0],
room: vals[1]
}
}
var qp = getParams()
</script>
</head>
<body>
<h1><script>
document.write(qp.action + "<br>Room " + qp.room)
</script></h1>
<form>
<label>
Full Name:<br>
<input type="text" name="name" id="name" placeholder="John Doe" required>
</label>
<label id="agreelabel">
<input type="checkbox" name="agree" id="agree" required>
<span><script>document.write(cbt[qp.action])</script></span>
</label>
<input type="submit">
</form>
<script>
// Prefill the name field if it was successfully entered before
var savedName = localStorage.getItem('name')
if (savedName)
document.getElementById('name').value = savedName
// 2nd script, server API communication
form = document.querySelector('form')
form.onsubmit= function(e) {
e.preventDefault()
console.log(e)
var name = e.srcElement[0].value
var agreed = e.srcElement[1].checked
// POST JSON. See docs/API.md
var payload = (qp.action == 'arrival') ?
{
'room': qp.room,
'name': name,
'agreetoguidelines': agreed
} :
{
'name': name,
'cleanedworkspace': agreed
}
console.log(payload)
fetch("/" + qp.action, {
method: "POST",
body: JSON.stringify(payload)
}).then(res => {
console.log("Request complete! response:", res)
if (Math.floor(res.status / 100) == 2) {
// Success
form.innerHTML = "<h2>Done. Thanks!</h2>"
localStorage.setItem('name', name)
} else if (res.status == 409) {
// Conflict, more data requested
res.json().then(function (json) {
// TODO: Ask user for data and resend both
alert(json.message)
})
} else {
// Any other generic error
res.text().then(function (text) {
alert(text)
})
}
})
}
</script>
</body>
</html>