@@ -3,47 +3,47 @@ function getCalculatorHTML() {
33 <div class="project-content">
44 <h2>🧮 Ultra Pro Calculator</h2>
55
6- <div class="calculator">
6+ <div class="calculator" tabindex="0" >
77 <div class="calc-display" id="calcDisplay">0</div>
88
99 <div class="calc-buttons">
1010
1111 <!-- TOP ROW -->
12- <button class="calc-btn clear" data-action="clear">C</button>
13- <button class="calc-btn operator" data-action="delete">⌫</button>
14- <button class="calc-btn operator" data-action="(">(</button>
15- <button class="calc-btn operator" data-action=")">)</button>
12+ <button class="calc-btn clear" data-action="clear" tabindex="-1" >C</button>
13+ <button class="calc-btn operator" data-action="delete" tabindex="-1" >⌫</button>
14+ <button class="calc-btn operator" data-action="(" tabindex="-1" >(</button>
15+ <button class="calc-btn operator" data-action=")" tabindex="-1" >)</button>
1616
1717 <!-- SCIENTIFIC -->
18- <button class="calc-btn operator" data-action="sin">sin</button>
19- <button class="calc-btn operator" data-action="cos">cos</button>
20- <button class="calc-btn operator" data-action="tan">tan</button>
21- <button class="calc-btn operator" data-action="sqrt">√</button>
18+ <button class="calc-btn operator" data-action="sin" tabindex="-1" >sin</button>
19+ <button class="calc-btn operator" data-action="cos" tabindex="-1" >cos</button>
20+ <button class="calc-btn operator" data-action="tan" tabindex="-1" >tan</button>
21+ <button class="calc-btn operator" data-action="sqrt" tabindex="-1" >√</button>
2222
23- <button class="calc-btn operator" data-action="square">x²</button>
24- <button class="calc-btn operator" data-action="inv">1/x</button>
25- <button class="calc-btn operator" data-action="^">xʸ</button>
26- <button class="calc-btn operator" data-action="/">÷</button>
23+ <button class="calc-btn operator" data-action="square" tabindex="-1" >x²</button>
24+ <button class="calc-btn operator" data-action="inv" tabindex="-1" >1/x</button>
25+ <button class="calc-btn operator" data-action="^" tabindex="-1" >xʸ</button>
26+ <button class="calc-btn operator" data-action="/" tabindex="-1" >÷</button>
2727
2828 <!-- NUMBERS -->
29- <button class="calc-btn number" data-value="7">7</button>
30- <button class="calc-btn number" data-value="8">8</button>
31- <button class="calc-btn number" data-value="9">9</button>
32- <button class="calc-btn operator" data-action="*">×</button>
29+ <button class="calc-btn number" data-value="7" tabindex="-1" >7</button>
30+ <button class="calc-btn number" data-value="8" tabindex="-1" >8</button>
31+ <button class="calc-btn number" data-value="9" tabindex="-1" >9</button>
32+ <button class="calc-btn operator" data-action="*" tabindex="-1" >×</button>
3333
34- <button class="calc-btn number" data-value="4">4</button>
35- <button class="calc-btn number" data-value="5">5</button>
36- <button class="calc-btn number" data-value="6">6</button>
37- <button class="calc-btn operator" data-action="-">−</button>
34+ <button class="calc-btn number" data-value="4" tabindex="-1" >4</button>
35+ <button class="calc-btn number" data-value="5" tabindex="-1" >5</button>
36+ <button class="calc-btn number" data-value="6" tabindex="-1" >6</button>
37+ <button class="calc-btn operator" data-action="-" tabindex="-1" >−</button>
3838
39- <button class="calc-btn number" data-value="1">1</button>
40- <button class="calc-btn number" data-value="2">2</button>
41- <button class="calc-btn number" data-value="3">3</button>
42- <button class="calc-btn operator" data-action="+">+</button>
39+ <button class="calc-btn number" data-value="1" tabindex="-1" >1</button>
40+ <button class="calc-btn number" data-value="2" tabindex="-1" >2</button>
41+ <button class="calc-btn number" data-value="3" tabindex="-1" >3</button>
42+ <button class="calc-btn operator" data-action="+" tabindex="-1" >+</button>
4343
44- <button class="calc-btn number span-2" data-value="0">0</button>
45- <button class="calc-btn number" data-value=".">.</button>
46- <button class="calc-btn equals" data-action="=">=</button>
44+ <button class="calc-btn number span-2" data-value="0" tabindex="-1" >0</button>
45+ <button class="calc-btn number" data-value="." tabindex="-1" >.</button>
46+ <button class="calc-btn equals" data-action="=" tabindex="-1" >=</button>
4747
4848 </div>
4949 </div>
@@ -207,25 +207,59 @@ function initCalculator() {
207207 default :
208208 expression += action ;
209209 }
210-
211210 update ( ) ;
212211 } ) ;
213212 } ) ;
214213
215214 document . addEventListener ( "keydown" , ( e ) => {
216215
217- if ( ! isNaN ( e . key ) || e . key === "." ) expression += e . key ;
216+ const key = e . key ;
217+ if ( ! document . getElementById ( "calcDisplay" ) ) return ;
218+ if ( key === "Enter" ||
219+ key === "Backspace" ||
220+ key === "Escape" ||
221+ key === "=" ||
222+ [ "+" , "-" , "*" , "/" , "^" , "." , "(" , ")" ] . includes ( key ) ||
223+ / ^ [ 0 - 9 ] $ / . test ( key )
224+ ) {
225+ e . preventDefault ( )
226+ }
227+ if ( / ^ [ 0 - 9 ] $ / . test ( key ) ) {
228+ expression += key ;
229+ }
230+ else if ( key === "." ) {
231+ expression += "." ;
232+ }
233+ else if ( [ "+" , "-" , "*" , "/" ] . includes ( key ) ) {
234+ expression += key ;
235+ }
236+ else if ( key === ")" || key === "(" ) {
237+ expression += key ;
238+ }
239+ else if ( key === "^" ) {
240+ expression += "^" ;
241+ }
242+ else if ( key === "Enter" || key === "=" ) {
243+ expression = safeEval ( expression ) ;
244+ }
245+ else if ( key === "Backspace" ) {
246+ expression = expression . slice ( 0 , - 1 ) ;
247+ }
248+ else if ( key === "Escape" || key . toLowerCase ( ) === "c" ) {
249+ expression = "" ;
250+ }
251+ update ( ) ;
252+ // if (!isNaN(e.key) || e.key === ".") expression += e.key;
218253
219- if ( [ "+" , "-" , "*" , "/" ] . includes ( e . key ) ) expression += e . key ;
254+ // if (["+", "-", "*", "/"].includes(e.key)) expression += e.key;
220255
221- if ( e . key === "^" ) expression += "^" ;
256+ // if (e.key === "^") expression += "^";
222257
223- if ( e . key === "Enter" ) expression = safeEval ( expression ) ;
258+ // if (e.key === "Enter") expression = safeEval(expression);
224259
225- if ( e . key === "Backspace" ) expression = expression . slice ( 0 , - 1 ) ;
260+ // if (e.key === "Backspace") expression = expression.slice(0, -1);
226261
227- update ( ) ;
228262 } ) ;
229-
263+
230264 update ( ) ;
231265}
0 commit comments