X-Git-Url: http://www.average.org/gitweb/?p=pulsecounter.git;a=blobdiff_plain;f=web%2Findex.html;h=72bd9f9d5f5edb5fd425f9d823044af77d6f3ea6;hp=e08a07a9f0211d995eb08d711d39c4e21367c280;hb=fcca95634eda4df11fc367c294e34203ad3bc934;hpb=f221f12f7259cd64fdf09494ed61926322448ae8 diff --git a/web/index.html b/web/index.html index e08a07a..72bd9f9 100644 --- a/web/index.html +++ b/web/index.html @@ -13,12 +13,37 @@ var xzero = 20, yzero = 20; var cold_d = [], hot_d = []; + function getcomb(lo, hi) { + var comb = [], lb = []; + var d = hi - lo; + var ord = Math.pow(10, Math.floor(Math.log10(d))); + var scl = Math.floor(d / ord); + var inc, inc2, first, x, lb; + + if (scl < 2) { inc = 0.1; inc2 = 0.5; } + else if (scl < 5) { inc = 0.2; inc2 = 1; } + else { inc = 0.5; inc2 = 2; } + inc *= ord; + inc2 *= ord; + first = (Math.floor(lo / inc) + 1) * inc; + for (x = 0; x < (d / inc) - 1.5; x++) + comb.push(first + inc * x); + first = (Math.floor(lo / inc2) + 1) * inc2; + for (x = 0; x < (d / inc2) - 1.5; x++) + lb.push(first + inc2 * x); + //dbg.innerHTML = "ord=" + ord + "
inc=" + inc + "
" + // + comb + "
" + lb; + return [comb, lb]; + } + function px(x) { return xzero + ((x - tmin) * tfact); } + function py(y) { return wh - yzero - (y * hfact); } + function xaxis() { ctx.beginPath(); ctx.moveTo(px(tmin), py(0)); @@ -26,13 +51,34 @@ ctx.strokeStyle = "black"; ctx.stroke(); } + function yaxis() { + var comb = getcomb(0, hmax); + var i; + + ctx.beginPath(); + for (i = 0; comb[0][i]; i++) { + ctx.moveTo(px(tmin) - 5, py(comb[0][i])); + ctx.lineTo(px(tmax), py(comb[0][i])); + } + ctx.strokeStyle = "lightgray"; + ctx.stroke(); + ctx.beginPath(); ctx.moveTo(px(tmin), py(0)); ctx.lineTo(px(tmin), py(hmax)); ctx.strokeStyle = "black"; ctx.stroke(); + + ctx.fillStyle = "black"; + ctx.font = "bold 8px Courier"; + ctx.fillText(0, px(tmin) - 8, py(0)); + for (i = 0; comb[1][i]; i++) { + ctx.fillText(comb[1][i], px(tmin) - xzero + 2, py(comb[1][i])); + } + ctx.fillText("l/h", px(tmin) + 2, py(hmax) + 8); } + /* @ updates global var `hmax` */ function differentiate(times) { var res = []; @@ -42,7 +88,7 @@ dv = times[i+1][1] - times[i][1]; dt = times[i+1][0] - times[i][0]; if (dt != 0 && dv != 0) { - v = dv / dt; + v = (dv / dt) * 360 ; /* Litres per hour */ if (hmax < v) hmax = v; res.push([times[i][0], v]); } @@ -51,6 +97,7 @@ return res; } + function drawplot(data, color) { var i; @@ -63,14 +110,28 @@ ctx.strokeStyle = color; ctx.stroke(); } + + function showloading() { + ctx.fillStyle = "green"; + ctx.font = "bold 16px Courier"; + ctx.fillText("loading", (ww / 2) - 40 , (wh / 2) + 8); + } + + function clearplot() { + ctx.clearRect(0, 0, ww, wh); + } + function redraw() { if (cold_d.length && hot_d.length) { - drawplot(cold_d, "blue"); - drawplot(hot_d, "red"); + tfact = (ww - xzero) / (tmax - tmin); + hfact = (wh - yzero) / hmax; + clearplot(); xaxis(); yaxis(); + drawplot(cold_d, "blue"); + drawplot(hot_d, "red"); } else { - /* load animation here */ ; + showloading(); } } @@ -81,13 +142,12 @@ (data.current.hot / 100).toFixed(2); tmin = data.range.lo; tmax = data.range.hi; - tfact = (ww - xzero) / (tmax - tmin); /* differetiate() updates hmax */ hmax = 0; cold_d = differentiate(data.cold); hot_d = differentiate(data.hot); - hfact = (wh - yzero) / hmax; - //document.getElementById("debug").innerHTML = cold_d + "
" + hot_d; + //dbg.innerHTML = "hmax=" + hmax + " hfact=" + hfact + "
" + // + cold_d + "
" + hot_d; redraw(); } @@ -108,7 +168,7 @@ } function resize() { - ww = window.innerWidth; + ww = window.innerWidth - 4; if (ww > window.innerHeight) ww = window.innerHeight; wh = ww / 2; canvas.width = ww; @@ -144,7 +204,7 @@ br { clear: both; } div#currentvals { - width: 14em; + width: 18em; margin-left: auto; margin-right: auto; margin-bottom: 10px; @@ -166,15 +226,16 @@ div#hot { background-color: #ffd0e0; } canvas#plot { - padding-left: 0; - padding-right: 0; - margin-left: auto; - margin-right: auto; + padding: 0px; + margin: auto; display: block; width: 640px; height: 320px; border: solid 1px black; } +body { + margin: 0px; +} Water Meters