123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /*
- Input Mask plugin extensions
- 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.0.0-dev
- Phone extension.
- */
- (function (factory) {
- if (typeof define === "function" && define.amd) {
- define(["./dependencyLibs/inputmask.dependencyLib", "./inputmask"], factory);
- } else if (typeof exports === "object") {
- module.exports = factory(require("./dependencyLibs/inputmask.dependencyLib"), require("./inputmask"));
- } else {
- factory(window.dependencyLib || jQuery, window.Inputmask);
- }
- }
- (function ($, Inputmask) {
- function maskSort(a, b) {
- var maska = (a.mask || a).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""),
- maskb = (b.mask || b).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""),
- maskas = (a.mask || a).split("#")[0],
- maskbs = (b.mask || b).split("#")[0];
- return maskbs.indexOf(maskas) === 0 ? -1 : (maskas.indexOf(maskbs) === 0 ? 1 : maska.localeCompare(maskb));
- }
- var analyseMaskBase = Inputmask.prototype.analyseMask;
- Inputmask.prototype.analyseMask = function (mask, regexMask, opts) {
- var maskGroups = {};
- function reduceVariations(masks, previousVariation, previousmaskGroup) {
- previousVariation = previousVariation || "";
- previousmaskGroup = previousmaskGroup || maskGroups;
- if (previousVariation !== "")
- previousmaskGroup[previousVariation] = {};
- var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup;
- for (var i = masks.length - 1; i >= 0; i--) {
- mask = masks[i].mask || masks[i];
- variation = mask.substr(0, 1);
- maskGroup[variation] = maskGroup[variation] || [];
- maskGroup[variation].unshift(mask.substr(1));
- masks.splice(i, 1);
- }
- for (var ndx in maskGroup) {
- if (maskGroup[ndx].length > 500) {
- reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);
- }
- }
- }
- function rebuild(maskGroup) {
- var mask = "", submasks = [];
- for (var ndx in maskGroup) {
- if ($.isArray(maskGroup[ndx])) {
- if (maskGroup[ndx].length === 1)
- submasks.push(ndx + maskGroup[ndx]);
- else
- submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end);
- } else {
- submasks.push(ndx + rebuild(maskGroup[ndx]));
- }
- }
- if (submasks.length === 1) {
- mask += submasks[0];
- } else {
- mask += opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end;
- }
- return mask;
- }
- if (opts.phoneCodes) {
- if (opts.phoneCodes && opts.phoneCodes.length > 1000) {
- mask = mask.substr(1, mask.length - 2);
- reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start));
- mask = rebuild(maskGroups);
- }
- //escape 9 definition
- mask = mask.replace(/9/g, "\\9");
- }
- // console.log(mask);
- var mt = analyseMaskBase.call(this, mask, regexMask,opts);
- return mt;
- };
- Inputmask.extendAliases({
- "abstractphone": {
- groupmarker: {
- start: "<",
- end: ">"
- },
- countrycode: "",
- phoneCodes: [],
- mask: function (opts) {
- opts.definitions = {"#": Inputmask.prototype.definitions["9"]};
- return opts.phoneCodes.sort(maskSort);
- },
- keepStatic: true,
- onBeforeMask: function (value, opts) {
- var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
- if (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) {
- processedValue = "+" + opts.countrycode + processedValue;
- }
- return processedValue;
- },
- onUnMask: function (maskedValue, unmaskedValue, opts) {
- var unmasked = maskedValue.replace(/[()#-]/g, "");
- return unmasked;
- },
- inputmode: "tel",
- }
- });
- return Inputmask;
- }));
|