Skip to content

Commit

Permalink
cleanup + handle structured objects
Browse files Browse the repository at this point in the history
  • Loading branch information
Denis Forveille committed Aug 22, 2019
1 parent 155b3b7 commit a881c8e
Show file tree
Hide file tree
Showing 20 changed files with 304 additions and 687 deletions.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,31 +17,31 @@ Most of the credit goes to those 2 packages:
### Install

```sh
npm install @titou10titou10/v-mask --save
yarn add @titou10titou10/v-mask
bower install @titou10titou10/v-mask --save
npm install @titou10/v-mask --save
yarn add @titou10/v-mask
bower install @titou10/v-mask --save
```


### Usage
```js
import { mask } from ' @titou10titoui10/v-mask'
import { mask } from ' @titou10/v-mask'
export default {
directives: { mask }
}
```
```html
<v-text-field v-model="..." v-mask="'A#'" />
<v-text-field v-model="..." v-mask="{mask:'A##',unmaskedVar: myVar}" />
<v-text-field v-model="..." v-mask="{mask:'A##',unmaskedVar: 'myVar'}" />
```

"mask" may contain:
- a mask made with tokens listed below
- the name of a predefined mask from the ones listed below
- a mask made with tokens (listed below)
- the name of a predefined mask from the ones (listed below)
- a "mask object" with the following properties:
- mask: same as above
- unmaskedVar: name of a vairable defined in the "data" section of the component that will receive the unmasked twxt
- tokens: Replace the default tokens. eg tokens='{ 'Y': {pattern: /[0-9]/ }'
- tokens: Replace the default tokens. eg tokens="{ 'Y': {pattern: /[0-9]/ }"


