@@ -10,15 +10,18 @@ document.getElementById("answer").readOnly = true; //set this attribute in Html
10
10
let screen = document . getElementById ( "answer" ) ;
11
11
buttons = document . querySelectorAll ( "button" ) ;
12
12
let screenValue = "" ;
13
+ let lastScreenValue = "" ;
13
14
let maxItems = 6 ;
15
+ let isSign = true ;
14
16
for ( item of buttons ) {
15
17
item . addEventListener ( "click" , ( e ) => {
16
18
buttonText = e . target . innerText ;
17
- if ( buttonText == "X" ) {
19
+ if ( buttonText == "X" && ! isSign ) {
18
20
if ( flag == 1 ) {
19
21
flag = 0 ;
20
22
}
21
23
buttonText = "*" ;
24
+ isSign = true ;
22
25
screenValue += buttonText ;
23
26
screen . value = screenValue ;
24
27
} else if ( buttonText == "C" ) {
@@ -27,6 +30,7 @@ for (item of buttons) {
27
30
}
28
31
screenValue = "" ;
29
32
screen . value = screenValue ;
33
+ isSign = true ;
30
34
} else if ( buttonText == "=" ) {
31
35
checkForBracketMulti ( ) ; // automatically evaluates if no brackets
32
36
//
@@ -38,42 +42,39 @@ for (item of buttons) {
38
42
screenValue += buttonText ;
39
43
}
40
44
screen . value = screenValue ;
41
- console . log ( "im an operator" ) ;
45
+ isSign = false ;
42
46
} else {
43
47
if ( flag == 1 ) {
44
48
flag = 0 ;
45
49
}
46
- screenValue = screen . value + buttonText ;
47
- screen . value = screenValue ;
50
+ if ( ! isSign ) {
51
+ screenValue = screen . value + buttonText ;
52
+ screen . value = screenValue ;
53
+ isSign = true ;
54
+ }
48
55
}
49
56
} ) ;
50
57
}
51
58
52
59
document . addEventListener ( "keydown" , function ( event ) {
53
- if ( event . shiftKey == 57 ) {
54
- event . key = "(" ;
55
- } else if ( event . shiftKey == 48 ) {
56
- event . key = ")" ;
57
- } else if ( event . shiftKey == 53 ) {
58
- event . key = "%" ;
59
- }
60
- if ( event . keyCode == 88 ) {
61
- screenValue += "*" ;
62
- screen . value = screenValue ;
63
- }
64
60
if (
65
- event . key <= 9 ||
66
- event . key == "+" ||
67
- event . key == "-" ||
68
- event . key == "*" ||
69
- event . key == "." ||
70
- event . key == "/" ||
71
- event . key == "%" ||
72
- event . key == "(" ||
73
- event . key == ")"
61
+ event . key <= 9
74
62
) {
75
63
screenValue += event . key ;
76
64
screen . value = screenValue ;
65
+ isSign = false ;
66
+ }
67
+ if ( ! isSign && ( event . key == "+" ||
68
+ event . key == "-" ||
69
+ event . key == "*" ||
70
+ event . key == "." ||
71
+ event . key == "/" ||
72
+ event . key == "%" ||
73
+ event . key == "(" ||
74
+ event . key == ")" ) ) {
75
+ screenValue += event . key ;
76
+ screen . value = screenValue ;
77
+ isSign = true ;
77
78
}
78
79
if ( event . key == "Enter" || event . key == "=" ) {
79
80
event . preventDefault ( ) ;
@@ -120,21 +121,26 @@ function addStr(str, index, stringToAdd) {
120
121
121
122
function checkForBracketMulti ( ) {
122
123
// Check if there's a number directly infront of a bracket
124
+ isSign = false ;
123
125
if (
124
126
screen . value . includes ( "(" ) &&
125
127
! isNaN ( screen . value . charAt ( screen . value . indexOf ( "(" ) - 1 ) )
126
128
) {
127
129
window . onBracketMultiplication ( ) ;
128
130
return ;
129
131
} else {
130
- screen . value = eval ( screenValue ) ;
131
- screenValue = screen . value ;
132
- let calcHistory = JSON . parse ( localStorage . getItem ( "calcHistory" ) ) || [ ] ;
133
- if ( calcHistory . length >= maxItems ) {
134
- calcHistory . shift ( ) ;
132
+ if ( eval ( screenValue ) !== undefined )
133
+ {
134
+ screen . value = eval ( screenValue ) ;
135
+ lastScreenValue = screenValue ;
136
+ screenValue = screen . value ;
137
+ let calcHistory = JSON . parse ( localStorage . getItem ( "calcHistory" ) ) || [ ] ;
138
+ if ( calcHistory . length >= maxItems ) {
139
+ calcHistory . shift ( ) ;
140
+ }
141
+ calcHistory . push ( { lastScreenValue, result : screen . value } ) ;
142
+ localStorage . setItem ( "calcHistory" , JSON . stringify ( calcHistory ) ) ;
135
143
}
136
- calcHistory . push ( { screenValue, result : screen . value } ) ;
137
- localStorage . setItem ( "calcHistory" , JSON . stringify ( calcHistory ) ) ;
138
144
}
139
145
flag = 1 ;
140
146
}
0 commit comments