summaryrefslogtreecommitdiffstats
path: root/demos/declarative/calculator/calculator.js
diff options
context:
space:
mode:
Diffstat (limited to 'demos/declarative/calculator/calculator.js')
-rw-r--r--demos/declarative/calculator/calculator.js87
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";
+ }
+}
+