2
0
mirror of https://github.com/tenrok/maska.git synced 2026-06-11 18:02:27 +03:00

Add dynamic mask

This commit is contained in:
Alexander Shabunevich
2019-12-07 21:44:32 +03:00
parent 3104177848
commit 558b1a60d2
7 changed files with 83 additions and 9 deletions
+4 -4
View File
@@ -4,11 +4,11 @@ import { isString } from './utils'
function getOpts (mask) {
const opts = {}
if (isString(mask)) {
opts.mask = mask
} else if (mask.mask) {
opts.mask = mask.mask
if (mask.mask) {
opts.mask = Array.isArray(mask.mask) ? JSON.stringify(mask.mask) : mask.mask
opts.tokens = mask.tokens ? { ...mask.tokens } : {}
} else {
opts.mask = Array.isArray(mask) ? JSON.stringify(mask) : mask
}
return opts
+31
View File
@@ -1,4 +1,35 @@
export default function mask (value, mask, tokens, masked = true) {
return (processMask(mask).length > 1)
? dynamic(mask)(value, mask, tokens, masked)
: process(value, mask, tokens, masked)
}
function processMask (mask) {
try {
return JSON.parse(mask)
} catch {
return [mask]
}
}
function dynamic (mask) {
const masks = processMask(mask).sort((a, b) => a.length - b.length)
return function (value, mask, tokens, masked = true) {
let i = 0
while (i < masks.length) {
const currentMask = masks[i]
i++
const nextMask = masks[i]
if (!(nextMask && process(value, nextMask, tokens, true).length > currentMask.length)) {
return process(value, currentMask, tokens, masked)
}
}
return '' // empty masks
}
}
function process (value, mask, tokens, masked = true) {
let im = 0
let iv = 0
let ret = ''