Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get raw value #42 #278

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 49 additions & 29 deletions dist/v-mask.esm.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,18 @@
function format (text, wholeMask) {
if (!wholeMask) return text;

var maskStartRegExp = /^([^#ANX]+)/;
return mask(clean(prepare(text, wholeMask), wholeMask), wholeMask);
}

if (+text.length === 1 && maskStartRegExp.test(wholeMask)) {
text = maskStartRegExp.exec(wholeMask)[0] + text;
}
var mask = function mask(text, wholeMask) {
if (!wholeMask) return text;

var newText = '';
var charOffset = 0;

for (var maskIndex = 0; maskIndex < wholeMask.length; maskIndex += 1) {
var mask = wholeMask.charAt(maskIndex);
switch (mask) {
case '#':
break;
case 'A':
break;
case '?':
break;
case 'N':
break;
case 'X':
break;
default:
text = text.replace(mask, '');
}
}
for (var _maskIndex = 0, x = 1; x && _maskIndex < wholeMask.length; _maskIndex += 1) {
var char = text.charAt(_maskIndex - charOffset);
var _mask = wholeMask.charAt(_maskIndex);
for (var maskIndex = 0, x = 1; x && maskIndex < wholeMask.length; maskIndex += 1) {
var char = text.charAt(maskIndex - charOffset);
var _mask = wholeMask.charAt(maskIndex);

switch (_mask) {
case '#':
Expand Down Expand Up @@ -59,7 +42,43 @@ function format (text, wholeMask) {
}
}
return newText;
}
};

var clean = function clean(text, wholeMask) {
if (!wholeMask) return text;

for (var maskIndex = 0; maskIndex < wholeMask.length; maskIndex += 1) {
var _mask2 = wholeMask.charAt(maskIndex);
switch (_mask2) {
case '#':
break;
case 'A':
break;
case '?':
break;
case 'N':
break;
case 'X':
break;
default:
text = text.replace(_mask2, '');
}
}

return text;
};

var prepare = function prepare(text, wholeMask) {
if (!wholeMask) return text;

var maskStartRegExp = /^([^#ANX]+)/;

if (+text.length === 1 && maskStartRegExp.test(wholeMask)) {
text = maskStartRegExp.exec(wholeMask)[0] + text;
}

return text;
};

var trigger = function trigger(el, type) {
var e = document.createEvent('HTMLEvents');
Expand All @@ -79,11 +98,11 @@ function updateValue(el) {
_el$dataset = el.dataset,
_el$dataset$previousV = _el$dataset.previousValue,
previousValue = _el$dataset$previousV === undefined ? '' : _el$dataset$previousV,
mask = _el$dataset.mask;
mask$$1 = _el$dataset.mask;


if (force || value && value !== previousValue && value.length > previousValue.length) {
el.value = format(value, mask);
el.value = format(value, mask$$1);
if (isAndroid && isChrome) {
setTimeout(function () {
return trigger(el, 'input');
Expand All @@ -94,10 +113,11 @@ function updateValue(el) {
}

el.dataset.previousValue = value;
el.dataset.rawValue = clean(value, mask$$1);
}

function updateMask(el, mask) {
el.dataset.mask = mask;
function updateMask(el, mask$$1) {
el.dataset.mask = mask$$1;
}

var directive = {
Expand Down
78 changes: 49 additions & 29 deletions dist/v-mask.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,18 @@
function format (text, wholeMask) {
if (!wholeMask) return text;

var maskStartRegExp = /^([^#ANX]+)/;
return mask(clean(prepare(text, wholeMask), wholeMask), wholeMask);
}

if (+text.length === 1 && maskStartRegExp.test(wholeMask)) {
text = maskStartRegExp.exec(wholeMask)[0] + text;
}
var mask = function mask(text, wholeMask) {
if (!wholeMask) return text;

var newText = '';
var charOffset = 0;

for (var maskIndex = 0; maskIndex < wholeMask.length; maskIndex += 1) {
var mask = wholeMask.charAt(maskIndex);
switch (mask) {
case '#':
break;
case 'A':
break;
case '?':
break;
case 'N':
break;
case 'X':
break;
default:
text = text.replace(mask, '');
}
}
for (var _maskIndex = 0, x = 1; x && _maskIndex < wholeMask.length; _maskIndex += 1) {
var char = text.charAt(_maskIndex - charOffset);
var _mask = wholeMask.charAt(_maskIndex);
for (var maskIndex = 0, x = 1; x && maskIndex < wholeMask.length; maskIndex += 1) {
var char = text.charAt(maskIndex - charOffset);
var _mask = wholeMask.charAt(maskIndex);

switch (_mask) {
case '#':
Expand Down Expand Up @@ -65,7 +48,43 @@
}
}
return newText;
}
};

var clean = function clean(text, wholeMask) {
if (!wholeMask) return text;

for (var maskIndex = 0; maskIndex < wholeMask.length; maskIndex += 1) {
var _mask2 = wholeMask.charAt(maskIndex);
switch (_mask2) {
case '#':
break;
case 'A':
break;
case '?':
break;
case 'N':
break;
case 'X':
break;
default:
text = text.replace(_mask2, '');
}
}

return text;
};

var prepare = function prepare(text, wholeMask) {
if (!wholeMask) return text;

var maskStartRegExp = /^([^#ANX]+)/;

if (+text.length === 1 && maskStartRegExp.test(wholeMask)) {
text = maskStartRegExp.exec(wholeMask)[0] + text;
}

return text;
};

var trigger = function trigger(el, type) {
var e = document.createEvent('HTMLEvents');
Expand All @@ -85,11 +104,11 @@
_el$dataset = el.dataset,
_el$dataset$previousV = _el$dataset.previousValue,
previousValue = _el$dataset$previousV === undefined ? '' : _el$dataset$previousV,
mask = _el$dataset.mask;
mask$$1 = _el$dataset.mask;


if (force || value && value !== previousValue && value.length > previousValue.length) {
el.value = format(value, mask);
el.value = format(value, mask$$1);
if (isAndroid && isChrome) {
setTimeout(function () {
return trigger(el, 'input');
Expand All @@ -100,10 +119,11 @@
}

el.dataset.previousValue = value;
el.dataset.rawValue = clean(value, mask$$1);
}

function updateMask(el, mask) {
el.dataset.mask = mask;
function updateMask(el, mask$$1) {
el.dataset.mask = mask$$1;
}

var directive = {
Expand Down
2 changes: 1 addition & 1 deletion dist/v-mask.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions src/__tests__/clean.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { clean } from '../format';

describe('format.js - clean function', () => {

it('should return the entry value without the mask', () => {
// time with seconds
expect(clean('11:15:15', '##:##:##')).toBe('111515');
// hours and minutes
expect(clean('20h15m', '##h##m')).toBe('2015');
// date-time
expect(clean('27/10/2016 23:15', '##/##/#### ##:##')).toBe('271020162315');
// credit card
expect(clean('4532 4782 5524 7634', '#### #### #### ####')).toBe('4532478255247634');
// phone number
expect(clean('(999) 999-9999', '(###) ###-####')).toBe('9999999999');
// phone number (US)
expect(clean('+1 (999) 999-9999', '+1 (###) ###-####')).toBe('9999999999');
// CPF
expect(clean('390.533.447-05', '###.###.###-##')).toBe('39053344705');
// CPNJ
expect(clean('53.288.196/0001-28', '##.###.###/####-##')).toBe('53288196000128');
// Social Security number
expect(clean('365-03-8704', '###-##-####')).toBe('365038704');
});
});
3 changes: 2 additions & 1 deletion src/directive.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* eslint-disable no-param-reassign */
import format from './format';
import format, { clean } from './format';
import { trigger, queryInputElementInside } from './utils';
import { isAndroid, isChrome } from './utils/env';

Expand All @@ -21,6 +21,7 @@ function updateValue(el, force = false) {
}

el.dataset.previousValue = value;
el.dataset.rawValue = clean(value, mask)
}

/**
Expand Down
83 changes: 61 additions & 22 deletions src/format.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,22 @@
export default function (text, wholeMask) {
if (!wholeMask) return text;

const maskStartRegExp = /^([^#ANX]+)/;
return mask(clean(prepare(text, wholeMask), wholeMask), wholeMask);
}

if (+text.length === 1 && maskStartRegExp.test(wholeMask)) {
text = maskStartRegExp.exec(wholeMask)[0] + text;
}
/**
* Applies mask to data.
*
* @param {String} text String to mask (input value)
* @param {String} [wholeMask] Mask format, like `####-##`
* @returns {string} Formatted text
*/
export const mask = (text, wholeMask) => {
if (!wholeMask) return text;

let newText = '';
let charOffset = 0;

// Cleans data to avoid value loss on dynamic mask changing
for (let maskIndex = 0; maskIndex < wholeMask.length; maskIndex += 1) {
const mask = wholeMask.charAt(maskIndex);
switch (mask) {
case '#':
break;
case 'A':
break;
case '?':
break;
case 'N':
break;
case 'X':
break;
default:
text = text.replace(mask, '');
}
}
for (let maskIndex = 0, x = 1; x && maskIndex < wholeMask.length; maskIndex += 1) {
const char = text.charAt(maskIndex - charOffset);
const mask = wholeMask.charAt(maskIndex);
Expand Down Expand Up @@ -73,3 +62,53 @@ export default function (text, wholeMask) {
}
return newText;
}

/**
* Cleans data.
*
* @param {String} text String to clean (input value)
* @param {String} [wholeMask] Mask format, like `####-##`
* @returns {string} Cleaned text
*/
export const clean = (text, wholeMask) => {
if (!wholeMask) return text;

for (let maskIndex = 0; maskIndex < wholeMask.length; maskIndex += 1) {
const mask = wholeMask.charAt(maskIndex);
switch (mask) {
case '#':
break;
case 'A':
break;
case '?':
break;
case 'N':
break;
case 'X':
break;
default:
text = text.replace(mask, '');
}
}

return text;
}

/**
* Prepares data.
*
* @param {String} text String to prepare (input value)
* @param {String} [wholeMask] Mask format, like `####-##`
* @returns {string} Prepared text
*/
export const prepare = (text, wholeMask) => {
if (!wholeMask) return text;

const maskStartRegExp = /^([^#ANX]+)/;

if (+text.length === 1 && maskStartRegExp.test(wholeMask)) {
text = maskStartRegExp.exec(wholeMask)[0] + text;
}

return text;
}