0.2.4 • Published 2 years ago
@cmath10/jmask v0.2.4
JMask - JavaScript Mask component
This package provides a mask component - a reworked version of jQuery-Mask-Plugin, without jQuery (and any other dependency either).
Installation
yarn add @cmath10/jmaskor
npm i @cmath10/jmaskUsage
Basic example
import JMask from '@cmath10/jmask'
// ...
const el = document.querySelector('input#phone')
const mask = new JMask(el, '+7-000-000-00-00')JMask constructor arguments:
el-Element- element which will be managed by the mask component;mask-string- mask to apply;options-object- optional argument, provides following options:clearIfNotMatch-boolean- value from input element will be erased on focus loose, if it wasn't input fully according the specified mask, defaults tofalse;reverse-boolean- iftrue, mask accounting starts with the last characters, which makes it convenient to enter, for example, financial values, defaults tofalse;exclude-string[]- an array of keys that will be excluded from accounting, needed for non-character keys so that they can be used as usual; by default excluded:alt(both, left & right);backspacectrl(both, left & right);home;shift(both, left & right);tab;window(left);- arrows;
descriptors-object- custom mask character definitions.
Descriptors
By default, JMask uses descriptors:
0- for digits 0-9, required, if0present in a mask, will reject any characters until a digit is entered;9- for digits 0-9, optional, if9present in a mask, digit could be skipped;#- for digits 0-9, allows you to enter digits in unlimited quantities;A- alphanumeric, a-zA-Z0-9 - allows to enter one character from range a-z regardless of case or range 0-9;S- alphabetical, a-zA-Z - same asAbut without digits.
Any other character (if no translation supplied for) considered as static - when entering reaches it, caret just will
be pushed forward to the next translatable. From the example above these are +, 7, -, so you are able to enter a phone
number like +7-913-815-12-22 by entering only 9138151222
You could supply new translation by adding to the options an object like:
{
'0': { pattern: /\d/ },
'9': { pattern: /\d/, optional: true },
'#': { pattern: /\d/, recursive: true },
'A': { pattern: /[a-zA-Z0-9]/ },
'S': { pattern: /[a-zA-Z]/ },
}Here the key is a character to translate and value is a translation config. Config contains:
pattern-RegExp- pattern to restrict characters (allows entering only matched characters), required;optional-bool- if set, this character will be allowed to skip, defaults tofalse;recursive-bool- allows repeatable input, defaults tofalse;fallback-string- replacement, if entered character doesn't match the pattern and fallback id defined, component will use its value in masked string, defaults toundefined;
Development
Build requirements:
- NodeJS >= 18.x
Setup
yarn installTests
yarn testVisual testing
yarn sandbox:serve