|
|
@@ -156,53 +156,49 @@ var EventHandlers = {
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
- pasteEvent: function (e) {
|
|
|
- const inputmask = this.inputmask, opts = inputmask.opts;
|
|
|
-
|
|
|
- var input = this,
|
|
|
- inputValue = inputmask._valueGet(true),
|
|
|
- caretPos = caret.call(inputmask, input),
|
|
|
- tempValue;
|
|
|
-
|
|
|
- if (inputmask.isRTL) {
|
|
|
- tempValue = caretPos.end;
|
|
|
- caretPos.end = translatePosition.call(inputmask, caretPos.begin);
|
|
|
- caretPos.begin = translatePosition.call(inputmask, tempValue);
|
|
|
- }
|
|
|
+ pasteEvent: async function (e) {
|
|
|
+ function handlePaste(inputmask, input, inputValue, pastedValue, onBeforePaste) {
|
|
|
+ var caretPos = caret.call(inputmask, input, undefined, undefined, true);
|
|
|
+
|
|
|
+ var valueBeforeCaret = inputValue.substr(0, caretPos.begin),
|
|
|
+ valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
|
|
|
+
|
|
|
+ if (valueBeforeCaret == (inputmask.isRTL ? getBufferTemplate.call(inputmask).slice().reverse() : getBufferTemplate.call(inputmask)).slice(0, caretPos.begin).join("")) valueBeforeCaret = "";
|
|
|
+ if (valueAfterCaret == (inputmask.isRTL ? getBufferTemplate.call(inputmask).slice().reverse() : getBufferTemplate.call(inputmask)).slice(caretPos.end).join("")) valueAfterCaret = "";
|
|
|
+
|
|
|
+ pastedValue = valueBeforeCaret + pastedValue + valueAfterCaret;
|
|
|
+ if (inputmask.isRTL && opts.numericInput !== true) {
|
|
|
+ pastedValue = pastedValue.split("");
|
|
|
+ for (let c of getBufferTemplate.call(inputmask)) {
|
|
|
+ if (pastedValue[0] === c)
|
|
|
+ pastedValue.shift();
|
|
|
+ }
|
|
|
+ pastedValue = pastedValue.reverse().join("");
|
|
|
+ }
|
|
|
|
|
|
- var valueBeforeCaret = inputValue.substr(0, caretPos.begin),
|
|
|
- valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
|
|
|
-
|
|
|
- if (valueBeforeCaret == (inputmask.isRTL ? getBufferTemplate.call(inputmask).slice().reverse() : getBufferTemplate.call(inputmask)).slice(0, caretPos.begin).join("")) valueBeforeCaret = "";
|
|
|
- if (valueAfterCaret == (inputmask.isRTL ? getBufferTemplate.call(inputmask).slice().reverse() : getBufferTemplate.call(inputmask)).slice(caretPos.end).join("")) valueAfterCaret = "";
|
|
|
-
|
|
|
- if (window.clipboardData && window.clipboardData.getData) { // IE
|
|
|
- inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret;
|
|
|
- } else if (e.clipboardData && e.clipboardData.getData) {
|
|
|
- inputValue = valueBeforeCaret + e.clipboardData.getData("text/plain") + valueAfterCaret;
|
|
|
- } else {
|
|
|
- return true;
|
|
|
- } //allow native paste event as fallback ~ masking will continue by inputfallback
|
|
|
-
|
|
|
- var pasteValue = inputValue;
|
|
|
- if (inputmask.isRTL) {
|
|
|
- pasteValue = pasteValue.split("");
|
|
|
- for (let c of getBufferTemplate.call(inputmask)) {
|
|
|
- if (pasteValue[0] === c)
|
|
|
- pasteValue.shift();
|
|
|
+ var pasteValue = pastedValue;
|
|
|
+ if (typeof onBeforePaste === "function") {
|
|
|
+ pasteValue = onBeforePaste.call(inputmask, pasteValue, opts);
|
|
|
+ if (pasteValue === false) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (!pasteValue) {
|
|
|
+ pasteValue = inputValue;
|
|
|
+ }
|
|
|
}
|
|
|
- pasteValue = pasteValue.join("");
|
|
|
+ checkVal(input, true, false, pasteValue.toString().split(""), e);
|
|
|
}
|
|
|
- if (typeof opts.onBeforePaste === "function") {
|
|
|
- pasteValue = opts.onBeforePaste.call(inputmask, pasteValue, opts);
|
|
|
- if (pasteValue === false) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- if (!pasteValue) {
|
|
|
- pasteValue = inputValue;
|
|
|
- }
|
|
|
+
|
|
|
+ const input = this, inputmask = this.inputmask, opts = inputmask.opts;
|
|
|
+ var inputValue = inputmask._valueGet(true), pastedValue;
|
|
|
+
|
|
|
+ inputmask.skipInputEvent = true;
|
|
|
+ if (e.clipboardData && e.clipboardData.getData) {
|
|
|
+ pastedValue = e.clipboardData.getData("text/plain");
|
|
|
+ } else if (window.clipboardData && window.clipboardData.getData) { // IE
|
|
|
+ pastedValue = window.clipboardData.getData("Text");
|
|
|
}
|
|
|
- checkVal(input, true, false, pasteValue.toString().split(""), e);
|
|
|
+ handlePaste(inputmask, input, inputValue, pastedValue, opts.onBeforePaste);
|
|
|
e.preventDefault();
|
|
|
},
|
|
|
inputFallBackEvent: function (e) { //fallback when keypress is not triggered
|
|
|
@@ -409,7 +405,8 @@ var EventHandlers = {
|
|
|
//correct clipboardData
|
|
|
var clipData = inputmask.isRTL ? getBuffer.call(inputmask).slice(pos.end, pos.begin) : getBuffer.call(inputmask).slice(pos.begin, pos.end),
|
|
|
clipDataText = inputmask.isRTL ? clipData.reverse().join("") : clipData.join("");
|
|
|
- if (window.navigator && window.navigator.clipboard) window.navigator.clipboard.writeText(clipDataText);
|
|
|
+ if (window.navigator && window.navigator.clipboard)
|
|
|
+ window.navigator.clipboard.writeText(clipDataText);
|
|
|
else if (window.clipboardData && window.clipboardData.getData) { // IE
|
|
|
window.clipboardData.setData("Text", clipDataText);
|
|
|
}
|
|
|
@@ -455,8 +452,7 @@ var EventHandlers = {
|
|
|
|
|
|
nptValue = inputmask._valueGet(true);
|
|
|
if (inputmask.undoValue !== nptValue) {
|
|
|
- if (nptValue != "" || (inputmask.undoValue != getBufferTemplate.call(inputmask).join("") || (inputmask.undoValue == getBufferTemplate.call(inputmask).join("") && inputmask.maskset.validPositions.length > 0)))
|
|
|
- {
|
|
|
+ if (nptValue != "" || (inputmask.undoValue != getBufferTemplate.call(inputmask).join("") || (inputmask.undoValue == getBufferTemplate.call(inputmask).join("") && inputmask.maskset.validPositions.length > 0))) {
|
|
|
inputmask.undoValue = nptValue;
|
|
|
$input.trigger("change");
|
|
|
}
|