138 lines
3.0 KiB
JavaScript
138 lines
3.0 KiB
JavaScript
var len = 0;
|
|
var lastBrew = "∞";
|
|
var brewtext = "";
|
|
|
|
$(document).ready(function(){
|
|
$('#text').bind("DOMSubtreeModified", resize);
|
|
updateTime();
|
|
setInterval(updateTime,1000);
|
|
formatBrewTime();
|
|
setInterval(formatBrewTime,10000);
|
|
});
|
|
|
|
$(window).resize(resize);
|
|
|
|
var defaultBackoffTime = 1000;
|
|
var modified = 0;
|
|
|
|
function fetchdata(data, status){
|
|
var backoffTime = defaultBackoffTime;
|
|
modified = 1;
|
|
if (typeof status !== 'undefined'){
|
|
if (status == "success"){
|
|
backoffTime = defaultBackoffTime;
|
|
parseData(data);
|
|
}
|
|
else if (status == "error"){
|
|
backoffTime *= 2;
|
|
modified = 0
|
|
handleError();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
$.getJSON("/coffee/cups", fetchdata);
|
|
setInterval(function() {
|
|
$.getJSON("/coffee/cups", fetchdata);
|
|
}, 2000);
|
|
|
|
function formatBrewTime(){
|
|
if(!brewtext && lastBrew instanceof Date){
|
|
var now = new Date();
|
|
var timeDiff = Math.max(now.getTime()-lastBrew.getTime(),0);
|
|
if(timeDiff < 3600000)
|
|
tmp = Math.round(timeDiff/60000) + ' min';
|
|
else
|
|
tmp = '~' + Math.round(timeDiff/3600000*2)/2 + ' h';
|
|
$("#brewtime").html(tmp);
|
|
}else
|
|
$("#brewtime").html(brewtext);
|
|
}
|
|
|
|
function handleError(){
|
|
setData("?",0,0,Number.MAX_VALUE,Number.MAX_VALUE);
|
|
}
|
|
|
|
function parseData(data) {
|
|
if (data) {
|
|
var date = new Date(data.date);
|
|
lastBrew = new Date(data.last_brew);
|
|
var now = new Date();
|
|
var cups = data.cups;
|
|
var brewing = data.brewing;
|
|
var timeDiff = Math.max(now.getTime() - lastBrew.getTime(),0);
|
|
var opa = Math.max(100-timeDiff/90000,0);
|
|
setData(cups, data.temp, opa,now.getTime()-date.getTime(), timeDiff, brewing);
|
|
}
|
|
else{
|
|
handleError();
|
|
}
|
|
}
|
|
|
|
function setData(cups, temp, opa, timeFromUpdate, timeFromBrew, brewing){
|
|
var now = new Date();
|
|
if(cups == 0)
|
|
opa = 0;
|
|
brewtext = "";
|
|
$("#upper").css({opacity: opa/100});
|
|
$("#scale2").css({width: Math.min(cups/9*100,100) + '%'});
|
|
$("#text,body").removeClass();
|
|
|
|
if(timeFromUpdate > 600000){
|
|
cups = "?";
|
|
brewtext = "∞";
|
|
$("#text").addClass("unknown");
|
|
}
|
|
else if(brewing){
|
|
cups = "+";
|
|
brewtext = ":)";
|
|
$("#text").addClass("brewing");
|
|
}
|
|
else if(cups <= 2){
|
|
$("#text").addClass("hurry");
|
|
}
|
|
formatBrewTime();
|
|
if($("#text").html() == "+" && !brewing)
|
|
$("body").addClass("coffeeready");
|
|
|
|
cups = Number(cups).toFixed(1);
|
|
var cupsString = cups.toString();
|
|
len = cupsString.length;
|
|
$("#text").html(cups);
|
|
}
|
|
|
|
function updateTime(){
|
|
var now = new Date();
|
|
$("#time").html(formatTime(now.getHours(),now.getMinutes(),now.getSeconds()));
|
|
}
|
|
|
|
function formatTime(hours, minutes, seconds){
|
|
var str = "";
|
|
|
|
if(hours < 10)
|
|
str += "0";
|
|
str += hours;
|
|
|
|
str += ":";
|
|
|
|
if(minutes < 10)
|
|
str += "0";
|
|
str += minutes;
|
|
|
|
str += ":";
|
|
|
|
if(seconds < 10)
|
|
str += "0";
|
|
str += seconds;
|
|
|
|
return str;
|
|
}
|
|
function resize(){
|
|
var w = $("#container").width();
|
|
var h = $("#container").height();
|
|
var s = w > h ? h : w;
|
|
var font = s*0.8*0.38/Math.sqrt(len);
|
|
$("#text").css({ top: s*0.16-font/2 + 'px', fontSize: font + 'px', marginLeft: -font*len*3/10 + 'px'});
|
|
}
|