Merge pull request #253 from Bitcoin-com/wallet/task/537

Wallet/task/537
This commit is contained in:
Jean-Baptiste Dominguez 2018-08-09 16:42:21 +09:00 committed by GitHub
commit fb8d2efe12
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 164 additions and 159 deletions

View file

@ -1,5 +1,6 @@
'use strict'; 'use strict';
(function(){
/** /**
* @desc amount directive that can be used to display formatted financial values * @desc amount directive that can be used to display formatted financial values
* size-equal attribute is optional, defaults to false. * size-equal attribute is optional, defaults to false.
@ -10,8 +11,9 @@
* @example <formatted-amount value="fee.value" currency="fee.currency"></formatted-amount> * @example <formatted-amount value="fee.value" currency="fee.currency"></formatted-amount>
* @example <formatted-amount value="fee.value" currency="fee.currency" size-equal="true"></formatted-amount> * @example <formatted-amount value="fee.value" currency="fee.currency" size-equal="true"></formatted-amount>
*/ */
angular.module('bitcoincom.directives') angular
.directive('formattedAmount', function(uxLanguage) { .module('bitcoincom.directives')
.directive('formattedAmount', function() {
return { return {
restrict: 'E', restrict: 'E',
scope: { scope: {
@ -20,7 +22,11 @@ angular.module('bitcoincom.directives')
sizeEqual: '@' sizeEqual: '@'
}, },
templateUrl: 'views/includes/formatted-amount.html', templateUrl: 'views/includes/formatted-amount.html',
controller: function($scope, $timeout) { controller: formattedAmountController
}
});
function formattedAmountController($scope, $timeout, uxLanguage) {
$scope.canShow = false; $scope.canShow = false;
$scope.displaySizeEqual = !!$scope.sizeEqual; $scope.displaySizeEqual = !!$scope.sizeEqual;
@ -32,40 +38,57 @@ angular.module('bitcoincom.directives')
'3': ['BHD', 'IQD', 'JOD', 'KWD', 'OMR', 'TND'], '3': ['BHD', 'IQD', 'JOD', 'KWD', 'OMR', 'TND'],
'8': ['BCH', 'BTC'] '8': ['BCH', 'BTC']
}; };
var localizeNumbers = function(x, minimumFractionDigits) {
var parsed = parseFloat(x);
var opts = {
minimumFractionDigits: minimumFractionDigits,
useGrouping: true
};
var lang = uxLanguage.getCurrentLanguage();
var localized = parsed.toLocaleString(lang, opts);
var corrected = ensureEnoughFractionalDigits(localized, x, minimumFractionDigits);
return corrected;
};
var buildAmount = function(start, middle, end) { formatNumbers();
$scope.$watchGroup(['currency', 'value'], function onFormattedAmountWatch() {
formatNumbers();
});
function buildAmount(start, middle, end) {
$scope.start = start; $scope.start = start;
$scope.middle = middle; $scope.middle = middle;
$scope.end = end; $scope.end = end;
}; };
var getDecimalPlaces = function(currency) { /**
if (decimalPlaces['0'].indexOf(currency.toUpperCase()) > -1) return '0'; * On Android 4.4, toLocaleString() only returns 3 fractional digits when 8 is specified.
if (decimalPlaces['3'].indexOf(currency.toUpperCase()) > -1) return '3'; */
if (decimalPlaces['8'].indexOf(currency.toUpperCase()) > -1) return '8'; function ensureEnoughFractionDigits(localizedString, number, desiredFractionDigits) {
return '2'; if (desiredFractionDigits === 0) {
}; // Assume it is OK
return localizedString;
}
var fractionalRe = /^-*(\d*\D)(\d+)$/;
var match = fractionalRe.exec(localizedString);
if (!match || match.length !== 3) {
// Don't know what's happening, just return what we have
return localizedString;
}
var getDecimalSeparator = function() { var decimals = match[2];
var testNum = 1.5; var decimalCount = decimals.length;
var testString = testNum.toLocaleString(uxLanguage.getCurrentLanguage()); if (decimalCount >= desiredFractionDigits) {
// Some environments let you set decimal separators that are more than one character // Everything is OK.
var separator = /^1(.+)5$/.exec(testString)[1] return localizedString;
return separator; }
};
var formatNumbers = function() { if (typeof number !== 'number') {
number = parseFloat(number);
}
var fixed = number.toFixed(desiredFractionDigits);
var fixedMatch = fractionalRe.exec(fixed);
if (!fixedMatch || fixedMatch.length !== 3) {
// Don't know what's happening, just return what we have
return localizedString;
}
// Keeps locale decimal separator.
var enough = match[1] + fixedMatch[2];
return enough;
}
function formatNumbers() {
// During watch, may be changed from having a separate currency value, // During watch, may be changed from having a separate currency value,
// to both being in value. Don't want to use previous currency value. // to both being in value. Don't want to use previous currency value.
// Try to extract currency from value.. // Try to extract currency from value..
@ -128,50 +151,34 @@ angular.module('bitcoincom.directives')
$scope.canShow = true; $scope.canShow = true;
}; };
formatNumbers(); function getDecimalPlaces(currency) {
$scope.$watchGroup(['currency', 'value'], function onFormattedAmountWatch() { if (decimalPlaces['0'].indexOf(currency.toUpperCase()) > -1) return '0';
formatNumbers(); if (decimalPlaces['3'].indexOf(currency.toUpperCase()) > -1) return '3';
}); if (decimalPlaces['8'].indexOf(currency.toUpperCase()) > -1) return '8';
return '2';
/**
* On Android 4.4, toLocaleString() only returns 3 fractional digits when 8 is specified.
*/
function ensureEnoughFractionalDigits(localizedString, number, desiredFractionDigits) {
if (desiredFractionDigits === 0) {
// Assume it is OK
return localizedString;
}
var fractionalRe = /^(\d*\D)(\d+)$/;
var match = fractionalRe.exec(localizedString);
if (match.length !== 3) {
// Don't know what's happening, just return what we have
return localizedString;
}
var decimals = match[2];
var decimalCount = decimals.length;
if (decimalCount >= desiredFractionDigits) {
// Everything is OK.
return localizedString;
}
if (typeof number !== 'number') {
number = parseFloat(number);
}
var fixed = number.toFixed(desiredFractionDigits);
var fixedMatch = fractionalRe.exec(fixed);
if (fixedMatch.length !== 3) {
// Don't know what's happening, just return what we have
return localizedString;
}
// Keeps locale decimal separator.
var enough = match[1] + fixedMatch[2];
return enough;
}
});
}
}; };
function getDecimalSeparator() {
var testNum = 1.5;
var testString = testNum.toLocaleString(uxLanguage.getCurrentLanguage());
// Some environments let you set decimal separators that are more than one character
var separator = /^1(.+)5$/.exec(testString)[1]
return separator;
};
function localizeNumbers(x, minimumFractionDigits) {
var parsed = parseFloat(x);
var opts = {
minimumFractionDigits: minimumFractionDigits,
useGrouping: true
};
var lang = uxLanguage.getCurrentLanguage();
var localized = parsed.toLocaleString(lang, opts);
var corrected = ensureEnoughFractionDigits(localized, x, minimumFractionDigits);
return corrected;
};
});
} }
);
})();

