From e783ca66d2ec83decc2b53d571b7cda744bbd17f Mon Sep 17 00:00:00 2001 From: Kartik Visweswaran Date: Tue, 23 May 2017 17:44:36 +0530 Subject: [PATCH] Fix plugin behavior to show default placeholder when `allowEmpty` is `true` fixes #20 fixes #21 --- CHANGE.md | 1 + assets/js/jquery.maskMoney.js | 4 +++- assets/js/jquery.maskMoney.min.js | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGE.md b/CHANGE.md index d959196..41d382f 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -10,6 +10,7 @@ Change Log: `yii2-money` - fixes masking when precision is set but the decimal part length is less than precision length (for example 1400.50 with precision 2 was wrongly displayed as 140.05 - this change fixes this bug where the leading zeros after decimals were omitted) - (enh #25, #11, #10): Update to release v3.1.1 of source plugin. - (bug #24, #17, #12, #4): Enhance to calculate changed money mask when enter key is pressed. +- (enh #21, #20): Fix plugin behavior to show default placeholder when `allowEmpty` is `true`. - (enh #15): New `displayInputName` property to control display input name attribute. - Add composer alias for latest dev master release. - Add github contribution and issue/PR logging templates. diff --git a/assets/js/jquery.maskMoney.js b/assets/js/jquery.maskMoney.js index 004d858..b4136a9 100644 --- a/assets/js/jquery.maskMoney.js +++ b/assets/js/jquery.maskMoney.js @@ -219,7 +219,9 @@ function mask() { var value = $input.val(); - if (settings.allowEmpty && value === "") { + // corrected by Kartik for initial empty value being treated as NaN + if (settings.allowEmpty && (value === "" || isNaN(parseFloat(value)))) { + $input.val(""); return; } if (settings.precision > 0 && value.indexOf(settings.decimal) < 0) { diff --git a/assets/js/jquery.maskMoney.min.js b/assets/js/jquery.maskMoney.min.js index 8dfb56f..9f2f91f 100644 --- a/assets/js/jquery.maskMoney.min.js +++ b/assets/js/jquery.maskMoney.min.js @@ -1 +1 @@ -!function(e){"use strict";function t(e,t){var n="";return e.indexOf("-")>-1&&(e=e.replace("-",""),n="-"),e.indexOf(t.prefix)>-1&&(e=e.replace(t.prefix,"")),e.indexOf(t.suffix)>-1&&(e=e.replace(t.suffix,"")),n+t.prefix+e+t.suffix}function n(e,t){return t.allowEmpty&&""===e?"":t.reverse?r(e,t):a(e,t)}function a(e,n){var a=parseFloat(e);isNaN(a)||(e=a.toFixed(n.precision)+"");var r,o,l,s=e.indexOf("-")>-1&&n.allowNegative?"-":"",c=e.replace(/[^0-9]/g,""),u=c.slice(0,c.length-n.precision);return r=i(u,s,n),n.precision>0&&(o=c.slice(c.length-n.precision),l=new Array(n.precision+1-o.length).join(0),r+=n.decimal+l+o),t(r,n)}function r(e,n){var a,r=e.indexOf("-")>-1&&n.allowNegative?"-":"",o=e.replace(n.prefix,"").replace(n.suffix,""),l=o.split(n.decimal)[0],s="";if(""===l&&(l="0"),a=i(l,r,n),n.precision>0){var c=o.split(n.decimal);c.length>1&&(s=c[1]),a+=n.decimal+s;var u=Number.parseFloat(l+"."+s).toFixed(n.precision),v=u.toString().split(n.decimal)[1];a=a.split(n.decimal)[0]+"."+v}return t(a,n)}function i(e,t,n){return e=e.replace(/^0*/g,""),e=e.replace(/\B(?=(\d{3})+(?!\d))/g,n.thousands),""===e&&(e="0"),t+e}e.browser||(e.browser={},e.browser.mozilla=/mozilla/.test(navigator.userAgent.toLowerCase())&&!/webkit/.test(navigator.userAgent.toLowerCase()),e.browser.webkit=/webkit/.test(navigator.userAgent.toLowerCase()),e.browser.opera=/opera/.test(navigator.userAgent.toLowerCase()),e.browser.msie=/msie/.test(navigator.userAgent.toLowerCase()));var o={destroy:function(){return e(this).unbind(".maskMoney"),e.browser.msie&&(this.onpaste=null),this},applyMask:function(t){var a=e(this),r=a.data("settings");return n(t,r)},mask:function(t){return this.each(function(){var n=e(this);return"number"==typeof t&&n.val(t),n.trigger("mask")})},unmasked:function(){return this.map(function(){var t=e(this),n=t.data("settings"),a=e(this).val()||"0",r=-1!==a.indexOf("-"),i="",o=a.split(n.decimal);return o[1]&&(i=o[1]),o=o[0].split(/\D/),o.length>1&&(a="",e(o).each(function(e,t){t&&(a+=t)})),a=a.replace(/\D/g,""),a=a+"."+i,r&&(a="-"+a),parseFloat(a)})},init:function(a){return a=e.extend({prefix:"",suffix:"",affixesStay:!0,thousands:",",decimal:".",precision:2,allowZero:!1,allowNegative:!1,doubleClickSelection:!0,allowEmpty:!1},a),this.each(function(){function r(){var e,t,n,a,r,i=E.get(0),o=0,l=0;return"number"==typeof i.selectionStart&&"number"==typeof i.selectionEnd?(o=i.selectionStart,l=i.selectionEnd):(t=document.selection.createRange(),t&&t.parentElement()===i&&(a=i.value.length,e=i.value.replace(/\r\n/g,"\n"),n=i.createTextRange(),n.moveToBookmark(t.getBookmark()),r=i.createTextRange(),r.collapse(!1),n.compareEndPoints("StartToEnd",r)>-1?o=l=a:(o=-n.moveStart("character",-a),o+=e.slice(0,o).split("\n").length-1,n.compareEndPoints("EndToEnd",r)>-1?l=a:(l=-n.moveEnd("character",-a),l+=e.slice(0,l).split("\n").length-1)))),{start:o,end:l}}function i(){var e=!(E.val().length>=E.attr("maxlength")&&E.attr("maxlength")>=0),t=r(),n=t.start,a=t.end,i=!(t.start===t.end||!E.val().substring(n,a).match(/\d/)),o="0"===E.val().substring(0,1);return e||i||o}function o(e){C.formatOnBlur||E.each(function(t,n){if(n.setSelectionRange)n.focus(),n.setSelectionRange(e,e);else if(n.createTextRange){var a=n.createTextRange();a.collapse(!0),a.moveEnd("character",e),a.moveStart("character",e),a.select()}})}function l(e){var t,a=E.val().length;E.val(n(E.val(),C)),t=E.val().length,C.reverse||(e-=a-t),o(e)}function s(){var e=E.val();C.allowEmpty&&""===e||(C.precision>0&&e.indexOf(C.decimal)<0&&(e+=C.decimal+new Array(C.precision+1).join(0)),E.val(n(e,C)))}function c(){var e=E.val();return C.allowNegative?""!==e&&"-"===e.charAt(0)?e.replace("-",""):"-"+e:e}function u(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function v(e){e=e||window.event;var t=e.which||e.charCode||e.keyCode,n=C.decimal.charCodeAt(0);return void 0===t?!1:!(48>t||t>57)||t===n&&C.reverse?i()?t===n&&f()?!1:C.formatOnBlur?!0:(u(e),g(e),!1):!1:m(t,e)}function f(){return d()?!1:p()}function d(){var e=E.val().length,t=r();return 0===t.start&&t.end===e}function p(){return E.val().indexOf(C.decimal)>-1}function g(e){e=e||window.event;var t,n,a,i,o=e.which||e.charCode||e.keyCode,s="";o>=48&&57>=o&&(s=String.fromCharCode(o)),t=r(),n=t.start,a=t.end,i=E.val(),E.val(i.substring(0,n)+s+i.substring(a,i.length)),l(n+1)}function m(t,n){return 45===t?(E.val(c()),!1):43===t?(E.val(E.val().replace("-","")),!1):13===t||9===t?!0:!e.browser.mozilla||37!==t&&39!==t||0!==n.charCode?(u(n),!0):!0}function h(e){e=e||window.event;var t,n,a,i,o,s=e.which||e.charCode||e.keyCode;return void 0===s?!1:(t=r(),n=t.start,a=t.end,8===s||46===s||63272===s?(u(e),i=E.val(),n===a&&(8===s?""===C.suffix?n-=1:(o=i.split("").reverse().join("").search(/\d/),n=i.length-o-1,a=n+1):a+=1),E.val(i.substring(0,n)+i.substring(a,i.length)),l(n),!1):!0)}function w(){M=E.val(),s();var e,t=E.get(0);C.selectAllOnFocus?t.select():t.createTextRange&&(e=t.createTextRange(),e.collapse(!1),e.select())}function x(){setTimeout(function(){s()},0)}function y(){var e=parseFloat("0")/Math.pow(10,C.precision);return e.toFixed(C.precision).replace(new RegExp("\\.","g"),C.decimal)}function b(n){if(e.browser.msie&&v(n),C.formatOnBlur&&E.val()!==M&&g(n),""===E.val()&&C.allowEmpty)E.val("");else if(""===E.val()||E.val()===t(y(),C))C.allowZero?C.affixesStay?E.val(t(y(),C)):E.val(y()):E.val("");else if(!C.affixesStay){var a=E.val().replace(C.prefix,"").replace(C.suffix,"");E.val(a)}E.val()!==M&&E.change()}function k(){var e,t=E.get(0);C.selectAllOnFocus||(t.setSelectionRange?(e=E.val().length,t.setSelectionRange(e,e)):E.val(E.val()))}function S(){var e,t,n=E.get(0);n.setSelectionRange?(t=E.val().length,e=C.doubleClickSelection?0:t,n.setSelectionRange(e,t)):E.val(E.val())}var C,M,E=e(this);C=e.extend({},a),C=e.extend(C,E.data()),E.data("settings",C),E.unbind(".maskMoney"),E.bind("keypress.maskMoney",v),E.bind("keydown.maskMoney",h),E.bind("blur.maskMoney",b),E.bind("focus.maskMoney",w),E.bind("click.maskMoney",k),E.bind("dblclick.maskMoney",S),E.bind("cut.maskMoney",x),E.bind("paste.maskMoney",x),E.bind("mask.maskMoney",s)})}};e.fn.maskMoney=function(t){return o[t]?o[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void e.error("Method "+t+" does not exist on jQuery.maskMoney"):o.init.apply(this,arguments)}}(window.jQuery||window.Zepto); \ No newline at end of file +!function(e){"use strict";function t(e,t){var n="";return e.indexOf("-")>-1&&(e=e.replace("-",""),n="-"),e.indexOf(t.prefix)>-1&&(e=e.replace(t.prefix,"")),e.indexOf(t.suffix)>-1&&(e=e.replace(t.suffix,"")),n+t.prefix+e+t.suffix}function n(e,t){return t.allowEmpty&&""===e?"":t.reverse?r(e,t):a(e,t)}function a(e,n){var a=parseFloat(e);isNaN(a)||(e=a.toFixed(n.precision)+"");var r,o,l,s=e.indexOf("-")>-1&&n.allowNegative?"-":"",c=e.replace(/[^0-9]/g,""),u=c.slice(0,c.length-n.precision);return r=i(u,s,n),n.precision>0&&(o=c.slice(c.length-n.precision),l=new Array(n.precision+1-o.length).join(0),r+=n.decimal+l+o),t(r,n)}function r(e,n){var a,r=e.indexOf("-")>-1&&n.allowNegative?"-":"",o=e.replace(n.prefix,"").replace(n.suffix,""),l=o.split(n.decimal)[0],s="";if(""===l&&(l="0"),a=i(l,r,n),n.precision>0){var c=o.split(n.decimal);c.length>1&&(s=c[1]),a+=n.decimal+s;var u=Number.parseFloat(l+"."+s).toFixed(n.precision),v=u.toString().split(n.decimal)[1];a=a.split(n.decimal)[0]+"."+v}return t(a,n)}function i(e,t,n){return e=e.replace(/^0*/g,""),e=e.replace(/\B(?=(\d{3})+(?!\d))/g,n.thousands),""===e&&(e="0"),t+e}e.browser||(e.browser={},e.browser.mozilla=/mozilla/.test(navigator.userAgent.toLowerCase())&&!/webkit/.test(navigator.userAgent.toLowerCase()),e.browser.webkit=/webkit/.test(navigator.userAgent.toLowerCase()),e.browser.opera=/opera/.test(navigator.userAgent.toLowerCase()),e.browser.msie=/msie/.test(navigator.userAgent.toLowerCase()));var o={destroy:function(){return e(this).unbind(".maskMoney"),e.browser.msie&&(this.onpaste=null),this},applyMask:function(t){var a=e(this),r=a.data("settings");return n(t,r)},mask:function(t){return this.each(function(){var n=e(this);return"number"==typeof t&&n.val(t),n.trigger("mask")})},unmasked:function(){return this.map(function(){var t=e(this),n=t.data("settings"),a=e(this).val()||"0",r=-1!==a.indexOf("-"),i="",o=a.split(n.decimal);return o[1]&&(i=o[1]),o=o[0].split(/\D/),o.length>1&&(a="",e(o).each(function(e,t){t&&(a+=t)})),a=a.replace(/\D/g,""),a=a+"."+i,r&&(a="-"+a),parseFloat(a)})},init:function(a){return a=e.extend({prefix:"",suffix:"",affixesStay:!0,thousands:",",decimal:".",precision:2,allowZero:!1,allowNegative:!1,doubleClickSelection:!0,allowEmpty:!1},a),this.each(function(){function r(){var e,t,n,a,r,i=E.get(0),o=0,l=0;return"number"==typeof i.selectionStart&&"number"==typeof i.selectionEnd?(o=i.selectionStart,l=i.selectionEnd):(t=document.selection.createRange(),t&&t.parentElement()===i&&(a=i.value.length,e=i.value.replace(/\r\n/g,"\n"),n=i.createTextRange(),n.moveToBookmark(t.getBookmark()),r=i.createTextRange(),r.collapse(!1),n.compareEndPoints("StartToEnd",r)>-1?o=l=a:(o=-n.moveStart("character",-a),o+=e.slice(0,o).split("\n").length-1,n.compareEndPoints("EndToEnd",r)>-1?l=a:(l=-n.moveEnd("character",-a),l+=e.slice(0,l).split("\n").length-1)))),{start:o,end:l}}function i(){var e=!(E.val().length>=E.attr("maxlength")&&E.attr("maxlength")>=0),t=r(),n=t.start,a=t.end,i=!(t.start===t.end||!E.val().substring(n,a).match(/\d/)),o="0"===E.val().substring(0,1);return e||i||o}function o(e){C.formatOnBlur||E.each(function(t,n){if(n.setSelectionRange)n.focus(),n.setSelectionRange(e,e);else if(n.createTextRange){var a=n.createTextRange();a.collapse(!0),a.moveEnd("character",e),a.moveStart("character",e),a.select()}})}function l(e){var t,a=E.val().length;E.val(n(E.val(),C)),t=E.val().length,C.reverse||(e-=a-t),o(e)}function s(){var e=E.val();return C.allowEmpty&&(""===e||isNaN(parseFloat(e)))?void E.val(""):(C.precision>0&&e.indexOf(C.decimal)<0&&(e+=C.decimal+new Array(C.precision+1).join(0)),void E.val(n(e,C)))}function c(){var e=E.val();return C.allowNegative?""!==e&&"-"===e.charAt(0)?e.replace("-",""):"-"+e:e}function u(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function v(e){e=e||window.event;var t=e.which||e.charCode||e.keyCode,n=C.decimal.charCodeAt(0);return void 0===t?!1:!(48>t||t>57)||t===n&&C.reverse?i()?t===n&&d()?!1:C.formatOnBlur?!0:(u(e),g(e),!1):!1:m(t,e)}function d(){return f()?!1:p()}function f(){var e=E.val().length,t=r();return 0===t.start&&t.end===e}function p(){return E.val().indexOf(C.decimal)>-1}function g(e){e=e||window.event;var t,n,a,i,o=e.which||e.charCode||e.keyCode,s="";o>=48&&57>=o&&(s=String.fromCharCode(o)),t=r(),n=t.start,a=t.end,i=E.val(),E.val(i.substring(0,n)+s+i.substring(a,i.length)),l(n+1)}function m(t,n){return 45===t?(E.val(c()),!1):43===t?(E.val(E.val().replace("-","")),!1):13===t||9===t?!0:!e.browser.mozilla||37!==t&&39!==t||0!==n.charCode?(u(n),!0):!0}function h(e){e=e||window.event;var t,n,a,i,o,s=e.which||e.charCode||e.keyCode;return void 0===s?!1:(t=r(),n=t.start,a=t.end,8===s||46===s||63272===s?(u(e),i=E.val(),n===a&&(8===s?""===C.suffix?n-=1:(o=i.split("").reverse().join("").search(/\d/),n=i.length-o-1,a=n+1):a+=1),E.val(i.substring(0,n)+i.substring(a,i.length)),l(n),!1):!0)}function w(){M=E.val(),s();var e,t=E.get(0);C.selectAllOnFocus?t.select():t.createTextRange&&(e=t.createTextRange(),e.collapse(!1),e.select())}function x(){setTimeout(function(){s()},0)}function y(){var e=parseFloat("0")/Math.pow(10,C.precision);return e.toFixed(C.precision).replace(new RegExp("\\.","g"),C.decimal)}function b(n){if(e.browser.msie&&v(n),C.formatOnBlur&&E.val()!==M&&g(n),""===E.val()&&C.allowEmpty)E.val("");else if(""===E.val()||E.val()===t(y(),C))C.allowZero?C.affixesStay?E.val(t(y(),C)):E.val(y()):E.val("");else if(!C.affixesStay){var a=E.val().replace(C.prefix,"").replace(C.suffix,"");E.val(a)}E.val()!==M&&E.change()}function k(){var e,t=E.get(0);C.selectAllOnFocus||(t.setSelectionRange?(e=E.val().length,t.setSelectionRange(e,e)):E.val(E.val()))}function S(){var e,t,n=E.get(0);n.setSelectionRange?(t=E.val().length,e=C.doubleClickSelection?0:t,n.setSelectionRange(e,t)):E.val(E.val())}var C,M,E=e(this);C=e.extend({},a),C=e.extend(C,E.data()),E.data("settings",C),E.unbind(".maskMoney"),E.bind("keypress.maskMoney",v),E.bind("keydown.maskMoney",h),E.bind("blur.maskMoney",b),E.bind("focus.maskMoney",w),E.bind("click.maskMoney",k),E.bind("dblclick.maskMoney",S),E.bind("cut.maskMoney",x),E.bind("paste.maskMoney",x),E.bind("mask.maskMoney",s)})}};e.fn.maskMoney=function(t){return o[t]?o[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void e.error("Method "+t+" does not exist on jQuery.maskMoney"):o.init.apply(this,arguments)}}(window.jQuery||window.Zepto); \ No newline at end of file