Skip to content

Commit c836559

Browse files
committed
Bit of cleanup for digitalBush#245
1 parent 2d79c1b commit c836559

File tree

3 files changed

+77
-60
lines changed

3 files changed

+77
-60
lines changed

dist/jquery.maskedinput.js

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
jQuery Masked Input Plugin
3-
Copyright (c) 2007 - 2013 Josh Bush (digitalbush.com)
3+
Copyright (c) 2007 - 2014 Josh Bush (digitalbush.com)
44
Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
55
Version: 1.3.1
66
*/
@@ -38,7 +38,7 @@
3838
return this.trigger("unmask");
3939
},
4040
mask: function(mask, settings) {
41-
var input, defs, tests, partialPosition, firstNonMaskPos, len;
41+
var input, defs, tests, partialPosition, firstNonMaskPos, len, oldVal;
4242
return !mask && this.length > 0 ? (input = $(this[0]), input.data($.mask.dataName)()) : (settings = $.extend({
4343
autoclear: $.mask.autoclear,
4444
placeholder: $.mask.placeholder,
@@ -73,13 +73,28 @@
7373
c = t;
7474
}
7575
}
76+
function androidInputEvent() {
77+
var curVal = input.val(), pos = input.caret();
78+
if (curVal.length < oldVal.length) {
79+
for (checkVal(!0); pos.begin > 0 && !tests[pos.begin - 1]; ) pos.begin--;
80+
if (0 === pos.begin) for (;pos.begin < firstNonMaskPos && !tests[pos.begin]; ) pos.begin++;
81+
input.caret(pos.begin, pos.begin);
82+
} else {
83+
for (checkVal(!0); pos.begin < len && !tests[pos.begin]; ) pos.begin++;
84+
input.caret(pos.begin, pos.begin);
85+
}
86+
settings.completed && pos == input.val().length && settings.completed.call(input);
87+
}
88+
function blurEvent() {
89+
checkVal(), input.val() != focusText && input.change();
90+
}
7691
function keydownEvent(e) {
7792
var pos, begin, end, k = e.which;
78-
8 === k || 46 === k || iPhone && 127 === k ? (pos = input.caret(), begin = pos.begin,
79-
end = pos.end, 0 === end - begin && (begin = 46 !== k ? seekPrev(begin) : end = seekNext(begin - 1),
93+
oldVal = input.val(), 8 === k || 46 === k || iPhone && 127 === k ? (pos = input.caret(),
94+
begin = pos.begin, end = pos.end, end - begin === 0 && (begin = 46 !== k ? seekPrev(begin) : end = seekNext(begin - 1),
8095
end = 46 === k ? seekNext(end) : end), clearBuffer(begin, end), shiftL(begin, end - 1),
81-
e.preventDefault()) : 27 == k && (input.val(focusText), input.caret(0, checkVal()),
82-
e.preventDefault());
96+
e.preventDefault()) : 13 === k ? blurEvent.call(this, e) : 27 === k && (input.val(focusText),
97+
input.caret(0, checkVal()), e.preventDefault());
8398
}
8499
function keypressEvent(e) {
85100
var p, c, next, k = e.which, pos = input.caret();
@@ -89,11 +104,19 @@
89104
pos.begin == pos.end && (k = input.val().charCodeAt(pos.begin - 1), pos.begin--,
90105
pos.end--);
91106
}
92-
e.ctrlKey || e.altKey || e.metaKey || 32 > k || k && (0 !== pos.end - pos.begin && (clearBuffer(pos.begin, pos.end),
93-
shiftL(pos.begin, pos.end - 1)), p = seekNext(pos.begin - 1), len > p && (c = String.fromCharCode(k),
94-
tests[p].test(c) && (shiftR(p), buffer[p] = c, writeBuffer(), next = seekNext(p),
95-
android ? setTimeout($.proxy($.fn.caret, input, next), 0) : input.caret(next), settings.completed && next >= len && settings.completed.call(input))),
96-
e.preventDefault());
107+
if (!(e.ctrlKey || e.altKey || e.metaKey || 32 > k) && k && 13 !== k) {
108+
if (pos.end - pos.begin !== 0 && (clearBuffer(pos.begin, pos.end), shiftL(pos.begin, pos.end - 1)),
109+
p = seekNext(pos.begin - 1), len > p && (c = String.fromCharCode(k), tests[p].test(c))) {
110+
if (shiftR(p), buffer[p] = c, writeBuffer(), next = seekNext(p), android) {
111+
var proxy = function() {
112+
$.proxy($.fn.caret, input, next)();
113+
};
114+
setTimeout(proxy, 0);
115+
} else input.caret(next);
116+
settings.completed && next >= len && settings.completed.call(input);
117+
}
118+
e.preventDefault();
119+
}
97120
}
98121
function clearBuffer(start, end) {
99122
var i;
@@ -112,7 +135,7 @@
112135
}
113136
if (pos > test.length) break;
114137
} else buffer[i] === test.charAt(pos) && i !== partialPosition && (pos++, lastMatch = i);
115-
return allow ? writeBuffer() : partialPosition > lastMatch + 1 ? settings.autoclear || buffer.join("") === defaultBuffer ? (input.val(""),
138+
return allow ? writeBuffer() : partialPosition > lastMatch + 1 ? settings.autoclear || buffer.join("") === defaultBuffer ? (input.val() && input.val(""),
116139
clearBuffer(0, len)) : writeBuffer() : (writeBuffer(), input.val(input.val().substring(0, lastMatch + 1))),
117140
partialPosition ? i : firstNonMaskPos;
118141
}
@@ -124,21 +147,20 @@
124147
return tests[i] && c != settings.placeholder ? c : null;
125148
}).join("");
126149
}), input.attr("readonly") || input.one("unmask", function() {
127-
input.unbind(".mask").removeData($.mask.dataName);
128-
}).bind("focus.mask", function() {
150+
input.off(".mask").removeData($.mask.dataName);
151+
}).on("focus.mask", function() {
129152
clearTimeout(caretTimeoutId);
130153
var pos;
131154
focusText = input.val(), pos = checkVal(), caretTimeoutId = setTimeout(function() {
132-
writeBuffer(), pos == mask.length ? input.caret(0, pos) : input.caret(pos);
155+
writeBuffer(), pos == mask.replace("?", "").length ? input.caret(0, pos) : input.caret(pos);
133156
}, 10);
134-
}).bind("blur.mask", function() {
135-
checkVal(), input.val() != focusText && input.change();
136-
}).bind("keydown.mask", keydownEvent).bind("keypress.mask", keypressEvent).bind(pasteEventName, function() {
157+
}).on("blur.mask", blurEvent).on("keydown.mask", keydownEvent).on("keypress.mask", keypressEvent).on(pasteEventName, function() {
137158
setTimeout(function() {
138159
var pos = checkVal(!0);
139160
input.caret(pos), settings.completed && pos == input.val().length && settings.completed.call(input);
140161
}, 0);
141-
}), chrome && android && input.bind("keyup.mask", keypressEvent), checkVal();
162+
}), chrome && android && input.off("input.mask").on("input.mask", androidInputEvent),
163+
checkVal();
142164
}));
143165
}
144166
});

