From 75b45d2f171300dd5976e3380fb93bad74fc776c Mon Sep 17 00:00:00 2001
From: Gustavo Cortez
Date: Fri, 27 Jun 2014 02:46:28 -0300
Subject: [PATCH] Fixed amount values: decimal is variable, depending of unit
in config. Also custom values are allowed
---
index.html | 34 ++++++++---------
js/filters.js | 22 +++++++++--
js/services/controllerUtils.js | 4 +-
test/unit/filters/filtersSpec.js | 65 +++++++++++++++++++++++++++++---
4 files changed, 97 insertions(+), 28 deletions(-)
diff --git a/index.html b/index.html
index 8f70095d9..637a95286 100644
--- a/index.html
+++ b/index.html
@@ -38,10 +38,10 @@
{{totalBalance || 0
- |noFractionNumber:4}} {{$root.unitName}}
+ |noFractionNumber}} {{$root.unitName}}
@@ -51,9 +51,9 @@
{{availableBalance || 0|noFractionNumber:4}} {{$root.unitName}}
+ tooltip-placement="bottom">{{availableBalance || 0|noFractionNumber}} {{$root.unitName}}
@@ -422,11 +422,11 @@
- {{$root.balanceByAddr[addr.address] || 0|noFractionNumber:4}} {{$root.unitName}}
+ {{$root.balanceByAddr[addr.address] || 0|noFractionNumber}} {{$root.unitName}}
- {{addr.balance || 0|noFractionNumber:4}} {{$root.unitName}}
+ {{addr.balance || 0|noFractionNumber}} {{$root.unitName}}
@@ -444,12 +444,12 @@
- {{balanceByAddr[selectedAddr.address] || 0 | noFractionNumber:4}}
+ {{balanceByAddr[selectedAddr.address] || 0 | noFractionNumber}}
{{selectedAddr.address}}
- {{selectedAddr.balance || 0|noFractionNumber:4}} {{$root.unitName}}
+ {{selectedAddr.balance || 0|noFractionNumber}} {{$root.unitName}}
@@ -481,7 +481,7 @@
- {{out.value | noFractionNumber:4}} {{$root.unitName}}
+ {{out.value | noFractionNumber}} {{$root.unitName}}
@@ -565,7 +565,7 @@
{{tx.missingSignatures}} signatures missing
- Fee: {{tx.fee|noFractionNumber:4}} {{$root.unitName}}
+ Fee: {{tx.fee|noFractionNumber}} {{$root.unitName}}
Proposal ID: {{tx.ntxid}}
@@ -612,7 +612,7 @@
-
{{vin.value| noFractionNumber:4}} {{$root.unitName}}
+
{{vin.value| noFractionNumber}} {{$root.unitName}}
@@ -623,7 +623,7 @@
-
{{vout.value| noFractionNumber:4}} {{$root.unitName}}
+
{{vout.value| noFractionNumber}} {{$root.unitName}}
@@ -633,9 +633,9 @@
-
Fees: {{btx.fees | noFractionNumber:4}} {{$root.unitName}}
+
Fees: {{btx.fees | noFractionNumber}} {{$root.unitName}}
Confirmations: {{btx.confirmations || 0}}
-
Total: {{btx.valueOut| noFractionNumber:4}} {{$root.unitName}}
+
Total: {{btx.valueOut| noFractionNumber}} {{$root.unitName}}
@@ -725,13 +725,13 @@
Total amount for this transaction:
- {{amount + defaultFee |noFractionNumber:4}} {{$root.unitName}}
+ {{amount + defaultFee |noFractionNumber}} {{$root.unitName}}
- {{ ((amount + defaultFee) * unitToBtc) |noFractionNumber:4}} BTC
+ {{ ((amount + defaultFee) * unitToBtc)|noFractionNumber:8}} BTC
- Including fee of {{defaultFee|noFractionNumber:4}} {{$root.unitName}}
+ Including fee of {{defaultFee|noFractionNumber}} {{$root.unitName}}
diff --git a/js/filters.js b/js/filters.js
index 14069d27d..46d56469d 100644
--- a/js/filters.js
+++ b/js/filters.js
@@ -36,13 +36,29 @@ angular.module('copayApp.filters', [])
function(filter, locale) {
var numberFilter = filter('number');
var formats = locale.NUMBER_FORMATS;
- return function(amount, fraction) {
- var value = numberFilter(amount, fraction);
+ return function(amount, n) {
+ var fractionSize = (typeof(n) != 'undefined') ? n : config.unitToSatoshi.toString().length - 1;
+ var value = numberFilter(amount, fractionSize);
var sep = value.indexOf(formats.DECIMAL_SEP);
var group = value.indexOf(formats.GROUP_SEP);
if(amount >= 0) {
if (group > 0) {
- return value.substring(0, sep);
+ if (sep < 0) {
+ return value;
+ }
+ var intValue = value.substring(0, sep);
+ var floatValue = parseFloat(value.substring(sep));
+ if (floatValue === 0) {
+ floatValue = '';
+ }
+ else {
+ if(floatValue % 1 === 0) {
+ floatValue = floatValue.toFixed(0);
+ }
+ floatValue = floatValue.toString().substring(1);
+ }
+ var finalValue = intValue + floatValue;
+ return finalValue;
}
else {
value = parseFloat(value);
diff --git a/js/services/controllerUtils.js b/js/services/controllerUtils.js
index f8e87d5e9..cbc293a1f 100644
--- a/js/services/controllerUtils.js
+++ b/js/services/controllerUtils.js
@@ -193,9 +193,9 @@ angular.module('copayApp.services')
var COIN = bitcore.util.COIN;
$rootScope.totalBalance = balanceSat * satToUnit;
- $rootScope.totalBalanceBTC = (balanceSat / COIN).toFixed(4);
+ $rootScope.totalBalanceBTC = (balanceSat / COIN);
$rootScope.availableBalance = safeBalanceSat * satToUnit;
- $rootScope.availableBalanceBTC = (safeBalanceSat / COIN).toFixed(4);
+ $rootScope.availableBalanceBTC = (safeBalanceSat / COIN);
var balanceByAddr = {};
for (var ii in balanceByAddrSat) {
balanceByAddr[ii] = balanceByAddrSat[ii] * satToUnit;
diff --git a/test/unit/filters/filtersSpec.js b/test/unit/filters/filtersSpec.js
index a942c4ff2..fe180659f 100644
--- a/test/unit/filters/filtersSpec.js
+++ b/test/unit/filters/filtersSpec.js
@@ -69,14 +69,67 @@ describe('Unit: Testing Filters', function() {
}));
});
- describe('noFractionNumber', function() {
+ describe('noFractionNumber bits', function() {
+ beforeEach(function() {
+ config.unitToSatoshi = 100;
+ config.unitName = 'bits';
+ });
it('should format number to display correctly', inject(function($filter) {
var noFraction = $filter('noFractionNumber');
- var fraction = 4;
- expect(noFraction(3100, fraction)).to.equal('3,100');
- expect(noFraction(3100200, fraction)).to.equal('3,100,200');
- expect(noFraction(3, fraction)).to.equal('3');
- expect(noFraction(0.3, fraction)).to.equal(0.3);
+ expect(noFraction(3100)).to.equal('3,100');
+ expect(noFraction(3100200)).to.equal('3,100,200');
+ expect(noFraction(3)).to.equal('3');
+ expect(noFraction(0.3)).to.equal(0.3);
+ expect(noFraction(0.30000000)).to.equal(0.3);
+ expect(noFraction(3200.01)).to.equal('3,200.01');
+ expect(noFraction(3200890.010000)).to.equal('3,200,890.01');
+ }));
+ });
+
+ describe('noFractionNumber BTC', function() {
+ beforeEach(function() {
+ config.unitToSatoshi = 100000000;
+ config.unitName = 'BTC';
+ });
+ it('should format number to display correctly', inject(function($filter) {
+ var noFraction = $filter('noFractionNumber');
+ expect(noFraction(0.30000000)).to.equal(0.3);
+ expect(noFraction(0.00302000)).to.equal(0.00302);
+ expect(noFraction(1.00000001)).to.equal(1.00000001);
+ expect(noFraction(3.10000012)).to.equal(3.10000012);
+ expect(noFraction(0.00100000)).to.equal(0.001);
+ expect(noFraction(0.00100009)).to.equal(0.00100009);
+ expect(noFraction(2000.00312011)).to.equal('2,000.00312011');
+ expect(noFraction(2000998.00312011)).to.equal('2,000,998.00312011');
+ }));
+ });
+
+ describe('noFractionNumber mBTC', function() {
+ beforeEach(function() {
+ config.unitToSatoshi = 100000;
+ config.unitName = 'mBTC';
+ });
+ it('should format number to display correctly', inject(function($filter) {
+ var noFraction = $filter('noFractionNumber');
+ expect(noFraction(0.30000)).to.equal(0.3);
+ expect(noFraction(0.00302)).to.equal(0.00302);
+ expect(noFraction(1.00001)).to.equal(1.00001);
+ expect(noFraction(3.10002)).to.equal(3.10002);
+ expect(noFraction(0.00100000)).to.equal(0.001);
+ expect(noFraction(0.00100009)).to.equal(0.001);
+ expect(noFraction(2000.00312)).to.equal('2,000.00312');
+ expect(noFraction(2000998.00312)).to.equal('2,000,998.00312');
+ }));
+ });
+
+ describe('noFractionNumber:custom fractionSize', function() {
+ it('should format number to display correctly', inject(function($filter) {
+ var noFraction = $filter('noFractionNumber');
+ expect(noFraction(0.30000, 0)).to.equal('0');
+ expect(noFraction(1.00001, 0)).to.equal('1');
+ expect(noFraction(3.10002, 0)).to.equal('3');
+ expect(noFraction(2000.00312, 0)).to.equal('2,000');
+ expect(noFraction(2000998.00312, 0)).to.equal('2,000,998');
}));
});