1/* 2 Input Mask plugin extensions 3 http://github.com/RobinHerbots/jquery.inputmask 4 Copyright (c) 2010 - Robin Herbots 5 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) 6 Version: 0.0.0-dev 7 8 Phone extension. 9 10 */ 11(function (factory) { 12 if (typeof define === "function" && define.amd) { 13 define(["inputmask.dependencyLib", "inputmask"], factory); 14 } else if (typeof exports === "object") { 15 module.exports = factory(require("./inputmask.dependencyLib"), require("./inputmask")); 16 } else { 17 factory(window.dependencyLib || jQuery, window.Inputmask); 18 } 19} 20(function ($, Inputmask) { 21 function maskSort(a, b) { 22 var maska = (a.mask || a).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), 23 maskb = (b.mask || b).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), 24 maskas = (a.mask || a).split("#")[0], 25 maskbs = (b.mask || b).split("#")[0]; 26 27 return maskbs.indexOf(maskas) === 0 ? -1 : (maskas.indexOf(maskbs) === 0 ? 1 : maska.localeCompare(maskb)); 28 } 29 30 var analyseMaskBase = Inputmask.prototype.analyseMask; 31 32 Inputmask.prototype.analyseMask = function (mask, opts) { 33 var maskGroups = {}; 34 35 function reduceVariations(masks, previousVariation, previousmaskGroup) { 36 previousVariation = previousVariation || ""; 37 previousmaskGroup = previousmaskGroup || maskGroups; 38 if (previousVariation !== "") 39 previousmaskGroup[previousVariation] = {}; 40 var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup; 41 for (var i = masks.length - 1; i >= 0; i--) { 42 mask = masks[i].mask || masks[i]; 43 variation = mask.substr(0, 1); 44 maskGroup[variation] = maskGroup[variation] || []; 45 maskGroup[variation].unshift(mask.substr(1)); 46 masks.splice(i, 1); 47 } 48 for (var ndx in maskGroup) { 49 if (maskGroup[ndx].length > 500) { 50 reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup); 51 } 52 } 53 } 54 55 function rebuild(maskGroup) { 56 var mask = "", submasks = []; 57 for (var ndx in maskGroup) { 58 if ($.isArray(maskGroup[ndx])) { 59 if (maskGroup[ndx].length === 1) 60 submasks.push(ndx + maskGroup[ndx]); 61 else 62 submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end); 63 } else { 64 submasks.push(ndx + rebuild(maskGroup[ndx])); 65 } 66 } 67 if (submasks.length === 1) { 68 mask += submasks[0]; 69 } else { 70 mask += opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end; 71 } 72 73 return mask; 74 } 75 76 77 if (opts.phoneCodes) { 78 if (opts.phoneCodes && opts.phoneCodes.length > 1000) { 79 mask = mask.substr(1, mask.length - 2); 80 reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)); 81 mask = rebuild(maskGroups); 82 } 83 //escape 9 definition 84 mask = mask.replace(/9/g, "\\9"); 85 } 86 // console.log(mask); 87 var mt = analyseMaskBase.call(this, mask, opts); 88 return mt; 89 }; 90 Inputmask.extendAliases({ 91 "abstractphone": { 92 groupmarker: { 93 start: "<", 94 end: ">" 95 }, 96 countrycode: "", 97 phoneCodes: [], 98 mask: function (opts) { 99 opts.definitions = {"#": Inputmask.prototype.definitions["9"]}; 100 return opts.phoneCodes.sort(maskSort); 101 }, 102 keepStatic: true, 103 onBeforeMask: function (value, opts) { 104 var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, ""); 105 if (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) { 106 processedValue = "+" + opts.countrycode + processedValue; 107 } 108 109 return processedValue; 110 }, 111 onUnMask: function (maskedValue, unmaskedValue, opts) { 112 //implement me 113 return unmaskedValue; 114 }, 115 inputmode: "tel", 116 } 117 }); 118 return Inputmask; 119}));
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.