From 6178102e0d821b109609ca60280951af1d9cbe7d Mon Sep 17 00:00:00 2001 From: Thomas Christensen Date: Wed, 17 May 2017 12:18:03 +0200 Subject: [PATCH 1/3] added possibility to add currency after value in money directive --- demo/index.html | 4 ++++ src/global/money/money.html | 2 ++ src/global/money/money.js | 29 +++++++++++++++++++++++++---- src/global/money/money.spec.js | 11 +++++++++++ src/global/money/money.test.js | 9 +++++++++ 5 files changed, 51 insertions(+), 4 deletions(-) diff --git a/demo/index.html b/demo/index.html index 78ea2587..70cc5a83 100644 --- a/demo/index.html +++ b/demo/index.html @@ -124,6 +124,10 @@

ui-money-mask

ui-money-mask without space after currency symbol

Money: +
+

ui-money-mask with currency after value

+ Money: +

ui-br-phone-number


- - {{form.phoneNumber.$error}}
diff --git a/src/global/money/money.html b/src/global/money/money.html index 1d07c624..a2b62af4 100644 --- a/src/global/money/money.html +++ b/src/global/money/money.html @@ -35,6 +35,8 @@

ui-money-mask

- {{form.field27.$error}}

ui-money-mask without space after currency symbol

Money: +

ui-money-mask with currency after value

+ Money: diff --git a/src/global/money/money.js b/src/global/money/money.js index 82e01845..a87d0849 100644 --- a/src/global/money/money.js +++ b/src/global/money/money.js @@ -12,12 +12,21 @@ function MoneyMaskDirective($locale, $parse, PreFormatters) { thousandsDelimiter = $locale.NUMBER_FORMATS.GROUP_SEP, currencySym = $locale.NUMBER_FORMATS.CURRENCY_SYM, symbolSeparation = ' ', - decimals = $parse(attrs.uiMoneyMask)(scope); + decimals = $parse(attrs.uiMoneyMask)(scope), + backspacePressed = false; + element.bind('keydown keypress', function(event) { + backspacePressed = event.which === 8; + }); function maskFactory(decimals) { var decimalsPattern = decimals > 0 ? decimalDelimiter + new Array(decimals + 1).join('0') : ''; - var maskPattern = symbolSeparation + '#' + thousandsDelimiter + '##0' + decimalsPattern; + var maskPattern = '#' + thousandsDelimiter + '##0' + decimalsPattern; + if (angular.isDefined(attrs.uiCurrencyAfter)) { + maskPattern += symbolSeparation; + } else { + maskPattern = symbolSeparation + maskPattern; + } return new StringMask(maskPattern, {reverse: true}); } @@ -48,6 +57,9 @@ function MoneyMaskDirective($locale, $parse, PreFormatters) { } var prefix = (angular.isDefined(attrs.uiNegativeNumber) && value < 0) ? '-' : ''; var valueToFormat = PreFormatters.prepareNumberToFormatter(value, decimals); + if (angular.isDefined(attrs.uiCurrencyAfter)) { + return prefix + moneyMask.apply(valueToFormat) + currencySym; + } return prefix + currencySym + moneyMask.apply(valueToFormat); } @@ -56,10 +68,19 @@ function MoneyMaskDirective($locale, $parse, PreFormatters) { return value; } - var actualNumber = value.replace(/[^\d]+/g,''); + var actualNumber = value.replace(/[^\d]+/g,''), formatedValue; actualNumber = actualNumber.replace(/^[0]+([1-9])/,'$1'); actualNumber = actualNumber || '0'; - var formatedValue = currencySym + moneyMask.apply(actualNumber); + + if (backspacePressed && angular.isDefined(attrs.uiCurrencyAfter) && actualNumber !== 0) { + actualNumber = actualNumber.substring(0, actualNumber.length - 1); + backspacePressed = false; + } + if (angular.isDefined(attrs.uiCurrencyAfter)) { + formatedValue = moneyMask.apply(actualNumber) + currencySym; + } else { + formatedValue = currencySym + moneyMask.apply(actualNumber); + } if (angular.isDefined(attrs.uiNegativeNumber)) { var isNegative = (value[0] === '-'), diff --git a/src/global/money/money.spec.js b/src/global/money/money.spec.js index 4a5a44a1..8df5e0c1 100644 --- a/src/global/money/money.spec.js +++ b/src/global/money/money.spec.js @@ -108,5 +108,16 @@ describe('ui.utils.masks.money', function() { expect(input.getAttribute('value')).toEqual(currency + '0,00'); }); + + it('should add currency after value', function() { + var currency = 'R$ '; + + var input = element(by.model('currencyAfterValue')); + + input.clear(); //Clear to send invalid content + input.sendKeys('1'); + + expect(input.getAttribute('value')).toEqual('0,01' + currency); + }); }); }); diff --git a/src/global/money/money.test.js b/src/global/money/money.test.js index 9db15b9c..192d9cc5 100644 --- a/src/global/money/money.test.js +++ b/src/global/money/money.test.js @@ -207,4 +207,13 @@ describe('ui-money-mask', function() { var model = input.controller('ngModel'); expect(model.$viewValue).toBe('345.00'); }); + + it('should add currency after value', function() { + var input = TestUtil.compile('', { + model: 345.00 + }); + + var model = input.controller('ngModel'); + expect(model.$viewValue).toBe('345.00 EUR'); + }); }); From 1ba0a2090b4b22d74846d4ef273a0e86a957a627 Mon Sep 17 00:00:00 2001 From: Thomas Christensen Date: Thu, 18 May 2017 07:27:48 +0200 Subject: [PATCH 2/3] update spec test --- src/global/money/money.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/global/money/money.spec.js b/src/global/money/money.spec.js index 8df5e0c1..9492904c 100644 --- a/src/global/money/money.spec.js +++ b/src/global/money/money.spec.js @@ -117,7 +117,7 @@ describe('ui.utils.masks.money', function() { input.clear(); //Clear to send invalid content input.sendKeys('1'); - expect(input.getAttribute('value')).toEqual('0,01' + currency); + expect(input.getAttribute('value')).toEqual('0,01 ' + currency); }); }); }); From c440ea521fd2441d40edca824c05d3dff67a8a6c Mon Sep 17 00:00:00 2001 From: Thomas Christensen Date: Thu, 18 May 2017 07:35:35 +0200 Subject: [PATCH 3/3] update spec test --- src/global/money/money.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/global/money/money.spec.js b/src/global/money/money.spec.js index 9492904c..d1dc61ef 100644 --- a/src/global/money/money.spec.js +++ b/src/global/money/money.spec.js @@ -110,14 +110,14 @@ describe('ui.utils.masks.money', function() { }); it('should add currency after value', function() { - var currency = 'R$ '; + var currency = ' R$'; var input = element(by.model('currencyAfterValue')); input.clear(); //Clear to send invalid content input.sendKeys('1'); - expect(input.getAttribute('value')).toEqual('0,01 ' + currency); + expect(input.getAttribute('value')).toEqual('0,01' + currency); }); }); });