|
@@ -257,6 +257,7 @@
|
|
|
Inputmask.keyCode = {
|
|
Inputmask.keyCode = {
|
|
|
ALT: 18,
|
|
ALT: 18,
|
|
|
BACKSPACE: 8,
|
|
BACKSPACE: 8,
|
|
|
|
|
+ BACKSPACE_SAFARI: 127,
|
|
|
CAPS_LOCK: 20,
|
|
CAPS_LOCK: 20,
|
|
|
COMMA: 188,
|
|
COMMA: 188,
|
|
|
COMMAND: 91,
|
|
COMMAND: 91,
|
|
@@ -286,7 +287,8 @@
|
|
|
SPACE: 32,
|
|
SPACE: 32,
|
|
|
TAB: 9,
|
|
TAB: 9,
|
|
|
UP: 38,
|
|
UP: 38,
|
|
|
- WINDOWS: 91
|
|
|
|
|
|
|
+ WINDOWS: 91,
|
|
|
|
|
+ X: 88
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
//helper functions
|
|
//helper functions
|
|
@@ -305,7 +307,7 @@
|
|
|
function isElementTypeSupported(input, opts) {
|
|
function isElementTypeSupported(input, opts) {
|
|
|
var elementType = input.getAttribute("type");
|
|
var elementType = input.getAttribute("type");
|
|
|
var isSupported = (input.tagName === "INPUT" && $.inArray(elementType, opts.supportsInputType) !== -1) || input.isContentEditable || input.tagName === "TEXTAREA";
|
|
var isSupported = (input.tagName === "INPUT" && $.inArray(elementType, opts.supportsInputType) !== -1) || input.isContentEditable || input.tagName === "TEXTAREA";
|
|
|
- if (!isSupported) {
|
|
|
|
|
|
|
+ if (!isSupported && input.tagName === "INPUT") {
|
|
|
var el = document.createElement("input");
|
|
var el = document.createElement("input");
|
|
|
el.setAttribute("type", elementType);
|
|
el.setAttribute("type", elementType);
|
|
|
isSupported = el.type === "text"; //apply mask only if the type is not natively supported
|
|
isSupported = el.type === "text"; //apply mask only if the type is not natively supported
|
|
@@ -738,7 +740,6 @@
|
|
|
function maskScope(actionObj, maskset, opts) {
|
|
function maskScope(actionObj, maskset, opts) {
|
|
|
var isRTL = false,
|
|
var isRTL = false,
|
|
|
undoValue,
|
|
undoValue,
|
|
|
- compositionData,
|
|
|
|
|
el, $el,
|
|
el, $el,
|
|
|
skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround
|
|
skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround
|
|
|
skipInputEvent = false, //skip when triggered from within inputmask
|
|
skipInputEvent = false, //skip when triggered from within inputmask
|
|
@@ -1779,6 +1780,7 @@
|
|
|
|
|
|
|
|
var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
|
|
var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
|
|
|
input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0;
|
|
input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0;
|
|
|
|
|
+
|
|
|
if (!mobile && opts.insertMode === false && begin === end) end++; //set visualization for insert/overwrite mode
|
|
if (!mobile && opts.insertMode === false && begin === end) end++; //set visualization for insert/overwrite mode
|
|
|
if (input.setSelectionRange) {
|
|
if (input.setSelectionRange) {
|
|
|
input.selectionStart = begin;
|
|
input.selectionStart = begin;
|
|
@@ -1816,7 +1818,7 @@
|
|
|
}
|
|
}
|
|
|
} else if (document.selection && document.selection.createRange) {
|
|
} else if (document.selection && document.selection.createRange) {
|
|
|
range = document.selection.createRange();
|
|
range = document.selection.createRange();
|
|
|
- begin = 0 - range.duplicate().moveStart("character", -100000);
|
|
|
|
|
|
|
+ begin = 0 - range.duplicate().moveStart("character", -input.inputmask._valueGet().length);
|
|
|
end = begin + range.text.length;
|
|
end = begin + range.text.length;
|
|
|
}
|
|
}
|
|
|
/*eslint-disable consistent-return */
|
|
/*eslint-disable consistent-return */
|
|
@@ -1894,7 +1896,6 @@
|
|
|
(end - begin) > 1 || ((end - begin) === 1 && opts.insertMode);
|
|
(end - begin) > 1 || ((end - begin) === 1 && opts.insertMode);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- var inComposition = false;
|
|
|
|
|
var EventRuler = {
|
|
var EventRuler = {
|
|
|
on: function(input, eventName, eventHandler) {
|
|
on: function(input, eventName, eventHandler) {
|
|
|
var ev = function(e) {
|
|
var ev = function(e) {
|
|
@@ -1908,8 +1909,8 @@
|
|
|
} else {
|
|
} else {
|
|
|
switch (e.type) {
|
|
switch (e.type) {
|
|
|
case "input":
|
|
case "input":
|
|
|
- if (skipInputEvent === true || inComposition === true) {
|
|
|
|
|
- skipInputEvent = inComposition;
|
|
|
|
|
|
|
+ if (skipInputEvent === true) {
|
|
|
|
|
+ skipInputEvent = false;
|
|
|
return e.preventDefault();
|
|
return e.preventDefault();
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
@@ -1917,26 +1918,12 @@
|
|
|
//Safari 5.1.x - modal dialog fires keypress twice workaround
|
|
//Safari 5.1.x - modal dialog fires keypress twice workaround
|
|
|
skipKeyPressEvent = false;
|
|
skipKeyPressEvent = false;
|
|
|
skipInputEvent = false;
|
|
skipInputEvent = false;
|
|
|
- inComposition = false;
|
|
|
|
|
break;
|
|
break;
|
|
|
case "keypress":
|
|
case "keypress":
|
|
|
if (skipKeyPressEvent === true) {
|
|
if (skipKeyPressEvent === true) {
|
|
|
return e.preventDefault();
|
|
return e.preventDefault();
|
|
|
}
|
|
}
|
|
|
skipKeyPressEvent = true;
|
|
skipKeyPressEvent = true;
|
|
|
-
|
|
|
|
|
- break;
|
|
|
|
|
- case "compositionstart":
|
|
|
|
|
- inComposition = true;
|
|
|
|
|
- break;
|
|
|
|
|
- case "compositionupdate":
|
|
|
|
|
- skipInputEvent = true;
|
|
|
|
|
- break;
|
|
|
|
|
- case "compositionend":
|
|
|
|
|
- inComposition = false;
|
|
|
|
|
- break;
|
|
|
|
|
- case "cut":
|
|
|
|
|
- skipInputEvent = true;
|
|
|
|
|
break;
|
|
break;
|
|
|
case "click":
|
|
case "click":
|
|
|
if (iemobile) {
|
|
if (iemobile) {
|
|
@@ -1949,7 +1936,12 @@
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
// console.log("executed " + e.type);
|
|
// console.log("executed " + e.type);
|
|
|
- return eventHandler.apply(this, arguments);
|
|
|
|
|
|
|
+ var returnVal = eventHandler.apply(this, arguments);
|
|
|
|
|
+ if (returnVal === false) {
|
|
|
|
|
+ e.preventDefault();
|
|
|
|
|
+ e.stopPropagation();
|
|
|
|
|
+ }
|
|
|
|
|
+ return returnVal;
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
//keep instance of the event
|
|
//keep instance of the event
|
|
@@ -2171,9 +2163,8 @@
|
|
|
pos = caret(input);
|
|
pos = caret(input);
|
|
|
|
|
|
|
|
//backspace, delete, and escape get special treatment
|
|
//backspace, delete, and escape get special treatment
|
|
|
- if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || (iphone && k === 127) || (e.ctrlKey && k === 88 && !isInputEventSupported("cut"))) { //backspace/delete
|
|
|
|
|
|
|
+ if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || (iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI) || (e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut"))) { //backspace/delete
|
|
|
e.preventDefault(); //stop default action but allow propagation
|
|
e.preventDefault(); //stop default action but allow propagation
|
|
|
- if (k === 88) undoValue = getBuffer().join("");
|
|
|
|
|
handleRemove(input, k, pos);
|
|
handleRemove(input, k, pos);
|
|
|
writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(""));
|
|
writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(""));
|
|
|
if (input.inputmask._valueGet() === getBufferTemplate().join("")) {
|
|
if (input.inputmask._valueGet() === getBufferTemplate().join("")) {
|
|
@@ -2358,24 +2349,22 @@
|
|
|
if ($.isFunction(opts.onBeforePaste)) {
|
|
if ($.isFunction(opts.onBeforePaste)) {
|
|
|
pasteValue = opts.onBeforePaste(inputValue, opts);
|
|
pasteValue = opts.onBeforePaste(inputValue, opts);
|
|
|
if (pasteValue === false) {
|
|
if (pasteValue === false) {
|
|
|
- e.preventDefault();
|
|
|
|
|
- return false;
|
|
|
|
|
|
|
+ return e.preventDefault();
|
|
|
}
|
|
}
|
|
|
if (!pasteValue) {
|
|
if (!pasteValue) {
|
|
|
pasteValue = inputValue;
|
|
pasteValue = inputValue;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
checkVal(input, false, false, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split(""));
|
|
checkVal(input, false, false, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split(""));
|
|
|
- writeBuffer(input, getBuffer(), undefined, e, true);
|
|
|
|
|
- $input.trigger("click");
|
|
|
|
|
|
|
+ writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, true);
|
|
|
if (isComplete(getBuffer()) === true) {
|
|
if (isComplete(getBuffer()) === true) {
|
|
|
$input.trigger("complete");
|
|
$input.trigger("complete");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return false;
|
|
|
|
|
|
|
+ return e.preventDefault();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function inputFallBackEvent(e) { //fallback when keypress & compositionevents fail
|
|
|
|
|
|
|
+ function inputFallBackEvent(e) { //fallback when keypress fails
|
|
|
var input = this,
|
|
var input = this,
|
|
|
inputValue = input.inputmask._valueGet();
|
|
inputValue = input.inputmask._valueGet();
|
|
|
|
|
|
|
@@ -2420,43 +2409,6 @@
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- function compositionStartEvent(e) {
|
|
|
|
|
- var ev = e.originalEvent || e;
|
|
|
|
|
- undoValue = getBuffer().join("");
|
|
|
|
|
- if (compositionData === "" || ev.data.indexOf(compositionData) !== 0) {
|
|
|
|
|
- // compositionCaretPos = caret(input);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- function compositionUpdateEvent(e) {
|
|
|
|
|
- var input = this,
|
|
|
|
|
- ev = e.originalEvent || e,
|
|
|
|
|
- inputBuffer = getBuffer().join("");
|
|
|
|
|
- if (ev.data.indexOf(compositionData) === 0) {
|
|
|
|
|
- resetMaskSet();
|
|
|
|
|
- getMaskSet().p = seekNext(-1); //needs check
|
|
|
|
|
- }
|
|
|
|
|
- var newData = ev.data;
|
|
|
|
|
- for (var i = 0; i < newData.length; i++) {
|
|
|
|
|
- var keypress = new $.Event("keypress");
|
|
|
|
|
- keypress.which = newData.charCodeAt(i);
|
|
|
|
|
- skipKeyPressEvent = false;
|
|
|
|
|
- ignorable = false;
|
|
|
|
|
- keypressEvent.call(input, keypress, true, false, false, getMaskSet().p); //needs check
|
|
|
|
|
- }
|
|
|
|
|
- if (inputBuffer !== getBuffer().join("")) {
|
|
|
|
|
- setTimeout(function() {
|
|
|
|
|
- var forwardPosition = getMaskSet().p;
|
|
|
|
|
- writeBuffer(input, getBuffer(), opts.numericInput ? seekPrevious(forwardPosition) : forwardPosition);
|
|
|
|
|
- }, 0);
|
|
|
|
|
- }
|
|
|
|
|
- compositionData = ev.data;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- function compositionEndEvent(e) {
|
|
|
|
|
- //pickup by inputfallback
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
function setValueEvent(e) {
|
|
function setValueEvent(e) {
|
|
|
var input = this,
|
|
var input = this,
|
|
|
value = input.inputmask._valueGet();
|
|
value = input.inputmask._valueGet();
|
|
@@ -2690,11 +2642,6 @@
|
|
|
EventRuler.on(el, "keydown", keydownEvent);
|
|
EventRuler.on(el, "keydown", keydownEvent);
|
|
|
EventRuler.on(el, "keypress", keypressEvent);
|
|
EventRuler.on(el, "keypress", keypressEvent);
|
|
|
EventRuler.on(el, "input", inputFallBackEvent);
|
|
EventRuler.on(el, "input", inputFallBackEvent);
|
|
|
- if (!mobile) {
|
|
|
|
|
- EventRuler.on(el, "compositionstart", compositionStartEvent);
|
|
|
|
|
- EventRuler.on(el, "compositionupdate", compositionUpdateEvent);
|
|
|
|
|
- EventRuler.on(el, "compositionend", compositionEndEvent);
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
EventRuler.on(el, "setvalue", setValueEvent);
|
|
EventRuler.on(el, "setvalue", setValueEvent);
|
|
|
|
|
|