From 57109050aba19c364d9377c3246c18cb936fcc67 Mon Sep 17 00:00:00 2001 From: Robert Raymond Date: Fri, 18 Oct 2019 14:21:46 +0100 Subject: [PATCH 1/3] Fix for signBeforePrefix breaking getRawValue --- src/Cleave.js | 4 ++-- src/utils/Util.js | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Cleave.js b/src/Cleave.js index 09221467..cf3e5bbb 100644 --- a/src/Cleave.js +++ b/src/Cleave.js @@ -278,7 +278,7 @@ Cleave.prototype = { // strip prefix value = Util.getPrefixStrippedValue( value, pps.prefix, pps.prefixLength, - pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix + pps.result, pps.delimiter, pps.delimiters, pps.signBeforePrefix, pps.noImmediatePrefix ); // strip non-numeric characters @@ -417,7 +417,7 @@ Cleave.prototype = { rawValue = owner.element.value; if (pps.rawValueTrimPrefix) { - rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters); + rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.signBeforePrefix); } if (pps.numeral) { diff --git a/src/utils/Util.js b/src/utils/Util.js index 0099ec10..5065672d 100644 --- a/src/utils/Util.js +++ b/src/utils/Util.js @@ -85,12 +85,17 @@ var Util = { // PREFIX-123 | PEFIX-123 | 123 // PREFIX-123 | PREFIX-23 | 23 // PREFIX-123 | PREFIX-1234 | 1234 - getPrefixStrippedValue: function (value, prefix, prefixLength, prevResult, delimiter, delimiters, noImmediatePrefix) { + getPrefixStrippedValue: function (value, prefix, prefixLength, prevResult, delimiter, delimiters, signBeforePrefix, noImmediatePrefix) { // No prefix if (prefixLength === 0) { return value; } + if (signBeforePrefix && (value.slice(0, 1) == '-')) { + var prev = (prevResult.slice(0, 1) == '-') ? prevResult.slice(1) : prevResult; + return '-' + this.getPrefixStrippedValue(value.slice(1), prefix, prefixLength, prev, delimiter, delimiters, signBeforePrefix, noImmediatePrefix) + } + // Pre result prefix string does not match pre-defined prefix if (prevResult.slice(0, prefixLength) !== prefix) { // Check if the first time user entered something From 8055ba66310e78fa53bb021fb3662cc7c5b26fdc Mon Sep 17 00:00:00 2001 From: Robert Raymond Date: Fri, 18 Oct 2019 14:33:23 +0100 Subject: [PATCH 2/3] Added unit test --- test/fixtures/util.json | 16 ++++++++++++++++ test/unit/Util_spec.js | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/test/fixtures/util.json b/test/fixtures/util.json index 531caa8d..d7e428ab 100644 --- a/test/fixtures/util.json +++ b/test/fixtures/util.json @@ -127,6 +127,7 @@ "test12", "-", [], + false, false ], "expected": "123" @@ -139,6 +140,7 @@ "", "-", [], + false, false ], "expected": "" @@ -151,6 +153,7 @@ "", "-", [], + false, true ], "expected": "1" @@ -176,6 +179,19 @@ [] ], "expected": "12" + }, + { + "params": [ + "-test123", + "test", + 4, + "-test123", + "-", + [], + true, + false + ], + "expected": "-123" } ] } diff --git a/test/unit/Util_spec.js b/test/unit/Util_spec.js index 6f62ff19..78d014f8 100644 --- a/test/unit/Util_spec.js +++ b/test/unit/Util_spec.js @@ -25,7 +25,7 @@ describe('Util', function () { _.each(json.getPrefixStrippedValue, function (data) { var params = data.params; it('should get prefix stripped value for: ' + params[0] + ' as: ' + data.expected, function () { - Util.getPrefixStrippedValue(params[0], params[1], params[2], params[3], params[4], params[5], params[6]).should.eql(data.expected); + Util.getPrefixStrippedValue(params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7]).should.eql(data.expected); }); }); }); From 4d5bd778a041c7597fcb503541424c23176f111b Mon Sep 17 00:00:00 2001 From: Max Huang Date: Sat, 7 Mar 2020 17:21:35 +1100 Subject: [PATCH 3/3] Fix merge conflicts --- src/Cleave.js | 4 ++-- src/Cleave.react.js | 4 ++-- src/utils/Util.js | 7 ++++++- test/fixtures/util.json | 14 ++++++++++++++ test/unit/Util_spec.js | 2 +- 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/Cleave.js b/src/Cleave.js index dcd8a125..1e488f96 100644 --- a/src/Cleave.js +++ b/src/Cleave.js @@ -277,7 +277,7 @@ Cleave.prototype = { value = Util.stripDelimiters(value, pps.delimiter, pps.delimiters); // strip prefix - value = Util.getPrefixStrippedValue(value, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix); + value = Util.getPrefixStrippedValue(value, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix); // strip non-numeric characters value = pps.numericOnly ? Util.strip(value, /[^\d]/g) : value; @@ -421,7 +421,7 @@ Cleave.prototype = { rawValue = owner.element.value; if (pps.rawValueTrimPrefix) { - rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix); + rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix); } if (pps.numeral) { diff --git a/src/Cleave.react.js b/src/Cleave.react.js index 6cb2de9c..f65d9441 100644 --- a/src/Cleave.react.js +++ b/src/Cleave.react.js @@ -207,7 +207,7 @@ var cleaveReactClass = CreateReactClass({ rawValue = pps.result; if (pps.rawValueTrimPrefix) { - rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix); + rawValue = Util.getPrefixStrippedValue(rawValue, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix); } if (pps.numeral) { @@ -346,7 +346,7 @@ var cleaveReactClass = CreateReactClass({ value = Util.stripDelimiters(value, pps.delimiter, pps.delimiters); // strip prefix - value = Util.getPrefixStrippedValue(value, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix); + value = Util.getPrefixStrippedValue(value, pps.prefix, pps.prefixLength, pps.result, pps.delimiter, pps.delimiters, pps.noImmediatePrefix, pps.tailPrefix, pps.signBeforePrefix); // strip non-numeric characters value = pps.numericOnly ? Util.strip(value, /[^\d]/g) : value; diff --git a/src/utils/Util.js b/src/utils/Util.js index 20c63ba9..0ea32df1 100644 --- a/src/utils/Util.js +++ b/src/utils/Util.js @@ -85,12 +85,17 @@ var Util = { // PREFIX-123 | PEFIX-123 | 123 // PREFIX-123 | PREFIX-23 | 23 // PREFIX-123 | PREFIX-1234 | 1234 - getPrefixStrippedValue: function (value, prefix, prefixLength, prevResult, delimiter, delimiters, noImmediatePrefix, tailPrefix) { + getPrefixStrippedValue: function (value, prefix, prefixLength, prevResult, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix) { // No prefix if (prefixLength === 0) { return value; } + if (signBeforePrefix && (value.slice(0, 1) == '-')) { + var prev = (prevResult.slice(0, 1) == '-') ? prevResult.slice(1) : prevResult; + return '-' + this.getPrefixStrippedValue(value.slice(1), prefix, prefixLength, prev, delimiter, delimiters, noImmediatePrefix, tailPrefix, signBeforePrefix); + } + // Pre result prefix string does not match pre-defined prefix if (prevResult.slice(0, prefixLength) !== prefix && !tailPrefix) { // Check if the first time user entered something diff --git a/test/fixtures/util.json b/test/fixtures/util.json index 531caa8d..5603f8ae 100644 --- a/test/fixtures/util.json +++ b/test/fixtures/util.json @@ -176,6 +176,20 @@ [] ], "expected": "12" + }, + { + "params": [ + "-test123", + "test", + 4, + "-test123", + "-", + [], + false, + false, + true + ], + "expected": "-123" } ] } diff --git a/test/unit/Util_spec.js b/test/unit/Util_spec.js index 6f62ff19..91ae1311 100644 --- a/test/unit/Util_spec.js +++ b/test/unit/Util_spec.js @@ -25,7 +25,7 @@ describe('Util', function () { _.each(json.getPrefixStrippedValue, function (data) { var params = data.params; it('should get prefix stripped value for: ' + params[0] + ' as: ' + data.expected, function () { - Util.getPrefixStrippedValue(params[0], params[1], params[2], params[3], params[4], params[5], params[6]).should.eql(data.expected); + Util.getPrefixStrippedValue(params[0], params[1], params[2], params[3], params[4], params[5], params[6], params[7], params[8]).should.eql(data.expected); }); }); });