Skip to content

Commit 2132e46

Browse files
author
Denis Forveille
committed
Added the ".number" modifier. Closes #1
1 parent 4159292 commit 2132e46

File tree

5 files changed

+63
-34
lines changed

5 files changed

+63
-34
lines changed

README.md

+10-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ import { mask } from ' @titou10/v-mask'
2222
export default {
2323
directives: { mask }
2424
}
25-
```
26-
```html
2725
<v-text-field v-model="..." v-mask="{mask:'A##', unmaskedVar: 'myVar'}" />
2826
<v-text-field v-model="..." v-mask="'A#'" />
27+
<v-text-field v-model="..." v-mask.number="{mask:'##', unmaskedVar: 'myVar'}" />
28+
<v-text-field v-model="..." v-mask="{mask:'##', unmaskedVar: 'myVar', number: true}" />
29+
2930
```
3031

3132
**v-mask** may be:
@@ -34,8 +35,10 @@ export default {
3435
- an "object" with the following attributes:
3536
- `mask`: same as above
3637
- `unmaskedVar`: name of a variable defined in the "data" section of the component that will receive the "unmasked" text. It may be a structure (eg`"a.bc.d"`), but the first "level" must exists
37-
- `nullIfEmpty`: Set `"unmaskedVar"` to null if the input value is empty. Defaults to **true**
38-
- `tokens`: An array of token objects that will replace the default ones. eg `tokens="[{ 'Y': {pattern: /[0-9]/ }]"`
38+
- `nullIfEmpty` (Defaults to **true** ): Set `"unmaskedVar"` to null if the input value is empty.
39+
- `number` (Defaults to **false**): Try to cast the valof of `"unmaskedVar"` to a numbe (see below)
40+
- `tokens` (Defaults to the default ones below): An array of token objects that will replace the default ones. eg `tokens="[{ 'Y': {pattern: /[0-9]/ }]"`
41+
3942

4043
### Tokens (From vue-the-mask)
4144

@@ -60,6 +63,9 @@ export default {
6063
- `time-with-seconds: '##:##:##'`
6164
- `postalcode-ca: 'A#A #A#'`
6265

66+
### Modifiers
67+
`.number`: The value set to`unmaskedVar`is typecast as a number. If the value cannot be parsed with parseFloat(), then the original value is returned.
68+
6369
#### Why this package?
6470
This package has been created after the`"mask"` property of the`"v-text-field"`component has been removed and I was not able to find another package that allow to **retrieve the masked and unmasked value** of an input text from a directive
6571

dist/directive.js

+15-4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ function getConfig(binding) {
2929
mask: 'null',
3030
unmaskedVar: null,
3131
nullIfEmpty: true,
32+
number: false,
3233
tokens: tokens_1["default"]
3334
};
3435
if (typeof binding.value === 'string') {
@@ -37,6 +38,9 @@ function getConfig(binding) {
3738
else {
3839
Object.assign(config, binding.value);
3940
}
41+
// Capture ".number" modifier
42+
var modifiers = binding.modifiers;
43+
config.number = modifiers && modifiers.number;
4044
// Set predefined eventually
4145
config.mask = predefined_1["default"](config.mask) || config.mask || '';
4246
return config;
@@ -61,13 +65,20 @@ function run(el, eventName, config, vnode) {
6165
}
6266
// Set unmasked value
6367
if (config.unmaskedVar) {
64-
// set null instead of empty if required
6568
var ut = utils_1.unmaskText(el.value);
6669
if (config.nullIfEmpty && ut.trim().length === 0) {
70+
// Set null instead of empty if required
6771
lodash_1.set(vnode.context, config.unmaskedVar, null);
6872
}
6973
else {
70-
lodash_1.set(vnode.context, config.unmaskedVar, ut);
74+
if (config.number) {
75+
// Convert to number if requested
76+
var vNumber = parseFloat(ut);
77+
lodash_1.set(vnode.context, config.unmaskedVar, isNaN(vNumber) ? ut : vNumber);
78+
}
79+
else {
80+
lodash_1.set(vnode.context, config.unmaskedVar, ut);
81+
}
7182
}
7283
}
7384
// Notify listeners
@@ -78,8 +89,8 @@ function bind(el, binding, vnode) {
7889
if (binding.value === false) {
7990
return;
8091
}
81-
el = getInput(el);
82-
run(el, 'input', getConfig(binding), vnode);
92+
var realEl = getInput(el);
93+
run(realEl, 'input', getConfig(binding), vnode);
8394
}
8495
function componentUpdated(el, binding, vnode, oldVnode) {
8596
if (binding.value === false) {

package-lock.json

+17-17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@titou10/v-mask",
33
"description": "mask directive for vue.js that exposes the unmasked value",
4-
"version": "1.0.3",
4+
"version": "1.0.4",
55
"author": "Denis Forveille <[email protected]>",
66
"license": "MIT",
77
"keywords": [
@@ -31,10 +31,10 @@
3131
"lodash.set": "^4.3.2"
3232
},
3333
"devDependencies": {
34-
"@types/lodash": "^4.14.137",
35-
"@types/node": "^12.7.2",
36-
"tslint": "^5.19.0",
37-
"typescript": "^3.5.3",
34+
"@types/lodash": "^4.14.138",
35+
"@types/node": "^12.7.5",
36+
"tslint": "^5.20.0",
37+
"typescript": "^3.6.3",
3838
"vue": "^2.6.10"
3939
}
4040
}

src/directive.ts

+16-4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ function getConfig(binding) {
2929
mask: 'null',
3030
unmaskedVar: null,
3131
nullIfEmpty: true,
32+
number: false,
3233
tokens
3334
};
3435

@@ -38,6 +39,10 @@ function getConfig(binding) {
3839
Object.assign(config, binding.value);
3940
}
4041

42+
// Capture ".number" modifier
43+
const modifiers = binding.modifiers;
44+
config.number = modifiers && modifiers.number;
45+
4146
// Set predefined eventually
4247
config.mask = getPredefined(config.mask) || config.mask || '';
4348
return config;
@@ -67,12 +72,19 @@ function run(el , eventName: string, config, vnode) {
6772

6873
// Set unmasked value
6974
if (config.unmaskedVar) {
70-
// set null instead of empty if required
7175
const ut = unmaskText(el.value);
76+
7277
if (config.nullIfEmpty && ut.trim().length === 0) {
78+
// Set null instead of empty if required
7379
set(vnode.context, config.unmaskedVar, null);
7480
} else {
75-
set(vnode.context, config.unmaskedVar, ut);
81+
if (config.number) {
82+
// Convert to number if requested
83+
const vNumber = parseFloat(ut);
84+
set(vnode.context, config.unmaskedVar, isNaN(vNumber) ? ut : vNumber);
85+
} else {
86+
set(vnode.context, config.unmaskedVar, ut);
87+
}
7688
}
7789
}
7890

@@ -85,8 +97,8 @@ function run(el , eventName: string, config, vnode) {
8597
function bind(el, binding, vnode) {
8698
if (binding.value === false) { return; }
8799

88-
el = getInput(el);
89-
run(el, 'input', getConfig(binding), vnode);
100+
const realEl = getInput(el);
101+
run(realEl, 'input', getConfig(binding), vnode);
90102
}
91103

92104
function componentUpdated(el, binding, vnode, oldVnode) {

0 commit comments

Comments
 (0)