feat: Add send function to log calculation history and result

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-03-14 15:43:04 -06:00
committed by Tanner
parent ebb1550fc7
commit 3b66810ba1
+60
View File
@@ -75,6 +75,7 @@ var specials = {
'R': {grid: [0, 0], globalGrid: [0, 0], trbl: 'RN7R', val: 'AC'},
'N': {grid: [1, 0], globalGrid: [1, 0], trbl: 'N%8R', val: '+/-'},
'%': {grid: [0, 1], globalGrid: [2, 0], trbl: '%/9N'},
'send': {grid: [1, 1], val: 'send'},
};
var selected = DEFAULT_SELECTION_NUMBERS;
@@ -86,6 +87,8 @@ var results = null;
var isDecimal = false;
var hasPressedEquals = false;
var angleMode = 'deg';
var prevExpression = null;
var currExpression = "";
function prepareScreen(screen, grid, defaultColor) {
for (var k in screen) {
@@ -328,16 +331,21 @@ function calculatorLogic(x) {
displayOutput(prevNumber);
} else if (prevNumber != null && currNumber != null && operator != null) {
// we execute the calculus only when there was a previous number entered before and an operator
let oldOperator = operator;
results = doMath(prevNumber, currNumber, operator);
operator = x;
prevNumber = results;
prevExpression = "(" + prevExpression + " " + oldOperator + " " + currExpression + ")";
currNumber = null;
currExpression = "";
displayOutput(results);
} else if (prevNumber == null && currNumber != null && operator == null) {
// no operator yet, save the current number for later use when an operator is pressed
operator = x;
prevNumber = currNumber;
prevExpression = currExpression;
currNumber = null;
currExpression = "";
displayOutput(prevNumber);
} else if (prevNumber == null && currNumber == null && operator == null) {
displayOutput(0);
@@ -354,6 +362,8 @@ function buttonPress(val) {
if (specials.R.val == 'AC') {
prevNumber = null;
operator = null;
prevExpression = null;
currExpression = "";
} else {
specials.R.val = 'AC';
drawKey('R', specials.R, true);
@@ -365,8 +375,10 @@ function buttonPress(val) {
case '%':
if (results != null) {
displayOutput(results /= 100);
prevExpression = "(" + prevExpression + ")/100";
} else if (currNumber != null) {
displayOutput(currNumber /= 100);
currExpression = "(" + currExpression + ")/100";
}
hasPressedNumber = false;
break;
@@ -374,9 +386,11 @@ function buttonPress(val) {
if (results != null) {
results = Math.sqrt(results);
displayOutput(results);
prevExpression = "sqrt(" + prevExpression + ")";
} else if (currNumber != null) {
currNumber = Math.sqrt(currNumber);
displayOutput(currNumber);
currExpression = "sqrt(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -384,10 +398,12 @@ function buttonPress(val) {
if (results != null) {
results = results * results;
displayOutput(results);
prevExpression = "(" + prevExpression + ")^2";
} else if (currNumber != null) {
var num = parseFloat(currNumber);
currNumber = num * num;
displayOutput(currNumber);
currExpression = "(" + currExpression + ")^2";
}
hasPressedNumber = false;
break;
@@ -399,6 +415,7 @@ function buttonPress(val) {
}
results = fixFloat(Math.sin(angle));
displayOutput(results);
prevExpression = "sin(" + prevExpression + ")";
} else if (currNumber != null) {
let angle = currNumber;
if (angleMode === 'deg') {
@@ -406,6 +423,7 @@ function buttonPress(val) {
}
currNumber = fixFloat(Math.sin(angle));
displayOutput(currNumber);
currExpression = "sin(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -417,6 +435,7 @@ function buttonPress(val) {
}
results = fixFloat(Math.cos(angle));
displayOutput(results);
prevExpression = "cos(" + prevExpression + ")";
} else if (currNumber != null) {
let angle = currNumber;
if (angleMode === 'deg') {
@@ -424,6 +443,7 @@ function buttonPress(val) {
}
currNumber = fixFloat(Math.cos(angle));
displayOutput(currNumber);
currExpression = "cos(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -435,6 +455,7 @@ function buttonPress(val) {
}
results = fixFloat(Math.tan(angle));
displayOutput(results);
prevExpression = "tan(" + prevExpression + ")";
} else if (currNumber != null) {
let angle = currNumber;
if (angleMode === 'deg') {
@@ -442,6 +463,7 @@ function buttonPress(val) {
}
currNumber = fixFloat(Math.tan(angle));
displayOutput(currNumber);
currExpression = "tan(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -449,9 +471,11 @@ function buttonPress(val) {
if (results != null) {
results = Math.log(results) / Math.LN10;
displayOutput(results);
prevExpression = "log(" + prevExpression + ")";
} else if (currNumber != null) {
currNumber = Math.log(currNumber) / Math.LN10;
displayOutput(currNumber);
currExpression = "log(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -459,9 +483,11 @@ function buttonPress(val) {
if (results != null) {
results = Math.pow(10, results);
displayOutput(results);
prevExpression = "10^(" + prevExpression + ")";
} else if (currNumber != null) {
currNumber = Math.pow(10, currNumber);
displayOutput(currNumber);
currExpression = "10^(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -469,9 +495,11 @@ function buttonPress(val) {
if (results != null) {
results = Math.log(results);
displayOutput(results);
prevExpression = "ln(" + prevExpression + ")";
} else if (currNumber != null) {
currNumber = Math.log(currNumber);
displayOutput(currNumber);
currExpression = "ln(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -479,9 +507,11 @@ function buttonPress(val) {
if (results != null) {
results = Math.exp(results);
displayOutput(results);
prevExpression = "e^(" + prevExpression + ")";
} else if (currNumber != null) {
currNumber = Math.exp(currNumber);
displayOutput(currNumber);
currExpression = "e^(" + currExpression + ")";
}
hasPressedNumber = false;
break;
@@ -498,17 +528,21 @@ function buttonPress(val) {
if (results != null) {
results = 1 / results;
displayOutput(results);
prevExpression = "1/(" + prevExpression + ")";
} else if (currNumber != null) {
currNumber = 1 / parseFloat(currNumber);
displayOutput(currNumber);
currExpression = "1/(" + currExpression + ")";
}
hasPressedNumber = false;
break;
case 'N':
if (results != null) {
displayOutput(results *= -1);
prevExpression = "-(" + prevExpression + ")";
} else {
displayOutput(currNumber *= -1);
currExpression = "-(" + currExpression + ")";
}
break;
case 'B':
@@ -529,6 +563,7 @@ function buttonPress(val) {
isDecimal = false;
}
hasPressedNumber = currNumber;
currExpression = currNumber;
displayOutput(currNumber);
}
break;
@@ -548,13 +583,37 @@ function buttonPress(val) {
break;
case '=':
if (prevNumber != null && currNumber != null && operator != null) {
prevExpression = "(" + prevExpression + " " + operator + " " + currExpression + ")";
results = doMath(prevNumber, currNumber, operator);
prevNumber = results;
currExpression = "";
displayOutput(results);
hasPressedEquals = 1;
}
hasPressedNumber = false;
break;
case 'send':
let logStr;
if (hasPressedEquals) {
logStr = prevExpression + " = " + results;
} else if (operator && prevExpression) { // Incomplete binary operation, e.g. "5 +" or "5 + 3"
logStr = prevExpression + " " + operator;
if (currExpression) {
logStr += " " + currExpression;
}
} else if (results) { // Result of a unary op on a previous result
logStr = prevExpression + " = " + results;
} else if (currNumber) { // A number has been entered, or a unary op on it
if (currExpression && currExpression !== currNumber.toString()) {
logStr = currExpression + " = " + currNumber;
} else {
logStr = currNumber.toString();
}
} else {
logStr = results ? results.toString() : "0";
}
console.log(logStr);
break;
default: {
specials.R.val = 'C';
if (!swipeEnabled) drawKey('R', specials.R);
@@ -569,6 +628,7 @@ function buttonPress(val) {
hasPressedEquals = 2;
}
hasPressedNumber = currNumber;
currExpression = currNumber;
displayOutput(currNumber);
break;
}