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..d1dc61ef 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'); + }); });