doorlock/public/client.js

105 lines
3.3 KiB
JavaScript
Raw Normal View History

2018-09-01 02:15:00 +00:00
$(function(){
// refocus and clear the input box and relay every 20sec for failsafe
2018-09-01 02:15:00 +00:00
setInterval(function(){
$("#rfid").focus();
$("#rfid").val(null);
window.relayActivated = false;
2018-09-01 02:15:00 +00:00
}, 20000);
$("#rfid").keydown(function(event){
// prevent enter key from submitting form; we want AJAX if possible
2018-09-01 02:15:00 +00:00
if (event.keyCode === 13){
return false;
}
}).keyup(function(event){
2018-09-01 02:15:00 +00:00
// store value
value = $("#rfid").val();
// start processing after the enter key
if (event.keyCode === 13) {
2018-09-01 02:15:00 +00:00
// wait to send the request for a sec to let them finish typing
setTimeout(function(){
// clear input box
$("#rfid").val(null);
// post value to server
loading(true);
if (!window.checkinLoading && !window.relayActivated) {
// use global var to prevent simultaneous posts
window.checkinLoading = true;
console.log("Checking in...");
$.post("/checkin", {"rfid":value}, function(data){
console.log(data);
if (data.hasOwnProperty("success")) {
if (data.success) {
success(data.name);
window.relayActivated = true;
} else {
failure();
}
2018-09-01 02:15:00 +00:00
} else {
error(data);
2018-09-01 02:15:00 +00:00
}
}, "json").fail(function(res){
error(res.responseText);
}).always(function(){
loading(false);
window.checkinLoading = false;
});
} else {
console.log("Already checking in; canceled.");
}
2018-09-01 02:15:00 +00:00
}, 250);
}
});
});
function loading(loading){
if (loading) {
$("#loading").removeClass("dn");
} else {
$("#loading").addClass("dn");
}
}
function reset(){
$("#name").text(null);
$("#failure").addClass("dn");
$("#success").addClass("dn");
$("#error").addClass("dn");
$("#errormessage").text("Something went wrong with the card reader.");
loading(false);
2018-09-01 02:15:00 +00:00
}
function success(name){
reset();
setTimeout(function(){
$("#name").text(name);
$("#success").removeClass("dn");
setTimeout(function(){
reset();
// this is the only time when the relay is reset, besides the 20-sec reset
window.relayActivated = false;
}, 6000); // 6000 to match door.js(const DELAY)
}, 250);
2018-09-01 02:15:00 +00:00
}
function failure(){
reset();
setTimeout(function(){
$("#failure").removeClass("dn");
setTimeout(function(){ reset(); }, 6000); // 6000 to match door.js(const DELAY)
}, 250);
2018-09-01 02:15:00 +00:00
}
function error(msg){
console.log(msg);
2018-09-01 02:15:00 +00:00
reset();
setTimeout(function(){
$("#error").removeClass("dn");
if (msg) {
$("#errormessage").text(msg);
}
setTimeout(function(){ reset(); }, 6000); // 6000 to match door.js(const DELAY)
}, 250);
2018-09-01 02:15:00 +00:00
}