### Tokens (From vue-the-mask)
Expand Down
2 changes: 1 addition & 1 deletion dist/dynamic-mask.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export default function dynamicMask(maskit: any, masks: any, tokens: any): (value: any, mask: any, masked?: boolean) => any;
export default function dynamicMask(maskit: any, masks: any, tokens: any): (value: any, mask: any, masked?: boolean) => any;
40 changes: 20 additions & 20 deletions dist/dynamic-mask.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
"use strict";
exports.__esModule = true;
function dynamicMask(maskit, masks, tokens) {
masks = masks.slice().sort(function (a, b) { return a.length - b.length; });
return function (value, mask, masked) {
if (masked === void 0) { masked = true; }
var i = 0;
while (i < masks.length) {
var currentMask = masks[i];
i++;
var nextMask = masks[i];
// tslint:disable-next-line: max-line-length
if (!(nextMask && maskit(value, nextMask, true, tokens).length > currentMask.length)) {
return maskit(value, currentMask, masked, tokens);
}
}
return ''; // empty masks
};
}
exports["default"] = dynamicMask;
"use strict";
exports.__esModule = true;
function dynamicMask(maskit, masks, tokens) {
masks = masks.slice().sort(function (a, b) { return a.length - b.length; });
return function (value, mask, masked) {
if (masked === void 0) { masked = true; }
var i = 0;
while (i < masks.length) {
var currentMask = masks[i];
i++;
var nextMask = masks[i];
// tslint:disable-next-line: max-line-length
if (!(nextMask && maskit(value, nextMask, true, tokens).length > currentMask.length)) {
return maskit(value, currentMask, masked, tokens);
}
}
return ''; // empty masks
};
}
exports["default"] = dynamicMask;
6 changes: 3 additions & 3 deletions dist/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export declare const mask: {
bind(el: any, binding: any, vnode: any): void;
};
export declare const mask: {
bind(el: any, binding: any, vnode: any): void;
};
154 changes: 70 additions & 84 deletions dist/index.js
Original file line number Diff line number Diff line change
@@ -1,84 +1,70 @@
"use strict";
exports.__esModule = true;
var masker_1 = require("./masker");
var tokens_1 = require("./tokens");
var preDefined = new Map();
preDefined.set('credit-card', '#### - #### - #### - ####');
preDefined.set('date', '##/##/####');
preDefined.set('date-with-time', '##/##/#### ##:##');
preDefined.set('phone', '(###) ### - ####');
preDefined.set('social', '###-##-####');
preDefined.set('time', '##:##');
preDefined.set('time-with-seconds', '##:##:##');
preDefined.set('postalcode-ca', 'A#A #A#');
var defaultDelimiters = /[-!$%^&*()_+|~=`{}[\]:";'<>?,.\\ ]/;
var re = new RegExp(defaultDelimiters, 'g');
var unmaskText = function (text) {
return text ? String(text).replace(re, '') : text;
};
function event(name) {
var evt = document.createEvent('Event');
evt.initEvent(name, true, true);
return evt;
}
exports.mask = {
bind: function (el, binding, vnode) {
// console.log ('bind');
var config = binding.value || {};
if (Array.isArray(config) || typeof config === 'string') {
config = {
masked: true,
mask: config,
unmaskedVar: null,
tokens: tokens_1["default"]
};
}
var m = preDefined.get(config.mask);
config.mask = m || config.mask || '';
if (el.tagName.toLocaleUpperCase() !== 'INPUT') {
var els = el.getElementsByTagName('input');
if (els.length !== 1) {
throw new Error('v-mask directive requires 1 input, found '
+ els.length);
}
else {
el = els[0];
}
}
el.oninput = function (evt) {
if (!evt.isTrusted) {
return;
} // avoid infinite loop
// by default, keep cursor at same position as before the mask
var position = el.selectionEnd;
// save the character just inserted
var digit = el.value[position - 1];
el.value = masker_1["default"](el.value, config.mask, config.masked, config.tokens);
// if the digit was changed, increment position until find the digit again
while (position < el.value.length &&
el.value.charAt(position - 1) !== digit) {
position++;
}
if (el === document.activeElement) {
el.setSelectionRange(position, position);
setTimeout(function () {
el.setSelectionRange(position, position);
}, 0);
}
if (config.unmaskedVar) {
var uv = unmaskText(el.value);
vnode.context[config.unmaskedVar] = uv;
}
el.dispatchEvent(event('input'));
};
var newDisplay = masker_1["default"](el.value, config.mask, config.masked, config.tokens);
if (newDisplay !== el.value) {
el.value = newDisplay;
if (config.unmaskedVar) {
var uv = unmaskText(el.value);
vnode.context[config.unmaskedVar] = uv;
}
el.dispatchEvent(event('input'));
}
}
};
"use strict";
exports.__esModule = true;
var lodash_1 = require("lodash");
var masker_1 = require("./masker");
var predefined_1 = require("./predefined");
var utils_1 = require("./utils");
var tokens_1 = require("./tokens");
function event(name) {
var evt = document.createEvent('Event');
evt.initEvent(name, true, true);
return evt;
}
exports.mask = {
bind: function (el, binding, vnode) {
// console.log ('bind');
var config = binding.value || {};
if (Array.isArray(config) || typeof config === 'string') {
config = {
masked: true,
mask: config,
unmaskedVar: null,
tokens: tokens_1["default"]
};
}
config.mask = predefined_1["default"](config.mask) || config.mask || '';
if (el.tagName.toLocaleUpperCase() !== 'INPUT') {
var els = el.getElementsByTagName('input');
if (els.length !== 1) {
throw new Error('v-mask directive requires 1 input, found '
+ els.length);
}
else {
el = els[0];
}
}
el.oninput = function (evt) {
if (!evt.isTrusted) {
return;
} // avoid infinite loop
// by default, keep cursor at same position as before the mask
var position = el.selectionEnd;
// save the character just inserted
var digit = el.value[position - 1];
el.value = masker_1["default"](el.value, config.mask, config.masked, config.tokens);
// if the digit was changed, increment position until find the digit again
while (position < el.value.length &&
el.value.charAt(position - 1) !== digit) {
position++;
}
if (el === document.activeElement) {
el.setSelectionRange(position, position);
setTimeout(function () {
el.setSelectionRange(position, position);
}, 0);
}
if (config.unmaskedVar) {
lodash_1.set(vnode.context, config.unmaskedVar, utils_1.unmaskText(el.value));
}
el.dispatchEvent(event('input'));
};
var newDisplay = masker_1["default"](el.value, config.mask, config.masked, config.tokens);
if (newDisplay !== el.value) {
el.value = newDisplay;
if (config.unmaskedVar) {
lodash_1.set(vnode.context, config.unmaskedVar, utils_1.unmaskText(el.value));
}
el.dispatchEvent(event('input'));
}
}
};
44 changes: 22 additions & 22 deletions dist/masker.d.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
export default function (value: string, mask: string, masked?: boolean, tokens?: {
'#': {
pattern: RegExp;
};
'X': {
pattern: RegExp;
};
'S': {
pattern: RegExp;
};
'A': {
pattern: RegExp;
transform: (v: string) => string;
};
'a': {
pattern: RegExp;
transform: (v: string) => string;
};
'!': {
escape: boolean;
};
}): string | ((value: any, mask: any, masked?: boolean) => any);
export default function (value: string, mask: string, masked?: boolean, tokens?: {
'#': {
pattern: RegExp;
};
'X': {
pattern: RegExp;
};
'S': {
pattern: RegExp;
};
'A': {
pattern: RegExp;
transform: (v: string) => string;
};
'a': {
pattern: RegExp;
transform: (v: string) => string;
};
'!': {
escape: boolean;
};
}): string | ((value: any, mask: any, masked?: boolean) => any);
36 changes: 18 additions & 18 deletions dist/masker.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
"use strict";
exports.__esModule = true;
var maskit_1 = require("./maskit");
var dynamic_mask_1 = require("./dynamic-mask");
var tokens_1 = require("./tokens");
// Facade to maskit/dynamicMask when mask is String or Array
function default_1(value, mask, masked, tokens) {
if (masked === void 0) { masked = true; }
if (tokens === void 0) { tokens = tokens_1["default"]; }
// disable on empty mask
if (!mask) {
return value;
}
return Array.isArray(mask)
? dynamic_mask_1["default"](maskit_1["default"], mask, tokens)
: maskit_1["default"](value, mask, masked, tokens);
}
exports["default"] = default_1;
"use strict";
exports.__esModule = true;
var maskit_1 = require("./maskit");
var dynamic_mask_1 = require("./dynamic-mask");
var tokens_1 = require("./tokens");
// Facade to maskit/dynamicMask when mask is String or Array
function default_1(value, mask, masked, tokens) {
if (masked === void 0) { masked = true; }
if (tokens === void 0) { tokens = tokens_1["default"]; }
// disable on empty mask
if (!mask) {
return value;
}
return Array.isArray(mask)
? dynamic_mask_1["default"](maskit_1["default"], mask, tokens)
: maskit_1["default"](value, mask, masked, tokens);
}
exports["default"] = default_1;
2 changes: 1 addition & 1 deletion dist/maskit.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export default function maskit(value: string, mask: string, masked: boolean | undefined, tokens: any): string;
export default function maskit(value: string, mask: string, masked: boolean | undefined, tokens: any): string;
Loading

0 comments on commit a881c8e

Please sign in to comment.