dist/jquery.maskedinput.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/jquery.maskedinput.js

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ $.fn.extend({
6969
tests,
7070
partialPosition,
7171
firstNonMaskPos,
72-
len, oldVal, bindInputEvent;
72+
len,
73+
oldVal;
7374

7475
if (!mask && this.length > 0) {
7576
input = $(this[0]);
@@ -166,36 +167,38 @@ $.fn.extend({
166167
}
167168
}
168169
}
169-
function inputEvent(e) {
170-
var curVal = input.val();
171-
var pos = input.caret();
172-
if (curVal.length < oldVal.length) {
173-
// a deletion or backspace happened
174-
checkVal(true);
175-
while (pos.begin > 0 && !tests[pos.begin-1])
176-
pos.begin--;
177-
if (pos.begin === 0)
178-
{
179-
while (pos.begin < firstNonMaskPos && !tests[pos.begin])
180-
pos.begin++;
181-
}
182-
input.caret(pos.begin,pos.begin);
183-
} else {
184-
var pos2 = checkVal(true);
185-
while (pos.begin < len && !tests[pos.begin])
186-
pos.begin++;
187170

188-
input.caret(pos.begin,pos.begin);
171+
function androidInputEvent(e) {
172+
var curVal = input.val();
173+
var pos = input.caret();
174+
if (curVal.length < oldVal.length) {
175+
// a deletion or backspace happened
176+
checkVal(true);
177+
while (pos.begin > 0 && !tests[pos.begin-1])
178+
pos.begin--;
179+
if (pos.begin === 0)
180+
{
181+
while (pos.begin < firstNonMaskPos && !tests[pos.begin])
182+
pos.begin++;
189183
}
190-
if (settings.completed && pos == input.val().length)
191-
settings.completed.call(input);
184+
input.caret(pos.begin,pos.begin);
185+
} else {
186+
var pos2 = checkVal(true);
187+
while (pos.begin < len && !tests[pos.begin])
188+
pos.begin++;
189+
190+
input.caret(pos.begin,pos.begin);
192191
}
193-
function blurEvent(e) {
194-
checkVal();
192+
if (settings.completed && pos == input.val().length)
193+
settings.completed.call(input);
194+
}
195+
196+
function blurEvent(e) {
197+
checkVal();
195198

196-
if (input.val() != focusText)
197-
input.change();
198-
}
199+
if (input.val() != focusText)
200+
input.change();
201+
}
199202

200203
function keydownEvent(e) {
201204
var k = e.which,
@@ -227,12 +230,6 @@ $.fn.extend({
227230
}
228231

229232
function keypressEvent(e) {
230-
if (bindInputEvent)
231-
{
232-
bindInputEvent = false;
233-
input.off('input.mask');
234-
}
235-
;
236233
var k = e.which,
237234
pos = input.caret(),
238235
p,
@@ -393,13 +390,11 @@ $.fn.extend({
393390
settings.completed.call(input);
394391
}, 0);
395392
});
396-
if (chrome && android) // bind with input event
397-
{
398-
bindInputEvent = true;
399-
input.bind('input.mask', inputEvent);
400-
} else
393+
if (chrome && android)
401394
{
402-
bindInputEvent = false;
395+
input
396+
.off('input.mask')
397+
.on('input.mask', androidInputEvent);
403398
}
404399
checkVal(); //Perform initial check for existing values
405400
});

0 commit comments

Comments
 (0)