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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user