Browse Source

Paste does not work properly when using numericInput fix #1195

Robin Herbots 9 years ago
parent
commit
204af35bb2

+ 1 - 0
CHANGELOG.md

@@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
 - patchValueProperty - enable native value property patch on IE10/IE11
 
 ### Fixed
+- Paste does not work properly when using numericInput #1195
 - error occurs in safari 9.0.3 (11601.4.4) #1191
 - Can not clear value when select all and press BACKSPACE in some circumstance #1179
 - Email mask incorrectly including underscore #868 => allowed as not typed => result invalid

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.2.8-7",
+  "version": "3.2.8-8",
   "main": [
     "./dist/inputmask/inputmask.js"
   ],

+ 1 - 1
component.json

@@ -2,7 +2,7 @@
   "name": "jquery_inputmask",
   "repository": "robinherbots/jquery.inputmask",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-  "version": "3.2.8-7",
+  "version": "3.2.8-8",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "main": "./dist/jquery.inputmask.bundle.js",
   "scripts": [

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
   "name": "robinherbots/jquery.inputmask",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-  "version": "3.2.8-7",
+  "version": "3.2.8-8",
   "type": "library",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "homepage": "http://robinherbots.github.io/jquery.inputmask",

+ 1 - 1
dist/inputmask/inputmask.date.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/inputmask.dependencyLib.jquery.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery")) : factory(jQuery);

+ 1 - 1
dist/inputmask/inputmask.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 11 - 8
dist/inputmask/inputmask.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery")) : factory(window.dependencyLib || jQuery);
@@ -855,7 +855,7 @@
             function installNativeValueSetFallback(npt) {
                 EventRuler.on(npt, "mouseenter", function(event) {
                     var $input = $(this), input = this, value = input.inputmask._valueGet();
-                    value !== getBuffer().join("") && getLastValidPosition() > 0 && $input.trigger("setvalue");
+                    value !== getBuffer().join("") && $input.trigger("setvalue");
                 });
             }
             var valueGet, valueSet;
@@ -992,9 +992,12 @@
             }
         }
         function pasteEvent(e) {
-            var input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input), valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
-            valueBeforeCaret === getBufferTemplate().slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), 
-            valueAfterCaret === getBufferTemplate().slice(caretPos.end).join("") && (valueAfterCaret = ""), 
+            var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
+            isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
+            var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
+            valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), 
+            valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""), 
+            isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), 
             window.clipboardData && window.clipboardData.getData ? inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret : ev.clipboardData && ev.clipboardData.getData && (inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret);
             var pasteValue = inputValue;
             if ($.isFunction(opts.onBeforePaste)) {
@@ -1128,12 +1131,12 @@
             EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared), 
             EventRuler.on(el, "keydown", keydownEvent), EventRuler.on(el, "keypress", keypressEvent), 
             EventRuler.on(el, "input", inputFallBackEvent)), EventRuler.on(el, "setvalue", setValueEvent), 
-            "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1) {
+            "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el) {
                 var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();
                 checkVal(el, !0, !1, initialValue.split(""));
                 var buffer = getBuffer().slice();
                 undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), 
-                opts.clearMaskOnLostFocus && (buffer.join("") === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
+                opts.clearMaskOnLostFocus && document.activeElement !== el && (buffer.join("") === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
                 writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
             }
         }
@@ -1223,7 +1226,7 @@
             return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
 
           case "getemptymask":
-            return getBufferTemplate();
+            return getBufferTemplate().join("");
 
           case "remove":
             el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts, 

+ 1 - 1
dist/inputmask/inputmask.numeric.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/inputmask.phone.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/inputmask.regex.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/jquery.inputmask.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery, window.Inputmask);

+ 11 - 8
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function($) {
     function Inputmask(alias, options) {
@@ -853,7 +853,7 @@
             function installNativeValueSetFallback(npt) {
                 EventRuler.on(npt, "mouseenter", function(event) {
                     var $input = $(this), input = this, value = input.inputmask._valueGet();
-                    value !== getBuffer().join("") && getLastValidPosition() > 0 && $input.trigger("setvalue");
+                    value !== getBuffer().join("") && $input.trigger("setvalue");
                 });
             }
             var valueGet, valueSet;
@@ -990,9 +990,12 @@
             }
         }
         function pasteEvent(e) {
-            var input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input), valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
-            valueBeforeCaret === getBufferTemplate().slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), 
-            valueAfterCaret === getBufferTemplate().slice(caretPos.end).join("") && (valueAfterCaret = ""), 
+            var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
+            isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
+            var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
+            valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), 
+            valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""), 
+            isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), 
             window.clipboardData && window.clipboardData.getData ? inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret : ev.clipboardData && ev.clipboardData.getData && (inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret);
             var pasteValue = inputValue;
             if ($.isFunction(opts.onBeforePaste)) {
@@ -1126,12 +1129,12 @@
             EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared), 
             EventRuler.on(el, "keydown", keydownEvent), EventRuler.on(el, "keypress", keypressEvent), 
             EventRuler.on(el, "input", inputFallBackEvent)), EventRuler.on(el, "setvalue", setValueEvent), 
