vendor: 10,826 bytes, lines 1-448
1(function (factory) { 2 if (typeof define === 'function' && define.amd) { 3 // AMD. Register as an anonymous module. 4 define(['jquery'], factory); 5 } else if (typeof exports === 'object') { 6 // Node/CommonJS 7 factory(require('jquery')); 8 } else { 9 // Browser globals 10 factory(jQuery); 11 } 12}(function ($) { 13 14var ua = navigator.userAgent, 15 iPhone = /iphone/i.test(ua), 16 chrome = /chrome/i.test(ua), 17 android = /android/i.test(ua), 18 caretTimeoutId; 19 20$.mask = { 21 //Predefined character definitions 22 definitions: { 23 '9': "[0-9]", 24 'a': "[A-Za-z]", 25 '*': "[A-Za-z0-9]" 26 }, 27 autoclear: true, 28 dataName: "rawMaskFn", 29 placeholder: '_' 30}; 31 32$.fn.extend({ 33 //Helper Function for Caret positioning 34 caret: function(begin, end) { 35 var range; 36 37 if (this.length === 0 || this.is(":hidden") || this.get(0) !== document.activeElement) { 38 return; 39 } 40 41 if (typeof begin == 'number') { 42 end = (typeof end === 'number') ? end : begin; 43 return this.each(function() { 44 if (this.setSelectionRange) { 45 this.setSelectionRange(begin, end); 46 } else if (this.createTextRange) { 47 range = this.createTextRange(); 48 range.collapse(true); 49 range.moveEnd('character', end); 50 range.moveStart('character', begin); 51 range.select(); 52 } 53 }); 54 } else { 55 if (this[0].setSelectionRange) { 56 begin = this[0].selectionStart; 57 end = this[0].selectionEnd; 58 } else if (document.selection && document.selection.createRange) { 59 range = document.selection.createRange(); 60 begin = 0 - range.duplicate().moveStart('character', -100000); 61 end = begin + range.text.length; 62 } 63 return { begin: begin, end: end }; 64 } 65 }, 66 unmask: function() { 67 return this.trigger("unmask"); 68 }, 69 mask: function(mask, settings) { 70 var input, 71 defs, 72 tests, 73 partialPosition, 74 firstNonMaskPos, 75 lastRequiredNonMaskPos, 76 len, 77 oldVal; 78 79 if (!mask && this.length > 0) { 80 input = $(this[0]); 81 var fn = input.data($.mask.dataName) 82 return fn?fn():undefined; 83 } 84 85 settings = $.extend({ 86 autoclear: $.mask.autoclear, 87 placeholder: $.mask.placeholder, // Load default placeholder 88 completed: null 89 }, settings); 90 91 92 defs = $.mask.definitions; 93 tests = []; 94 partialPosition = len = mask.length; 95 firstNonMaskPos = null; 96 97 mask = String(mask); 98 99 $.each(mask.split(""), function(i, c) { 100 if (c == '?') { 101 len--; 102 partialPosition = i; 103 } else if (defs[c]) { 104 tests.push(new RegExp(defs[c])); 105 if (firstNonMaskPos === null) { 106 firstNonMaskPos = tests.length - 1; 107 } 108 if(i < partialPosition){ 109 lastRequiredNonMaskPos = tests.length - 1; 110 } 111 } else { 112 tests.push(null); 113 } 114 }); 115 116 return this.trigger("unmask").each(function() { 117 var input = $(this), 118 buffer = $.map( 119 mask.split(""), 120 function(c, i) { 121 if (c != '?') { 122 return defs[c] ? getPlaceholder(i) : c; 123 } 124 }), 125 defaultBuffer = buffer.join(''), 126 focusText = input.val(); 127 128 function tryFireCompleted(){ 129 if (!settings.completed) { 130 return; 131 } 132 133 for (var i = firstNonMaskPos; i <= lastRequiredNonMaskPos; i++) { 134 if (tests[i] && buffer[i] === getPlaceholder(i)) { 135 return; 136 } 137 } 138 settings.completed.call(input); 139 } 140 141 function getPlaceholder(i){ 142 if(i < settings.placeholder.length) 143 return settings.placeholder.charAt(i); 144 return settings.placeholder.charAt(0); 145 } 146 147 function seekNext(pos) { 148 while (++pos < len && !tests[pos]); 149 return pos; 150 } 151 152 function seekPrev(pos) { 153 while (--pos >= 0 && !tests[pos]); 154 return pos; 155 } 156 157 function shiftL(begin,end) { 158 var i, 159 j; 160 161 if (begin<0) { 162 return; 163 } 164 165 for (i = begin, j = seekNext(end); i < len; i++) { 166 if (tests[i]) { 167 if (j < len && tests[i].test(buffer[j])) { 168 buffer[i] = buffer[j]; 169 buffer[j] = getPlaceholder(j); 170 } else { 171 break; 172 } 173 174 j = seekNext(j); 175 } 176 } 177 writeBuffer(); 178 input.caret(Math.max(firstNonMaskPos, begin)); 179 } 180 181 function shiftR(pos) { 182 var i, 183 c, 184 j, 185 t; 186 187 for (i = pos, c = getPlaceholder(pos); i < len; i++) { 188 if (tests[i]) { 189 j = seekNext(i); 190 t = buffer[i]; 191 buffer[i] = c; 192 if (j < len && tests[j].test(t)) { 193 c = t; 194 } else { 195 break; 196 } 197 } 198 } 199 } 200 201 function androidInputEvent(e) { 202 var curVal = input.val(); 203 var pos = input.caret(); 204 if (oldVal && oldVal.length && oldVal.length > curVal.length ) { 205 // a deletion or backspace happened 206 checkVal(true); 207 while (pos.begin > 0 && !tests[pos.begin-1]) 208 pos.begin--; 209 if (pos.begin === 0) 210 { 211 while (pos.begin < firstNonMaskPos && !tests[pos.begin]) 212 pos.begin++; 213 } 214 input.caret(pos.begin,pos.begin); 215 } else { 216 var pos2 = checkVal(true); 217 var lastEnteredValue = curVal.charAt(pos.begin); 218 if (pos.begin < len){ 219 if(!tests[pos.begin]){ 220 pos.begin++; 221 if(tests[pos.begin].test(lastEnteredValue)){ 222 pos.begin++; 223 } 224 }else{ 225 if(tests[pos.begin].test(lastEnteredValue)){ 226 pos.begin++; 227 } 228 } 229 } 230 input.caret(pos.begin,pos.begin); 231 } 232 tryFireCompleted(); 233 } 234 235 236 function blurEvent(e) { 237 checkVal(); 238 239 if (input.val() != focusText) 240 input.change(); 241 } 242 243 function keydownEvent(e) { 244 if (input.prop("readonly")){ 245 return; 246 } 247 248 var k = e.which || e.keyCode, 249 pos, 250 begin, 251 end; 252 oldVal = input.val(); 253 //backspace, delete, and escape get special treatment 254 if (k === 8 || k === 46 || (iPhone && k === 127)) { 255 pos = input.caret(); 256 begin = pos.begin; 257 end = pos.end; 258 259 if (end - begin === 0) { 260 begin=k!==46?seekPrev(begin):(end=seekNext(begin-1)); 261 end=k===46?seekNext(end):end; 262 } 263 clearBuffer(begin, end); 264 shiftL(begin, end - 1); 265 266 e.preventDefault(); 267 } else if( k === 13 ) { // enter 268 blurEvent.call(this, e); 269 } else if (k === 27) { // escape 270 input.val(focusText); 271 input.caret(0, checkVal()); 272 e.preventDefault(); 273 } 274 } 275 276 function keypressEvent(e) { 277 if (input.prop("readonly")){ 278 return; 279 } 280 281 var k = e.which || e.keyCode, 282 pos = input.caret(), 283 p, 284 c, 285 next; 286 287 if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore 288 return; 289 } else if ( k && k !== 13 ) { 290 if (pos.end - pos.begin !== 0){ 291 clearBuffer(pos.begin, pos.end); 292 shiftL(pos.begin, pos.end-1); 293 } 294 295 p = seekNext(pos.begin - 1); 296 if (p < len) { 297 c = String.fromCharCode(k); 298 if (tests[p].test(c)) { 299 shiftR(p); 300 301 buffer[p] = c; 302 writeBuffer(); 303 next = seekNext(p); 304 305 if(android){ 306 //Path for CSP Violation on FireFox OS 1.1 307 var proxy = function() { 308 $.proxy($.fn.caret,input,next)(); 309 }; 310 311 setTimeout(proxy,0); 312 }else{ 313 input.caret(next); 314 } 315 if(pos.begin <= lastRequiredNonMaskPos){ 316 tryFireCompleted(); 317 } 318 } 319 } 320 e.preventDefault(); 321 } 322 } 323 324 function clearBuffer(start, end) { 325 var i; 326 for (i = start; i < end && i < len; i++) { 327 if (tests[i]) { 328 buffer[i] = getPlaceholder(i); 329 } 330 } 331 } 332 333 function writeBuffer() { input.val(buffer.join('')); } 334 335 function checkVal(allow) { 336 //try to place characters where they belong 337 var test = input.val(), 338 lastMatch = -1, 339 i, 340 c, 341 pos; 342 343 for (i = 0, pos = 0; i < len; i++) { 344 if (tests[i]) { 345 buffer[i] = getPlaceholder(i); 346 while (pos++ < test.length) { 347 c = test.charAt(pos - 1); 348 if (tests[i].test(c)) { 349 buffer[i] = c; 350 lastMatch = i; 351 break; 352 } 353 } 354 if (pos > test.length) { 355 clearBuffer(i + 1, len); 356 break; 357 } 358 } else { 359 if (buffer[i] === test.charAt(pos)) { 360 pos++; 361 } 362 if( i < partialPosition){ 363 lastMatch = i; 364 } 365 } 366 } 367 if (allow) { 368 writeBuffer(); 369 } else if (lastMatch + 1 < partialPosition) { 370 if (settings.autoclear || buffer.join('') === defaultBuffer) { 371 // Invalid value. Remove it and replace it with the 372 // mask, which is the default behavior. 373 if(input.val()) input.val(""); 374 clearBuffer(0, len); 375 } else { 376 // Invalid value, but we opt to show the value to the 377 // user and allow them to correct their mistake. 378 writeBuffer(); 379 } 380 } else { 381 writeBuffer(); 382 input.val(input.val().substring(0, lastMatch + 1)); 383 } 384 return (partialPosition ? i : firstNonMaskPos); 385 } 386 387 input.data($.mask.dataName,function(){ 388 return $.map(buffer, function(c, i) { 389 return tests[i]&&c!=getPlaceholder(i) ? c : null; 390 }).join(''); 391 }); 392 393 394 input 395 .one("unmask", function() { 396 input 397 .off(".mask") 398 .removeData($.mask.dataName); 399 }) 400 .on("focus.mask", function() { 401 if (input.prop("readonly")){ 402 return; 403 } 404 405 clearTimeout(caretTimeoutId); 406 var pos; 407 408 focusText = input.val(); 409 410 pos = checkVal(); 411 412 caretTimeoutId = setTimeout(function(){ 413 if(input.get(0) !== document.activeElement){ 414 return; 415 } 416 writeBuffer(); 417 if (pos == mask.replace("?","").length) { 418 input.caret(0, pos); 419 } else { 420 input.caret(pos); 421 } 422 }, 10); 423 }) 424 .on("blur.mask", blurEvent) 425 .on("keydown.mask", keydownEvent) 426 .on("keypress.mask", keypressEvent) 427 .on("input.mask paste.mask", function() { 428 if (input.prop("readonly")){ 429 return; 430 } 431 432 setTimeout(function() { 433 var pos=checkVal(true); 434 input.caret(pos); 435 tryFireCompleted(); 436 }, 0); 437 }); 438 if (chrome && android) 439 { 440 input 441 .off('input.mask') 442 .on('input.mask', androidInputEvent); 443 } 444 checkVal(); //Perform initial check for existing values 445 }); 446 } 447}); 448}));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.