From 5e43572365a73a8abe5bcf711fdcff90b2bdbab3 Mon Sep 17 00:00:00 2001 From: yearski <39842469+yearski@users.noreply.github.com> Date: Fri, 12 Apr 2019 17:32:21 -0600 Subject: [PATCH 1/4] FIX: declare variables for script mode, bump rev --- jquery.calculadora.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jquery.calculadora.js b/jquery.calculadora.js index 0d920b5..5563cff 100644 --- a/jquery.calculadora.js +++ b/jquery.calculadora.js @@ -1,5 +1,5 @@ /* - * jQuery Calculadora 0.3 + * jQuery Calculadora 0.4 * Copyright 2013, Eduardo Molteni * */ @@ -131,7 +131,7 @@ } function formatNumber(n, c) { - var d = "."; var t = ","; + var d = "."; var t = ","; var i; var j; var s; if (options.useCommaAsDecimalMark) { d = ","; t = "."; } From bf9a938a9aebe478198930dcc4aecfde0bb80bac Mon Sep 17 00:00:00 2001 From: Greg Carroll Date: Sat, 13 Apr 2019 03:57:16 -0600 Subject: [PATCH 2/4] refactor number format using Intl.NumberFormat, add parent_element option --- README.md | 17 ++++++++++----- jquery.calculadora.js | 45 ++++++++++++++++++++------------------- jquery.calculadora.min.js | 2 +- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 4f75996..7ead88d 100644 --- a/README.md +++ b/README.md @@ -20,13 +20,20 @@ Options Usage ------- - - $(function () { - $("input").calculadora({decimals: 0, useCommaAsDecimalMark: false}); - }) - \ No newline at end of file +

+    $(function () {
+        $("input").calculadora({decimals: 0, useCommaAsDecimalMark: false});
+    })
+
+Or: +

+    const nF = new Intl.NumberFormat('US', {style: 'decimal', maximumFractionDigits: 2, useGrouping: false});
+    $("input.calculator").calculadora({numberFormat: nF, parent_element: $('.modal-body')});
+
diff --git a/jquery.calculadora.js b/jquery.calculadora.js index 5563cff..e89ea83 100644 --- a/jquery.calculadora.js +++ b/jquery.calculadora.js @@ -1,5 +1,5 @@ /* - * jQuery Calculadora 0.4 + * jQuery Calculadora 0.5 * Copyright 2013, Eduardo Molteni * */ @@ -7,20 +7,28 @@ (function ($) { var defaults = { decimals: 2, - useCommaAsDecimalMark: false + useCommaAsDecimalMark: false, + parent_element: $("body"), }; $.fn.extend({ calculadora: function(options) { - - var options = $.extend({}, defaults, options); + var options = $.extend({}, defaults, options); + + if(!options.numberFormat){ + options.numberFormat = (options.useCommaAsDecimalMark) ? + new Intl.NumberFormat('FR', {maximumFractionDigits: options.decimals}) : + new Intl.NumberFormat('US', {maximumFractionDigits: options.decimals}); + }; + var conf = {}; + conf.radix = options.numberFormat.format(0.1).slice(1,2); + conf.re = new RegExp(`[^-0-9${conf.radix}]`, 'g'); var ticket = $(''); var ticketUl = ticket.find("ul"); - $("body").append(ticket); + $(options.parent_element).append(ticket); return this.each(function() { - var o = options; var self = $(this); var LastOperator = 0; var TotalSoFar = 0; @@ -33,7 +41,7 @@ TicketIsVisible = false; var number = parseLocalFloat(self.val()); - self.val(formatNumber(number, o.decimals)); + self.val(formatNumber(number)); }); self.keydown( @@ -50,7 +58,7 @@ case 106: event.preventDefault(); calculateSoFar( number ); - addToTicket(formatNumber(number, o.decimals), event.which); + addToTicket(formatNumber(number), event.which); LastOperator = event.which; self.val(""); break; @@ -72,9 +80,9 @@ event.preventDefault(); } calculateSoFar(number); - addToTicket(formatNumber(number, o.decimals), "="); - addToTicket(formatNumber(TotalSoFar, o.decimals), 0, "tot"); - self.val(formatNumber(TotalSoFar, o.decimals)); + addToTicket(formatNumber(number), "="); + addToTicket(formatNumber(TotalSoFar), 0, "tot"); + self.val(formatNumber(TotalSoFar)); LastOperator = 0; } } @@ -124,19 +132,12 @@ function parseLocalFloat(num) { if (!num) return 0; - if (options.useCommaAsDecimalMark) { - return parseFloat((num.replace(/\./g, "").replace(/ /g, "").replace("$", "").replace(",", "."))); - } - return parseFloat(num.replace(/,/g, "")); + num = num.replace(conf.re, '').replace(conf.radix, '.'); + return parseFloat(num) } - function formatNumber(n, c) { - var d = "."; var t = ","; var i; var j; var s; - if (options.useCommaAsDecimalMark) { - d = ","; t = "."; - } - c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0; - return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); + function formatNumber(num) { + return options.numberFormat.format(num) }; diff --git a/jquery.calculadora.min.js b/jquery.calculadora.min.js index 281a896..d13a606 100644 --- a/jquery.calculadora.min.js +++ b/jquery.calculadora.min.js @@ -1,2 +1,2 @@ -(function(e){e.fn.extend({calculadora:function(t){function u(e){if(!e)return 0;if(t.useCommaAsDecimalMark){return parseFloat(e.replace(/\./g,"").replace(/ /g,"").replace("$","").replace(",","."))}return parseFloat(e.replace(",",""))}function a(e,n){var r=".";var o=",";if(t.useCommaAsDecimalMark){r=",";o="."}n=isNaN(n=Math.abs(n))?2:n,r=r==undefined?",":r,o=o==undefined?".":o,s=e<0?"-":"",i=parseInt(e=Math.abs(+e||0).toFixed(n))+"",j=(j=i.length)>3?j%3:0;return s+(j?i.substr(0,j)+o:"")+i.substr(j).replace(/(\d{3})(?=\d)/g,"$1"+o)+(n?r+Math.abs(e-i).toFixed(n).slice(2):"")}function f(e){if(e==109)return"-";if(e==107)return"+";if(e==111)return"/";if(e==106)return"*";if(e=="=")return"=";return""}var n={decimals:2,useCommaAsDecimalMark:false};var t=e.extend(n,t);var r=e('');var o=r.find("ul");e("body").append(r);return this.each(function(){function h(e){if(s===0){l=e}else{if(s==109)l=l-e;if(s==107)l=l+e;if(s==111&&e!==0)l=l/e;if(s==111&&e===0)l=0;if(s==106)l=l*e}}function p(e,t,n){var s=i.offset();if(!c&&s){r.css("top",s.top-15+"px");r.css("left",s.left+"px");r.css("min-width",i.width()+"px");r.show();c=true}o.append("
  • "+f(t)+"
    "+e+"
  • ");r.css("top",s.top-r.height()+"px")}var n=t;var i=e(this);var s=0;var l=0;var c=false;i.blur(function(e){s=0;o.html("");r.hide();c=false});i.keydown(function(e){var t=i.val();var r=u(t);if(r!==0&&(e.which===109||e.which===107||e.which===111||e.which===106)){e.preventDefault();h(r);p(a(r,n.decimals),e.which);s=e.which;i.val("")}if(e.which==13||e.which==9){if(e.which==13){e.preventDefault()}h(r);p(a(r,n.decimals),"=");p(a(l,n.decimals),0,"tot");i.val(a(l,n.decimals));s=0}})});}})})(jQuery) +!function(e){var a={decimals:2,useCommaAsDecimalMark:!1};e.fn.extend({calculadora:function(t,i){(t=e.extend({},a,t)).numberFormat||(t.numberFormat=t.useCommaAsDecimalMark?new Intl.NumberFormat("FR",{maximumFractionDigits:t.decimals}):new Intl.NumberFormat("US",{maximumFractionDigits:t.decimals}));var n={};n.radix=t.numberFormat.format(.1).slice(1,2),n.re=new RegExp(`[^-0-9${n.radix}]`,"g");var r=e(''),c=r.find("ul");return e(i).append(r),this.each(function(){var a=e(this),t=0,i=0,n=!1;function o(e){0===t?i=e:(109==t&&(i-=e),107==t&&(i+=e),111==t&&0!==e&&(i/=e),111==t&&0===e&&(i=0),106==t&&(i*=e))}function u(e,t,i){var l,s=a.offset();!n&&s&&(r.css("top",s.top-15+"px"),r.css("left",s.left+"px"),r.css("min-width",a.width()+"px"),r.show(),n=!0),c.append("
  • "+(109==(l=t)?"-":107==l?"+":111==l?"/":106==l?"*":"="==l?"=":"")+"
    "+e+"
  • "),r.css("top",s.top-r.height()+"px")}a.blur(function(e){t=0,c.html(""),r.hide(),n=!1;var i=l(a.val());a.val(s(i))}),a.keydown(function(e){var n=l(a.val());if(0!==n)switch(e.which){case 109:case 107:case 111:case 106:e.preventDefault(),o(n),u(s(n),e.which),t=e.which,a.val("");break;case 75:e.preventDefault(),a.val(1e3*n);break;case 77:e.preventDefault(),a.val(1e6*n)}13!=e.which&&9!=e.which||(console.log(e.which),13==e.which&&e.preventDefault(),o(n),u(s(n),"="),u(s(i),0,"tot"),a.val(s(i)),t=0)}),a.keypress(function(e){var t=l(a.val());37==e.which&&(e.preventDefault(),a.val(i*t/100))})});function l(e){return e?(e=e.replace(n.re,"").replace(n.radix,"."),parseFloat(e)):0}function s(e){return t.numberFormat.format(e)}}})}(jQuery); //@ sourceMappingURL=jquery.calculadora.min.js.map \ No newline at end of file From 1159b85321d31074d1bd499b61060043ddce7102 Mon Sep 17 00:00:00 2001 From: Greg Carroll Date: Wed, 1 May 2019 10:06:22 -0600 Subject: [PATCH 3/4] 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 --- jquery.calculadora.js | 144 ++++++++++++++++---------------------- jquery.calculadora.min.js | 2 +- 2 files changed, 63 insertions(+), 83 deletions(-) diff --git a/jquery.calculadora.js b/jquery.calculadora.js index e89ea83..5c5baed 100644 --- a/jquery.calculadora.js +++ b/jquery.calculadora.js @@ -1,5 +1,5 @@ /* - * jQuery Calculadora 0.5 + * jQuery Calculadora 0.6 * Copyright 2013, Eduardo Molteni * */ @@ -30,12 +30,12 @@ return this.each(function() { var self = $(this); - var LastOperator = 0; + var LastOperator = null; var TotalSoFar = 0; var TicketIsVisible = false; self.blur(function (event) { - LastOperator = 0; + LastOperator = null; ticketUl.html(""); ticket.hide(); TicketIsVisible = false; @@ -48,72 +48,65 @@ function (event) { var number = parseLocalFloat(self.val()); - // if there's a number in the input: - if (number !== 0) - switch (event.which) { - // if the key is -+/*: - case 109: - case 107: - case 111: - case 106: - event.preventDefault(); - calculateSoFar( number ); - addToTicket(formatNumber(number), event.which); - LastOperator = event.which; - self.val(""); - break; - case 75: //if the key is 'k' - event.preventDefault(); - self.val(number * 1000); - break; - case 77: //if the key is 'M' - event.preventDefault(); - self.val(number * 1000000); - break; - break; - } - - // si la tecla es enter o tab o = - if (event.which == 13 || event.which == 9) { - console.log(event.which); - if (event.which == 13) { + switch (event.key) { + case '+': + case '-': + case '*': + case '/': event.preventDefault(); - } - calculateSoFar(number); - addToTicket(formatNumber(number), "="); - addToTicket(formatNumber(TotalSoFar), 0, "tot"); - self.val(formatNumber(TotalSoFar)); - LastOperator = 0; - } - } - ); - - self.keypress( - function (event) { - var number = parseLocalFloat(self.val()); - - if (event.which == 37) { - event.preventDefault(); - self.val(TotalSoFar * number / 100); - } + calculateSoFar( number ); + addToTicket(formatNumber(number), event.key); + LastOperator = event.key; + self.val(""); + break; + case 'Enter': + case '=': + event.preventDefault(); // allow default action for Tab key + case 'Tab': + calculateSoFar(number); + addToTicket(formatNumber(number), "="); + addToTicket(formatNumber(TotalSoFar), " ", "tot"); + self.val(formatNumber(TotalSoFar)); + LastOperator = null; + self.change(); + break; + case 'k': + event.preventDefault(); + self.val(number * 1000); + break; + case 'M': + event.preventDefault(); + self.val(number * 1000000); + break; + case 'm': + event.preventDefault(); + if (number !== 0) self.val(number / 1000); + break; + }; } ); function calculateSoFar(number) { - if (LastOperator === 0) { - TotalSoFar = number; - } - else { - // prevent using eval - if (LastOperator == 109) TotalSoFar = TotalSoFar - number; - if (LastOperator == 107) TotalSoFar = TotalSoFar + number; - if (LastOperator == 111 && number !== 0) TotalSoFar = TotalSoFar / number; - if (LastOperator == 111 && number === 0) TotalSoFar = 0; - if (LastOperator == 106) TotalSoFar = TotalSoFar * number; - } - } - - function addToTicket(text, which, liclass) { + switch (LastOperator) { + case null: + TotalSoFar = number; + break; + case '+': + TotalSoFar = TotalSoFar + number; + break; + case '-': + TotalSoFar = TotalSoFar - number; + break; + case '*': + TotalSoFar = TotalSoFar * number; + break; + case '/': + TotalSoFar = (number !== 0) ? TotalSoFar / number : 0; + break; + }; + }; + + function addToTicket(text, display_operator, liclass) { var pos = self.offset(); if (!TicketIsVisible && pos) { ticket.css('top', (pos.top - 15) + "px"); @@ -122,36 +115,23 @@ //ticket.show("slide", { direction: "up" }, 1000); ticket.show(); TicketIsVisible = true; - } - ticketUl.append("
  • " + operatorForCode(which) + "
    " + text + "
  • "); + }; + ticketUl.append("
  • " + display_operator + "
    " + text + "
  • "); ticket.css('top', (pos.top - ticket.height()) + "px"); - } + }; }); - function parseLocalFloat(num) { if (!num) return 0; num = num.replace(conf.re, '').replace(conf.radix, '.'); return parseFloat(num) - } + }; function formatNumber(num) { return options.numberFormat.format(num) }; - - - function operatorForCode(whichKeyCode) { - if (whichKeyCode == 109) return("-"); - if (whichKeyCode == 107) return ("+"); - if (whichKeyCode == 111) return ("/"); - if (whichKeyCode == 106) return ("*"); - if (whichKeyCode == "=") return ("="); - return ""; - } - } }); - -})(jQuery); +})(jQuery); diff --git a/jquery.calculadora.min.js b/jquery.calculadora.min.js index d13a606..4f92454 100644 --- a/jquery.calculadora.min.js +++ b/jquery.calculadora.min.js @@ -1,2 +1,2 @@ -!function(e){var a={decimals:2,useCommaAsDecimalMark:!1};e.fn.extend({calculadora:function(t,i){(t=e.extend({},a,t)).numberFormat||(t.numberFormat=t.useCommaAsDecimalMark?new Intl.NumberFormat("FR",{maximumFractionDigits:t.decimals}):new Intl.NumberFormat("US",{maximumFractionDigits:t.decimals}));var n={};n.radix=t.numberFormat.format(.1).slice(1,2),n.re=new RegExp(`[^-0-9${n.radix}]`,"g");var r=e(''),c=r.find("ul");return e(i).append(r),this.each(function(){var a=e(this),t=0,i=0,n=!1;function o(e){0===t?i=e:(109==t&&(i-=e),107==t&&(i+=e),111==t&&0!==e&&(i/=e),111==t&&0===e&&(i=0),106==t&&(i*=e))}function u(e,t,i){var l,s=a.offset();!n&&s&&(r.css("top",s.top-15+"px"),r.css("left",s.left+"px"),r.css("min-width",a.width()+"px"),r.show(),n=!0),c.append("
  • "+(109==(l=t)?"-":107==l?"+":111==l?"/":106==l?"*":"="==l?"=":"")+"
    "+e+"
  • "),r.css("top",s.top-r.height()+"px")}a.blur(function(e){t=0,c.html(""),r.hide(),n=!1;var i=l(a.val());a.val(s(i))}),a.keydown(function(e){var n=l(a.val());if(0!==n)switch(e.which){case 109:case 107:case 111:case 106:e.preventDefault(),o(n),u(s(n),e.which),t=e.which,a.val("");break;case 75:e.preventDefault(),a.val(1e3*n);break;case 77:e.preventDefault(),a.val(1e6*n)}13!=e.which&&9!=e.which||(console.log(e.which),13==e.which&&e.preventDefault(),o(n),u(s(n),"="),u(s(i),0,"tot"),a.val(s(i)),t=0)}),a.keypress(function(e){var t=l(a.val());37==e.which&&(e.preventDefault(),a.val(i*t/100))})});function l(e){return e?(e=e.replace(n.re,"").replace(n.radix,"."),parseFloat(e)):0}function s(e){return t.numberFormat.format(e)}}})}(jQuery); +!function(e){var a={decimals:2,useCommaAsDecimalMark:!1,parent_element:e("body")};e.fn.extend({calculadora:function(t){(t=e.extend({},a,t)).numberFormat||(t.numberFormat=t.useCommaAsDecimalMark?new Intl.NumberFormat("FR",{maximumFractionDigits:t.decimals}):new Intl.NumberFormat("US",{maximumFractionDigits:t.decimals}));var n={};n.radix=t.numberFormat.format(.1).slice(1,2),n.re=new RegExp(`[^-0-9${n.radix}]`,"g");var r=e(''),l=r.find("ul");return e(t.parent_element).append(r),this.each(function(){var a=e(this),t=null,n=0,i=!1;function u(e){switch(t){case null:n=e;break;case"+":n+=e;break;case"-":n-=e;break;case"*":n*=e;break;case"/":n=0!==e?n/e:0}}function o(e,t,n){var s=a.offset();!i&&s&&(r.css("top",s.top-15+"px"),r.css("left",s.left+"px"),r.css("min-width",a.width()+"px"),r.show(),i=!0),l.append("
  • "+t+"
    "+e+"
  • "),r.css("top",s.top-r.height()+"px")}a.blur(function(e){t=null,l.html(""),r.hide(),i=!1;var n=s(a.val());a.val(c(n))}),a.keydown(function(e){var r=s(a.val());switch(e.key){case"+":case"-":case"*":case"/":e.preventDefault(),u(r),o(c(r),e.key),t=e.key,a.val("");break;case"Enter":case"=":e.preventDefault();case"Tab":u(r),o(c(r),"="),o(c(n)," ","tot"),a.val(c(n)),t=null,a.change();break;case"k":e.preventDefault(),a.val(1e3*r);break;case"M":e.preventDefault(),a.val(1e6*r);break;case"m":e.preventDefault(),0!==r&&a.val(r/1e3)}})});function s(e){return e?(e=e.replace(n.re,"").replace(n.radix,"."),parseFloat(e)):0}function c(e){return t.numberFormat.format(e)}}})}(jQuery); //@ sourceMappingURL=jquery.calculadora.min.js.map \ No newline at end of file From ded898ffccef64fb6aca7292f9a4897655d6ca57 Mon Sep 17 00:00:00 2001 From: Greg Carroll Date: Mon, 6 May 2019 21:42:36 -0600 Subject: [PATCH 4/4] fix offset for ticket display Use jQuery offset function instead of coded calculation. The offset was not calculated correctly when using a Bootstrap modal. Also test/change the ticket visibility using jQuery instead of state variable and css. --- jquery.calculadora.js | 16 +++++++--------- jquery.calculadora.min.js | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/jquery.calculadora.js b/jquery.calculadora.js index 5c5baed..3382ab8 100644 --- a/jquery.calculadora.js +++ b/jquery.calculadora.js @@ -26,19 +26,21 @@ var ticket = $(''); var ticketUl = ticket.find("ul"); + + while($('#calculadora').length != 0) { + $('#calculadora').remove(); + }; $(options.parent_element).append(ticket); return this.each(function() { var self = $(this); var LastOperator = null; var TotalSoFar = 0; - var TicketIsVisible = false; self.blur(function (event) { LastOperator = null; ticketUl.html(""); ticket.hide(); - TicketIsVisible = false; var number = parseLocalFloat(self.val()); self.val(formatNumber(number)); @@ -107,17 +109,13 @@ }; function addToTicket(text, display_operator, liclass) { - var pos = self.offset(); - if (!TicketIsVisible && pos) { - ticket.css('top', (pos.top - 15) + "px"); - ticket.css('left', pos.left + "px"); + if (!ticket.is(":visible")) { ticket.css('min-width', self.width() + "px"); - //ticket.show("slide", { direction: "up" }, 1000); ticket.show(); - TicketIsVisible = true; + ticket.offset({top: self.offset().top-15, left: self.offset().left}); }; ticketUl.append("
  • " + display_operator + "
    " + text + "
  • "); - ticket.css('top', (pos.top - ticket.height()) + "px"); + ticket.offset({top: ticket.offset().top-15, left: ticket.offset().left}); }; }); diff --git a/jquery.calculadora.min.js b/jquery.calculadora.min.js index 4f92454..eb737ba 100644 --- a/jquery.calculadora.min.js +++ b/jquery.calculadora.min.js @@ -1,2 +1,2 @@ -!function(e){var a={decimals:2,useCommaAsDecimalMark:!1,parent_element:e("body")};e.fn.extend({calculadora:function(t){(t=e.extend({},a,t)).numberFormat||(t.numberFormat=t.useCommaAsDecimalMark?new Intl.NumberFormat("FR",{maximumFractionDigits:t.decimals}):new Intl.NumberFormat("US",{maximumFractionDigits:t.decimals}));var n={};n.radix=t.numberFormat.format(.1).slice(1,2),n.re=new RegExp(`[^-0-9${n.radix}]`,"g");var r=e(''),l=r.find("ul");return e(t.parent_element).append(r),this.each(function(){var a=e(this),t=null,n=0,i=!1;function u(e){switch(t){case null:n=e;break;case"+":n+=e;break;case"-":n-=e;break;case"*":n*=e;break;case"/":n=0!==e?n/e:0}}function o(e,t,n){var s=a.offset();!i&&s&&(r.css("top",s.top-15+"px"),r.css("left",s.left+"px"),r.css("min-width",a.width()+"px"),r.show(),i=!0),l.append("
  • "+t+"
    "+e+"
  • "),r.css("top",s.top-r.height()+"px")}a.blur(function(e){t=null,l.html(""),r.hide(),i=!1;var n=s(a.val());a.val(c(n))}),a.keydown(function(e){var r=s(a.val());switch(e.key){case"+":case"-":case"*":case"/":e.preventDefault(),u(r),o(c(r),e.key),t=e.key,a.val("");break;case"Enter":case"=":e.preventDefault();case"Tab":u(r),o(c(r),"="),o(c(n)," ","tot"),a.val(c(n)),t=null,a.change();break;case"k":e.preventDefault(),a.val(1e3*r);break;case"M":e.preventDefault(),a.val(1e6*r);break;case"m":e.preventDefault(),0!==r&&a.val(r/1e3)}})});function s(e){return e?(e=e.replace(n.re,"").replace(n.radix,"."),parseFloat(e)):0}function c(e){return t.numberFormat.format(e)}}})}(jQuery); +!function(e){var a={decimals:2,useCommaAsDecimalMark:!1,parent_element:e("body")};e.fn.extend({calculadora:function(t){(t=e.extend({},a,t)).numberFormat||(t.numberFormat=t.useCommaAsDecimalMark?new Intl.NumberFormat("FR",{maximumFractionDigits:t.decimals}):new Intl.NumberFormat("US",{maximumFractionDigits:t.decimals}));var r={};r.radix=t.numberFormat.format(.1).slice(1,2),r.re=new RegExp(`[^-0-9${r.radix}]`,"g");for(var l=e(''),n=l.find("ul");0!=e("#calculadora").length;)e("#calculadora").remove();return e(t.parent_element).append(l),this.each(function(){var a=e(this),t=null,r=0;function i(e){switch(t){case null:r=e;break;case"+":r+=e;break;case"-":r-=e;break;case"*":r*=e;break;case"/":r=0!==e?r/e:0}}function o(e,t,r){l.is(":visible")||(l.css("min-width",a.width()+"px"),l.show(),l.offset({top:a.offset().top-15,left:a.offset().left})),n.append("
  • "+t+"
    "+e+"
  • "),l.offset({top:l.offset().top-15,left:l.offset().left})}a.blur(function(e){t=null,n.html(""),l.hide();var r=s(a.val());a.val(c(r))}),a.keydown(function(e){var l=s(a.val());switch(e.key){case"+":case"-":case"*":case"/":e.preventDefault(),i(l),o(c(l),e.key),t=e.key,a.val("");break;case"Enter":case"=":e.preventDefault();case"Tab":i(l),o(c(l),"="),o(c(r)," ","tot"),a.val(c(r)),t=null,a.change();break;case"k":e.preventDefault(),a.val(1e3*l);break;case"M":e.preventDefault(),a.val(1e6*l);break;case"m":e.preventDefault(),0!==l&&a.val(l/1e3)}})});function s(e){return e?(e=e.replace(r.re,"").replace(r.radix,"."),parseFloat(e)):0}function c(e){return t.numberFormat.format(e)}}})}(jQuery); //@ sourceMappingURL=jquery.calculadora.min.js.map \ No newline at end of file