|
|
@@ -3,7 +3,7 @@ Input Mask plugin for jquery
|
|
|
http://github.com/RobinHerbots/jquery.inputmask
|
|
|
Copyright (c) 2010 Robin Herbots
|
|
|
Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
|
|
|
-Version: 0.2.4h
|
|
|
+Version: 0.2.5
|
|
|
|
|
|
This plugin is based on the masked input plugin written by Josh Bush (digitalbush.com)
|
|
|
*/
|
|
|
@@ -206,14 +206,16 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
//apply offset
|
|
|
if (tests[testPos].optionality) {
|
|
|
firstMaskPosition = isFirstMaskOfBlock(testPos);
|
|
|
- if (firstMaskPosition || tests[testPos].newBlockMarker) {
|
|
|
- clearOffsets(testPos - (firstMaskPosition ? firstMaskPosition : 0), testPos + tests[testPos].offset);
|
|
|
- }
|
|
|
- else {
|
|
|
- var newPos = pos + tests[testPos].offset;
|
|
|
- // while (newPos <= getMaskLength() && !isMask(newPos)) { newPos++; };
|
|
|
- testPos = determineTestPosition(newPos);
|
|
|
- firstMaskPosition = isFirstMaskOfBlock(testPos);
|
|
|
+ if (tests[testPos].offset > 0) {
|
|
|
+ if (firstMaskPosition) {
|
|
|
+ clearOffsets(firstMaskPosition, firstMaskPosition + tests[firstMaskPosition].offset, buffer);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ var newPos = pos + tests[testPos].offset;
|
|
|
+ // while (newPos <= getMaskLength() && !isMask(newPos)) { newPos++; };
|
|
|
+ testPos = determineTestPosition(newPos);
|
|
|
+ firstMaskPosition = isFirstMaskOfBlock(testPos);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -229,8 +231,8 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
var testResult = tests[testPos].regex != null ? tests[testPos].regex.test(chrs) : false;
|
|
|
|
|
|
if (!testResult) {
|
|
|
- if (tests[testPos].optionality && (firstMaskPosition || tests[testPos].newBlockMarker)) {
|
|
|
- return isValid(seekNext(buffer, pos - (testPos - (firstMaskPosition ? firstMaskPosition : 0)), true), c, buffer)
|
|
|
+ if (tests[testPos].optionality && firstMaskPosition) {
|
|
|
+ return isValid(seekNext(buffer, pos - (testPos - firstMaskPosition), true), c, buffer)
|
|
|
}
|
|
|
}
|
|
|
return testResult;
|
|
|
@@ -248,7 +250,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
|
|
|
function isFirstMaskOfBlock(testPosition) {
|
|
|
if (!tests[testPosition].newBlockMarker)
|
|
|
- while (testPosition > 0 && !tests[--testPosition].newBlockMarker && tests[testPosition].regex == null) { }; //search marker in nonmask items
|
|
|
+ while (testPosition > 0 && !tests[testPosition - 1].newBlockMarker && tests[testPosition - 1].regex == null) { testPosition--; }; //search marker in nonmask items
|
|
|
|
|
|
return tests[testPosition].newBlockMarker ? testPosition : false;
|
|
|
}
|
|
|
@@ -257,10 +259,12 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
return pos % tests.length;
|
|
|
}
|
|
|
|
|
|
- function clearOffsets(start, end) {
|
|
|
+ function clearOffsets(start, end, buffer) {
|
|
|
for (var i = start; i < end && i < getMaskLength(); i++) {
|
|
|
tests[determineTestPosition(i)].offset = 0;
|
|
|
}
|
|
|
+ if (buffer)
|
|
|
+ SetReTargetPlaceHolder(buffer, start);
|
|
|
}
|
|
|
|
|
|
function getMaskLength() {
|
|
|
@@ -281,10 +285,11 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
for (var i = 0; i < offset; i++) {
|
|
|
tests[determineTestPosition(pos + i)].offset = offset;
|
|
|
}
|
|
|
+ SetReTargetPlaceHolder(buffer, pos);
|
|
|
}
|
|
|
position--;
|
|
|
}
|
|
|
- while (++position <= getMaskLength() && !isMask(position)) { SetReTargetPlaceHolder(buffer, position); };
|
|
|
+ while (++position <= getMaskLength() && !isMask(position)) { };
|
|
|
return position;
|
|
|
}
|
|
|
//these are needed to handle the non-greedy mask repetitions
|
|
|
@@ -313,20 +318,22 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
var test = tests[testPos];
|
|
|
if (test != undefined) {
|
|
|
if (test.optionality && test.offset > 0) {
|
|
|
- //fixme
|
|
|
var firstMaskPosition = isFirstMaskOfBlock(testPos);
|
|
|
if (firstMaskPosition && _numberOfRemovedElementsFromMask >= test.offset) {
|
|
|
- // buffer.splice(pos, 0, _buffer.slice(testPos, testPos + test.offset));
|
|
|
- // _numberOfRemovedElementsFromMask -= test.offset;
|
|
|
+ setBufferElement(buffer, pos, getBufferElement(_buffer, testPos));
|
|
|
+ $.each(_buffer.slice(testPos, testPos + test.offset), function() {
|
|
|
+ buffer.splice(pos++, 0, this.toString());
|
|
|
+ });
|
|
|
+ _numberOfRemovedElementsFromMask -= test.offset;
|
|
|
}
|
|
|
else {
|
|
|
var testedPosition = pos + test.offset;
|
|
|
setBufferElement(buffer, pos, getBufferElement(_buffer, determineTestPosition(testedPosition)));
|
|
|
- // if (testedPosition < buffer.length) {
|
|
|
- // //remove RetargetPosition
|
|
|
- // buffer.splice(pos + test.offset, test.offset);
|
|
|
- // _numberOfRemovedElementsFromMask += test.offset;
|
|
|
- // }
|
|
|
+ if (testedPosition < buffer.length) {
|
|
|
+ //remove RetargetPosition
|
|
|
+ buffer.splice(pos + test.offset, test.offset);
|
|
|
+ _numberOfRemovedElementsFromMask += test.offset;
|
|
|
+ }
|
|
|
}
|
|
|
} else setBufferElement(buffer, pos, getBufferElement(_buffer, testPos));
|
|
|
}
|
|
|
@@ -458,10 +465,18 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
if (isMask(i)) {
|
|
|
SetReTargetPlaceHolder(buffer, i);
|
|
|
var j = seekNext(buffer, i);
|
|
|
- if (j < getMaskLength() && isValid(i, getBufferElement(buffer, j), buffer)) {
|
|
|
- setBufferElement(buffer, i, getBufferElement(buffer, j));
|
|
|
- } else
|
|
|
- break;
|
|
|
+ var p = getBufferElement(buffer, j);
|
|
|
+ if (p != opts.placeholder) {
|
|
|
+ if (j < getMaskLength() && isValid(i, p, buffer)) {
|
|
|
+ setBufferElement(buffer, i, getBufferElement(buffer, j));
|
|
|
+ } else {
|
|
|
+ if (tests[i] && tests[i].newBlockMarker) {
|
|
|
+ clearOffsets(i, i + tests[i].offset, buffer);
|
|
|
+ }
|
|
|
+ if (isMask(i))
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else break;
|
|
|
} else
|
|
|
SetReTargetPlaceHolder(buffer, i);
|
|
|
}
|
|
|
@@ -478,12 +493,12 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
|
|
|
setBufferElement(buffer, i, c);
|
|
|
if (t != opts.placeholder) {
|
|
|
var j = seekNext(buffer, i);
|
|
|
-// if (!isMask(i + 1)) SetReTargetPlaceHolder(buffer, i + 1); //remark nonmask elements
|
|
|
+ // if (!isMask(i + 1)) SetReTargetPlaceHolder(buffer, i + 1); //remark nonmask elements
|
|
|
if (j < getMaskLength() && isValid(j, t, buffer))
|
|
|
c = t;
|
|
|
else {
|
|
|
if (tests[j] && tests[j].newBlockMarker) {
|
|
|
- clearOffsets(j, j + tests[j].offset);
|
|
|
+ clearOffsets(j, j + tests[j].offset, buffer);
|
|
|
}
|
|
|
if (isMask(j))
|
|
|
break;
|