diff options
Diffstat (limited to 'demos/declarative/calculator/calculator.js')
-rw-r--r-- | demos/declarative/calculator/calculator.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/demos/declarative/calculator/calculator.js b/demos/declarative/calculator/calculator.js new file mode 100644 index 0000000..cd6490a --- /dev/null +++ b/demos/declarative/calculator/calculator.js @@ -0,0 +1,87 @@ + +var curVal = 0; +var memory = 0; +var lastOp = ""; +var timer = 0; + +function disabled(op) { + if (op == "." && curNum.text.toString().search(/\./) != -1) { + return true; + } else if (op == "Sqrt" && curNum.text.toString().search(/-/) != -1) { + return true; + } else { + return false; + } +} + +function doOp(op) { + if (disabled(op)) { + return; + } + + if (op.toString().length==1 && ((op >= "0" && op <= "9") || op==".") ) { + if (curNum.text.toString().length >= 14) + return; // No arbitrary length numbers + if (lastOp.toString().length == 1 && ((lastOp >= "0" && lastOp <= "9") || lastOp==".") ) { + curNum.text = curNum.text + op.toString(); + } else { + curNum.text = op; + } + lastOp = op; + return; + } + lastOp = op; + + // Pending operations + if (currentOperation.text == "+") { + curNum.text = Number(curNum.text.valueOf()) + Number(curVal.valueOf()); + } else if (currentOperation.text == "-") { + curNum.text = Number(curVal) - Number(curNum.text.valueOf()); + } else if (currentOperation.text == "x") { + curNum.text = Number(curVal) * Number(curNum.text.valueOf()); + } else if (currentOperation.text == "/") { + curNum.text = Number(Number(curVal) / Number(curNum.text.valueOf())).toString(); + } else if (currentOperation.text == "=") { + } + + if (op == "+" || op == "-" || op == "x" || op == "/") { + currentOperation.text = op; + curVal = curNum.text.valueOf(); + return; + } + curVal = 0; + currentOperation.text = ""; + + // Immediate operations + if (op == "1/x") { // reciprocal + curNum.text = (1 / curNum.text.valueOf()).toString(); + } else if (op == "^2") { // squared + curNum.text = (curNum.text.valueOf() * curNum.text.valueOf()).toString(); + } else if (op == "Abs") { + curNum.text = (Math.abs(curNum.text.valueOf())).toString(); + } else if (op == "Int") { + curNum.text = (Math.floor(curNum.text.valueOf())).toString(); + } else if (op == "+/-") { // plus/minus + curNum.text = (curNum.text.valueOf() * -1).toString(); + } else if (op == "Sqrt") { // square root + curNum.text = (Math.sqrt(curNum.text.valueOf())).toString(); + } else if (op == "MC") { // memory clear + memory = 0; + } else if (op == "M+") { // memory increment + memory += curNum.text.valueOf(); + } else if (op == "MR") { // memory recall + curNum.text = memory.toString(); + } else if (op == "MS") { // memory set + memory = curNum.text.valueOf(); + } else if (op == "Bksp") { + curNum.text = curNum.text.toString().slice(0, -1); + } else if (op == "C") { + curNum.text = "0"; + } else if (op == "AC") { + curVal = 0; + memory = 0; + lastOp = ""; + curNum.text ="0"; + } +} + |