|
1 | 1 | /* |
2 | | - * jQuery Calculadora 0.5 |
| 2 | + * jQuery Calculadora 0.6 |
3 | 3 | * Copyright 2013, Eduardo Molteni |
4 | 4 | * |
5 | 5 | */ |
|
30 | 30 |
|
31 | 31 | return this.each(function() { |
32 | 32 | var self = $(this); |
33 | | - var LastOperator = 0; |
| 33 | + var LastOperator = null; |
34 | 34 | var TotalSoFar = 0; |
35 | 35 | var TicketIsVisible = false; |
36 | 36 |
|
37 | 37 | self.blur(function (event) { |
38 | | - LastOperator = 0; |
| 38 | + LastOperator = null; |
39 | 39 | ticketUl.html(""); |
40 | 40 | ticket.hide(); |
41 | 41 | TicketIsVisible = false; |
|
48 | 48 | function (event) { |
49 | 49 | var number = parseLocalFloat(self.val()); |
50 | 50 |
|
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 '/': |
80 | 56 | 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 | + }; |
99 | 86 | } |
100 | 87 | ); |
101 | 88 |
|
102 | 89 | 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) { |
117 | 110 | var pos = self.offset(); |
118 | 111 | if (!TicketIsVisible && pos) { |
119 | 112 | ticket.css('top', (pos.top - 15) + "px"); |
|
122 | 115 | //ticket.show("slide", { direction: "up" }, 1000); |
123 | 116 | ticket.show(); |
124 | 117 | 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>"); |
127 | 120 | ticket.css('top', (pos.top - ticket.height()) + "px"); |
128 | | - } |
| 121 | + }; |
129 | 122 |
|
130 | 123 | }); |
131 | 124 |
|
132 | | - |
133 | 125 | function parseLocalFloat(num) { |
134 | 126 | if (!num) return 0; |
135 | 127 | num = num.replace(conf.re, '').replace(conf.radix, '.'); |
136 | 128 | return parseFloat(num) |
137 | | - } |
| 129 | + }; |
138 | 130 |
|
139 | 131 | function formatNumber(num) { |
140 | 132 | return options.numberFormat.format(num) |
141 | 133 | }; |
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 | | - |
153 | 134 | } |
154 | 135 | }); |
155 | | - |
156 | | -})(jQuery); |
157 | 136 |
|
| 137 | +})(jQuery); |
0 commit comments