View file

@ -15359,8 +15359,6 @@ log-options #check-bar .checkbox-icon {
#view-review .fee-summary { #view-review .fee-summary {
position: absolute; position: absolute;
bottom: 92px; } bottom: 92px; }
#view-review .fee-summary-spacer {
height: 15px; }
#view-review .shapeshift-banner, #view-review .bitpay-banner, #view-review .egifter-banner { #view-review .shapeshift-banner, #view-review .bitpay-banner, #view-review .egifter-banner {
box-shadow: none; } box-shadow: none; }
#view-review .warning { #view-review .warning {

View file

@ -37,14 +37,14 @@
<button class="extra button" ng-click="vm.openPopup()"> <button class="extra button" ng-click="vm.openPopup()">
<span> <span>
<img src="img/icon-alternative-currency-black.svg"/> <img src="img/icon-alternative-currency-black.svg"/>
&ensp; <pre> </pre>
<span translate>Change Currency</span> <span translate>Change Currency</span>
</span> </span>
</button> </button>
<div class="extra available-funds" <div class="extra available-funds"
ng-class="{warning: vm.fundsAreInsufficient}" ng-class="{warning: vm.fundsAreInsufficient}"
ng-if="!vm.isRequestingSpecificAmount" translate> ng-if="!vm.isRequestingSpecificAmount" translate>
<span>Available Funds:</span>&ensp;<span><formatted-amount value="{{vm.availableFunds}}" size-equal="true"></formatted-amount></span> <span>Available Funds: </span><span><formatted-amount value="{{vm.availableFunds}}" size-equal="true"></formatted-amount></span>
</div> </div>
</div> </div>
</div> </div>