-            "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1) {
+            "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el) {
                 var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();
                 checkVal(el, !0, !1, initialValue.split(""));
                 var buffer = getBuffer().slice();
                 undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), 
-                opts.clearMaskOnLostFocus && (buffer.join("") === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
+                opts.clearMaskOnLostFocus && document.activeElement !== el && (buffer.join("") === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
                 writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
             }
         }
@@ -1221,7 +1224,7 @@
             return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
 
           case "getemptymask":
-            return getBufferTemplate();
+            return getBufferTemplate().join("");
 
           case "remove":
             el = actionObj.el, $el = $(el), maskset = el.inputmask.maskset, opts = el.inputmask.opts, 

File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.date.extensions.min.js


+ 1 - 1
dist/min/inputmask/inputmask.dependencyLib.jquery.min.js

@@ -3,6 +3,6 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.8-7
+* Version: 3.2.8-8
 */
 !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return window.dependencyLib=a,a});

File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.extensions.min.js


File diff suppressed because it is too large
+ 3 - 3
dist/min/inputmask/inputmask.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.numeric.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.phone.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.regex.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/jquery.inputmask.min.js


File diff suppressed because it is too large
+ 4 - 4
dist/min/jquery.inputmask.bundle.min.js


+ 16 - 4
js/inputmask.js

@@ -2050,7 +2050,7 @@
 						var $input = $(this),
 							input = this,
 							value = input.inputmask._valueGet();
-						if (value !== getBuffer().join("") /*&& getLastValidPosition() > 0*/) {
+						if (value !== getBuffer().join("") /*&& getLastValidPosition() > 0*/ ) {
 							$input.trigger("setvalue");
 						}
 					});
@@ -2356,13 +2356,25 @@
 					ev = e.originalEvent || e,
 					$input = $(input),
 					inputValue = input.inputmask._valueGet(true),
-					caretPos = caret(input);
+					caretPos = caret(input),
+					tempValue;
+
+				if (isRTL) {
+					tempValue = caretPos.end;
+					caretPos.end = caretPos.begin;
+					caretPos.begin = tempValue;
+				}
 
 				var valueBeforeCaret = inputValue.substr(0, caretPos.begin),
 					valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
 
