150 lines
4.8 KiB
JavaScript
150 lines
4.8 KiB
JavaScript
/*!
|
|
* inputmask.phone.extensions.js
|
|
* https://github.com/RobinHerbots/Inputmask
|
|
* Copyright (c) 2010 - 2017 Robin Herbots
|
|
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
|
|
* Version: 3.3.11
|
|
*/
|
|
|
|
!(function (factory) {
|
|
"function" == typeof define && define.amd
|
|
? define(
|
|
["./dependencyLibs/inputmask.dependencyLib", "./inputmask"],
|
|
factory
|
|
)
|
|
: "object" == typeof exports
|
|
? (module.exports = factory(
|
|
require("./dependencyLibs/inputmask.dependencyLib"),
|
|
require("./inputmask")
|
|
))
|
|
: 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 0 === maskbs.indexOf(maskas)
|
|
? -1
|
|
: 0 === maskas.indexOf(maskbs)
|
|
? 1
|
|
: maska.localeCompare(maskb);
|
|
}
|
|
var analyseMaskBase = Inputmask.prototype.analyseMask;
|
|
return (
|
|
(Inputmask.prototype.analyseMask = function (mask, regexMask, opts) {
|
|
function reduceVariations(masks, previousVariation, previousmaskGroup) {
|
|
(previousVariation = previousVariation || ""),
|
|
(previousmaskGroup = previousmaskGroup || maskGroups),
|
|
"" !== previousVariation &&
|
|
(previousmaskGroup[previousVariation] = {});
|
|
for (
|
|
var variation = "",
|
|
maskGroup =
|
|
previousmaskGroup[previousVariation] || previousmaskGroup,
|
|
i = masks.length - 1;
|
|
i >= 0;
|
|
i--
|
|
)
|
|
(maskGroup[
|
|
(variation = (mask = masks[i].mask || masks[i]).substr(0, 1))
|
|
] = maskGroup[variation] || []),
|
|
maskGroup[variation].unshift(mask.substr(1)),
|
|
masks.splice(i, 1);
|
|
for (var ndx in maskGroup)
|
|
maskGroup[ndx].length > 500 &&
|
|
reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);
|
|
}
|
|
function rebuild(maskGroup) {
|
|
var mask = "",
|
|
submasks = [];
|
|
for (var ndx in maskGroup)
|
|
$.isArray(maskGroup[ndx])
|
|
? 1 === maskGroup[ndx].length
|
|
? submasks.push(ndx + maskGroup[ndx])
|
|
: submasks.push(
|
|
ndx +
|
|
opts.groupmarker.start +
|
|
maskGroup[ndx].join(
|
|
opts.groupmarker.end +
|
|
opts.alternatormarker +
|
|
opts.groupmarker.start
|
|
) +
|
|
opts.groupmarker.end
|
|
)
|
|
: submasks.push(ndx + rebuild(maskGroup[ndx]));
|
|
return (
|
|
1 === submasks.length
|
|
? (mask += submasks[0])
|
|
: (mask +=
|
|
opts.groupmarker.start +
|
|
submasks.join(
|
|
opts.groupmarker.end +
|
|
opts.alternatormarker +
|
|
opts.groupmarker.start
|
|
) +
|
|
opts.groupmarker.end),
|
|
mask
|
|
);
|
|
}
|
|
var maskGroups = {};
|
|
return (
|
|
opts.phoneCodes &&
|
|
(opts.phoneCodes &&
|
|
opts.phoneCodes.length > 1e3 &&
|
|
(reduceVariations(
|
|
(mask = mask.substr(1, mask.length - 2)).split(
|
|
opts.groupmarker.end +
|
|
opts.alternatormarker +
|
|
opts.groupmarker.start
|
|
)
|
|
),
|
|
(mask = rebuild(maskGroups))),
|
|
(mask = mask.replace(/9/g, "\\9"))),
|
|
analyseMaskBase.call(this, mask, regexMask, opts)
|
|
);
|
|
}),
|
|
Inputmask.extendAliases({
|
|
abstractphone: {
|
|
groupmarker: {
|
|
start: "<",
|
|
end: ">",
|
|
},
|
|
countrycode: "",
|
|
phoneCodes: [],
|
|
mask: function (opts) {
|
|
return (
|
|
(opts.definitions = {
|
|
"#": Inputmask.prototype.definitions[9],
|
|
}),
|
|
opts.phoneCodes.sort(maskSort)
|
|
);
|
|
},
|
|
keepStatic: !0,
|
|
onBeforeMask: function (value, opts) {
|
|
var processedValue = value
|
|
.replace(/^0{1,2}/, "")
|
|
.replace(/[\s]/g, "");
|
|
return (
|
|
(processedValue.indexOf(opts.countrycode) > 1 ||
|
|
-1 === processedValue.indexOf(opts.countrycode)) &&
|
|
(processedValue = "+" + opts.countrycode + processedValue),
|
|
processedValue
|
|
);
|
|
},
|
|
onUnMask: function (maskedValue, unmaskedValue, opts) {
|
|
return maskedValue.replace(/[()#-]/g, "");
|
|
},
|
|
inputmode: "tel",
|
|
},
|
|
}),
|
|
Inputmask
|
|
);
|
|
});
|