From d337e73d00ebf950f580df5829878fb1ae52a452 Mon Sep 17 00:00:00 2001 From: Javier Date: Mon, 22 Aug 2016 16:07:21 -0300 Subject: [PATCH 01/13] new wallets directive --- public/views/includes/wallets.html | 20 ++++++++++++++++++++ src/js/directives/directives.js | 23 +++++++++++++++++++++++ src/sass/main.scss | 7 +++++++ 3 files changed, 50 insertions(+) create mode 100644 public/views/includes/wallets.html diff --git a/public/views/includes/wallets.html b/public/views/includes/wallets.html new file mode 100644 index 000000000..ef9a6ed72 --- /dev/null +++ b/public/views/includes/wallets.html @@ -0,0 +1,20 @@ +
+ + +
+
    +
  • + + {{wallet.name || wallet.id}} + + {{wallet.m}}-of-{{wallet.n}} + + + Incomplete + +
  • +
+
+
+
+
diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 285df5fd4..85bf80267 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -142,4 +142,27 @@ angular.module('copayApp.directives') }); } } + }) + .directive('wallets', function(profileService, lodash) { + return { + restrict: 'E', + templateUrl: 'views/includes/wallets.html', + scope: {}, + link: function(scope, element, attrs) { + var opts = {}; + opts.onlyComplete = attrs.onlyComplete == 'true' ? true : null; + opts.network = attrs.network; + opts.n = attrs.n; + + scope.wallets = profileService.getWallets(opts); + + scope.$on("$ionicSlides.sliderInitialized", function(event, data) { + scope.slider = data.slider; + }); + + scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { + scope.index = data.slider.activeIndex; + }); + } + } }); diff --git a/src/sass/main.scss b/src/sass/main.scss index 44ce5fa39..6c41c6f57 100644 --- a/src/sass/main.scss +++ b/src/sass/main.scss @@ -877,6 +877,13 @@ input[type=file] { width: inherit; } +.wallets { + height: 105px; +} + +.no-pager .swiper-pagination { + display: none; +} /* * Calculator */ From 1f7d9a99b41736f7996d572f7076c3af8fc41933 Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 23 Aug 2016 09:37:16 -0300 Subject: [PATCH 02/13] ref view --- public/views/includes/wallets.html | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/public/views/includes/wallets.html b/public/views/includes/wallets.html index ef9a6ed72..2e529f61e 100644 --- a/public/views/includes/wallets.html +++ b/public/views/includes/wallets.html @@ -1,19 +1,15 @@
-
-
    -
  • - - {{wallet.name || wallet.id}} - - {{wallet.m}}-of-{{wallet.n}} - - - Incomplete - -
  • -