-				if (valueBeforeCaret === getBufferTemplate().slice(0, caretPos.begin).join("")) valueBeforeCaret = "";
-				if (valueAfterCaret === getBufferTemplate().slice(caretPos.end).join("")) valueAfterCaret = "";
+				if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("")) valueBeforeCaret = "";
+				if (valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("")) valueAfterCaret = "";
+				if (isRTL) {
+					tempValue = valueBeforeCaret;
+					valueBeforeCaret = valueAfterCaret;
+					valueAfterCaret = tempValue;
+				}
 
 				if (window.clipboardData && window.clipboardData.getData) { // IE
 					inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret;

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.2.8-7",
+  "version": "3.2.8-8",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
   "main": "./dist/inputmask/jquery.inputmask.js",
   "files": [

+ 2 - 2
qunit/config.js

@@ -7,7 +7,7 @@ require.config({
 		// "inputmask.dependencyLib": "../dist/inputmask/inputmask.dependencyLib.jquery",
 		// "inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib",
 		"inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib.jqlite",
-		// "inputmask": "../dist/inputmask/inputmask"
-		"inputmask": "../js/inputmask"
+		"inputmask": "../dist/inputmask/inputmask"
+		// "inputmask": "../js/inputmask"
 	}
 });

+ 295 - 277
qunit/tests_paste.js

@@ -11,281 +11,299 @@ define([
 	"simulator"
 ], function(qunit, $, Inputmask) {
 
-qunit.module("Paste value");
-asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"+79114041112\"", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+7 (999) 999-99-99").mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("+79114041112");
-
-	setTimeout(function() {
-		equal(testmask.value, "+7 (911) 404-11-12", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-
-});
-asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"+7 (9114041112___)\"", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+7 (999) 999-99-99").mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("+7 (9114041112___)");
-
-	setTimeout(function() {
-		equal(testmask.value, "+7 (911) 404-11-12", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-
-});
-
-asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"0079114041112\" - monoblaine", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+7 (999) 999-99-99", {
-		onBeforePaste: function(pastedValue) {
-			//just simplistic for the test ;-)
-			var strippedValue = pastedValue.substr(3);
-			return strippedValue;
-		}
-	}).mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("0079114041112");
-
-	setTimeout(function() {
-		equal(testmask.value, "+7 (911) 404-11-12", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-
-});
-
-asyncTest("inputmask(\"+32(999)99-99-99\", { nojumps: true, nojumpsThreshold: 4 }) ~ paste \"+32(123)12-12-12\"", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+32(999)99-99-99", {
-		nojumps: true,
-		nojumpsThreshold: 4
-	}).mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("+32(123)12-12-12");
-
-	setTimeout(function() {
-		equal(testmask.value, "+32(123)12-12-12", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-
-asyncTest("inputmask(\"+32(999)99-99-99\", { nojumps: true, nojumpsThreshold: 4 }) ~ paste \"(123)12-12-12\"", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+32(999)99-99-99", {
-		nojumps: true,
-		nojumpsThreshold: 4
-	}).mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("(123)12-12-12");
-
-	setTimeout(function() {
-		equal(testmask.value, "+32(123)12-12-12", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("inputmask(\"+32(999)99-99-99\", { nojumps: true, nojumpsThreshold: 4 }) ~ paste \"+32473890428\"", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+32(999)99-99-99", {
-		nojumps: true,
-		nojumpsThreshold: 4
-	}).mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("+32473890428");
-
-	setTimeout(function() {
-		equal(testmask.value, "+32(473)89-04-28", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("inputmask(\"+31 9999999999\") ~ paste \"3112345678\" - jason16v", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+31 9999999999").mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("3112345678");
-
-	setTimeout(function() {
-		equal(testmask.value, "+31 3112345678", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("inputmask(\"+31 9999999999\") ~ paste \"+3112345678\" - jason16v", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("+31 9999999999").mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("+3112345678");
-
-	setTimeout(function() {
-		equal(testmask.value, "+31 12345678__", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("99.999.999/9999-99 numericInput ~ paste __-____/..__79100085302751__-____/..__ - imbelo", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask({
-		"mask": "99.999.999/9999-99",
-		"numericInput": true
-	}).mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("__-____/..__79100085302751__-____/..__");
-
-	setTimeout(function() {
-		equal(testmask.value, "79.100.085/3027-51", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("currency ~ $123.22 - sjk07", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask('currency').mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("$123.22");
-
-	setTimeout(function() {
-		equal(testmask.value, "$ 123.22", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("currency ~ $-123.22 - sjk07", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask('currency').mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("$-123.22");
-
-	setTimeout(function() {
-		equal(testmask.value, "$ -123.22", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("currency ~ 1000.00 - sjk07", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask('currency').mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("1000.00");
-
-	setTimeout(function() {
-		equal(testmask.value, "$ 1,000.00", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("currency ~ -1000.00 - sjk07", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask('currency').mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("-1000.00");
-
-	setTimeout(function() {
-		equal(testmask.value, "$ -1,000.00", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("currency ~ $1000.00 - sjk07", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask('currency').mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("$1000.00");
-
-	setTimeout(function() {
-		equal(testmask.value, "$ 1,000.00", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("currency ~ $-1000.00 - sjk07", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask('currency').mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("$-1000.00");
-
-	setTimeout(function() {
-		equal(testmask.value, "$ -1,000.00", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("currency ~ 000.02 - sjk07", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask('currency').mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("000.02");
-
-	setTimeout(function() {
-		equal(testmask.value, "$ 0.02", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
-asyncTest("02.999.999 ~ paste 02.024.900 - tnavarra", function() {
-	var $fixture = $("#qunit-fixture");
-	$fixture.append('<input type="text" id="testmask" />');
-	var testmask = document.getElementById("testmask");
-	Inputmask("02.999.999").mask(testmask);
-	testmask.focus();
-	$("#testmask").paste("02.024.900");
-
-	setTimeout(function() {
-		equal(testmask.value, "02.024.900", "Result " + testmask.value);
-		start();
-		$("#testmask").remove();
-	}, 0);
-});
-
+	qunit.module("Paste value");
+	asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"+79114041112\"", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+7 (999) 999-99-99").mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("+79114041112");
+
+		setTimeout(function() {
+			equal(testmask.value, "+7 (911) 404-11-12", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+
+	});
+	asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"+7 (9114041112___)\"", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+7 (999) 999-99-99").mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("+7 (9114041112___)");
+
+		setTimeout(function() {
+			equal(testmask.value, "+7 (911) 404-11-12", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+
+	});
+
+	asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"0079114041112\" - monoblaine", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+7 (999) 999-99-99", {
+			onBeforePaste: function(pastedValue) {
+				//just simplistic for the test ;-)
+				var strippedValue = pastedValue.substr(3);
+				return strippedValue;
+			}
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("0079114041112");
+
+		setTimeout(function() {
+			equal(testmask.value, "+7 (911) 404-11-12", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+
+	});
+
+	asyncTest("inputmask(\"+32(999)99-99-99\", { nojumps: true, nojumpsThreshold: 4 }) ~ paste \"+32(123)12-12-12\"", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+32(999)99-99-99", {
+			nojumps: true,
+			nojumpsThreshold: 4
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("+32(123)12-12-12");
+
+		setTimeout(function() {
+			equal(testmask.value, "+32(123)12-12-12", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+
+	asyncTest("inputmask(\"+32(999)99-99-99\", { nojumps: true, nojumpsThreshold: 4 }) ~ paste \"(123)12-12-12\"", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+32(999)99-99-99", {
+			nojumps: true,
+			nojumpsThreshold: 4
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("(123)12-12-12");
+
+		setTimeout(function() {
+			equal(testmask.value, "+32(123)12-12-12", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("inputmask(\"+32(999)99-99-99\", { nojumps: true, nojumpsThreshold: 4 }) ~ paste \"+32473890428\"", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+32(999)99-99-99", {
+			nojumps: true,
+			nojumpsThreshold: 4
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("+32473890428");
+
+		setTimeout(function() {
+			equal(testmask.value, "+32(473)89-04-28", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("inputmask(\"+31 9999999999\") ~ paste \"3112345678\" - jason16v", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+31 9999999999").mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("3112345678");
+
+		setTimeout(function() {
+			equal(testmask.value, "+31 3112345678", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("inputmask(\"+31 9999999999\") ~ paste \"+3112345678\" - jason16v", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("+31 9999999999").mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("+3112345678");
+
+		setTimeout(function() {
+			equal(testmask.value, "+31 12345678__", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("99.999.999/9999-99 numericInput ~ paste __-____/..__79100085302751__-____/..__ - imbelo", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask({
+			"mask": "99.999.999/9999-99",
+			"numericInput": true
+		}).mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("__-____/..__79100085302751__-____/..__");
+
+		setTimeout(function() {
+			equal(testmask.value, "79.100.085/3027-51", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("currency ~ $123.22 - sjk07", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask('currency').mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("$123.22");
+
+		setTimeout(function() {
+			equal(testmask.value, "$ 123.22", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("currency ~ $-123.22 - sjk07", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask('currency').mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("$-123.22");
+
+		setTimeout(function() {
+			equal(testmask.value, "$ -123.22", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("currency ~ 1000.00 - sjk07", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask('currency').mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("1000.00");
+
+		setTimeout(function() {
+			equal(testmask.value, "$ 1,000.00", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("currency ~ -1000.00 - sjk07", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask('currency').mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("-1000.00");
+
+		setTimeout(function() {
+			equal(testmask.value, "$ -1,000.00", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("currency ~ $1000.00 - sjk07", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask('currency').mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("$1000.00");
+
+		setTimeout(function() {
+			equal(testmask.value, "$ 1,000.00", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("currency ~ $-1000.00 - sjk07", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask('currency').mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("$-1000.00");
+
+		setTimeout(function() {
+			equal(testmask.value, "$ -1,000.00", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("currency ~ 000.02 - sjk07", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask('currency').mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("000.02");
+
+		setTimeout(function() {
+			equal(testmask.value, "$ 0.02", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("02.999.999 ~ paste 02.024.900 - tnavarra", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("02.999.999").mask(testmask);
+		testmask.focus();
+		$("#testmask").paste("02.024.900");
+
+		setTimeout(function() {
+			equal(testmask.value, "02.024.900", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
+
+	asyncTest("R9999999999 ~ paste 1234567890 - s-a", function() {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("R9999999999", {
+			"placeholder": "0",
+			"showMaskOnFocus": false,
+			"numericInput": true
+		}).mask(testmask);
+		$("#testmask").trigger("click");
+		$("#testmask").paste("1234567890");
+
+		setTimeout(function() {
+			equal(testmask.value, "R1234567890", "Result " + testmask.value);
+			start();
+			$("#testmask").remove();
+		}, 0);
+	});
 });