vuetify
Version:
Vue.js 2 Semantic Component Framework
149 lines • 3.48 kB
JavaScript
/**
* Default delimiter RegExp
*
* @type {RegExp}
*/
export var defaultDelimiters = /[-!$%^&*()_+|~=`{}[\]:";'<>?,./\\ ]/;
/**
*
* @param {String} char
*
* @return {Boolean}
*/
export var isMaskDelimiter = function isMaskDelimiter(char) {
return char && defaultDelimiters.test(char);
};
/**
* Mask keys
*
* @type {Object}
*/
var allowedMasks = {
'#': {
test: function test(char) {
return char.match(/[0-9]/);
}
},
'A': {
test: function test(char) {
return char.match(/[A-Z]/i);
},
convert: function convert(char) {
return char.toUpperCase();
}
},
'a': {
test: function test(char) {
return char.match(/[a-z]/i);
},
convert: function convert(char) {
return char.toLowerCase();
}
},
'N': {
test: function test(char) {
return char.match(/[0-9A-Z]/i);
},
convert: function convert(char) {
return char.toUpperCase();
}
},
'n': {
test: function test(char) {
return char.match(/[0-9a-z]/i);
},
convert: function convert(char) {
return char.toLowerCase();
}
},
'X': {
test: isMaskDelimiter
}
};
/**
* Is Character mask
*
* @param {String} char
*
* @return {Boolean}
*/
var isMask = function isMask(char) {
return allowedMasks.hasOwnProperty(char);
};
/**
* Automatically convert char case
*
* @param {String} mask
* @param {String} char
*
* @return {String}
*/
var convert = function convert(mask, char) {
return allowedMasks[mask].convert ? allowedMasks[mask].convert(char) : char;
};
/**
* Mask Validation
*
* @param {String} mask
* @param {String} char
*
* @return {Boolean}
*/
var maskValidates = function maskValidates(mask, char) {
if (char == null || !isMask(mask)) return false;
return allowedMasks[mask].test(char);
};
/**
* Mask Text
*
* Takes a string or an array of characters
* and returns a masked string
*
* @param {*} text
* @param {Array|String} masked
* @param {Boolean} [dontFillMaskBlanks]
*
* @return {String}
*/
export var maskText = function maskText(text, masked, dontFillMaskBlanks) {
if (text == null) return '';
text = String(text);
if (!masked.length || !text.length) return text;
if (!Array.isArray(masked)) masked = masked.split('');
var textIndex = 0;
var maskIndex = 0;
var newText = '';
while (maskIndex < masked.length) {
var mask = masked[maskIndex];
// Assign the next character
var char = text[textIndex];
// Check if mask is delimiter
// and current char matches
if (!isMask(mask) && char === mask) {
newText += mask;
textIndex++;
// Check if not mask
} else if (!isMask(mask) && !dontFillMaskBlanks) {
newText += mask;
// Check if is mask and validates
} else if (maskValidates(mask, char)) {
newText += convert(mask, char);
textIndex++;
} else {
return newText;
}
maskIndex++;
}
return newText;
};
/**
* Unmask Text
*
* @param {String} text
*
* @return {String}
*/
export var unmaskText = function unmaskText(text) {
return text ? String(text).replace(new RegExp(defaultDelimiters, 'g'), '') : text;
};
//# sourceMappingURL=mask.js.map