mirror of https://github.com/BTCPrivate/copay.git
Merge branch 'ref/design' of https://github.com/bitpay/bitpay-wallet into feature/home_views_polish
This commit is contained in:
commit
9980e2e11f
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -20,7 +20,7 @@
|
|||
<ion-spinner class="spinner-dark" icon="lines"></ion-spinner>
|
||||
</div>
|
||||
</div>
|
||||
<div class="secret" ng-show="!isCordova">
|
||||
<div class="secret">
|
||||
{{secret || ('Loading...'|translate)}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -29,11 +29,11 @@
|
|||
|
||||
<div ng-show="secret">
|
||||
<div class="text-center m10t" ng-if="isCordova">
|
||||
<span class="button outline round dark-gray tiny m0"
|
||||
<button class="button button-outline button-positive"
|
||||
ng-click="shareSecret()">
|
||||
<i class="fi-share"></i>
|
||||
<i class="icon ion-ios-upload-outline"></i>
|
||||
<span translate>Share invitation</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="m30v line-t">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<ion-modal-view id="txp-details" ng-controller="txpDetailsController" ng-init="init()">
|
||||
<ion-header-bar align-title="center" class="bar-royal">
|
||||
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color': wallet.color}">
|
||||
<button class="button button-clear" ng-click="close()">
|
||||
Close
|
||||
</button>
|
||||
|
|
|
@ -1,9 +1,17 @@
|
|||
<ion-view id="onboarding-disclaimer" class="onboarding">
|
||||
<ion-content ng-controller="disclaimerController" ng-init=init() scroll="false">
|
||||
<ion-view id="onboarding-disclaimer" class="onboarding" ng-controller="disclaimerController" ng-init=init()>
|
||||
<ion-nav-bar class="bar-stable" ng-if="backedUp == 'false'">
|
||||
<ion-nav-title></ion-nav-title>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button button-clear" ng-click="goBack()">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content scroll="false" ng-class="{'has-header': backedUp == 'false'}">
|
||||
<div class="row text-center">
|
||||
<h3 translate class="col-75 col">Almost done! Let's review</h3>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="row text-center tag">
|
||||
<p translate class="col col-75">
|
||||
Bitcoin is different - it cannot be safely held with a bank or web service
|
||||
</p>
|
||||
|
@ -12,7 +20,7 @@
|
|||
<ion-checkbox ng-model="accept1"><span translate>I understand my funds are held securely on this device, not by a company.</span></ion-checkbox>
|
||||
<ion-checkbox ng-model="accept2"><span translate>I understand if this app moved to another device or deleted, my bitcoin can only be recovered with the backup phrase</span></ion-checkbox>
|
||||
</ion-list>
|
||||
<div id="agree-to-terms" ng-if="accept1 && accept2">
|
||||
<div id="agree-to-terms" ng-if="accept1 && accept2" ng-class="{'header-present': backedUp == 'false'}">
|
||||
<div id="agree-to-terms-content" class="center-block">
|
||||
<ion-checkbox ng-model="terms.accept3"></ion-checkbox>
|
||||
<p translate>I have read, understood, and agree with the <a ng-click="openTermsModal()" translate>Terms of use</a>.</p>
|
||||
|
|
|
@ -69,10 +69,11 @@
|
|||
<span ng-if="!wallet.isComplete()" class="assertive" translate>
|
||||
Incomplete
|
||||
</span>
|
||||
<div ng-if="wallet.isComplete()">
|
||||
<span ng-if="wallet.isComplete()">
|
||||
<span ng-if="!wallet.balanceHidden">{{wallet.status.availableBalanceStr}}</span>
|
||||
<span ng-if="wallet.balanceHidden" translate>[Balance Hidden]</span>
|
||||
</div>
|
||||
</span>
|
||||
|
||||
</p>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
@ -115,35 +116,36 @@
|
|||
</div>
|
||||
|
||||
<div class="list card"
|
||||
ng-if="(!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell || !wallets[0]) && nextStepEnabled">
|
||||
ng-show="(!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell ||
|
||||
!wallets[0]) && nextStepEnabled">
|
||||
<div class="item item-icon-right item-heading" ng-click="shouldHideNextSteps()" translate>
|
||||
Next steps
|
||||
<i class="icon nav-item-arrow-down" ng-if="!hideNextSteps"></i>
|
||||
<i class="icon nav-item-arrow-up" ng-if="hideNextSteps"></i>
|
||||
<i class="icon nav-item-arrow-down" ng-show="!hideNextSteps"></i>
|
||||
<i class="icon nav-item-arrow-up" ng-show="hideNextSteps"></i>
|
||||
</div>
|
||||
<div ng-if="!hideNextSteps">
|
||||
<a ng-if="!wallets[0]" ui-sref="tabs.add" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<div ng-show="!hideNextSteps">
|
||||
<a ng-show="!wallets[0]" ui-sref="tabs.add" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<i class="icon big-icon-svg">
|
||||
<div class="bg icon-create-wallet"></div>
|
||||
</i>
|
||||
<span translate>Create a bitcoin wallet</span>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a ui-sref="bitpayCard.main" ng-if="!externalServices.BitpayCard && bitpayCardEnabled" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<a ui-sref="bitpayCard.main" ng-show="!externalServices.BitpayCard && bitpayCardEnabled" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<i class="icon big-icon-svg">
|
||||
<div class="bg icon-bitpay-card"></div>
|
||||
</i>
|
||||
<span translate>Add BitPay Card</span>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a ng-if="!externalServices.BuyAndSell && (coinbaseEnabled || glideraEnabled)" ui-sref="tabs.buyandsell" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<a ng-show="!externalServices.BuyAndSell && (coinbaseEnabled || glideraEnabled)" ui-sref="tabs.buyandsell" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<i class="icon big-icon-svg">
|
||||
<div class="bg icon-buy-bitcoin"></div>
|
||||
</i>
|
||||
<span translate>Buy or Sell Bitcoin</span>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
<a ui-sref="tabs.giftcards.amazon" ng-if="!externalServices.AmazonGiftCards && amazonEnabled" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<a ui-sref="tabs.giftcards.amazon" ng-show="!externalServices.AmazonGiftCards && amazonEnabled" class="item item-icon-left item-big-icon-left item-icon-right next-step">
|
||||
<i class="icon big-icon-svg">
|
||||
<div class="bg icon-gift"></div>
|
||||
</i>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div id="address">
|
||||
<article class="text-center" ng-if="!wallet.isComplete()">
|
||||
<article class="text-center" ng-if="wallet && !wallet.isComplete()">
|
||||
<div class="incomplete">
|
||||
<div class="title">
|
||||
<span translate>Incomplete wallet</span>
|
||||
|
@ -30,7 +30,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</article>
|
||||
<article ng-if="wallet.isComplete()">
|
||||
<article ng-if="wallet && wallet.isComplete()">
|
||||
<div class="row backup" ng-show="!wallet.showBackupNeededModal && wallet.needsBackup" ng-click="goToBackupFlow()">
|
||||
<div class="m15t text-center col center-block">
|
||||
<i class="icon ion-alert"></i><span translate>Wallet not backed up</span><i class="icon ion-ios-arrow-thin-right"></i>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<ion-view id="walletDetails">
|
||||
<ion-nav-bar ng-style="{'background-color': walletDetailsColor}">
|
||||
<ion-nav-title>{{walletDetailsName}}</ion-nav-title>
|
||||
<ion-nav-bar ng-style="{'background-color': wallet.color}">
|
||||
<ion-nav-title>{{wallet.name}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-buttons side="secondary">
|
||||
|
@ -14,14 +14,13 @@
|
|||
<div ng-style="{'background-color':wallet.color}" class="amount">
|
||||
<div ng-if="!notAuthorized && !updatingStatus">
|
||||
|
||||
<div class="m20t" ng-show="updateStatusError" ng-click='update()'>
|
||||
<span class="size-12 db m10b">{{updateStatusError|translate}}</span>
|
||||
<button class="outline white tiny round" translate>Tap to retry</button>
|
||||
<div ng-show="updateStatusError">
|
||||
<a class="button button-outline button-light button-small" ng-click='update()' translate>Tap to retry</a>
|
||||
</div>
|
||||
|
||||
<div class="m20t" ng-show="walletNotRegistered" ng-click='recreate()'>
|
||||
<div ng-show="walletNotRegistered">
|
||||
<span class="size-12 db m10b" translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
|
||||
<button class="outline white tiny round" translate>Recreate</button>
|
||||
<a class="button button-outline button-light button-small" ng-click='recreate()' translate>Recreate</a>
|
||||
</div>
|
||||
|
||||
<div ng-show="wallet.walletScanStatus == 'error'" ng-click='retryScan()'>
|
||||
|
@ -30,7 +29,7 @@
|
|||
</div>
|
||||
|
||||
|
||||
<div ng-click='updateAll()' ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && !wallet.balanceHidden" on-hold="hideToggle()">
|
||||
<div ng-click='updateAll(true)' ng-show="!updateStatusError && wallet.walletScanStatus != 'error' && !wallet.balanceHidden" on-hold="hideToggle()">
|
||||
<strong class="size-36">{{status.totalBalanceStr}}</strong>
|
||||
<div class="size-14 amount-alternative" ng-if="status.totalBalanceAlternative">{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}</div>
|
||||
<div class="size-14" ng-if="status.pendingAmount">
|
||||
|
@ -46,10 +45,10 @@
|
|||
</div>
|
||||
</div>
|
||||
<div ng-if="updatingStatus">
|
||||
<div class="size-36">
|
||||
<strong>...</strong>
|
||||
</div>
|
||||
<div class="size-36">
|
||||
<strong>...</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- amount -->
|
||||
|
||||
<div class="wallet-info">
|
||||
|
@ -108,8 +107,8 @@
|
|||
<!-- Transactions -->
|
||||
|
||||
<div class="oh pr m20t text-gray size-12 text-center"
|
||||
ng-show="!txHistory[0] && !updatingTxHistory && !txHistoryError && !updateStatusError && !notAuthorized"
|
||||
translate>No transactions yet {{status.totalBalanceStr}}
|
||||
ng-show="!txHistory[0] && !updatingTxHistory && !txHistoryError && !updateStatusError && !notAuthorized" translate>
|
||||
No transactions yet
|
||||
</div>
|
||||
|
||||
<div ng-show="updatingTxHistory && updatingTxHistoryProgress>5" class="updatingHistory">
|
||||
|
@ -124,20 +123,6 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="txHistory[0] && updatingTxHistory && newTx" class="row collapse last-transactions-content animated fadeInDown">
|
||||
<div class="large-6 medium-6 small-6 columns size-14">
|
||||
<div class="m10r left">
|
||||
<img src="img/icon-new.svg" width="40">
|
||||
</div>
|
||||
<div class="m10t" style="background:#eee; width: 8em; margin-left: 52px; line-height:0.6em">
|
||||
<span> </span>
|
||||
</div>
|
||||
<div style="margin-top:5px; background:#eee; width: 6em; margin-left: 52px; line-height:0.6em">
|
||||
<span> </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card list" ng-show="txHistory[0]">
|
||||
<div class="item" ng-repeat="btx in txHistory track by btx.txid" ng-click="openTxModal(btx)">
|
||||
<span class="item-note text-right">
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'roboto-regular';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Regular'),
|
||||
local('Roboto-Regular'),
|
||||
url(../roboto-font/Roboto-Regular.ttf) format('truetype'),
|
||||
url(../roboto-font/Roboto-Regular.woff) format('woff'),
|
||||
url(../roboto-font/Roboto-Regular.woff2) format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'roboto-bold';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Roboto Bold'),
|
||||
local('Roboto-Bold'),
|
||||
url(../roboto-font/Roboto-Bold.ttf) format('truetype'),
|
||||
url(../roboto-font/Roboto-Bold.woff) format('woff'),
|
||||
url(../roboto-font/Roboto-Bold.woff2) format('woff2');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'roboto-italic';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Roboto Italic'),
|
||||
local('Roboto-Italic'),
|
||||
url(../roboto-font/Roboto-Italic.ttf) format('truetype'),
|
||||
url(../roboto-font/Roboto-Italic.woff) format('woff'),
|
||||
url(../roboto-font/Roboto-Italic.woff2) format('woff2');
|
||||
}
|
|
@ -91,7 +91,7 @@ angular.module('copayApp.controllers').controller('backupController',
|
|||
$ionicHistory.removeBackView();
|
||||
$state.go('tabs.home');
|
||||
}
|
||||
else $state.go('onboarding.disclaimer');
|
||||
else $state.go('onboarding.disclaimer', {walletId: $stateParams.walletId, backedUp: true});
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ angular.module('copayApp.controllers').controller('backupRequestController', fun
|
|||
var cancelText = gettextCatalog.getString('Go back');
|
||||
popupService.showConfirm(title, message, okText, cancelText, function(val) {
|
||||
if (val) {
|
||||
$state.go('onboarding.disclaimer');
|
||||
$state.go('onboarding.disclaimer', {walletId: $scope.walletId, backedUp: false});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('disclaimerController', function($scope, $timeout, $state, $log, $ionicModal, profileService, uxLanguage, externalLinkService) {
|
||||
|
||||
angular.module('copayApp.controllers').controller('disclaimerController', function($scope, $timeout, $state, $log, $ionicModal, profileService, uxLanguage, externalLinkService, storageService, $stateParams) {
|
||||
$scope.init = function() {
|
||||
$scope.lang = uxLanguage.currentLanguage;
|
||||
$scope.terms = {};
|
||||
$scope.accept1 = $scope.accept2 = $scope.accept3 = false;
|
||||
$scope.backedUp = $stateParams.backedUp;
|
||||
$timeout(function() {
|
||||
$scope.$apply();
|
||||
}, 1);
|
||||
|
@ -34,4 +34,10 @@ angular.module('copayApp.controllers').controller('disclaimerController', functi
|
|||
$scope.termsModal.show();
|
||||
});
|
||||
};
|
||||
|
||||
$scope.goBack = function(){
|
||||
$state.go('onboarding.backupRequest', {walletId: $stateParams.walletId});
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
angular.module('copayApp.controllers').controller('tabHomeController',
|
||||
function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, gettextCatalog, lodash, popupService, ongoingProcess, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, $window, bitpayCardService) {
|
||||
var wallet;
|
||||
var listeners = [];
|
||||
$scope.externalServices = {};
|
||||
$scope.bitpayCardEnabled = true; // TODO
|
||||
$scope.openTxpModal = txpModalService.open;
|
||||
|
@ -81,7 +82,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
});
|
||||
};
|
||||
|
||||
function updateTxps() {
|
||||
var updateTxps = function() {
|
||||
profileService.getTxps({
|
||||
limit: 3
|
||||
}, function(err, txps, n) {
|
||||
|
@ -90,12 +91,11 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
$scope.txpsN = n;
|
||||
$timeout(function() {
|
||||
$ionicScrollDelegate.resize();
|
||||
$scope.$apply();
|
||||
}, 10);
|
||||
}, 100);
|
||||
})
|
||||
};
|
||||
|
||||
$scope.updateAllWallets = function() {
|
||||
var updateAllWallets = function() {
|
||||
$scope.wallets = profileService.getWallets();
|
||||
if (lodash.isEmpty($scope.wallets)) return;
|
||||
|
||||
|
@ -123,7 +123,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
limit: 3
|
||||
}, function(err, n) {
|
||||
if (err) {
|
||||
console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
|
||||
$log.error(err);
|
||||
return;
|
||||
}
|
||||
$scope.fetchingNotifications = false;
|
||||
|
@ -132,16 +132,16 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
$timeout(function() {
|
||||
$ionicScrollDelegate.resize();
|
||||
$scope.$apply();
|
||||
}, 10);
|
||||
}, 100);
|
||||
|
||||
})
|
||||
};
|
||||
|
||||
$scope.updateWallet = function(wallet) {
|
||||
var updateWallet = function(wallet) {
|
||||
$log.debug('Updating wallet:' + wallet.name)
|
||||
walletService.getStatus(wallet, {}, function(err, status) {
|
||||
if (err) {
|
||||
$log.error(err); //TODO
|
||||
$log.error(err);
|
||||
return;
|
||||
}
|
||||
wallet.status = status;
|
||||
|
@ -155,11 +155,11 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
}, function(err, notifications) {
|
||||
$scope.fetchingNotifications = false;
|
||||
if (err) {
|
||||
console.log('[tab-home.js.35:err:]', $log.error(err)); //TODO
|
||||
$log.error(err);
|
||||
return;
|
||||
}
|
||||
$scope.notifications = notifications;
|
||||
})
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -172,7 +172,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
});
|
||||
};
|
||||
|
||||
$scope.nextStep = function() {
|
||||
var nextStep = function() {
|
||||
lodash.each(['AmazonGiftCards', 'BitpayCard', 'BuyAndSell'], function(service) {
|
||||
storageService.getNextStep(service, function(err, value) {
|
||||
$scope.externalServices[service] = value ? true : false;
|
||||
|
@ -187,27 +187,10 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
$scope.hideNextSteps = !$scope.hideNextSteps;
|
||||
$timeout(function() {
|
||||
$ionicScrollDelegate.resize();
|
||||
}, 10);
|
||||
$scope.$apply();
|
||||
}, 100);
|
||||
};
|
||||
|
||||
var listeners = [
|
||||
$rootScope.$on('bwsEvent', function(e, walletId, type, n) {
|
||||
var wallet = profileService.getWallet(walletId);
|
||||
$scope.updateWallet(wallet);
|
||||
}),
|
||||
$rootScope.$on('Local/TxAction', function(e, walletId) {
|
||||
$log.debug('Got action for wallet ' + walletId);
|
||||
var wallet = profileService.getWallet(walletId);
|
||||
$scope.updateWallet(wallet);
|
||||
}),
|
||||
];
|
||||
|
||||
$scope.$on('$destroy', function() {
|
||||
lodash.each(listeners, function(x) {
|
||||
x();
|
||||
});
|
||||
});
|
||||
|
||||
var bitpayCardCache = function() {
|
||||
bitpayCardService.getCacheData(function(err, data) {
|
||||
if (err || lodash.isEmpty(data)) return;
|
||||
|
@ -217,10 +200,24 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
|
||||
$scope.$on("$ionicView.enter", function(event, data) {
|
||||
$scope.bitpayCard = null;
|
||||
nextStep();
|
||||
updateAllWallets();
|
||||
|
||||
listeners = [
|
||||
$rootScope.$on('bwsEvent', function(e, walletId, type, n) {
|
||||
var wallet = profileService.getWallet(walletId);
|
||||
updateWallet(wallet);
|
||||
}),
|
||||
$rootScope.$on('Local/TxAction', function(e, walletId) {
|
||||
$log.debug('Got action for wallet ' + walletId);
|
||||
var wallet = profileService.getWallet(walletId);
|
||||
updateWallet(wallet);
|
||||
})
|
||||
];
|
||||
|
||||
configService.whenAvailable(function() {
|
||||
var config = configService.getSync();
|
||||
var isWindowsPhoneApp = platformInfo.isWP && platformInfo.isCordova;
|
||||
$scope.hideNextSteps = false;
|
||||
$scope.glideraEnabled = config.glidera.enabled && !isWindowsPhoneApp;
|
||||
$scope.coinbaseEnabled = config.coinbase.enabled && !isWindowsPhoneApp;
|
||||
$scope.amazonEnabled = config.amazon.enabled;
|
||||
|
@ -230,7 +227,12 @@ angular.module('copayApp.controllers').controller('tabHomeController',
|
|||
|
||||
if ($scope.bitpayCardEnabled) bitpayCardCache();
|
||||
});
|
||||
$scope.nextStep();
|
||||
$scope.updateAllWallets();
|
||||
});
|
||||
|
||||
$scope.$on("$ionicView.leave", function(event, data) {
|
||||
lodash.each(listeners, function(x) {
|
||||
x();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
@ -33,31 +33,13 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi
|
|||
|
||||
$scope.addr = null;
|
||||
$scope.generatingAddress = true;
|
||||
$timeout(function() {
|
||||
walletService.getAddress($scope.wallet, forceNew, function(err, addr) {
|
||||
$scope.generatingAddress = false;
|
||||
if (err) popupService.showAlert(gettextCatalog.getString('Error'), err);
|
||||
$scope.addr = addr;
|
||||
if ($scope.wallet.showBackupNeededModal) $scope.openBackupNeededModal();
|
||||
$scope.$apply();
|
||||
});
|
||||
}, 100);
|
||||
|
||||
};
|
||||
|
||||
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||
if (!$scope.isCordova) $scope.checkTips();
|
||||
$scope.wallets = profileService.getWallets();
|
||||
$scope.$on('Wallet/Changed', function(event, wallet) {
|
||||
if (!wallet) {
|
||||
$log.debug('No wallet provided');
|
||||
return;
|
||||
}
|
||||
$scope.wallet = wallet;
|
||||
$log.debug('Wallet changed: ' + wallet.name);
|
||||
$scope.setAddress();
|
||||
walletService.getAddress($scope.wallet, forceNew, function(err, addr) {
|
||||
$scope.generatingAddress = false;
|
||||
if (err) popupService.showAlert(gettextCatalog.getString('Error'), err);
|
||||
$scope.addr = addr;
|
||||
if ($scope.wallet.showBackupNeededModal) $scope.openBackupNeededModal();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$scope.goCopayers = function() {
|
||||
$ionicHistory.removeBackView();
|
||||
|
@ -99,5 +81,23 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi
|
|||
from: 'tabs.receive',
|
||||
walletId: $scope.wallet.credentials.walletId
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
if (!$scope.isCordova) $scope.checkTips();
|
||||
$scope.$on('Wallet/Changed', function(event, wallet) {
|
||||
if (!wallet) {
|
||||
$log.debug('No wallet provided');
|
||||
return;
|
||||
}
|
||||
$scope.wallet = wallet;
|
||||
$log.debug('Wallet changed: ' + wallet.name);
|
||||
$scope.setAddress();
|
||||
$timeout(function() {
|
||||
$scope.$apply();
|
||||
}, 100);
|
||||
});
|
||||
|
||||
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||
$scope.wallets = profileService.getWallets();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,15 +1,13 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, profileService, lodash, configService, gettextCatalog, platformInfo, walletService, txpModalService, externalLinkService, popupService) {
|
||||
var isCordova = platformInfo.isCordova;
|
||||
var isWP = platformInfo.isWP;
|
||||
var isAndroid = platformInfo.isAndroid;
|
||||
var isChromeApp = platformInfo.isChromeApp;
|
||||
|
||||
var HISTORY_SHOW_LIMIT = 10;
|
||||
var currentTxHistoryPage;
|
||||
var wallet;
|
||||
var currentTxHistoryPage = 0;
|
||||
var listeners = [];
|
||||
$scope.txps = [];
|
||||
$scope.completeTxHistory = [];
|
||||
$scope.openTxpModal = txpModalService.open;
|
||||
|
||||
$scope.openExternalLink = function(url, target) {
|
||||
externalLinkService.open(url, target);
|
||||
|
@ -24,7 +22,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
// fee: 1000,
|
||||
// createdOn: new Date() / 1000,
|
||||
// outputs: [],
|
||||
// wallet: wallet
|
||||
// wallet: $scope.wallet
|
||||
// };
|
||||
//
|
||||
// function addOutput(n) {
|
||||
|
@ -44,13 +42,12 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
$scope.txps = lodash.sortBy(txps, 'createdOn').reverse();
|
||||
};
|
||||
|
||||
|
||||
$scope.updateStatus = function(force) {
|
||||
var updateStatus = function(force) {
|
||||
$scope.updatingStatus = true;
|
||||
$scope.updateStatusError = false;
|
||||
$scope.walletNotRegistered = false;
|
||||
|
||||
walletService.getStatus(wallet, {
|
||||
walletService.getStatus($scope.wallet, {
|
||||
force: !!force,
|
||||
}, function(err, status) {
|
||||
$scope.updatingStatus = false;
|
||||
|
@ -74,29 +71,8 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
});
|
||||
};
|
||||
|
||||
|
||||
$scope.openTxpModal = txpModalService.open;
|
||||
|
||||
var listeners = [
|
||||
$rootScope.$on('bwsEvent', function(e, walletId) {
|
||||
if (walletId == wallet.id)
|
||||
$scope.updateStatus();
|
||||
}),
|
||||
$rootScope.$on('Local/TxAction', function(e, walletId) {
|
||||
if (walletId == wallet.id)
|
||||
$scope.updateStatus();
|
||||
}),
|
||||
];
|
||||
|
||||
$scope.$on('$destroy', function() {
|
||||
lodash.each(listeners, function(x) {
|
||||
x();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
$scope.openSearchModal = function() {
|
||||
$scope.color = wallet.color;
|
||||
$scope.color = $scope.wallet.color;
|
||||
|
||||
$ionicModal.fromTemplateUrl('views/modals/search.html', {
|
||||
scope: $scope,
|
||||
|
@ -113,7 +89,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
|
||||
$scope.openTxModal = function(btx) {
|
||||
$scope.btx = lodash.cloneDeep(btx);
|
||||
$scope.walletId = wallet.id;
|
||||
$scope.walletId = $scope.wallet.id;
|
||||
$ionicModal.fromTemplateUrl('views/modals/tx-details.html', {
|
||||
scope: $scope
|
||||
}).then(function(modal) {
|
||||
|
@ -123,24 +99,24 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
};
|
||||
|
||||
$scope.recreate = function() {
|
||||
walletService.recreate(wallet, function(err) {
|
||||
walletService.recreate($scope.wallet, function(err) {
|
||||
$scope.init();
|
||||
if (err) return;
|
||||
$timeout(function() {
|
||||
walletService.startScan(wallet, function() {
|
||||
walletService.startScan($scope.wallet, function() {
|
||||
$scope.$apply();
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
$scope.updateTxHistory = function(cb) {
|
||||
var updateTxHistory = function(cb) {
|
||||
if (!cb) cb = function() {};
|
||||
if ($scope.updatingTxHistory) return;
|
||||
|
||||
$scope.updatingTxHistory = true;
|
||||
$scope.updateTxHistoryError = false;
|
||||
$scope.updatingTxHistoryProgress = null;
|
||||
$scope.updatingTxHistoryProgress = 0;
|
||||
|
||||
var progressFn = function(txs) {
|
||||
$scope.updatingTxHistoryProgress = txs ? txs.length : 0;
|
||||
|
@ -148,11 +124,11 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
$scope.showHistory();
|
||||
$timeout(function() {
|
||||
$scope.$apply();
|
||||
}, 1);
|
||||
});
|
||||
};
|
||||
|
||||
$timeout(function() {
|
||||
walletService.getTxHistory(wallet, {
|
||||
walletService.getTxHistory($scope.wallet, {
|
||||
progressFn: progressFn,
|
||||
}, function(err, txHistory) {
|
||||
$scope.updatingTxHistory = false;
|
||||
|
@ -162,12 +138,10 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
return;
|
||||
}
|
||||
$scope.completeTxHistory = txHistory;
|
||||
|
||||
$scope.showHistory();
|
||||
|
||||
$timeout(function() {
|
||||
$scope.$apply();
|
||||
}, 1);
|
||||
});
|
||||
return cb();
|
||||
});
|
||||
});
|
||||
|
@ -186,51 +160,39 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
|||
$scope.$broadcast('scroll.infiniteScrollComplete');
|
||||
};
|
||||
|
||||
$scope.updateAll = function(cb) {
|
||||
$scope.updateStatus(false);
|
||||
$scope.updateTxHistory(cb);
|
||||
$scope.updateAll = function(force, cb) {
|
||||
updateStatus(force);
|
||||
updateTxHistory(cb);
|
||||
};
|
||||
|
||||
$scope.hideToggle = function() {
|
||||
profileService.toggleHideBalanceFlag(wallet.credentials.walletId, function(err) {
|
||||
profileService.toggleHideBalanceFlag($scope.wallet.credentials.walletId, function(err) {
|
||||
if (err) $log.error(err);
|
||||
});
|
||||
};
|
||||
|
||||
$scope.$on("$ionicView.beforeEnter", function(event, data){
|
||||
currentTxHistoryPage = 0;
|
||||
$scope.completeTxHistory = [];
|
||||
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||
|
||||
wallet = profileService.getWallet($stateParams.walletId);
|
||||
$scope.wallet = profileService.getWallet(data.stateParams.walletId);
|
||||
$scope.requiresMultipleSignatures = $scope.wallet.credentials.m > 1;
|
||||
|
||||
/* Set color for header bar */
|
||||
$scope.walletDetailsColor = wallet.color;
|
||||
$scope.walletDetailsName = wallet.name;
|
||||
$scope.wallet = wallet;
|
||||
$scope.updateAll();
|
||||
|
||||
$scope.requiresMultipleSignatures = wallet.credentials.m > 1;
|
||||
$scope.newTx = false;
|
||||
listeners = [
|
||||
$rootScope.$on('bwsEvent', function(e, walletId) {
|
||||
if (walletId == $scope.wallet.id)
|
||||
updateStatus();
|
||||
}),
|
||||
$rootScope.$on('Local/TxAction', function(e, walletId) {
|
||||
if (walletId == $scope.wallet.id)
|
||||
updateStatus();
|
||||
}),
|
||||
];
|
||||
});
|
||||
|
||||
$scope.updateAll(function() {
|
||||
if ($stateParams.txid) {
|
||||
var tx = lodash.find($scope.completeTxHistory, {
|
||||
txid: $stateParams.txid
|
||||
});
|
||||
if (tx) {
|
||||
$scope.openTxModal(tx);
|
||||
} else {
|
||||
popupService.showAlert(null, gettextCatalog.getString('TX not available'));
|
||||
}
|
||||
} else if ($stateParams.txpId) {
|
||||
var txp = lodash.find($scope.txps, {
|
||||
id: $stateParams.txpId
|
||||
});
|
||||
if (txp) {
|
||||
$scope.openTxpModal(txp);
|
||||
} else {
|
||||
popupService.showAlert(null, gettextCatalog.getString('Proposal not longer available'));
|
||||
}
|
||||
}
|
||||
$scope.$on("$ionicView.leave", function(event, data) {
|
||||
lodash.each(listeners, function(x) {
|
||||
x();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -157,11 +157,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
|||
controller: 'walletDetailsController',
|
||||
templateUrl: 'views/walletDetails.html'
|
||||
}
|
||||
},
|
||||
params: {
|
||||
txid: null,
|
||||
txpId: null,
|
||||
},
|
||||
}
|
||||
})
|
||||
.state('tabs.activity', {
|
||||
url: '/activity',
|
||||
|
@ -685,7 +681,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
|||
}
|
||||
})
|
||||
.state('onboarding.disclaimer', {
|
||||
url: '/disclaimer',
|
||||
url: '/disclaimer/:walletId/:backedUp',
|
||||
views: {
|
||||
'onboarding': {
|
||||
templateUrl: 'views/onboarding/disclaimer.html'
|
||||
|
|
|
@ -927,9 +927,9 @@ angular.module('copayApp.services')
|
|||
if (x.pendingTxps)
|
||||
txps = txps.concat(x.pendingTxps);
|
||||
});
|
||||
txps = lodash.sortBy(txps, 'pendingForUs', 'createdOn');
|
||||
txps = lodash.compact(lodash.flatten(txps)).slice(0, MAX);
|
||||
var n = txps.length;
|
||||
txps = lodash.sortBy(txps, 'pendingForUs', 'createdOn');
|
||||
txps = lodash.compact(lodash.flatten(txps)).slice(0, opts.limit || MAX);
|
||||
return cb(null, txps, n);
|
||||
};
|
||||
|
||||
|
|
|
@ -421,8 +421,8 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
|||
var endingTxid = confirmedTxs[0] ? confirmedTxs[0].txid : null;
|
||||
var endingTs = confirmedTxs[0] ? confirmedTxs[0].time : null;
|
||||
|
||||
|
||||
// First update
|
||||
progressFn(txsFromLocal);
|
||||
wallet.completeHistory = txsFromLocal;
|
||||
|
||||
function getNewTxs(newTxs, skip, cb) {
|
||||
|
@ -431,7 +431,7 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim
|
|||
|
||||
newTxs = newTxs.concat(processNewTxs(wallet, lodash.compact(res)));
|
||||
|
||||
progressFn(newTxs);
|
||||
progressFn(newTxs.concat(txsFromLocal));
|
||||
|
||||
skip = skip + requestLimit;
|
||||
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
@font-face {
|
||||
font-family: 'Roboto-Black';
|
||||
src: url('../roboto-font/roboto-black-webfont.woff2') format('woff2'),
|
||||
url('roboto-black-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Black-Italic';
|
||||
src: url('../roboto-font/roboto-blackitalic-webfont.woff2') format('woff2'),
|
||||
url('roboto-blackitalic-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Bold';
|
||||
src: url('../roboto-font/roboto-bold-webfont.woff2') format('woff2'),
|
||||
url('roboto-bold-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Bold-Italic';
|
||||
src: url('../roboto-font/roboto-bolditalic-webfont.woff2') format('woff2'),
|
||||
url('roboto-bolditalic-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Italic';
|
||||
src: url('../roboto-font/roboto-italic-webfont.woff2') format('woff2'),
|
||||
url('roboto-italic-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Light';
|
||||
src: url('../roboto-font/roboto-light-webfont.woff2') format('woff2'),
|
||||
url('roboto-light-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Light-Italic';
|
||||
src: url('../roboto-font/roboto-lightitalic-webfont.woff2') format('woff2'),
|
||||
url('roboto-lightitalic-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Medium';
|
||||
src: url('../roboto-font/roboto-medium-webfont.woff2') format('woff2'),
|
||||
url('roboto-medium-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Medium-Italic';
|
||||
src: url('../roboto-font/roboto-mediumitalic-webfont.woff2') format('woff2'),
|
||||
url('roboto-mediumitalic-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
src: url('../roboto-font/roboto-regular-webfont.woff2') format('woff2'),
|
||||
url('roboto-regular-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Thin';
|
||||
src: url('../roboto-font/roboto-thin-webfont.woff2') format('woff2'),
|
||||
url('roboto-thin-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto-Thin-Italic';
|
||||
src: url('../roboto-font/roboto-thinitalic-webfont.woff2') format('woff2'),
|
||||
url('roboto-thinitalic-webfont.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
}
|
|
@ -983,6 +983,7 @@ input[type=number] {
|
|||
}
|
||||
}
|
||||
|
||||
@import "fonts";
|
||||
@import "ionic";
|
||||
@import "common";
|
||||
@import "forms";
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
height: 100%;
|
||||
ion-content{
|
||||
height: 100%;
|
||||
&.has-header{
|
||||
top:40px !important;
|
||||
}
|
||||
.scroll{
|
||||
height: 100%;
|
||||
}
|
||||
|
@ -10,9 +13,17 @@
|
|||
margin-top:1.5rem;
|
||||
}
|
||||
}
|
||||
.tag{
|
||||
padding-bottom: 0;
|
||||
}
|
||||
.list{
|
||||
max-width: 600px;
|
||||
@include center-block();
|
||||
.item{
|
||||
&:first-child{
|
||||
padding-top: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.item {
|
||||
background: transparent;
|
||||
|
@ -59,6 +70,9 @@
|
|||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
&.header-present{
|
||||
bottom:16px;
|
||||
}
|
||||
&-content{
|
||||
max-width: 600px;
|
||||
@include center-block();
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
text-align: center;
|
||||
padding: 2rem 1rem 1.5rem 1rem;
|
||||
color: #fff;
|
||||
min-height: 115px;
|
||||
height: 140px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
&-alternative {
|
||||
|
|
Loading…
Reference in New Issue