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