2
0
mirror of https://github.com/tenrok/maska.git synced 2026-06-20 20:00:34 +03:00

#51 Added test,

switched jest env to jsdom,
lint fixed
This commit is contained in:
Yury Mamedov
2021-11-10 01:28:55 +03:00
parent d3f1a7b582
commit 0cf4d7c7b8
5 changed files with 32 additions and 11 deletions
+5
View File
@@ -0,0 +1,5 @@
const config = {
testEnvironment: "jsdom",
};
module.exports = config;
+2 -2
View File
@@ -7,7 +7,7 @@ function getOpts (mask) {
if (mask.mask) { if (mask.mask) {
opts.mask = Array.isArray(mask.mask) ? JSON.stringify(mask.mask) : mask.mask opts.mask = Array.isArray(mask.mask) ? JSON.stringify(mask.mask) : mask.mask
opts.tokens = mask.tokens ? { ...mask.tokens } : {} opts.tokens = mask.tokens ? { ...mask.tokens } : {}
opts.preprocessor = mask.preprocessor; opts.preprocessor = mask.preprocessor
} else { } else {
opts.mask = Array.isArray(mask) ? JSON.stringify(mask) : mask opts.mask = Array.isArray(mask) ? JSON.stringify(mask) : mask
} }
@@ -32,7 +32,7 @@ const directive = () => {
if (state.has(el) && !needUpdate(mask)) { if (state.has(el) && !needUpdate(mask)) {
return return
} }
state.set(el, new Maska(el, getOpts(mask.value))) state.set(el, new Maska(el, getOpts(mask.value)))
} }
} }
+4 -4
View File
@@ -21,7 +21,7 @@ function dynamic (mask) {
const processed = masks.map(m => process(value, m, tokens, false)) const processed = masks.map(m => process(value, m, tokens, false))
const last = processed.pop() const last = processed.pop()
for (let i in masks) { for (const i in masks) {
if (checkMask(last, masks[i], tokens)) { if (checkMask(last, masks[i], tokens)) {
return process(value, masks[i], tokens, masked) return process(value, masks[i], tokens, masked)
} }
@@ -31,7 +31,7 @@ function dynamic (mask) {
} }
function checkMask (variant, mask, tokens) { function checkMask (variant, mask, tokens) {
for (let tok in tokens) { for (const tok in tokens) {
if (tokens[tok].escape) { if (tokens[tok].escape) {
mask = mask.replace(new RegExp(tok + '.{1}', 'g'), '') mask = mask.replace(new RegExp(tok + '.{1}', 'g'), '')
} }
@@ -62,8 +62,8 @@ function process (value, mask, tokens, masked = true) {
ret += mask[im] ret += mask[im]
im++ im++
} else if (tokens[mask[im]] && tokens[mask[im]].escape) { } else if (tokens[mask[im]] && tokens[mask[im]].escape) {
ret += mask[im+1] ret += mask[im + 1]
im = im+2 im = im + 2
} }
} }
} }
+4 -5
View File
@@ -6,7 +6,7 @@ export default class Maska {
constructor (el, opts = {}) { constructor (el, opts = {}) {
if (!el) throw new Error('Maska: no element for mask') if (!el) throw new Error('Maska: no element for mask')
if (opts.preprocessor != null && typeof opts.preprocessor != 'function') { if (opts.preprocessor != null && typeof opts.preprocessor !== 'function') {
throw new Error('Maska: preprocessor must be a function') throw new Error('Maska: preprocessor must be a function')
} }
@@ -19,7 +19,6 @@ export default class Maska {
} }
} }
this._opts = { this._opts = {
mask: opts.mask, mask: opts.mask,
tokens: { ...tokens, ...opts.tokens }, tokens: { ...tokens, ...opts.tokens },
@@ -71,10 +70,10 @@ export default class Maska {
const digit = oldValue[position - 1] const digit = oldValue[position - 1]
el.dataset.maskRawValue = mask(el.value, el.dataset.mask, this._opts.tokens, false) el.dataset.maskRawValue = mask(el.value, el.dataset.mask, this._opts.tokens, false)
let elValue = el.value; let elValue = el.value
if (this._opts.preprocessor) { if (this._opts.preprocessor) {
elValue = this._opts.preprocessor(elValue); elValue = this._opts.preprocessor(elValue)
} }
el.value = mask(elValue, el.dataset.mask, this._opts.tokens) el.value = mask(elValue, el.dataset.mask, this._opts.tokens)
+17
View File
@@ -1,5 +1,6 @@
import mask from './../src/mask' import mask from './../src/mask'
import tokens from './../src/tokens' import tokens from './../src/tokens'
import Maska from './../src/maska'
test('12 #.#', () => { test('12 #.#', () => {
expect(mask('12', '#.#', tokens)).toBe('1.2') expect(mask('12', '#.#', tokens)).toBe('1.2')
@@ -205,3 +206,19 @@ test('Custom transform with `uppercase` and `lowercase` enabled: abkTYX -> АВ
} }
})).toBe('авктух') })).toBe('авктух')
}) })
test('Custom value preprocessing', () => {
const elem = document.createElement('input')
document.body.appendChild(elem)
const mask = new Maska(elem, {
mask: 'S*',
preprocessor: function(val) {
return val.toLocaleUpperCase()
}
})
elem.value = "abkTYX"
elem.dispatchEvent(new Event('input', {bubbles: true}))
expect(elem.value).toBe("ABKTYX")
})