diff --git a/index.html b/index.html index 8f8ebd41e..03dc5e581 100644 --- a/index.html +++ b/index.html @@ -36,7 +36,12 @@ - {{totalBalance || 0 |number}} {{$root.unitName}} + {{totalBalance || 0 + |noFractionNumber}} {{$root.unitName}}
@@ -44,7 +49,11 @@ - {{availableBalance || 0|number}} {{$root.unitName}} + {{availableBalance || 0|noFractionNumber}} {{$root.unitName}}
@@ -173,8 +182,8 @@
- {{$root.wallet.getName()}} - {{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}} + {{$root.wallet.getName()}} + {{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}} [LIVENET] [TESTNET]
@@ -186,7 +195,7 @@
- {{$root.wallet.getName()}} + {{$root.wallet.getName()}}
{{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}} wallet @@ -196,7 +205,7 @@
Copay v{{version}}
- + @@ -413,11 +422,11 @@ - {{$root.balanceByAddr[addr.address] || 0|number}} {{$root.unitName}} + {{$root.balanceByAddr[addr.address] || 0|noFractionNumber}} {{$root.unitName}} - {{addr.balance || 0|number}} {{$root.unitName}} + {{addr.balance || 0|noFractionNumber}} {{$root.unitName}} @@ -435,12 +444,12 @@ - {{balanceByAddr[selectedAddr.address] || 0 | number}} + {{balanceByAddr[selectedAddr.address] || 0 | noFractionNumber}} {{selectedAddr.address}}
- {{selectedAddr.balance || 0|number}} {{$root.unitName}} + {{selectedAddr.balance || 0|noFractionNumber}} {{$root.unitName}}

@@ -471,7 +480,8 @@
-
{{out.value | number}} {{$root.unitName}}
+
+ {{out.value | noFractionNumber}} {{$root.unitName}}
@@ -555,7 +565,7 @@

{{tx.missingSignatures}} signatures missing

- Fee: {{tx.fee|number}} {{$root.unitName}} + Fee: {{tx.fee|noFractionNumber}} {{$root.unitName}} Proposal ID: {{tx.ntxid}}
@@ -602,7 +612,7 @@
- {{vin.value| number}} {{$root.unitName}} + {{vin.value| noFractionNumber}} {{$root.unitName}}

@@ -613,7 +623,7 @@
- {{vout.value| number}} {{$root.unitName}} + {{vout.value| noFractionNumber}} {{$root.unitName}}

@@ -623,9 +633,9 @@
-
Fees: {{btx.fees | number}} {{$root.unitName}}
+
Fees: {{btx.fees | noFractionNumber}} {{$root.unitName}}
Confirmations: {{btx.confirmations || 0}}
-
Total: {{btx.valueOut| number}} {{$root.unitName}}
+
Total: {{btx.valueOut| noFractionNumber}} {{$root.unitName}}
@@ -712,16 +722,16 @@
- Total amount for this transaction: + Total amount for this transaction:
- {{amount + defaultFee |number:4}} {{$root.unitName}} + {{amount + defaultFee |noFractionNumber}} {{$root.unitName}} - {{ ((amount + defaultFee) * unitToBtc) |number:4}} BTC + {{ ((amount + defaultFee) * unitToBtc)|noFractionNumber:8}} BTC
- Including fee of {{defaultFee |number:4}} {{$root.unitName}} + Including fee of {{defaultFee|noFractionNumber}} {{$root.unitName}}
@@ -784,23 +794,23 @@ diff --git a/js/filters.js b/js/filters.js index 9668c71bf..46d56469d 100644 --- a/js/filters.js +++ b/js/filters.js @@ -30,4 +30,44 @@ angular.module('copayApp.filters', []) return addrs; }; - }); + }) + .filter('noFractionNumber', + [ '$filter', '$locale', + function(filter, locale) { + var numberFilter = filter('number'); + var formats = locale.NUMBER_FORMATS; + 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) { + 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); + if(value % 1 === 0) { + value = value.toFixed(0); + } + return value; + } + } + return 0; + }; + } ]); 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 d9d52fe74..fe180659f 100644 --- a/test/unit/filters/filtersSpec.js +++ b/test/unit/filters/filtersSpec.js @@ -68,4 +68,69 @@ describe('Unit: Testing Filters', function() { expect(limitAddress(addresses, false).length).to.equal(4); })); }); + + 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'); + 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'); + })); + }); + }); diff --git a/test/unit/services/servicesSpec.js b/test/unit/services/servicesSpec.js index 2c29c78ea..badab5154 100644 --- a/test/unit/services/servicesSpec.js +++ b/test/unit/services/servicesSpec.js @@ -91,8 +91,8 @@ describe("Unit: controllerUtils", function() { //retuns values in DEFAULT UNIT(bits) controllerUtils.updateBalance(function() { - expect($rootScope.totalBalanceBTC).to.be.equal('1.0000'); - expect($rootScope.availableBalanceBTC).to.be.equal('0.9000'); + expect($rootScope.totalBalanceBTC).to.be.equal(1.00000001); + expect($rootScope.availableBalanceBTC).to.be.equal(0.90000002); expect($rootScope.totalBalance).to.be.equal(1000000.01); expect($rootScope.availableBalance).to.be.equal(900000.02); expect($rootScope.addrInfos).not.to.equal(null);