Basic web frontend
This commit is contained in:
parent
9622bfaf1d
commit
a93df189d6
@ -28,7 +28,7 @@ POST /departure
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Response]
|
[Response]
|
||||||
OK
|
200 OK
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,6 +3,14 @@ from .core import *
|
|||||||
# Start the flask server if run from terminal
|
# Start the flask server if run from terminal
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def get_root():
|
||||||
|
return app.send_static_file('index.html')
|
||||||
|
|
||||||
|
@app.route('/<path:path>')
|
||||||
|
def get_file(path):
|
||||||
|
return app.send_static_file(path)
|
||||||
|
|
||||||
# Just allow everything to avoid the hassle when running locally.
|
# Just allow everything to avoid the hassle when running locally.
|
||||||
@app.after_request
|
@app.after_request
|
||||||
def add_headers(response):
|
def add_headers(response):
|
||||||
|
@ -18,12 +18,7 @@ namelist = NameList(namefile)
|
|||||||
|
|
||||||
|
|
||||||
from flask import Flask, request
|
from flask import Flask, request
|
||||||
app = Flask(__name__)
|
app = Flask(__name__, static_folder='../web')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
|
||||||
def get_root():
|
|
||||||
return "Error: No Endpoint selected. See docs/API.md for reference.", 404
|
|
||||||
|
|
||||||
|
|
||||||
@app.route('/arrival', methods=['POST'])
|
@app.route('/arrival', methods=['POST'])
|
||||||
|
BIN
web/favicon.ico
Normal file
BIN
web/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
95
web/index.html
Normal file
95
web/index.html
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FTracker</title>
|
||||||
|
<script>
|
||||||
|
var cbt = {
|
||||||
|
'arrival': 'I have read the protection <a href="/guidelines">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>
|
||||||
|
<main>
|
||||||
|
<h1><script>
|
||||||
|
document.write(qp.action + " " + qp.room)
|
||||||
|
</script></h1>
|
||||||
|
<form action="#">
|
||||||
|
<label>
|
||||||
|
Full Name:<br>
|
||||||
|
<input type="text" name="name" id="name" required>
|
||||||
|
</label><br>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" name="agree" id="agree" required>
|
||||||
|
<script>document.write(cbt[qp.action])</script>
|
||||||
|
</label><br>
|
||||||
|
<input type="submit">
|
||||||
|
</form>
|
||||||
|
</main>
|
||||||
|
<script>
|
||||||
|
form = document.querySelector('form')
|
||||||
|
form.onsubmit= function(e) {
|
||||||
|
e.preventDefault()
|
||||||
|
console.log(e)
|
||||||
|
|
||||||
|
var payload = (qp.action == 'arrival') ?
|
||||||
|
{
|
||||||
|
'room': qp.room,
|
||||||
|
'name': e.srcElement[0].value,
|
||||||
|
'agreetoguidelines': e.srcElement[1].checked
|
||||||
|
} :
|
||||||
|
{
|
||||||
|
'name': e.srcElement[0].value,
|
||||||
|
'cleanedworkspace': e.srcElement[1].checked
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch("/" + qp.action, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(payload)
|
||||||
|
}).then(res => {
|
||||||
|
console.log("Request complete! response:", res)
|
||||||
|
if (Math.floor(res.status / 100) == 2) {
|
||||||
|
|
||||||
|
form.innerHTML = "<h2>Done. Thanks!</h2>"
|
||||||
|
|
||||||
|
} else if (res.status == 409) {
|
||||||
|
|
||||||
|
// Conflict, more data requested
|
||||||
|
res.json().then(function (json) {
|
||||||
|
// TODO: Ask
|
||||||
|
alert(json.message)
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Any other generic error
|
||||||
|
res.text().then(function (text) {
|
||||||
|
alert(text)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(payload)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user