├── brain
├── img
│ └── fav.png
├── css
│ └── style.css
└── js
│ └── script.js
├── README.md
└── index.html
/brain/img/fav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ovi/js-calculator/HEAD/brain/img/fav.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Javascript Calculator
2 |
3 | Simple Calculator Using Javascript
4 |
5 | - You can also type using your keyboard :)
6 |
7 | Made as an assignment while learning Javascript
8 |
9 | Domo: https://ovi.github.io/js-calculator
10 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Mr.Calculator
8 |
12 |
16 |
17 |
18 |
19 |
20 |
21 |
0
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/brain/css/style.css:
--------------------------------------------------------------------------------
1 | * {
2 | padding: 0;
3 | margin: 0;
4 | box-sizing: border-box;
5 | font-family: 'Open Sans', sans-serif;
6 | }
7 |
8 | body {
9 | background: #ccc;
10 | -moz-user-select: none;
11 | -khtml-user-select: none;
12 | -webkit-user-select: none;
13 | -ms-user-select: none;
14 | user-select: none;
15 | }
16 |
17 | #calculator {
18 | position: relative;
19 | border-radius: 7px;
20 | margin: auto;
21 | margin-top: 20px;
22 | display: block;
23 | height: auto;
24 | width: 278px;
25 | background-color: rgb(255, 255, 255);
26 | font-size: 0.8em;
27 | padding: 5px;
28 | max-width: 320px;
29 | }
30 | #calculator:before,
31 | #calculator:after {
32 | content: '';
33 | position: absolute;
34 | z-index: -1;
35 | -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
36 | -moz-box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
37 | box-shadow: 0 0 20px rgba(0, 0, 0, 0.8);
38 | top: 10px;
39 | bottom: 10px;
40 | left: 0;
41 | right: 0;
42 | -moz-border-radius: 100px / 10px;
43 | border-radius: 100px / 10px;
44 | }
45 | #calculator:after {
46 | right: 10px;
47 | left: auto;
48 | -webkit-transform: skew(8deg) rotate(3deg);
49 | -moz-transform: skew(8deg) rotate(3deg);
50 | -ms-transform: skew(8deg) rotate(3deg);
51 | -o-transform: skew(8deg) rotate(3deg);
52 | transform: skew(8deg) rotate(3deg);
53 | }
54 |
55 | #smallResult {
56 | position: absolute;
57 | top: 3px;
58 | right: 10px;
59 | }
60 |
61 | #result {
62 | width: 100%;
63 | padding: 15px 0px;
64 | text-align: right;
65 | font-size: 2.5em;
66 | font-family: 'Oxygen Mono', monospace;
67 | background: inherit;
68 | color: black;
69 | }
70 |
71 | button {
72 | width: 60px;
73 | height: 60px;
74 | margin: 4px 2px;
75 | outline: none;
76 | border: none;
77 | background: rgb(223, 223, 223);
78 | color: black;
79 | border-radius: 5px;
80 | font-size: 1.4em;
81 | }
82 |
83 | button:active {
84 | background: #bfbfbf;
85 | }
86 |
87 | button:nth-child(2) {
88 | margin-left: 205px;
89 | display: block;
90 | background: #ef4a49;
91 | color: white;
92 | }
93 |
94 | button:nth-child(2):active {
95 | background: #b14e4d;
96 | }
97 |
98 | button:nth-child(6),
99 | button:nth-child(10),
100 | button:nth-child(14),
101 | button:nth-child(17),
102 | button:nth-child(18) {
103 | background: #00b49a;
104 | color: white;
105 | }
106 |
107 | button:nth-child(6):active,
108 | button:nth-child(10):active,
109 | button:nth-child(14):active,
110 | button:nth-child(17):active,
111 | button:nth-child(18):active {
112 | background: #218d7e;
113 | }
114 |
115 | footer {
116 | position: absolute;
117 | bottom: 0;
118 | padding: 20px;
119 | width: 100%;
120 | text-align: center;
121 | }
122 |
123 | a {
124 | text-decoration: none;
125 | color: inherit;
126 | }
127 |
128 | h1 {
129 | display: inline;
130 | font-size: 50px;
131 | color: #131313;
132 | letter-spacing: 0.05em;
133 | transition: all 0.3s;
134 | text-shadow: 1px -1px 0 #767676, -1px 2px 1px #737272, -2px 4px 1px #767474,
135 | -3px 6px 1px #787777, -4px 8px 1px #7b7a7a, -5px 10px 1px #7f7d7d,
136 | -6px 12px 1px #828181, -7px 14px 1px #868585, -8px 16px 1px #8b8a89,
137 | -9px 18px 1px #8f8e8d, -10px 20px 1px #949392, -11px 22px 1px #999897,
138 | -12px 24px 1px #9e9c9c, -13px 26px 1px #a3a1a1, -14px 28px 1px #a8a6a6,
139 | -15px 30px 1px #adabab, -16px 32px 1px #b2b1b0, -17px 34px 1px #b7b6b5,
140 | -18px 36px 1px #bcbbba, -19px 38px 1px #c1bfbf, -20px 40px 1px #c6c4c4,
141 | -21px 42px 1px #cbc9c8, -22px 44px 1px #cfcdcd, -23px 46px 1px #d4d2d1,
142 | -24px 48px 1px #d8d6d5, -25px 50px 1px #dbdad9, -26px 52px 1px #dfdddc,
143 | -27px 54px 1px #e2e0df, -28px 56px 1px #e4e3e2;
144 | }
145 |
146 | h1:hover {
147 | text-shadow: 1px -1px 0 #767676, 1px 2px 1px #737272, 2px 4px 1px #767474,
148 | 3px 6px 1px #787777, 4px 8px 1px #7b7a7a, 5px 10px 1px #7f7d7d,
149 | 6px 12px 1px #828181, 7px 14px 1px #868585, 8px 16px 1px #8b8a89,
150 | 9px 18px 1px #8f8e8d, 10px 20px 1px #949392, 11px 22px 1px #999897,
151 | 12px 24px 1px #9e9c9c, 13px 26px 1px #a3a1a1, 14px 28px 1px #a8a6a6,
152 | 15px 30px 1px #adabab, 16px 32px 1px #b2b1b0, 17px 34px 1px #b7b6b5,
153 | 18px 36px 1px #bcbbba, 19px 38px 1px #c1bfbf, 20px 40px 1px #c6c4c4,
154 | 21px 42px 1px #cbc9c8, 22px 44px 1px #cfcdcd, 23px 46px 1px #d4d2d1,
155 | 24px 48px 1px #d8d6d5, 25px 50px 1px #dbdad9, 26px 52px 1px #dfdddc,
156 | 27px 54px 1px #e2e0df, 28px 56px 1px #e4e3e2;
157 | }
158 |
--------------------------------------------------------------------------------
/brain/js/script.js:
--------------------------------------------------------------------------------
1 | /* -------------------------
2 | Calculator ...
3 | ---------------------------*/
4 | var result = document.getElementById('result');
5 | var smallResult = document.getElementById('smallResult');
6 | var cal = false;
7 | var val_1 = false;
8 | var val_2 = false;
9 | var oper = '+';
10 | var operPressed = false;
11 | var tot = 0;
12 | var cal_done = false;
13 | var currentStatus = 0;
14 | var o;
15 |
16 | function num(val) {
17 | val = val.toString(); // converting to string so it won't be added together in display (2 + '2' should not do '22')
18 |
19 | if (cal_done)
20 | // if calculation is done
21 | cls(); // clear everything
22 |
23 | if (!operPressed) {
24 | // if no operator is pressed (means it's first value)
25 | if (!val_1) val_1 = 0;
26 |
27 | val_1 = val_1 + val;
28 |
29 | val_1 = lengthFix(val_1); // limiting to 12
30 |
31 | result.innerHTML = val_1;
32 | smallResult.innerHTML = val_1;
33 | // console.log('num to be calc: ' + val_1);
34 | }
35 | if (operPressed) {
36 | // if operator is pressed (means it's 2nd value)
37 | if (!val_2) val_2 = 0;
38 |
39 | val_2 = val_2 + val;
40 |
41 | val_2 = lengthFix(val_2); // limiting to 12
42 |
43 | result.innerHTML = val_2;
44 | smallResult.innerHTML = val_1 + oper + val_2;
45 | // console.log('2nd num to be calc: ' + val_2);
46 | }
47 | }
48 |
49 | // when /,*,+,- is clicked
50 | function calc(val) {
51 | if (val_1 && val_2) {
52 | operPressed = true;
53 | total();
54 | oper = val;
55 | }
56 |
57 | if (cal_done) {
58 | var x = (val_1 = tot);
59 | cls();
60 | val_1 = x;
61 | val_1 = lengthFix(val_1); // limiting to 12
62 | result.innerHTML = val; // display which operator is selected
63 | // var a = smallResult.innerHTML.toString();
64 | smallResult.innerHTML = +x + val;
65 | oper = val;
66 | operPressed = true;
67 | }
68 |
69 | if (!val_1 || operPressed) {
70 | return false;
71 | }
72 |
73 | if (val_1 && !val_2) {
74 | result.innerHTML = val; // display which operator is selected
75 | var a = smallResult.innerHTML.toString();
76 | smallResult.innerHTML = a + val;
77 | oper = val;
78 | operPressed = true;
79 | }
80 | }
81 |
82 | function total() {
83 | if (!val_1) return false;
84 |
85 | if (!val_2 && operPressed) {
86 | tot = magic(val_1, val_1, oper);
87 | tot = lengthFix(tot);
88 | }
89 |
90 | if (val_1 && val_2) {
91 | tot = magic(val_1, val_2, oper);
92 | tot = lengthFix(tot);
93 | }
94 |
95 | tot = tot.toString();
96 | var noDec = tot.indexOf('.') == -1;
97 | if (!noDec) tot = parseFloat(tot).toFixed(3);
98 |
99 | result.innerHTML = tot;
100 | // smallResult.innerHTML = tot;
101 | // console.log('total: ' + tot);
102 | }
103 |
104 | function magic(a, b, oper) {
105 | switch (oper) {
106 | case '+':
107 | tot = +a + +b;
108 | cal_done = true;
109 | break;
110 | case '-':
111 | tot = +a - +b;
112 | cal_done = true;
113 | break;
114 | case '/':
115 | tot = +a / +b;
116 | cal_done = true;
117 | break;
118 | case '*':
119 | tot = +a * +b;
120 | cal_done = true;
121 | break;
122 | default:
123 | return false;
124 | }
125 | return tot;
126 | }
127 |
128 | // clearing everything...
129 | function cls() {
130 | smallResult.innerHTML = '';
131 | result.innerHTML = 0;
132 | val_1 = false;
133 | val_2 = false;
134 | oper = '+';
135 | tot = 0;
136 | cal_done = false;
137 | operPressed = false;
138 | }
139 |
140 | function lengthFix(o) {
141 | o = o.toString();
142 |
143 | if (o != 0 || o != '0') {
144 | if (o.charAt(0) == 0) o = o.slice(1);
145 | }
146 |
147 | if (o.toString().length > 12) o = o.substring(0, 12);
148 |
149 | return o;
150 | }
151 |
152 | document.onkeyup = function(e) {
153 | if (e.which == 110 || e.which == 190) num('.');
154 | if (e.which == 96 || e.which == 48) num('0');
155 | if (e.which == 97 || e.which == 49) num('1');
156 | if (e.which == 98 || e.which == 50) num('2');
157 | if (e.which == 99 || e.which == 51) num('3');
158 | if (e.which == 100 || e.which == 52) num('4');
159 | if (e.which == 101 || e.which == 53) num('5');
160 | if (e.which == 102 || e.which == 54) num('6');
161 | if (e.which == 103 || e.which == 55) num('7');
162 | if (e.which == 104 || e.which == 56) num('8');
163 | if (e.which == 105 || e.which == 57) num('9');
164 |
165 | if (e.which == 111) calc('/');
166 | if (e.which == 106) calc('*');
167 | if (e.which == 107) calc('+');
168 | if (e.which == 109) calc('-');
169 |
170 | if (e.which == 13) total();
171 |
172 | if (e.which == 8 || e.which == 46) cls();
173 |
174 | if (e.which == 27) cls();
175 | };
176 |
--------------------------------------------------------------------------------