Skip to content

Commit 1159b85

Browse files
yearskiGreg Carroll
authored andcommitted
allow calculation on 0, implement '=', refactor operation logic
1. allow calculation when input is 0: Testing for != 0 does not ensure that ensure that input is a number. This logic would need to be implemented elsewhere. Remove this condition, ensure that division by 0 is avoided/ignored. 2. implement '=': 3. refactor calculation operation logic: Change switch from KeyboardEvent.which (deprecated) to KeyboardEvent.key (this also makes code much easier to read). Remove keypress handler for key code 37 (left arrow). This functionality doesn't seem to be working as intended (divide by 100, to allow quicker decimal entry?). Instead, I added an 'm' "milli" functionality to divide by 1000, like the existing 'k' Trigger change event after '=' TotalSoFar calculation to enable external event listeners. 4. bump version, update minified file
1 parent 88bd040 commit 1159b85

2 files changed

Lines changed: 63 additions & 83 deletions

File tree

jquery.calculadora.js

Lines changed: 62 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* jQuery Calculadora 0.5
2+
* jQuery Calculadora 0.6
33
* Copyright 2013, Eduardo Molteni
44
*
55
*/
@@ -30,12 +30,12 @@
3030

3131
return this.each(function() {
3232
var self = $(this);
33-
var LastOperator = 0;
33+
var LastOperator = null;
3434
var TotalSoFar = 0;
3535
var TicketIsVisible = false;
3636

3737
self.blur(function (event) {
38-
LastOperator = 0;
38+
LastOperator = null;
3939
ticketUl.html("");
4040
ticket.hide();
4141
TicketIsVisible = false;
@@ -48,72 +48,65 @@
4848
function (event) {
4949
var number = parseLocalFloat(self.val());
5050

51-
// if there's a number in the input:
52-
if (number !== 0)
53-
switch (event.which) {
54-
// if the key is -+/*:
55-
case 109:
56-
case 107:
57-
case 111:
58-
case 106:
59-
event.preventDefault();
60-
calculateSoFar( number );
61-
addToTicket(formatNumber(number), event.which);
62-
LastOperator = event.which;
63-
self.val("");
64-
break;
65-
case 75: //if the key is 'k'
66-
event.preventDefault();
67-
self.val(number * 1000);
68-
break;
69-
case 77: //if the key is 'M'
70-
event.preventDefault();
71-
self.val(number * 1000000);
72-
break;
73-
break;
74-
}
75-
76-
// si la tecla es enter o tab o =
77-
if (event.which == 13 || event.which == 9) {
78-
console.log(event.which);
79-
if (event.which == 13) {
51+
switch (event.key) {
52+
case '+':
53+
case '-':
54+
case '*':
55+
case '/':
8056
event.preventDefault();
81-
}
82-
calculateSoFar(number);
83-
addToTicket(formatNumber(number), "=");
84-
addToTicket(formatNumber(TotalSoFar), 0, "tot");
85-
self.val(formatNumber(TotalSoFar));
86-
LastOperator = 0;
87-
}
88-
}
89-
);
90-
91-
self.keypress(
92-
function (event) {
93-
var number = parseLocalFloat(self.val());
94-
95-
if (event.which == 37) {
96-
event.preventDefault();
97-
self.val(TotalSoFar * number / 100);
98-
}
57+
calculateSoFar( number );
58+
addToTicket(formatNumber(number), event.key);
59+
LastOperator = event.key;
60+
self.val("");
61+
break;
62+
case 'Enter':
63+
case '=':
64+
event.preventDefault(); // allow default action for Tab key
65+
case 'Tab':
66+
calculateSoFar(number);
67+
addToTicket(formatNumber(number), "=");
68+
addToTicket(formatNumber(TotalSoFar), " ", "tot");
69+
self.val(formatNumber(TotalSoFar));
70+
LastOperator = null;
71+
self.change();
72+
break;
73+
case 'k':
74+
event.preventDefault();
75+
self.val(number * 1000);
76+
break;
77+
case 'M':
78+
event.preventDefault();
79+
self.val(number * 1000000);
80+
break;
81+
case 'm':
82+
event.preventDefault();
83+
if (number !== 0) self.val(number / 1000);
84+
break;
85+
};
9986
}
10087
);
10188

10289
function calculateSoFar(number) {
103-
if (LastOperator === 0) {
104-
TotalSoFar = number;
105-
}
106-
else {
107-
// prevent using eval
108-
if (LastOperator == 109) TotalSoFar = TotalSoFar - number;
109-
if (LastOperator == 107) TotalSoFar = TotalSoFar + number;
110-
if (LastOperator == 111 && number !== 0) TotalSoFar = TotalSoFar / number;
111-
if (LastOperator == 111 && number === 0) TotalSoFar = 0;
112-
if (LastOperator == 106) TotalSoFar = TotalSoFar * number;
113-
}
114-
}
115-
116-
function addToTicket(text, which, liclass) {
90+
switch (LastOperator) {
91+
case null:
92+
TotalSoFar = number;
93+
break;
94+
case '+':
95+
TotalSoFar = TotalSoFar + number;
96+
break;
97+
case '-':
98+
TotalSoFar = TotalSoFar - number;
99+
break;
100+
case '*':
101+
TotalSoFar = TotalSoFar * number;
102+
break;
103+
case '/':
104+
TotalSoFar = (number !== 0) ? TotalSoFar / number : 0;
105+
break;
106+
};
107+
};
108+
109+
function addToTicket(text, display_operator, liclass) {
117110
var pos = self.offset();
118111
if (!TicketIsVisible && pos) {
119112
ticket.css('top', (pos.top - 15) + "px");
@@ -122,36 +115,23 @@
122115
//ticket.show("slide", { direction: "up" }, 1000);
123116
ticket.show();
124117
TicketIsVisible = true;
125-
}
126-
ticketUl.append("<li class='" + liclass + "'><div class='op'>" + operatorForCode(which) + "</div><div class='num'>" + text + "</div></li>");
118+
};
119+
ticketUl.append("<li class='" + liclass + "'><div class='op'>" + display_operator + "</div><div class='num'>" + text + "</div></li>");
127120
ticket.css('top', (pos.top - ticket.height()) + "px");
128-
}
121+
};
129122

130123
});
131124

132-
133125
function parseLocalFloat(num) {
134126
if (!num) return 0;
135127
num = num.replace(conf.re, '').replace(conf.radix, '.');
136128
return parseFloat(num)
137-
}
129+
};
138130

139131
function formatNumber(num) {
140132
return options.numberFormat.format(num)
141133
};
142-
143-
144-
function operatorForCode(whichKeyCode) {
145-
if (whichKeyCode == 109) return("-");
146-
if (whichKeyCode == 107) return ("+");
147-
if (whichKeyCode == 111) return ("/");
148-
if (whichKeyCode == 106) return ("*");
149-
if (whichKeyCode == "=") return ("=");
150-
return "";
151-
}
152-
153134
}
154135
});
155-
156-
})(jQuery);
157136

137+
})(jQuery);

jquery.calculadora.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)