# HG changeset patch # User Pascal Bellard # Date 1426614250 -3600 # Node ID 019e831466f713b69c360338052469cce861475b # Parent 73858bb3d1121b241c9d169133d00ac5d22b6e77 wikiss: update wkp_Calc from tazwikiss diff -r 73858bb3d112 -r 019e831466f7 wikiss/stuff/plugins/wkp_Calc.css --- a/wikiss/stuff/plugins/wkp_Calc.css Mon Mar 16 13:06:40 2015 +0100 +++ b/wikiss/stuff/plugins/wkp_Calc.css Tue Mar 17 18:44:10 2015 +0100 @@ -9,7 +9,7 @@ .inputcalc { border: none; width: 80px; - font-size: 14px; + font-size: inherit; padding: 2px; } @@ -28,4 +28,5 @@ .cellcalc { border: 1px solid #999; padding: 0; + font-size: 14px; } diff -r 73858bb3d112 -r 019e831466f7 wikiss/stuff/plugins/wkp_Calc.php --- a/wikiss/stuff/plugins/wkp_Calc.php Mon Mar 16 13:06:40 2015 +0100 +++ b/wikiss/stuff/plugins/wkp_Calc.php Tue Mar 17 18:44:10 2015 +0100 @@ -61,6 +61,24 @@ alert(data); } +function cnt(from,to) { + return (to.charCodeAt(0) - from.charCodeAt(0) + 1) * + (parseInt(to.substring(1)) - parseInt(from.substring(1)) + 1) +} + +function zone(id,from,to,init,func) { + var result=init + for (var l=from.charCodeAt(0);;l++) { + for (var n=parseInt(from.substring(1)); + n <= parseInt(to.substring(1));n++) { + var e=document.getElementById(id+String.fromCharCode(l)+n) + result=func(result,parseFloat(e.value)) + } + if (l == to.charCodeAt(0)) break + } + return result; +} + var DATA={}; function buildCalc(id, rows, cols) { DATA[id] = {}; @@ -77,6 +95,13 @@ function(n){var x=1;while(n>1)x*=n--;return x;}; DATA[id].fib = DATA[id].FIB = function(n){var c=0,p=1;while(n-->0){var x=c;c+=p;p=x};return c;}; + DATA[id].sum = DATA[id].SUM = + function(a,b){return zone(id,a,b,0,function(a,b){return a+b});}; + DATA[id].min = DATA[id].MIN = + function(a,b){return zone(id,a,b,Number.MAX_VALUE,Math.min);}; + DATA[id].max = DATA[id].MAX = + function(a,b){return zone(id,a,b,Number.MIN_VALUE,Math.max);}; + DATA[id].cnt = DATA[id].CNT = cnt for (var i=0; i<=rows; i++) { var row = document.getElementById(id).insertRow(-1); for (var j=0; j<=cols && j<=26; j++) { @@ -99,7 +124,7 @@ function getWidth(s) { var e = document.getElementById("widthcalc"); - e.innerHTML = s+" :"; + e.innerHTML = s; return (e.offsetWidth < 80 || s.charAt(0) == "=") ? 80 : e.offsetWidth; } @@ -145,7 +170,7 @@ var value = elm.title || ""; if (value.charAt(0) == "=") with (DATA[calcid]) return eval(value.substring(1)); - else return isNaN(parseFloat(value)) ? value : parseFloat(value); + else return (value == "" || isNaN(value)) ? value : parseFloat(value); }; Object.defineProperty(DATA[calcid], cellid, {get:getter}); Object.defineProperty(DATA[calcid], cellid.toLowerCase(), {get:getter});