From 1c89ba9b57b00d9711abcc40a37f83d7521d5f68 Mon Sep 17 00:00:00 2001 From: David Lynch Date: Sat, 12 Sep 2015 16:52:28 -0400 Subject: [PATCH 1/2] Fix bug where clicking was automatically moving the cursor to the end of the input string making editing impossible. --- dist/jquery.maskMoney.js | 21 +++++++++++---------- dist/jquery.maskMoney.min.js | 2 +- src/jquery.maskMoney.js | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/dist/jquery.maskMoney.js b/dist/jquery.maskMoney.js index c594a6c..5c28e83 100644 --- a/dist/jquery.maskMoney.js +++ b/dist/jquery.maskMoney.js @@ -28,12 +28,8 @@ mask : function (value) { return this.each(function () { - var $this = $(this), - decimalSize; + var $this = $(this); if (typeof value === "number") { - $this.trigger("mask"); - decimalSize = $($this.val().split(/\D/)).last()[0].length; - value = value.toFixed(decimalSize); $this.val(value); } return $this.trigger("mask"); @@ -61,8 +57,8 @@ }); }, - init : function (settings) { - settings = $.extend({ + init : function (parameters) { + parameters = $.extend({ prefix: "", suffix: "", affixesStay: true, @@ -71,13 +67,14 @@ precision: 2, allowZero: false, allowNegative: false - }, settings); + }, parameters); return this.each(function () { - var $input = $(this), + var $input = $(this), settings, onFocusValue; // data-* api + settings = $.extend({}, parameters); settings = $.extend(settings, $input.data()); function getInputSelection() { @@ -191,6 +188,7 @@ return setSymbol(newValue); } + function maskAndPosition(startPos) { var originalLen = $input.val().length, newLen; @@ -202,6 +200,9 @@ function mask() { var value = $input.val(); + if (settings.precision > 0 && value.indexOf(settings.decimal) < 0) { + value += settings.decimal + new Array(settings.precision+1).join(0); + } $input.val(maskValue(value)); } @@ -378,7 +379,7 @@ length; if (input.setSelectionRange) { length = $input.val().length; - input.setSelectionRange(length, length); + //input.setSelectionRange(length, length); } else { $input.val($input.val()); } diff --git a/dist/jquery.maskMoney.min.js b/dist/jquery.maskMoney.min.js index b6c66ce..9139b9c 100644 --- a/dist/jquery.maskMoney.min.js +++ b/dist/jquery.maskMoney.min.js @@ -6,4 +6,4 @@ * Made by Diego Plentz * Under MIT License (https://raw.github.com/plentz/jquery-maskmoney/master/LICENSE) */ -!function($){"use strict";$.browser||($.browser={},$.browser.mozilla=/mozilla/.test(navigator.userAgent.toLowerCase())&&!/webkit/.test(navigator.userAgent.toLowerCase()),$.browser.webkit=/webkit/.test(navigator.userAgent.toLowerCase()),$.browser.opera=/opera/.test(navigator.userAgent.toLowerCase()),$.browser.msie=/msie/.test(navigator.userAgent.toLowerCase()));var a={destroy:function(){return $(this).unbind(".maskMoney"),$.browser.msie&&(this.onpaste=null),this},mask:function(a){return this.each(function(){var b,c=$(this);return"number"==typeof a&&(c.trigger("mask"),b=$(c.val().split(/\D/)).last()[0].length,a=a.toFixed(b),c.val(a)),c.trigger("mask")})},unmasked:function(){return this.map(function(){var a,b=$(this).val()||"0",c=-1!==b.indexOf("-");return $(b.split(/\D/).reverse()).each(function(b,c){return c?(a=c,!1):void 0}),b=b.replace(/\D/g,""),b=b.replace(new RegExp(a+"$"),"."+a),c&&(b="-"+b),parseFloat(b)})},init:function(a){return a=$.extend({prefix:"",suffix:"",affixesStay:!0,thousands:",",decimal:".",precision:2,allowZero:!1,allowNegative:!1},a),this.each(function(){function b(){var a,b,c,d,e,f=s.get(0),g=0,h=0;return"number"==typeof f.selectionStart&&"number"==typeof f.selectionEnd?(g=f.selectionStart,h=f.selectionEnd):(b=document.selection.createRange(),b&&b.parentElement()===f&&(d=f.value.length,a=f.value.replace(/\r\n/g,"\n"),c=f.createTextRange(),c.moveToBookmark(b.getBookmark()),e=f.createTextRange(),e.collapse(!1),c.compareEndPoints("StartToEnd",e)>-1?g=h=d:(g=-c.moveStart("character",-d),g+=a.slice(0,g).split("\n").length-1,c.compareEndPoints("EndToEnd",e)>-1?h=d:(h=-c.moveEnd("character",-d),h+=a.slice(0,h).split("\n").length-1)))),{start:g,end:h}}function c(){var a=!(s.val().length>=s.attr("maxlength")&&s.attr("maxlength")>=0),c=b(),d=c.start,e=c.end,f=c.start!==c.end&&s.val().substring(d,e).match(/\d/)?!0:!1,g="0"===s.val().substring(0,1);return a||f||g}function d(a){s.each(function(b,c){if(c.setSelectionRange)c.focus(),c.setSelectionRange(a,a);else if(c.createTextRange){var d=c.createTextRange();d.collapse(!0),d.moveEnd("character",a),d.moveStart("character",a),d.select()}})}function e(b){var c="";return b.indexOf("-")>-1&&(b=b.replace("-",""),c="-"),c+a.prefix+b+a.suffix}function f(b){var c,d,f,g=b.indexOf("-")>-1&&a.allowNegative?"-":"",h=b.replace(/[^0-9]/g,""),i=h.slice(0,h.length-a.precision);return i=i.replace(/^0*/g,""),i=i.replace(/\B(?=(\d{3})+(?!\d))/g,a.thousands),""===i&&(i="0"),c=g+i,a.precision>0&&(d=h.slice(h.length-a.precision),f=new Array(a.precision+1-d.length).join(0),c+=a.decimal+f+d),e(c)}function g(a){var b,c=s.val().length;s.val(f(s.val())),b=s.val().length,a-=c-b,d(a)}function h(){var a=s.val();s.val(f(a))}function i(){var b=s.val();return a.allowNegative?""!==b&&"-"===b.charAt(0)?b.replace("-",""):"-"+b:b}function j(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function k(a){a=a||window.event;var d,e,f,h,k,l=a.which||a.charCode||a.keyCode;return void 0===l?!1:48>l||l>57?45===l?(s.val(i()),!1):43===l?(s.val(s.val().replace("-","")),!1):13===l||9===l?!0:!$.browser.mozilla||37!==l&&39!==l||0!==a.charCode?(j(a),!0):!0:c()?(j(a),d=String.fromCharCode(l),e=b(),f=e.start,h=e.end,k=s.val(),s.val(k.substring(0,f)+d+k.substring(h,k.length)),g(f+1),!1):!1}function l(c){c=c||window.event;var d,e,f,h,i,k=c.which||c.charCode||c.keyCode;return void 0===k?!1:(d=b(),e=d.start,f=d.end,8===k||46===k||63272===k?(j(c),h=s.val(),e===f&&(8===k?""===a.suffix?e-=1:(i=h.split("").reverse().join("").search(/\d/),e=h.length-i-1,f=e+1):f+=1),s.val(h.substring(0,e)+h.substring(f,h.length)),g(e),!1):9===k?!0:!0)}function m(){r=s.val(),h();var a,b=s.get(0);b.createTextRange&&(a=b.createTextRange(),a.collapse(!1),a.select())}function n(){setTimeout(function(){h()},0)}function o(){var b=parseFloat("0")/Math.pow(10,a.precision);return b.toFixed(a.precision).replace(new RegExp("\\.","g"),a.decimal)}function p(b){if($.browser.msie&&k(b),""===s.val()||s.val()===e(o()))a.allowZero?a.affixesStay?s.val(e(o())):s.val(o()):s.val("");else if(!a.affixesStay){var c=s.val().replace(a.prefix,"").replace(a.suffix,"");s.val(c)}s.val()!==r&&s.change()}function q(){var a,b=s.get(0);b.setSelectionRange?(a=s.val().length,b.setSelectionRange(a,a)):s.val(s.val())}var r,s=$(this);a=$.extend(a,s.data()),s.unbind(".maskMoney"),s.bind("keypress.maskMoney",k),s.bind("keydown.maskMoney",l),s.bind("blur.maskMoney",p),s.bind("focus.maskMoney",m),s.bind("click.maskMoney",q),s.bind("cut.maskMoney",n),s.bind("paste.maskMoney",n),s.bind("mask.maskMoney",h)})}};$.fn.maskMoney=function(b){return a[b]?a[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?($.error("Method "+b+" does not exist on jQuery.maskMoney"),void 0):a.init.apply(this,arguments)}}(window.jQuery||window.Zepto); \ No newline at end of file +!function($){"use strict";$.browser||($.browser={},$.browser.mozilla=/mozilla/.test(navigator.userAgent.toLowerCase())&&!/webkit/.test(navigator.userAgent.toLowerCase()),$.browser.webkit=/webkit/.test(navigator.userAgent.toLowerCase()),$.browser.opera=/opera/.test(navigator.userAgent.toLowerCase()),$.browser.msie=/msie/.test(navigator.userAgent.toLowerCase()));var a={destroy:function(){return $(this).unbind(".maskMoney"),$.browser.msie&&(this.onpaste=null),this},mask:function(a){return this.each(function(){var b=$(this);return"number"==typeof a&&b.val(a),b.trigger("mask")})},unmasked:function(){return this.map(function(){var a,b=$(this).val()||"0",c=-1!==b.indexOf("-");return $(b.split(/\D/).reverse()).each(function(b,c){return c?(a=c,!1):void 0}),b=b.replace(/\D/g,""),b=b.replace(new RegExp(a+"$"),"."+a),c&&(b="-"+b),parseFloat(b)})},init:function(a){return a=$.extend({prefix:"",suffix:"",affixesStay:!0,thousands:",",decimal:".",precision:2,allowZero:!1,allowNegative:!1},a),this.each(function(){function b(){var a,b,c,d,e,f=t.get(0),g=0,h=0;return"number"==typeof f.selectionStart&&"number"==typeof f.selectionEnd?(g=f.selectionStart,h=f.selectionEnd):(b=document.selection.createRange(),b&&b.parentElement()===f&&(d=f.value.length,a=f.value.replace(/\r\n/g,"\n"),c=f.createTextRange(),c.moveToBookmark(b.getBookmark()),e=f.createTextRange(),e.collapse(!1),c.compareEndPoints("StartToEnd",e)>-1?g=h=d:(g=-c.moveStart("character",-d),g+=a.slice(0,g).split("\n").length-1,c.compareEndPoints("EndToEnd",e)>-1?h=d:(h=-c.moveEnd("character",-d),h+=a.slice(0,h).split("\n").length-1)))),{start:g,end:h}}function c(){var a=!(t.val().length>=t.attr("maxlength")&&t.attr("maxlength")>=0),c=b(),d=c.start,e=c.end,f=c.start!==c.end&&t.val().substring(d,e).match(/\d/)?!0:!1,g="0"===t.val().substring(0,1);return a||f||g}function d(a){t.each(function(b,c){if(c.setSelectionRange)c.focus(),c.setSelectionRange(a,a);else if(c.createTextRange){var d=c.createTextRange();d.collapse(!0),d.moveEnd("character",a),d.moveStart("character",a),d.select()}})}function e(a){var b="";return a.indexOf("-")>-1&&(a=a.replace("-",""),b="-"),b+r.prefix+a+r.suffix}function f(a){var b,c,d,f=a.indexOf("-")>-1&&r.allowNegative?"-":"",g=a.replace(/[^0-9]/g,""),h=g.slice(0,g.length-r.precision);return h=h.replace(/^0*/g,""),h=h.replace(/\B(?=(\d{3})+(?!\d))/g,r.thousands),""===h&&(h="0"),b=f+h,r.precision>0&&(c=g.slice(g.length-r.precision),d=new Array(r.precision+1-c.length).join(0),b+=r.decimal+d+c),e(b)}function g(a){var b,c=t.val().length;t.val(f(t.val())),b=t.val().length,a-=c-b,d(a)}function h(){var a=t.val();r.precision>0&&a.indexOf(r.decimal)<0&&(a+=r.decimal+new Array(r.precision+1).join(0)),t.val(f(a))}function i(){var a=t.val();return r.allowNegative?""!==a&&"-"===a.charAt(0)?a.replace("-",""):"-"+a:a}function j(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function k(a){a=a||window.event;var d,e,f,h,k,l=a.which||a.charCode||a.keyCode;return void 0===l?!1:48>l||l>57?45===l?(t.val(i()),!1):43===l?(t.val(t.val().replace("-","")),!1):13===l||9===l?!0:!$.browser.mozilla||37!==l&&39!==l||0!==a.charCode?(j(a),!0):!0:c()?(j(a),d=String.fromCharCode(l),e=b(),f=e.start,h=e.end,k=t.val(),t.val(k.substring(0,f)+d+k.substring(h,k.length)),g(f+1),!1):!1}function l(a){a=a||window.event;var c,d,e,f,h,i=a.which||a.charCode||a.keyCode;return void 0===i?!1:(c=b(),d=c.start,e=c.end,8===i||46===i||63272===i?(j(a),f=t.val(),d===e&&(8===i?""===r.suffix?d-=1:(h=f.split("").reverse().join("").search(/\d/),d=f.length-h-1,e=d+1):e+=1),t.val(f.substring(0,d)+f.substring(e,f.length)),g(d),!1):9===i?!0:!0)}function m(){s=t.val(),h();var a,b=t.get(0);b.createTextRange&&(a=b.createTextRange(),a.collapse(!1),a.select())}function n(){setTimeout(function(){h()},0)}function o(){var a=parseFloat("0")/Math.pow(10,r.precision);return a.toFixed(r.precision).replace(new RegExp("\\.","g"),r.decimal)}function p(a){if($.browser.msie&&k(a),""===t.val()||t.val()===e(o()))r.allowZero?r.affixesStay?t.val(e(o())):t.val(o()):t.val("");else if(!r.affixesStay){var b=t.val().replace(r.prefix,"").replace(r.suffix,"");t.val(b)}t.val()!==s&&t.change()}function q(){var a,b=t.get(0);b.setSelectionRange?a=t.val().length:t.val(t.val())}var r,s,t=$(this);r=$.extend({},a),r=$.extend(r,t.data()),t.unbind(".maskMoney"),t.bind("keypress.maskMoney",k),t.bind("keydown.maskMoney",l),t.bind("blur.maskMoney",p),t.bind("focus.maskMoney",m),t.bind("click.maskMoney",q),t.bind("cut.maskMoney",n),t.bind("paste.maskMoney",n),t.bind("mask.maskMoney",h)})}};$.fn.maskMoney=function(b){return a[b]?a[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void $.error("Method "+b+" does not exist on jQuery.maskMoney"):a.init.apply(this,arguments)}}(window.jQuery||window.Zepto); \ No newline at end of file diff --git a/src/jquery.maskMoney.js b/src/jquery.maskMoney.js index 889ac5f..86e9e1d 100644 --- a/src/jquery.maskMoney.js +++ b/src/jquery.maskMoney.js @@ -371,7 +371,7 @@ length; if (input.setSelectionRange) { length = $input.val().length; - input.setSelectionRange(length, length); + //input.setSelectionRange(length, length); } else { $input.val($input.val()); } From adce922382c87b5cd2ba6d211755bf0d24b0e2d0 Mon Sep 17 00:00:00 2001 From: David Lynch Date: Sat, 12 Sep 2015 17:00:21 -0400 Subject: [PATCH 2/2] Update version --- dist/jquery.maskMoney.js | 4 ++-- dist/jquery.maskMoney.min.js | 4 ++-- maskMoney.jquery.json | 6 +++--- package.json | 17 ++++------------- 4 files changed, 11 insertions(+), 20 deletions(-) diff --git a/dist/jquery.maskMoney.js b/dist/jquery.maskMoney.js index 5c28e83..b835dbb 100644 --- a/dist/jquery.maskMoney.js +++ b/dist/jquery.maskMoney.js @@ -1,7 +1,7 @@ /* - * jquery-maskmoney - v3.0.2 + * jquery-maskmoney - v3.0.3 * jQuery plugin to mask data entry in the input text in the form of money (currency) - * https://github.com/plentz/jquery-maskmoney + * https://github.com/DavidBLynch/jquery-maskmoney * * Made by Diego Plentz * Under MIT License (https://raw.github.com/plentz/jquery-maskmoney/master/LICENSE) diff --git a/dist/jquery.maskMoney.min.js b/dist/jquery.maskMoney.min.js index 9139b9c..c5136e3 100644 --- a/dist/jquery.maskMoney.min.js +++ b/dist/jquery.maskMoney.min.js @@ -1,7 +1,7 @@ /* - * jquery-maskmoney - v3.0.2 + * jquery-maskmoney - v3.0.3 * jQuery plugin to mask data entry in the input text in the form of money (currency) - * https://github.com/plentz/jquery-maskmoney + * https://github.com/DavidBLynch/jquery-maskmoney * * Made by Diego Plentz * Under MIT License (https://raw.github.com/plentz/jquery-maskmoney/master/LICENSE) diff --git a/maskMoney.jquery.json b/maskMoney.jquery.json index 4e014d9..efee953 100644 --- a/maskMoney.jquery.json +++ b/maskMoney.jquery.json @@ -1,6 +1,6 @@ { "name": "maskMoney", - "version": "3.0.2", + "version": "3.0.3", "title": "jQuery maskMoney", "author": { "name": "Diego Plentz", @@ -26,6 +26,6 @@ "docs": "http://github.com/plentz/jquery-maskmoney", "demo": "http://plentz.github.com/jquery-maskmoney", "download": "https://raw.github.com/plentz/jquery-maskmoney/master/dist/jquery.maskMoney.min.js", - "bugs": "https://github.com/plentz/jquery-maskmoney/issues", - "homepage": "https://github.com/plentz/jquery-maskmoney" + "bugs": "https://github.com/DavidBLynch/jquery-maskmoney/issues", + "homepage": "https://github.com/DavidBLynch/jquery-maskmoney" } \ No newline at end of file diff --git a/package.json b/package.json index eff9dc9..88b4fd5 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,13 @@ "name": "jquery-maskmoney", "filename": "jquery.maskMoney.min.js", "description": "jQuery plugin to mask data entry in the input text in the form of money (currency)", - "version": "3.0.2", - "homepage": "https://github.com/plentz/jquery-maskmoney", + "version": "3.0.3", + "homepage": "https://github.com/DavidBLynch/jquery-maskmoney", "repository": { "type": "git", - "url": "https://github.com/plentz/jquery-maskmoney.git" + "url": "https://github.com/DavidBLynch/jquery-maskmoney.git" }, - "bugs": "https://github.com/plentz/jquery-maskmoney/issues", + "bugs": "https://github.com/DavidBLynch/jquery-maskmoney/issues", "author": { "name": "Diego Plentz", "email": "diego@plentz.org", @@ -17,15 +17,6 @@ "dependencies": { "jquery": ">=1.6" }, - "npmName": "jquery-maskmoney", - "npmFileMap": [ - { - "basePath": "/dist/", - "files": [ - "jquery.maskMoney.min.js" - ] - } - ], "devDependencies": { "amdefine": "latest", "grunt": "latest",