Skip to content

Commit

Permalink
Fix multiple letters delimiter issue
Browse files Browse the repository at this point in the history
  • Loading branch information
nosir committed Dec 18, 2018
1 parent fc02ece commit 27ebf3b
Show file tree
Hide file tree
Showing 13 changed files with 151 additions and 103 deletions.
37 changes: 21 additions & 16 deletions dist/cleave-angular.js
Original file line number Diff line number Diff line change
Expand Up @@ -204,13 +204,12 @@ return /******/ (function(modules) { // webpackBootstrap
owner.lastInputValue = currentValue;

// hit backspace when last character is delimiter
if (charCode === 8 && Util.isDelimiter(currentValue.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
pps.backspace = true;

return;
var postDelimiter = Util.getPostDelimiter(currentValue, pps.delimiter, pps.delimiters);
if (charCode === 8 && postDelimiter) {
pps.postDelimiterBackspace = postDelimiter;
} else {
pps.postDelimiterBackspace = false;
}

pps.backspace = false;
},

onChange: function () {
Expand Down Expand Up @@ -268,8 +267,9 @@ return /******/ (function(modules) { // webpackBootstrap
// case 2: last character is not delimiter which is:
// 12|34* -> hit backspace -> 1|34*
// note: no need to apply this for numeral mode
if (!pps.numeral && pps.backspace && !Util.isDelimiter(value.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
value = Util.headStr(value, value.length - pps.delimiterLength);
var postDelimiterAfter = Util.getPostDelimiter(value, pps.delimiter, pps.delimiters);
if (!pps.numeral && pps.postDelimiterBackspace && !postDelimiterAfter) {
value = Util.headStr(value, value.length - pps.postDelimiterBackspace.length);
}

// phone formatter
Expand Down Expand Up @@ -435,7 +435,7 @@ return /******/ (function(modules) { // webpackBootstrap
value = value.replace('.', pps.numeralDecimalMark);
}

pps.backspace = false;
pps.postDelimiterBackspace = false;

owner.element.value = value;
owner.onInput(value);
Expand Down Expand Up @@ -1208,18 +1208,21 @@ return /******/ (function(modules) { // webpackBootstrap
return value.replace(re, '');
},

isDelimiter: function (letter, delimiter, delimiters) {
getPostDelimiter: function (value, delimiter, delimiters) {
// single delimiter
if (delimiters.length === 0) {
return letter === delimiter;
return value.slice(-delimiter.length) === delimiter ? delimiter : '';
}

// multiple delimiters
return delimiters.some(function (current) {
if (letter === current) {
return true;
var matchedDelimiter = '';
delimiters.forEach(function (current) {
if (value.slice(-current.length) === current) {
matchedDelimiter = current;
}
});

return matchedDelimiter;
},

getDelimiterREByDelimiter: function (delimiter) {
Expand Down Expand Up @@ -1258,7 +1261,9 @@ return /******/ (function(modules) { // webpackBootstrap

// multiple delimiters
delimiters.forEach(function (current) {
value = value.replace(owner.getDelimiterREByDelimiter(current), '');
current.split('').forEach(function (letter) {
value = value.replace(owner.getDelimiterREByDelimiter(letter), '');
});
});

return value;
Expand Down Expand Up @@ -1394,7 +1399,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
},

getActiveElement: function(parent) {
var activeElement = parent.activeElement;
if (activeElement && activeElement.shadowRoot) {
Expand Down
4 changes: 2 additions & 2 deletions dist/cleave-angular.min.js

Large diffs are not rendered by default.

43 changes: 26 additions & 17 deletions dist/cleave-react-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ return /******/ (function(modules) { // webpackBootstrap
value = value.replace('.', pps.numeralDecimalMark);
}

pps.backspace = false;
pps.postDelimiterBackspace = false;

owner.onChange({
target: { value: value },
Expand Down Expand Up @@ -288,11 +288,19 @@ return /******/ (function(modules) { // webpackBootstrap
pps = owner.properties,
charCode = event.which || event.keyCode;

// if we got any charCode === 8, this means, that this device correctly
// sends backspace keys in event, so we do not need to apply any hacks
owner.hasBackspaceSupport = owner.hasBackspaceSupport || charCode === 8;
if (!owner.hasBackspaceSupport && Util.isAndroidBackspaceKeydown(owner.lastInputValue, pps.result)) {
charCode = 8;
}

// hit backspace when last character is delimiter
if (charCode === 8 && Util.isDelimiter(pps.result.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
pps.backspace = true;
var postDelimiter = Util.getPostDelimiter(pps.result, pps.delimiter, pps.delimiters);
if (charCode === 8 && postDelimiter) {
pps.postDelimiterBackspace = postDelimiter;
} else {
pps.backspace = false;
pps.postDelimiterBackspace = false;
}

owner.registeredEvents.onKeyDown(event);
Expand Down Expand Up @@ -336,17 +344,13 @@ return /******/ (function(modules) { // webpackBootstrap
var owner = this,
pps = owner.properties;

if (Util.isAndroidBackspaceKeydown(owner.lastInputValue, owner.element.value) && Util.isDelimiter(pps.result.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
pps.backspace = true;
}

// case 1: delete one more character "4"
// 1234*| -> hit backspace -> 123|
// case 2: last character is not delimiter which is:
// 12|34* -> hit backspace -> 1|34*

if (!fromProps && !pps.numeral && pps.backspace && !Util.isDelimiter(value.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
value = Util.headStr(value, value.length - pps.delimiterLength);
var postDelimiterAfter = Util.getPostDelimiter(value, pps.delimiter, pps.delimiters);
if (!fromProps && !pps.numeral && pps.postDelimiterBackspace && !postDelimiterAfter) {
value = Util.headStr(value, value.length - pps.postDelimiterBackspace.length);
}

// phone formatter
Expand Down Expand Up @@ -2368,18 +2372,21 @@ return /******/ (function(modules) { // webpackBootstrap
return value.replace(re, '');
},

isDelimiter: function isDelimiter(letter, delimiter, delimiters) {
getPostDelimiter: function getPostDelimiter(value, delimiter, delimiters) {
// single delimiter
if (delimiters.length === 0) {
return letter === delimiter;
return value.slice(-delimiter.length) === delimiter ? delimiter : '';
}

// multiple delimiters
return delimiters.some(function (current) {
if (letter === current) {
return true;
var matchedDelimiter = '';
delimiters.forEach(function (current) {
if (value.slice(-current.length) === current) {
matchedDelimiter = current;
}
});

return matchedDelimiter;
},

getDelimiterREByDelimiter: function getDelimiterREByDelimiter(delimiter) {
Expand Down Expand Up @@ -2418,7 +2425,9 @@ return /******/ (function(modules) { // webpackBootstrap

// multiple delimiters
delimiters.forEach(function (current) {
value = value.replace(owner.getDelimiterREByDelimiter(current), '');
current.split('').forEach(function (letter) {
value = value.replace(owner.getDelimiterREByDelimiter(letter), '');
});
});

return value;
Expand Down
4 changes: 2 additions & 2 deletions dist/cleave-react-node.min.js

Large diffs are not rendered by default.

43 changes: 26 additions & 17 deletions dist/cleave-react.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ return /******/ (function(modules) { // webpackBootstrap
value = value.replace('.', pps.numeralDecimalMark);
}

pps.backspace = false;
pps.postDelimiterBackspace = false;

owner.onChange({
target: { value: value },
Expand Down Expand Up @@ -288,11 +288,19 @@ return /******/ (function(modules) { // webpackBootstrap
pps = owner.properties,
charCode = event.which || event.keyCode;

// if we got any charCode === 8, this means, that this device correctly
// sends backspace keys in event, so we do not need to apply any hacks
owner.hasBackspaceSupport = owner.hasBackspaceSupport || charCode === 8;
if (!owner.hasBackspaceSupport && Util.isAndroidBackspaceKeydown(owner.lastInputValue, pps.result)) {
charCode = 8;
}

// hit backspace when last character is delimiter
if (charCode === 8 && Util.isDelimiter(pps.result.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
pps.backspace = true;
var postDelimiter = Util.getPostDelimiter(pps.result, pps.delimiter, pps.delimiters);
if (charCode === 8 && postDelimiter) {
pps.postDelimiterBackspace = postDelimiter;
} else {
pps.backspace = false;
pps.postDelimiterBackspace = false;
}

owner.registeredEvents.onKeyDown(event);
Expand Down Expand Up @@ -336,17 +344,13 @@ return /******/ (function(modules) { // webpackBootstrap
var owner = this,
pps = owner.properties;

if (Util.isAndroidBackspaceKeydown(owner.lastInputValue, owner.element.value) && Util.isDelimiter(pps.result.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
pps.backspace = true;
}

// case 1: delete one more character "4"
// 1234*| -> hit backspace -> 123|
// case 2: last character is not delimiter which is:
// 12|34* -> hit backspace -> 1|34*

if (!fromProps && !pps.numeral && pps.backspace && !Util.isDelimiter(value.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
value = Util.headStr(value, value.length - pps.delimiterLength);
var postDelimiterAfter = Util.getPostDelimiter(value, pps.delimiter, pps.delimiters);
if (!fromProps && !pps.numeral && pps.postDelimiterBackspace && !postDelimiterAfter) {
value = Util.headStr(value, value.length - pps.postDelimiterBackspace.length);
}

// phone formatter
Expand Down Expand Up @@ -2562,18 +2566,21 @@ return /******/ (function(modules) { // webpackBootstrap
return value.replace(re, '');
},

isDelimiter: function isDelimiter(letter, delimiter, delimiters) {
getPostDelimiter: function getPostDelimiter(value, delimiter, delimiters) {
// single delimiter
if (delimiters.length === 0) {
return letter === delimiter;
return value.slice(-delimiter.length) === delimiter ? delimiter : '';
}

// multiple delimiters
return delimiters.some(function (current) {
if (letter === current) {
return true;
var matchedDelimiter = '';
delimiters.forEach(function (current) {
if (value.slice(-current.length) === current) {
matchedDelimiter = current;
}
});

return matchedDelimiter;
},

getDelimiterREByDelimiter: function getDelimiterREByDelimiter(delimiter) {
Expand Down Expand Up @@ -2612,7 +2619,9 @@ return /******/ (function(modules) { // webpackBootstrap

// multiple delimiters
delimiters.forEach(function (current) {
value = value.replace(owner.getDelimiterREByDelimiter(current), '');
current.split('').forEach(function (letter) {
value = value.replace(owner.getDelimiterREByDelimiter(letter), '');
});
});

return value;
Expand Down
4 changes: 2 additions & 2 deletions dist/cleave-react.min.js

Large diffs are not rendered by default.

37 changes: 21 additions & 16 deletions dist/cleave.js
Original file line number Diff line number Diff line change
Expand Up @@ -204,13 +204,12 @@ return /******/ (function(modules) { // webpackBootstrap
owner.lastInputValue = currentValue;

// hit backspace when last character is delimiter
if (charCode === 8 && Util.isDelimiter(currentValue.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
pps.backspace = true;

return;
var postDelimiter = Util.getPostDelimiter(currentValue, pps.delimiter, pps.delimiters);
if (charCode === 8 && postDelimiter) {
pps.postDelimiterBackspace = postDelimiter;
} else {
pps.postDelimiterBackspace = false;
}

pps.backspace = false;
},

onChange: function () {
Expand Down Expand Up @@ -268,8 +267,9 @@ return /******/ (function(modules) { // webpackBootstrap
// case 2: last character is not delimiter which is:
// 12|34* -> hit backspace -> 1|34*
// note: no need to apply this for numeral mode
if (!pps.numeral && pps.backspace && !Util.isDelimiter(value.slice(-pps.delimiterLength), pps.delimiter, pps.delimiters)) {
value = Util.headStr(value, value.length - pps.delimiterLength);
var postDelimiterAfter = Util.getPostDelimiter(value, pps.delimiter, pps.delimiters);
if (!pps.numeral && pps.postDelimiterBackspace && !postDelimiterAfter) {
value = Util.headStr(value, value.length - pps.postDelimiterBackspace.length);
}

// phone formatter
Expand Down Expand Up @@ -435,7 +435,7 @@ return /******/ (function(modules) { // webpackBootstrap
value = value.replace('.', pps.numeralDecimalMark);
}

pps.backspace = false;
pps.postDelimiterBackspace = false;

owner.element.value = value;
owner.onInput(value);
Expand Down Expand Up @@ -1151,18 +1151,21 @@ return /******/ (function(modules) { // webpackBootstrap
return value.replace(re, '');
},

isDelimiter: function (letter, delimiter, delimiters) {
getPostDelimiter: function (value, delimiter, delimiters) {
// single delimiter
if (delimiters.length === 0) {
return letter === delimiter;
return value.slice(-delimiter.length) === delimiter ? delimiter : '';
}

// multiple delimiters
return delimiters.some(function (current) {
if (letter === current) {
return true;
var matchedDelimiter = '';
delimiters.forEach(function (current) {
if (value.slice(-current.length) === current) {
matchedDelimiter = current;
}
});

return matchedDelimiter;
},

getDelimiterREByDelimiter: function (delimiter) {
Expand Down Expand Up @@ -1201,7 +1204,9 @@ return /******/ (function(modules) { // webpackBootstrap

// multiple delimiters
delimiters.forEach(function (current) {
value = value.replace(owner.getDelimiterREByDelimiter(current), '');
current.split('').forEach(function (letter) {
value = value.replace(owner.getDelimiterREByDelimiter(letter), '');
});
});

return value;
Expand Down Expand Up @@ -1337,7 +1342,7 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
},

getActiveElement: function(parent) {
var activeElement = parent.activeElement;
if (activeElement && activeElement.shadowRoot) {
Expand Down
4 changes: 2 additions & 2 deletions dist/cleave.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"form",
"input"
],
"version": "1.4.6",
"version": "1.4.7",
"files": [
"src",
"dist",
Expand Down
Loading

0 comments on commit 27ebf3b

Please sign in to comment.