+
+ + {{wallet.name || wallet.id}} + + {{wallet.m}}-of-{{wallet.n}} + + + Incomplete +
From 26b58fd9ed11e3f5aaa0ec5533fbb8c09c2145fd Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 23 Aug 2016 12:57:58 -0300 Subject: [PATCH 03/13] add wallet change events --- public/views/includes/wallets.html | 6 +- public/views/tab-receive.html | 5 +- public/views/tab-settings.html | 1 + src/js/controllers/tab-receive.js | 90 +++++++++++++++++++++--------- src/js/directives/directives.js | 12 ++-- 5 files changed, 80 insertions(+), 34 deletions(-) diff --git a/public/views/includes/wallets.html b/public/views/includes/wallets.html index 2e529f61e..ed88f8302 100644 --- a/public/views/includes/wallets.html +++ b/public/views/includes/wallets.html @@ -1,7 +1,7 @@ -
+
- -
+ +
{{wallet.name || wallet.id}} diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index 8320cb69d..7e338b681 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -54,7 +54,8 @@ Error: {{addrError}} {{addr}}
-
+ + diff --git a/public/views/tab-settings.html b/public/views/tab-settings.html index 7783fad68..4549569dd 100644 --- a/public/views/tab-settings.html +++ b/public/views/tab-settings.html @@ -18,6 +18,7 @@
Preferences
+
diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 28ede85ad..d46bd1e69 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabReceiveController', function($scope, $ionicPopover, $timeout, platformInfo, nodeWebkit, walletService, profileService, configService, lodash, gettextCatalog) { +angular.module('copayApp.controllers').controller('tabReceiveController', function($scope, $ionicPopover, $timeout, $log, platformInfo, nodeWebkit, walletService, profileService, configService, lodash, gettextCatalog) { $scope.isCordova = platformInfo.isCordova; @@ -8,43 +8,82 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.index = 0; $scope.isCordova = platformInfo.isCordova; $scope.isNW = platformInfo.isNW; - $scope.setWallets(); + // $scope.setWallets(); $scope.setAddress(false); - $scope.options = { - loop: false, - effect: 'flip', - speed: 500, - spaceBetween: 100 - } - - $scope.$on("$ionicSlides.sliderInitialized", function(event, data) { - // data.slider is the instance of Swiper - $scope.slider = data.slider; - }); - - $scope.$on("$ionicSlides.slideChangeStart", function(event, data) { - console.log('Slide change is beginning'); - }); - - $scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { - $scope.index = data.slider.activeIndex; - $scope.setAddress(); - }); + // $scope.options = { + // loop: false, + // effect: 'flip', + // speed: 500, + // spaceBetween: 100 + // } + // + // $scope.$on("$ionicSlides.sliderInitialized", function(event, data) { + // // data.slider is the instance of Swiper + // $scope.slider = data.slider; + // }); + // + // $scope.$on("$ionicSlides.slideChangeStart", function(event, data) { + // console.log('Slide change is beginning'); + // }); + // + // $scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { + // $scope.index = data.slider.activeIndex; + // $scope.setAddress(); + // }); } + $scope.copyToClipboard = function(addr, $event) { + + var showPopover = function() { + + $ionicPopover.fromTemplateUrl('views/includes/copyToClipboard.html', { + scope: $scope + }).then(function(popover) { + $scope.popover = popover; + $scope.popover.show($event); + }); + + $scope.close = function() { + $scope.popover.hide(); + } + + $timeout(function() { + $scope.popover.hide(); //close the popover after 0.7 seconds + }, 700); + + $scope.$on('$destroy', function() { + $scope.popover.remove(); + }); + }; + + if ($scope.isCordova) { + window.cordova.plugins.clipboard.copy(addr); + window.plugins.toast.showShortCenter(gettextCatalog.getString('Copied to clipboard')); + } else if ($scope.isNW) { + nodeWebkit.writeToClipboard(addr); + showPopover($event); + } + }; + + $scope.$on('Wallet/Changed', function(event, wallet) { + console.log(wallet); + $log.debug('Wallet changed: ' + wallet.name); + $scope.setAddress(wallet); + }); + $scope.shareAddress = function(addr) { if ($scope.isCordova) { window.plugins.socialsharing.share('bitcoin:' + addr, null, null, null); } }; - $scope.setAddress = function(forceNew) { + $scope.setAddress = function(wallet, forceNew) { + if (!wallet) return; if ($scope.generatingAddress) return; $scope.addr = null; $scope.addrError = null; - var wallet = $scope.wallets[$scope.index]; if (!wallet.isComplete()) { $scope.incomplete = true; $timeout(function() { @@ -55,8 +94,9 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.incomplete = false; $scope.generatingAddress = true; + $timeout(function() { - walletService.getAddress($scope.wallets[$scope.index], forceNew, function(err, addr) { + walletService.getAddress(wallet, forceNew, function(err, addr) { $scope.generatingAddress = false; if (err) { $scope.addrError = err; diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 85bf80267..945511b1e 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -143,25 +143,29 @@ angular.module('copayApp.directives') } } }) - .directive('wallets', function(profileService, lodash) { + .directive('wallets', function(profileService) { return { restrict: 'E', templateUrl: 'views/includes/wallets.html', - scope: {}, + scope: false, link: function(scope, element, attrs) { var opts = {}; opts.onlyComplete = attrs.onlyComplete == 'true' ? true : null; opts.network = attrs.network; opts.n = attrs.n; - scope.wallets = profileService.getWallets(opts); + scope.content = {}; + scope.content.wallets = profileService.getWallets(opts); scope.$on("$ionicSlides.sliderInitialized", function(event, data) { scope.slider = data.slider; + scope.content.index = data.slider.activeIndex; + scope.$emit('Wallet/Changed', scope.content.wallets[scope.content.index]); }); scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { - scope.index = data.slider.activeIndex; + scope.content.index = data.slider.activeIndex; + scope.$emit('Wallet/Changed', scope.content.wallets[scope.content.index]); }); } } From 4231dcadc7bbeaa1001c6682cfb83fbff18c2364 Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 23 Aug 2016 15:13:51 -0300 Subject: [PATCH 04/13] fix address generate --- public/views/tab-receive.html | 25 +++------------------ public/views/tab-settings.html | 1 - src/js/controllers/tab-receive.js | 37 ++++--------------------------- src/js/directives/directives.js | 3 +-- 4 files changed, 8 insertions(+), 58 deletions(-) diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index 7e338b681..f9aaf7d89 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -44,7 +44,7 @@ Error: {{addrError}} Share address
-
+
Next Address
@@ -54,27 +54,8 @@ Error: {{addrError}} {{addr}}
- - + + diff --git a/public/views/tab-settings.html b/public/views/tab-settings.html index 4549569dd..7783fad68 100644 --- a/public/views/tab-settings.html +++ b/public/views/tab-settings.html @@ -18,7 +18,6 @@
Preferences
-
diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index d46bd1e69..01471d553 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -5,37 +5,14 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.isCordova = platformInfo.isCordova; $scope.init = function() { - $scope.index = 0; + $scope.defaultWallet = profileService.getWallets()[0]; $scope.isCordova = platformInfo.isCordova; $scope.isNW = platformInfo.isNW; - // $scope.setWallets(); $scope.setAddress(false); - // $scope.options = { - // loop: false, - // effect: 'flip', - // speed: 500, - // spaceBetween: 100 - // } - // - // $scope.$on("$ionicSlides.sliderInitialized", function(event, data) { - // // data.slider is the instance of Swiper - // $scope.slider = data.slider; - // }); - // - // $scope.$on("$ionicSlides.slideChangeStart", function(event, data) { - // console.log('Slide change is beginning'); - // }); - // - // $scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { - // $scope.index = data.slider.activeIndex; - // $scope.setAddress(); - // }); } $scope.copyToClipboard = function(addr, $event) { - var showPopover = function() { - $ionicPopover.fromTemplateUrl('views/includes/copyToClipboard.html', { scope: $scope }).then(function(popover) { @@ -66,8 +43,8 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }; $scope.$on('Wallet/Changed', function(event, wallet) { - console.log(wallet); $log.debug('Wallet changed: ' + wallet.name); + $scope.defaultWallet = wallet; $scope.setAddress(wallet); }); @@ -78,13 +55,13 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }; $scope.setAddress = function(wallet, forceNew) { - if (!wallet) return; + var wallet = wallet || $scope.defaultWallet; if ($scope.generatingAddress) return; $scope.addr = null; $scope.addrError = null; - if (!wallet.isComplete()) { + if (wallet && !wallet.isComplete()) { $scope.incomplete = true; $timeout(function() { $scope.$digest(); @@ -108,10 +85,4 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }); }); }; - - - $scope.setWallets = function() { - $scope.wallets = profileService.getWallets(); - }; - }); diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 945511b1e..513be5ea4 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -159,8 +159,7 @@ angular.module('copayApp.directives') scope.$on("$ionicSlides.sliderInitialized", function(event, data) { scope.slider = data.slider; - scope.content.index = data.slider.activeIndex; - scope.$emit('Wallet/Changed', scope.content.wallets[scope.content.index]); + scope.$emit('Wallet/Changed', scope.content.wallets[0]); }); scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { From 3bc3552129bea069a22f166ae7516913d759be43 Mon Sep 17 00:00:00 2001 From: Javier Date: Tue, 23 Aug 2016 16:15:10 -0300 Subject: [PATCH 05/13] add wallet widget in confirm (send) view --- public/views/amount.html | 8 ++- public/views/confirm.html | 30 ++++++----- src/js/controllers/confirm.js | 93 ++++++++++++++--------------------- 3 files changed, 57 insertions(+), 74 deletions(-) diff --git a/public/views/amount.html b/public/views/amount.html index 56d6cb15c..373eacf42 100644 --- a/public/views/amount.html +++ b/public/views/amount.html @@ -2,11 +2,9 @@ Enter Amount - - - @@ -17,7 +15,7 @@
- Recipient + Recipient
diff --git a/public/views/confirm.html b/public/views/confirm.html index b13559c79..f52529809 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -3,15 +3,13 @@ Confirm - - -
@@ -24,9 +22,15 @@
Fee: {{feeLevel}} +<<<<<<< eb8c739515d024200f5ea2bad72fffb21437375b {{fee || '...'}} +======= + + {{fee || '...'}} + +>>>>>>> add wallet widget in confirm (send) view
@@ -42,11 +46,10 @@
- + -

[Only showing testnet wallets]

-

[Filtering wallets with no enought balance]

+<<<<<<< eb8c739515d024200f5ea2bad72fffb21437375b
@@ -66,6 +69,9 @@
+======= + +>>>>>>> add wallet widget in confirm (send) view
Add Description @@ -75,11 +81,11 @@
-
- - -
+
+
- diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 59e79202f..c11c545bd 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -42,7 +42,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; }; - var setFromPayPro = function(uri, cb) { if (!cb) cb = function() {}; @@ -92,9 +91,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); }; - - $scope.init = function() { + $scope.wallet = profileService.getWallets()[0]; if ($stateParams.paypro) { return setFromPayPro($stateParams.paypro, function(err) { @@ -125,61 +123,48 @@ angular.module('copayApp.controllers').controller('confirmController', function( var network = (new bitcore.Address($scope.toAddress)).network.name; $scope.network = network; - function setWallets() { - var w = profileService.getWallets({ - onlyComplete: true, - network: network, - }); - $scope.wallets = lodash.filter(w, function(x) { - if (!x.availableBalanceSat) return true; - return x.availableBalanceSat > amount; - }); - - $scope.someFiltered = $scope.wallets.length != w.length; - - }; - - var stop; - - function setWallet(wallet, delayed) { - $scope.wallet = wallet; - $scope.fee = $scope.txp = null; - $timeout(function() { - $scope.$apply(); - }, 10); - - if (stop) { - $timeout.cancel(stop); - stop = null; - } - - if (cachedTxp[wallet.id]) { - apply(cachedTxp[wallet.id]); - } else { - stop = $timeout(function() { - createTx(wallet, function(err, txp) { - if (err) return; - cachedTxp[wallet.id] = txp; - apply(txp); - }); - }, delayed ? 2000 : 1); - } - }; - txFormatService.formatAlternativeStr(amount, function(v) { $scope.alternativeAmountStr = v; }); + }; - $scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { - setWallet($scope.wallets[data.slider.activeIndex], true); - }); + $scope.$on('Wallet/Changed', function(event, wallet) { + $log.debug('Wallet changed: ' + wallet.name); + setWallet(wallet, true); + $scope.$apply(); + }); - setWallets(); - setWallet($scope.wallets[0]); + function setWallet(wallet, delayed) { + var stop; + $scope.wallet = wallet; + $scope.fee = $scope.txp = null; $timeout(function() { - $ionicScrollDelegate.resize(); - }, 100); + $scope.$apply(); + }, 10); + + if (stop) { + $timeout.cancel(stop); + stop = null; + } + + function apply(txp) { + $scope.fee = txFormatService.formatAmountStr(txp.fee); + $scope.txp = txp; + $scope.$apply(); + }; + + if (cachedTxp[wallet.id]) { + apply(cachedTxp[wallet.id]); + } else { + stop = $timeout(function() { + createTx(wallet, $scope.toAddress, $scope.toAmount, $scope.comment || null, function(err, txp) { + if (err) return; + cachedTxp[wallet.id] = txp; + apply(txp); + }); + }, delayed ? 2000 : 1); + } }; var setSendError = function(msg) { @@ -244,7 +229,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); }; - $scope.openPPModal = function() { $ionicModal.fromTemplateUrl('views/modals/paypro.html', { scope: $scope @@ -254,8 +238,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( }); }; - - $scope.approve = function() { var wallet = $scope.wallet; var txp = $scope.txp; @@ -287,7 +269,4 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.cancel = function() { $state.transitionTo('tabs.send'); }; - - - }); From d7fd3035cecba103b73681b33e536b34f068b4e2 Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 24 Aug 2016 10:56:38 -0300 Subject: [PATCH 06/13] add filter wallet amount --- public/views/confirm.html | 29 +---------------------------- src/js/controllers/confirm.js | 6 +++++- src/js/directives/directives.js | 30 +++++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/public/views/confirm.html b/public/views/confirm.html index f52529809..835cb1d15 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -22,15 +22,9 @@
Fee: {{feeLevel}} -<<<<<<< eb8c739515d024200f5ea2bad72fffb21437375b - - {{fee || '...'}} - -======= {{fee || '...'}} ->>>>>>> add wallet widget in confirm (send) view
@@ -49,29 +43,8 @@
-<<<<<<< eb8c739515d024200f5ea2bad72fffb21437375b -
- - -
-
    -
  • - - {{item.name || item.id}} - - {{item.availableBalanceStr}} - -
  • -
-
-
-
-
- -======= - ->>>>>>> add wallet widget in confirm (send) view +
Add Description diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index c11c545bd..fcf6d857e 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -113,6 +113,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.feeLevel = config.settings ? config.settings.feeLevel : ''; var amount = $scope.toAmount = parseInt($stateParams.toAmount); + $scope.minBalance = amount; $scope.amountStr = txFormatService.formatAmountStr($scope.toAmount); $scope.toAddress = $stateParams.toAddress; @@ -129,9 +130,12 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.$on('Wallet/Changed', function(event, wallet) { + if (!wallet) { + $log.debug('No wallet provided'); + return; + } $log.debug('Wallet changed: ' + wallet.name); setWallet(wallet, true); - $scope.$apply(); }); function setWallet(wallet, delayed) { diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 513be5ea4..4a512fba5 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -143,7 +143,7 @@ angular.module('copayApp.directives') } } }) - .directive('wallets', function(profileService) { + .directive('wallets', function($log, profileService, walletService, lodash) { return { restrict: 'E', templateUrl: 'views/includes/wallets.html', @@ -155,17 +155,41 @@ angular.module('copayApp.directives') opts.n = attrs.n; scope.content = {}; - scope.content.wallets = profileService.getWallets(opts); + scope.content.wallets = []; + var minBalance = attrs.minBalance ? parseInt(attrs.minBalance) : 0; + var wallets = profileService.getWallets(opts); + var filteredWallets = []; + var index = 0; + + if (minBalance) + filterWallet(); scope.$on("$ionicSlides.sliderInitialized", function(event, data) { scope.slider = data.slider; - scope.$emit('Wallet/Changed', scope.content.wallets[0]); }); scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { scope.content.index = data.slider.activeIndex; scope.$emit('Wallet/Changed', scope.content.wallets[scope.content.index]); }); + + function filterWallet() { + if (index == wallets.length) { + if (!lodash.isEmpty(filteredWallets)) { + scope.content.wallets = filteredWallets; + scope.$emit('Wallet/Changed', scope.content.wallets[0]); + } + return; + } + + walletService.getStatus(wallets[index], {}, function(err, status) { + if (err) $log.error(err); + if (!status.availableBalanceSat) $log.debug('Balance not available on wallet: ' + wallets[index].name); + if (status.availableBalanceSat > minBalance) filteredWallets.push(wallets[index]); + index++; + filterWallet(); + }); + }; } } }); From fee7034863e6dc344d27b023574d17fd3f6b8cbe Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 24 Aug 2016 11:21:07 -0300 Subject: [PATCH 07/13] fix receive wallet scope --- public/views/tab-receive.html | 2 +- src/js/controllers/tab-receive.js | 5 ++++- src/js/directives/directives.js | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index f9aaf7d89..fd8409c8a 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -55,7 +55,7 @@ Error: {{addrError}}
- + diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 01471d553..6c14d1a51 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -43,8 +43,11 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }; $scope.$on('Wallet/Changed', function(event, wallet) { + if (!wallet) { + $log.debug('No wallet provided'); + return; + } $log.debug('Wallet changed: ' + wallet.name); - $scope.defaultWallet = wallet; $scope.setAddress(wallet); }); diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 4a512fba5..6f12e7abb 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -163,6 +163,10 @@ angular.module('copayApp.directives') if (minBalance) filterWallet(); + else { + scope.content.wallets = wallets; + scope.$emit('Wallet/Changed', scope.content.wallets[0]); + } scope.$on("$ionicSlides.sliderInitialized", function(event, data) { scope.slider = data.slider; From 8a88e712e1db4c6aa7463923127117f4ef314a4f Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 24 Aug 2016 12:29:22 -0300 Subject: [PATCH 08/13] add not available message --- public/views/confirm.html | 1 + src/js/controllers/confirm.js | 1 + src/js/controllers/tab-receive.js | 1 + src/js/directives/directives.js | 6 +++++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/public/views/confirm.html b/public/views/confirm.html index 835cb1d15..9e434de58 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -42,6 +42,7 @@
+ Not available
diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index fcf6d857e..2791eb459 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -92,6 +92,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.init = function() { + $scope.notAvailable = false; $scope.wallet = profileService.getWallets()[0]; if ($stateParams.paypro) { diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 6c14d1a51..46875e1ba 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -47,6 +47,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $log.debug('No wallet provided'); return; } + $scope.defaultWallet = wallet; $log.debug('Wallet changed: ' + wallet.name); $scope.setAddress(wallet); }); diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 6f12e7abb..38812db2a 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -156,6 +156,7 @@ angular.module('copayApp.directives') scope.content = {}; scope.content.wallets = []; + scope.content.notAvailable = false; var minBalance = attrs.minBalance ? parseInt(attrs.minBalance) : 0; var wallets = profileService.getWallets(opts); var filteredWallets = []; @@ -182,13 +183,16 @@ angular.module('copayApp.directives') if (!lodash.isEmpty(filteredWallets)) { scope.content.wallets = filteredWallets; scope.$emit('Wallet/Changed', scope.content.wallets[0]); + } else { + scope.content.notAvailable = true; + $log.warn('No wallet available to make the payment'); } return; } walletService.getStatus(wallets[index], {}, function(err, status) { if (err) $log.error(err); - if (!status.availableBalanceSat) $log.debug('Balance not available on wallet: ' + wallets[index].name); + if (!status.availableBalanceSat) $log.debug('No balance available in: ' + wallets[index].name); if (status.availableBalanceSat > minBalance) filteredWallets.push(wallets[index]); index++; filterWallet(); From d56b22242b38b7009073feab1cfe53fa6a4f0a73 Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 24 Aug 2016 13:01:30 -0300 Subject: [PATCH 09/13] fix receive view - refactor error message/view --- public/views/tab-receive.html | 43 ++++++++----------------------- src/js/controllers/tab-receive.js | 39 +++------------------------- 2 files changed, 14 insertions(+), 68 deletions(-) diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index fd8409c8a..6ef673a76 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -3,43 +3,24 @@ Receive - - - -
+ +
+
+ {{error|translate}} +
+
- +
+ +
-
-
-incomplete wallet -
- -
- -
-
- -
-
- -
-
- -
-
-Error: {{addrError}} -
-
- - -
+
Share address @@ -53,9 +34,7 @@ Error: {{addrError}} ... {{addr}}
+
- - - diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 46875e1ba..f2c56281a 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabReceiveController', function($scope, $ionicPopover, $timeout, $log, platformInfo, nodeWebkit, walletService, profileService, configService, lodash, gettextCatalog) { +angular.module('copayApp.controllers').controller('tabReceiveController', function($scope, $timeout, $log, platformInfo, walletService, profileService, configService, lodash, gettextCatalog) { $scope.isCordova = platformInfo.isCordova; @@ -11,37 +11,6 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.setAddress(false); } - $scope.copyToClipboard = function(addr, $event) { - var showPopover = function() { - $ionicPopover.fromTemplateUrl('views/includes/copyToClipboard.html', { - scope: $scope - }).then(function(popover) { - $scope.popover = popover; - $scope.popover.show($event); - }); - - $scope.close = function() { - $scope.popover.hide(); - } - - $timeout(function() { - $scope.popover.hide(); //close the popover after 0.7 seconds - }, 700); - - $scope.$on('$destroy', function() { - $scope.popover.remove(); - }); - }; - - if ($scope.isCordova) { - window.cordova.plugins.clipboard.copy(addr); - window.plugins.toast.showShortCenter(gettextCatalog.getString('Copied to clipboard')); - } else if ($scope.isNW) { - nodeWebkit.writeToClipboard(addr); - showPopover($event); - } - }; - $scope.$on('Wallet/Changed', function(event, wallet) { if (!wallet) { $log.debug('No wallet provided'); @@ -63,24 +32,22 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi if ($scope.generatingAddress) return; $scope.addr = null; - $scope.addrError = null; + $scope.error = null; if (wallet && !wallet.isComplete()) { - $scope.incomplete = true; $timeout(function() { $scope.$digest(); }); return; } - $scope.incomplete = false; $scope.generatingAddress = true; $timeout(function() { walletService.getAddress(wallet, forceNew, function(err, addr) { $scope.generatingAddress = false; if (err) { - $scope.addrError = err; + $scope.error = err; } else { if (addr) $scope.addr = addr; From afb7386ec2df8941ca3932f1e112789af02e3a09 Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 24 Aug 2016 17:34:08 -0300 Subject: [PATCH 10/13] add execute directive flag --- public/views/confirm.html | 2 +- public/views/tab-receive.html | 2 +- src/js/controllers/confirm.js | 3 ++- src/js/controllers/tab-receive.js | 1 + src/js/directives/directives.js | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/public/views/confirm.html b/public/views/confirm.html index 9e434de58..225a00ffd 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -45,7 +45,7 @@ Not available
- +
Add Description diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index 6ef673a76..6f310209b 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -34,7 +34,7 @@ ... {{addr}}
- +
diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 2791eb459..af4440289 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -92,8 +92,9 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.init = function() { - $scope.notAvailable = false; $scope.wallet = profileService.getWallets()[0]; + $scope.notAvailable = false; + $scope.hasWallet = $scope.wallet ? true : false; if ($stateParams.paypro) { return setFromPayPro($stateParams.paypro, function(err) { diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index f2c56281a..d9f2009be 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -6,6 +6,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.init = function() { $scope.defaultWallet = profileService.getWallets()[0]; + $scope.hasWallet = $scope.defaultWallet ? true : false; $scope.isCordova = platformInfo.isCordova; $scope.isNW = platformInfo.isNW; $scope.setAddress(false); diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 38812db2a..5ddc43718 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -157,8 +157,8 @@ angular.module('copayApp.directives') scope.content = {}; scope.content.wallets = []; scope.content.notAvailable = false; - var minBalance = attrs.minBalance ? parseInt(attrs.minBalance) : 0; var wallets = profileService.getWallets(opts); + var minBalance = attrs.minBalance ? parseInt(attrs.minBalance) : 0; var filteredWallets = []; var index = 0; From 19419526e4c58e2656067f5f76a040b93b2427e4 Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 24 Aug 2016 19:32:49 -0300 Subject: [PATCH 11/13] isolated scope - wallets filtered from controller --- public/views/confirm.html | 4 +-- public/views/includes/wallets.html | 4 +-- public/views/tab-receive.html | 3 +- src/js/controllers/confirm.js | 56 ++++++++++++++++++++++-------- src/js/controllers/tab-receive.js | 6 ++-- src/js/directives/directives.js | 49 +++----------------------- 6 files changed, 55 insertions(+), 67 deletions(-) diff --git a/public/views/confirm.html b/public/views/confirm.html index 225a00ffd..fcbe282fa 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -42,10 +42,10 @@
- Not available + Not available
- +
Add Description diff --git a/public/views/includes/wallets.html b/public/views/includes/wallets.html index ed88f8302..978d7804e 100644 --- a/public/views/includes/wallets.html +++ b/public/views/includes/wallets.html @@ -1,6 +1,6 @@ -
+
- +
{{wallet.name || wallet.id}} diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index 6f310209b..4e9576bf8 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -34,7 +34,8 @@ ... {{addr}}
- + +
diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index af4440289..6572247bc 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -92,18 +92,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.init = function() { - $scope.wallet = profileService.getWallets()[0]; - $scope.notAvailable = false; - $scope.hasWallet = $scope.wallet ? true : false; - - if ($stateParams.paypro) { - return setFromPayPro($stateParams.paypro, function(err) { - if (err && !isChromeApp) { - showAlert(gettext('Could not fetch payment')); - } - }); - } - + // TODO (URL , etc) if (!$stateParams.toAddress || !$stateParams.toAmount) { $log.error('Bad params at amount') throw ('bad params'); @@ -115,7 +104,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.feeLevel = config.settings ? config.settings.feeLevel : ''; var amount = $scope.toAmount = parseInt($stateParams.toAmount); - $scope.minBalance = amount; $scope.amountStr = txFormatService.formatAmountStr($scope.toAmount); $scope.toAddress = $stateParams.toAddress; @@ -123,8 +111,46 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.description = $stateParams.description; $scope.paypro = $stateParams.paypro; - var network = (new bitcore.Address($scope.toAddress)).network.name; - $scope.network = network; + var networkName = (new bitcore.Address($scope.toAddress)).network.name; + $scope.network = networkName; + + $scope.notAvailable = false; + var wallets = profileService.getWallets({ + onlyComplete: true, + network: networkName, + }); + + var filteredWallets = []; + var index = 0; + + filterWallet(); + + function filterWallet() { + if (index == wallets.length) { + if (!lodash.isEmpty(filteredWallets)) { + $log.debug('Wallet changed: ' + filteredWallets[0].name); + $scope.wallets = lodash.clone(filteredWallets); + setWallet(wallets[0], true); + $scope.notAvailable = false; + } else { + $scope.notAvailable = true; + $log.warn('No wallet available to make the payment'); + } + + $timeout(function() { + $scope.$apply(); + }, 10); + return; + } + + walletService.getStatus(wallets[index], {}, function(err, status) { + if (err) $log.error(err); + if (!status.availableBalanceSat) $log.debug('No balance available in: ' + wallets[index].name); + if (status.availableBalanceSat > amount) filteredWallets.push(wallets[index]); + index++; + filterWallet(); + }); + }; txFormatService.formatAlternativeStr(amount, function(v) { $scope.alternativeAmountStr = v; diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index d9f2009be..342080515 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -5,11 +5,11 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.isCordova = platformInfo.isCordova; $scope.init = function() { - $scope.defaultWallet = profileService.getWallets()[0]; - $scope.hasWallet = $scope.defaultWallet ? true : false; + $scope.wallets = profileService.getWallets({ + onlyComplete: true + }); $scope.isCordova = platformInfo.isCordova; $scope.isNW = platformInfo.isNW; - $scope.setAddress(false); } $scope.$on('Wallet/Changed', function(event, wallet) { diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index 5ddc43718..e9a1e5ee1 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -147,57 +147,18 @@ angular.module('copayApp.directives') return { restrict: 'E', templateUrl: 'views/includes/wallets.html', - scope: false, + scope: { + wallets: '=wallets' + }, link: function(scope, element, attrs) { - var opts = {}; - opts.onlyComplete = attrs.onlyComplete == 'true' ? true : null; - opts.network = attrs.network; - opts.n = attrs.n; - - scope.content = {}; - scope.content.wallets = []; - scope.content.notAvailable = false; - var wallets = profileService.getWallets(opts); - var minBalance = attrs.minBalance ? parseInt(attrs.minBalance) : 0; - var filteredWallets = []; - var index = 0; - - if (minBalance) - filterWallet(); - else { - scope.content.wallets = wallets; - scope.$emit('Wallet/Changed', scope.content.wallets[0]); - } - scope.$on("$ionicSlides.sliderInitialized", function(event, data) { scope.slider = data.slider; + scope.$emit('Wallet/Changed', scope.wallets[0]); }); scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { - scope.content.index = data.slider.activeIndex; - scope.$emit('Wallet/Changed', scope.content.wallets[scope.content.index]); + scope.$emit('Wallet/Changed', scope.wallets[data.slider.activeIndex]); }); - - function filterWallet() { - if (index == wallets.length) { - if (!lodash.isEmpty(filteredWallets)) { - scope.content.wallets = filteredWallets; - scope.$emit('Wallet/Changed', scope.content.wallets[0]); - } else { - scope.content.notAvailable = true; - $log.warn('No wallet available to make the payment'); - } - return; - } - - walletService.getStatus(wallets[index], {}, function(err, status) { - if (err) $log.error(err); - if (!status.availableBalanceSat) $log.debug('No balance available in: ' + wallets[index].name); - if (status.availableBalanceSat > minBalance) filteredWallets.push(wallets[index]); - index++; - filterWallet(); - }); - }; } } }); From 48a2be626dec5d267dba8e5e92c9f736018f31f4 Mon Sep 17 00:00:00 2001 From: Javier Date: Thu, 25 Aug 2016 10:19:39 -0300 Subject: [PATCH 12/13] refactor --- public/views/confirm.html | 10 ++--- public/views/includes/note.html | 6 +-- src/js/controllers/confirm.js | 70 +++++++++++++++---------------- src/js/controllers/tab-receive.js | 2 +- src/js/directives/directives.js | 4 +- src/sass/main.scss | 4 -- 6 files changed, 43 insertions(+), 53 deletions(-) diff --git a/public/views/confirm.html b/public/views/confirm.html index fcbe282fa..115c8824d 100644 --- a/public/views/confirm.html +++ b/public/views/confirm.html @@ -55,11 +55,9 @@
-
- -
+ diff --git a/public/views/includes/note.html b/public/views/includes/note.html index e52beba85..451ac6baf 100644 --- a/public/views/includes/note.html +++ b/public/views/includes/note.html @@ -1,11 +1,11 @@
- +
- +
- +
diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 6572247bc..ae183bc93 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -28,12 +28,14 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.commentPopupClose = function() { commentPopup.close(); }; - $scope.commentPopupSave = function() { - $log.debug('Saving description: ' + $scope.data.comment); - $scope.description = $scope.data.comment; + $scope.commentPopupSave = function(description) { + $log.debug('Saving description: ' + description); + $scope.description = description; $scope.txp = null; + ongoingProcess.set('creatingTx', true); createTx($scope.wallet, function(err, txp) { + ongoingProcess.set('creatingTx', false); if (err) return; cachedTxp[$scope.wallet.id] = txp; apply(txp); @@ -97,7 +99,6 @@ angular.module('copayApp.controllers').controller('confirmController', function( $log.error('Bad params at amount') throw ('bad params'); } - $scope.isCordova = platformInfo.isCordova; var config = configService.getSync().wallet; @@ -123,34 +124,32 @@ angular.module('copayApp.controllers').controller('confirmController', function( var filteredWallets = []; var index = 0; - filterWallet(); + ongoingProcess.set('scanning', true); - function filterWallet() { - if (index == wallets.length) { - if (!lodash.isEmpty(filteredWallets)) { - $log.debug('Wallet changed: ' + filteredWallets[0].name); - $scope.wallets = lodash.clone(filteredWallets); - setWallet(wallets[0], true); - $scope.notAvailable = false; - } else { - $scope.notAvailable = true; - $log.warn('No wallet available to make the payment'); - } - - $timeout(function() { - $scope.$apply(); - }, 10); - return; - } - - walletService.getStatus(wallets[index], {}, function(err, status) { + lodash.each(wallets, function(w) { + walletService.getStatus(w, {}, function(err, status) { if (err) $log.error(err); - if (!status.availableBalanceSat) $log.debug('No balance available in: ' + wallets[index].name); - if (status.availableBalanceSat > amount) filteredWallets.push(wallets[index]); - index++; - filterWallet(); + if (!status.availableBalanceSat) $log.debug('No balance available in: ' + w.name); + if (status.availableBalanceSat > amount) filteredWallets.push(w); + + if (++index == wallets.length) { + ongoingProcess.set('scanning', false); + + if (!lodash.isEmpty(filteredWallets)) { + $scope.wallets = lodash.clone(filteredWallets); + $scope.notAvailable = false; + } else { + $scope.notAvailable = true; + $log.warn('No wallet available to make the payment'); + } + + $timeout(function() { + $scope.$apply(); + }, 10); + return; + } }); - }; + }); txFormatService.formatAlternativeStr(amount, function(v) { $scope.alternativeAmountStr = v; @@ -158,7 +157,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( }; $scope.$on('Wallet/Changed', function(event, wallet) { - if (!wallet) { + if (lodash.isEmpty(wallet)) { $log.debug('No wallet provided'); return; } @@ -172,6 +171,7 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.fee = $scope.txp = null; $timeout(function() { + $ionicScrollDelegate.resize(); $scope.$apply(); }, 10); @@ -180,17 +180,13 @@ angular.module('copayApp.controllers').controller('confirmController', function( stop = null; } - function apply(txp) { - $scope.fee = txFormatService.formatAmountStr(txp.fee); - $scope.txp = txp; - $scope.$apply(); - }; - if (cachedTxp[wallet.id]) { apply(cachedTxp[wallet.id]); } else { + ongoingProcess.set('creatingTx', true); stop = $timeout(function() { - createTx(wallet, $scope.toAddress, $scope.toAmount, $scope.comment || null, function(err, txp) { + createTx(wallet, function(err, txp) { + ongoingProcess.set('creatingTx', false); if (err) return; cachedTxp[wallet.id] = txp; apply(txp); diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 342080515..c7e2b319b 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -13,7 +13,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi } $scope.$on('Wallet/Changed', function(event, wallet) { - if (!wallet) { + if (lodash.isEmpty(wallet)) { $log.debug('No wallet provided'); return; } diff --git a/src/js/directives/directives.js b/src/js/directives/directives.js index e9a1e5ee1..88458c146 100644 --- a/src/js/directives/directives.js +++ b/src/js/directives/directives.js @@ -153,11 +153,11 @@ angular.module('copayApp.directives') link: function(scope, element, attrs) { scope.$on("$ionicSlides.sliderInitialized", function(event, data) { scope.slider = data.slider; - scope.$emit('Wallet/Changed', scope.wallets[0]); + scope.$emit('Wallet/Changed', scope.wallets ? scope.wallets[0] : null); }); scope.$on("$ionicSlides.slideChangeEnd", function(event, data) { - scope.$emit('Wallet/Changed', scope.wallets[data.slider.activeIndex]); + scope.$emit('Wallet/Changed', scope.wallets ? scope.wallets[data.slider.activeIndex] : null); }); } } diff --git a/src/sass/main.scss b/src/sass/main.scss index 6c41c6f57..c52303e5b 100644 --- a/src/sass/main.scss +++ b/src/sass/main.scss @@ -880,10 +880,6 @@ input[type=file] { .wallets { height: 105px; } - -.no-pager .swiper-pagination { - display: none; -} /* * Calculator */ From 7e9ba3de40d36b15690a4bfb433730a317238b24 Mon Sep 17 00:00:00 2001 From: Javier Date: Thu, 25 Aug 2016 16:34:47 -0300 Subject: [PATCH 13/13] show items if exist --- public/views/tab-receive.html | 6 +++++- public/views/tab-send.html | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index 4e9576bf8..6a3287722 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -20,7 +20,11 @@
-
+
+ No Wallet +
+ +
Share address diff --git a/public/views/tab-send.html b/public/views/tab-send.html index de09b2511..688a84c64 100644 --- a/public/views/tab-send.html +++ b/public/views/tab-send.html @@ -26,7 +26,11 @@
-
+
+ No Wallet - Contact +
+ +