Merge pull request #2424 from cmgustavo/bug/UX-issues-01

Bug/ux issues 01
This commit is contained in:
Matias Alejo Garcia 2015-02-20 10:58:11 -03:00
commit 3796ddc4fb
19 changed files with 300 additions and 281 deletions

View File

@ -26,10 +26,6 @@ a:hover {
color: #2980b9;
}
.last-transactions-content:hover {
background: #eee;
}
a.button-setup.add-wallet:hover {
opacity: 1;
}
@ -51,11 +47,6 @@ ul.pagination li.current a:hover, ul.pagination li.current a:focus {
background: #16A085;
}
table tr:hover {
background-color: #eee;
cursor: pointer;
}
.button.outline.light-gray:hover {
background: rgba(206,213,220,0.40);
color: #4B6178;
@ -187,7 +178,4 @@ a.text-warning:hover {color: #FD7262;}
color: #fff;
}
.last-transactions-content.active:hover {
background-color: #E4E8EC;
}

View File

@ -616,11 +616,6 @@ ul.tx-copayers {
.ma { margin: 0 auto;}
.tu {text-transform: uppercase;}
.small {
font-size: 60%;
line-height: inherit;
}
.line-dashed-setuph-v {
border-left: 1px dashed #415970;
}
@ -850,6 +845,8 @@ input[type=number]::-webkit-outer-spin-button {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
padding-top: 3px;
line-height: 120%;
}
ul.pagination li.current a {

View File

@ -121,7 +121,7 @@
}
.modal-mobile {
padding: 60px 0.5rem;
padding: 20px .5rem;
}
.reveal-modal {
@ -393,11 +393,6 @@
transform: none !important;
}
.button.secondary:hover, button.secondary:hover {
background: #008CC1;
color: #fff;
}
.move-right .close-menu {
cursor: pointer;
box-shadow: none;
@ -462,10 +457,22 @@
color: #1ABC9C;
}
.tab-bar {
position: relative;
}
}
@media (max-width: 640px) {
.tab-bar {
position: absolute;
}
.modal-mobile {
padding: 60px 0.5rem;
}
.tx-comment {
border-top: 1px solid #eee;
padding-top: 10px;

View File

@ -33,25 +33,24 @@ angular.module('copayApp.controllers').controller('CopayersController',
};
$scope.deleteWallet = function() {
$scope.loading = true;
identityService.deleteWallet(w, function(err) {
if (err) {
$scope.loading = null;
$scope.error = err.message || err;
copay.logger.warn(err);
$timeout(function() {
$scope.$digest();
});
} else {
$scope.loading = false;
if ($rootScope.wallet) {
go.walletHome();
$rootScope.starting = true;
$timeout(function() {
identityService.deleteWallet(w, function(err) {
$rootScope.starting = false;
if (err) {
$scope.error = err.message || err;
copay.logger.warn(err);
$timeout(function () { $scope.$digest(); });
} else {
if ($rootScope.wallet) {
go.walletHome();
}
$timeout(function() {
notification.success('Success', 'The wallet "' + (w.name || w.id) + '" was deleted');
});
}
$timeout(function() {
notification.success('Success', 'The wallet "' + (w.name || w.id) + '" was deleted');
});
}
});
});
}, 100);
};
$scope.copySecret = function(secret) {

View File

@ -18,6 +18,7 @@ angular.module('copayApp.controllers').controller('HistoryController',
$scope.alternativeCurrency = [];
$scope.selectPage = function(page) {
$scope.paging = true;
$scope.currentPage = page;
$scope.update();
};
@ -188,6 +189,7 @@ angular.module('copayApp.controllers').controller('HistoryController',
$scope.totalItems = res.nbItems;
$scope.loading = false;
$scope.paging = false;
setTimeout(function() {
$scope.$digest();
}, 1);

View File

@ -119,22 +119,23 @@ angular.module('copayApp.controllers').controller('MoreController',
$scope.deleteWallet = function() {
$scope.loading = true;
identityService.deleteWallet(w, function(err) {
if (err) {
$scope.loading = null;
$scope.error = err.message || err;
copay.logger.warn(err);
$timeout(function () { $scope.$digest(); });
} else {
$timeout(function() {
identityService.deleteWallet(w, function(err) {
$scope.loading = false;
if ($rootScope.wallet) {
go.walletHome();
if (err) {
$scope.error = err.message || err;
copay.logger.warn(err);
$timeout(function () { $scope.$digest(); });
} else {
if ($rootScope.wallet) {
go.walletHome();
}
$timeout(function() {
notification.success('Success', 'The wallet "' + (w.name || w.id) + '" was deleted');
});
}
$timeout(function() {
notification.success('Success', 'The wallet "' + (w.name || w.id) + '" was deleted');
});
}
});
});
}, 100);
};
$scope.copyText = function(text) {

View File

@ -60,7 +60,7 @@ angular.module('copayApp.controllers').controller('ReceiveController',
$modal.open({
templateUrl: 'views/modals/qr-address.html',
windowClass: 'tiny',
windowClass: 'small',
controller: ModalInstanceCtrl,
resolve: {
address: function() {

View File

@ -407,10 +407,13 @@ angular.module('copayApp.controllers').controller('SendController',
var $oscope = $scope;
$scope.openPPModal = function(merchantData) {
var ModalInstanceCtrl = function($scope, $modalInstance) {
var w = $rootScope.wallet;
var satToUnit = 1 / w.settings.unitToSatoshi;
$scope.md = merchantData;
$scope.alternative = $oscope._alternative;
$scope.alternativeIsoCode = $oscope.alternativeIsoCode;
$scope.isRateAvailable = $oscope.isRateAvailable;
$scope.unitTotal = (merchantData.total * satToUnit).toFixed(w.settings.unitDecimals);
$scope.cancel = function() {
$modalInstance.dismiss('cancel');
@ -418,7 +421,7 @@ angular.module('copayApp.controllers').controller('SendController',
};
$modal.open({
templateUrl: 'views/modals/paypro.html',
windowClass: 'tiny',
windowClass: 'medium',
controller: ModalInstanceCtrl,
});
};
@ -534,7 +537,8 @@ angular.module('copayApp.controllers').controller('SendController',
};
$scope.cancel = function(form) {
$scope.error = $scope.success = null;
$scope.error = $scope.success = $scope.newaddress = $scope.newlabel = null;
clearForm(form);
$scope.toggleForm();
};
@ -542,11 +546,23 @@ angular.module('copayApp.controllers').controller('SendController',
$scope.showForm = !$scope.showForm;
};
var clearForm = function(form) {
form.newaddress.$pristine = true;
form.newaddress.$setViewValue('');
form.newaddress.$render();
form.newlabel.$pristine = true;
form.newlabel.$setViewValue('');
form.newlabel.$render();
form.$setPristine();
};
// TODO change to modal
$scope.submitAddressBook = function(form) {
if (form.$invalid) {
return;
}
$scope.loading = true;
$timeout(function() {
var errorMsg;
var entry = {
@ -563,11 +579,13 @@ angular.module('copayApp.controllers').controller('SendController',
if (errorMsg) {
$scope.error = errorMsg;
} else {
clearForm(form);
$scope.toggleForm();
notification.success('Entry created', 'New addressbook entry created')
}
$scope.loading = false;
$rootScope.$digest();
}, 1);
}, 100);
return;
};

View File

@ -1,80 +1,86 @@
<div ng-controller="CopayersController" ng-init="init()">
<div class="row">
<div class="large-12 medium-12 small-12 columns">
<h1>Share this secret with your copayers</h1>
</div>
<div ng-show="$root.starting">
<div ng-include="'views/includes/loading.html'" ng-init="title = 'Deleting'"></div>
</div>
<div class="row">
<div class="large-8 columns">
<div ng-if="!$root.wallet.isComplete()">
<div class="panel oh">
<div class="box-notification">
<div class="box-icon error">
<i class="fi-alert size-24"></i>
</div>
<span class="text-warning size-14">
Please note the wallet creator <b>must be online</b> until all copayers have joined.
</span>
</div>
<div ng-click="copySecret(secret)">
<div class="text-center">
<qrcode size="250" data="{{secret}}"></qrcode>
</div>
<div class="secret m10t">
{{secret}}
</div>
</div>
<div class="text-center m10t" ng-if="isCordova">
<span class="button outline dark-gray tiny"
ng-click="shareSecret(secret)">
<i class="fi-share"></i> Share secret
</span>
</div>
<div class="size-10 line-t text-center">
<h2 class="m10t">{{$root.wallet.getName()}}</h2>
<span class="text-gray">
[{{$root.wallet.requiredCopayers}} of {{$root.wallet.totalCopayers}} ]
</span>
<span ng-if="$root.wallet.isTestnet()"> in TESTNET</span>
</div>
</div>
<div class="!$root.starting">
<div class="row">
<div class="large-12 medium-12 small-12 columns">
<h1>Share this secret with your copayers</h1>
</div>
</div>
<div class="large-4 columns">
<div class="panel oh">
<h3>Waiting for copayers</h3>
<div ng-include="'views/includes/copayers.html'"></div>
<div ng-if="!$root.wallet.isComplete()" class="m15t">
<div class="left m10r" ng-include="'views/includes/photo.html'"></div>
<p class="size-12 m0 m5t left mv">
<div class="row">
<div class="large-8 columns">
<div ng-if="!$root.wallet.isComplete()">
<div class="panel oh">
<div class="box-notification">
<div class="box-icon error">
<i class="fi-alert size-24"></i>
</div>
<span class="text-warning size-14">
Please note the wallet creator <b>must be online</b> until all copayers have joined.
</span>
</div>
<div ng-click="copySecret(secret)">
<div class="text-center">
<qrcode size="250" data="{{secret}}"></qrcode>
</div>
<div class="secret m10t">
{{secret}}
</div>
</div>
<div class="text-center m10t" ng-if="isCordova">
<span class="button outline dark-gray tiny"
ng-click="shareSecret(secret)">
<i class="fi-share"></i> Share secret
</span>
</div>
<div class="size-10 line-t text-center">
<h2 class="m10t">{{$root.wallet.getName()}}</h2>
<span class="text-gray">
[{{$root.wallet.requiredCopayers}} of {{$root.wallet.totalCopayers}} ]
</span>
<span ng-if="$root.wallet.isTestnet()"> in TESTNET</span>
</div>
</div>
</div>
</div>
<div class="large-4 columns">
<div class="panel oh">
<h3>Waiting for copayers</h3>
<div ng-include="'views/includes/copayers.html'"></div>
<div ng-if="!$root.wallet.isComplete()" class="m15t">
<div class="left m10r" ng-include="'views/includes/photo.html'"></div>
<p class="size-12 m0 m5t left mv">
<i class="fi-loop icon-rotate spinner"></i>
<span translate>Waiting...</span>
</p>
</p>
</div>
</div>
</div>
</div>
</div>
<!-- end of row -->
<div class="row">
<div class="large-12 columns">
<button class="small warning" ng-show="!confirmDelete" ng-click="confirmDelete=!confirmDelete">
<i class="fi-trash"></i> Cancel
</button>
<div class="text-center" ng-show="confirmDelete">
<h2>Are you sure you want to cancel and delete this wallet</h2>
<div class="row">
<div class="large-6 medium-6 small-6 columns">
<button class="gray" ng-disabled="loading"
ng-click="confirmDelete=!confirmDelete">No</button>
</div>
<div class="large-6 medium-6 small-6 columns">
<button class="warning" ng-disabled="loading" ng-click="deleteWallet(); confirmDelete = !confirmDelete">
<i class="fi-trash"></i> Yes
</button>
<!-- end of row -->
<div class="row">
<div class="large-12 columns">
<button class="small warning" ng-show="!confirmDelete" ng-click="confirmDelete=!confirmDelete">
<i class="fi-trash"></i> Cancel
</button>
<div class="text-center" ng-show="confirmDelete">
<h2>Are you sure you want to cancel and delete this wallet</h2>
<div class="row">
<div class="large-6 medium-6 small-6 columns">
<button class="gray" ng-disabled="loading"
ng-click="confirmDelete=!confirmDelete">No</button>
</div>
<div class="large-6 medium-6 small-6 columns">
<button class="warning" ng-disabled="loading" ng-click="deleteWallet(); confirmDelete = !confirmDelete">
<i class="fi-trash"></i> Yes
</button>
</div>
</div>
</div>
</div>

View File

@ -11,38 +11,48 @@
</div>
</div>
</div>
<div class="row" ng-if="blockchain_txs[0].txid">
<div class="row m10b" ng-show="paging">
<div class="large-12 columns">
<div class="panel oh">
<span class="text-gray" translate>Getting transactions...</span>
</div>
</div>
</div>
<div ng-show="!paging" class="row" ng-if="blockchain_txs[0].txid">
<div class="large-12 columns">
<div class="panel oh">
<div ng-repeat="btx in blockchain_txs | orderBy:'-ts'" ng-click="openTxModal(btx)" ng-class="{'line-b':!$last}" class="last-transactions-content">
<div ng-repeat="btx in blockchain_txs | orderBy:'-ts'"
ng-click="openTxModal(btx)"
ng-class="{'line-b':!$last}"
class="row last-transactions-content">
<div class="row">
<div class="large-6 medium-6 small-12 columns size-16">
<div class="ellipsis m10b">
<div class="large-6 medium-6 small-5 columns">
<div class="ellipsis">
{{btx.comment || btx.labelTo}} &nbsp;
</div>
<div class="m5t size-14 text-gray">
<time ng-if="btx.ts">{{btx.ts | amTimeAgo}}</time>
<span class="label alert" ng-show="!btx.ts && (!btx.confirmations || btx.confirmations == 0)">
<span translate>Unconfirmed</span>
<span translate class="text-warning"
ng-show="!btx.ts && (!btx.confirmations || btx.confirmations == 0)">
Unconfirmed
</span>
</div>
</div>
<div class="large-6 medium-6 small-12 columns">
<div class="text-right" ng-class="{
<div class="large-6 medium-6 small-7 columns">
<div ng-if="!$root.updatingBalance" class="text-right" ng-class="{
'text-primary' : btx.action == 'received',
'text-warning': btx.action == 'sent',
'text-gray': btx.action == 'moved'}">
<span class="size-21">
<span ng-if="!$root.updatingBalance">
<span ng-if="btx.action == 'received'">+</span><span ng-if="btx.action == 'sent'">-</span>{{btx.amount}}
</span>
{{$root.wallet.settings.unitName}}
<span class="size-18">
<span ng-if="btx.action == 'received'">+</span><span ng-if="btx.action == 'sent'">-</span>{{btx.amount}}
{{$root.wallet.settings.unitName}}
</span>
<span class="size-14 db m5t text-gray" ng-show="btx.alternativeAmount">
{{btx.alternativeAmount}} {{$root.wallet.settings.alternativeIsoCode}}
</span>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -6,12 +6,12 @@
</div>
</div>
<div class="left" tooltip="ID: {{copayer.peerId}}" tooltip-placement="bottom">
<small class="text-gray" ng-show="copayer.index == 0">
<span class="size-12" ng-show="copayer.index == 0">
<i class="fi-check m5r"></i> {{'Me'|translate}}
</small>
<small class="text-gray" ng-show="copayer.index > 0">
</span>
<span class="size-12 text-gray" ng-show="copayer.index > 0">
<i class="fi-check m5r"></i> {{copayer.nick}}
</small>
</span>
</div>
</li>
</ul>
</ul>

View File

@ -1,8 +1,7 @@
<nav class="tab-bar text-right hide-for-large-up">
<span ng-click="close()" class="p10 text-white">Close</span>
</nav>
<div class="row modal-mobile">
<div class="large-12 columns">
<div class="modal-mobile">
<h1 ng-show="!showForm">Address Book</h1>
<h1 ng-show="showForm">Add a new entry</h1>
<p translate class="text-gray m15b" ng-show="!showForm && !hasEntry()">Empty. Create an alias for your addresses</p>
@ -18,7 +17,7 @@
<thead class="show-for-large-up">
<tr>
<th translate>Entry</th>
<th ng-class="{'hide-for-small-only' : $root.wallet.isShared()}" ng-show="$root.wallet.isShared()" translate>Creator</th>
<th class="show-for-large-up" ng-class="{'hide-for-small-only' : $root.wallet.isShared()}" ng-show="$root.wallet.isShared()" translate>Creator</th>
<th class="show-for-large-up" translate>Date</th>
<th class="show-for-large-up">Visible</th>
</tr>
@ -29,9 +28,9 @@
ng-class="{'addressbook-disabled': info.hidden}">
<td ng-click="copyToSend(addr)">
<b>{{info.label}}</b><br>
<span class="address-size">{{::addr}}</span>
<small class="address-size">{{::addr}}</small>
</td>
<td ng-click="copyToSend(addr)" ng-show="$root.wallet.isShared()" ng-class="{'hide-for-small-only' : $root.wallet.isShared()}">{{$root.wallet.publicKeyRing.nicknameForCopayer(info.copayerId)}}</td>
<td class="show-for-large-up" ng-click="copyToSend(addr)" ng-show="$root.wallet.isShared()">{{$root.wallet.publicKeyRing.nicknameForCopayer(info.copayerId)}}</td>
<td ng-click="copyToSend(addr)" class="show-for-large-up"><time>{{::info.createdTs | amCalendar}}</time></td>
<td class="show-for-large-up text-center">
<a ng-click="toggleAddressBookEntry(addr)" title="{{ info.hidden ? 'Enable' : 'Disable'}} address">
@ -42,9 +41,9 @@
</tr>
</tbody>
</table>
</div>
<div class="large-6 medium-6 columns large-centered medium-centered" >
<form ng-show="showForm" class="m0" name="addressBookForm" ng-submit="submitAddressBook(addressBookForm)" novalidate>
<form ng-show="showForm" class="m0" name="addressBookForm"
ng-disabled="loading"
ng-submit="submitAddressBook(addressBookForm)" novalidate>
<div class="box-notification" ng-show="error">
<div class="box-icon error">
<i class="size-24 fi-x"></i>
@ -75,14 +74,13 @@
placeholder="{{'Label'|translate}}" ng-model="newlabel" required>
</div>
</label>
<a translate class="button secondary default" ng-click="cancel(addressBookForm)">Cancel</a>
<a translate class="button secondary default" ng-show="!loading" ng-click="cancel(addressBookForm)">Cancel</a>
<button class="primary right"
ng-disabled="addressBookForm.$invalid || loading"
ng-click="submitAddressBook(addressBookForm)">{{'Add'|translate}}</button>
</form>
</div>
<div class="large-12 columns" ng-show="!showForm">
<a class="button primary expand" ng-click="toggleForm()"><i class="fi-plus"></i> Add entry</a>
</div>
<a ng-show="!showForm" class="button primary expand" ng-disabled="loading" ng-click="toggleForm()">
<i class="fi-plus"></i> Add entry
</a>
<a class="close-reveal-modal show-for-large-up" ng-click="close()"><i class="fi-x size-18"></i></a>
</div>

View File

@ -4,7 +4,7 @@
<div class="modal-mobile">
<div class="text-center">
<div class="size-48">
{{md.unitTotal}} {{$root.wallet.settings.unitName}}
{{unitTotal}} {{$root.wallet.settings.unitName}}
</div>
<div class="size-18 m5t text-gray">
{{ alternative }} {{ alternativeIsoCode }}

View File

@ -4,14 +4,18 @@
<div class="modal-mobile text-center" ng-init="addr = address.address">
<qrcode size="220" data="{{addr}}"></qrcode>
<div class="m10t"
<div class="m20t"
ng-init="label = $root.wallet.addressBook[addr].label">
<div class="size-12">
{{addr}} <small class="label" ng-show="address.isChange">change</small>
{{addr}}
</div>
<b class="db m5t" ng-show="label">
<div class="m5t size-10 text-secondary" ng-show="address.isChange" translate>change</div>
<div class="m10t" ng-show="label">
({{label}})
</b>
</div>
<div class="m5t" ng-show="address.balance && address.balance > 0">
<b>{{address.balance}} {{$root.wallet.settings.unitName}}</b>
</div>
</div>
<div class="text-center m10t" ng-if="isCordova">
<button class="primary expand" ng-click="copyAddress(addr)">

View File

@ -16,7 +16,7 @@
</span>
</span>
</div>
<div class="size-48" ng-class="{
<div class="size-42" ng-class="{
'text-primary' : btx.action == 'received',
'text-warning': btx.action == 'sent',
'text-gray': btx.action == 'moved'}">
@ -29,53 +29,53 @@
<a class="close-reveal-modal show-for-large-up" ng-click="cancel()"><i class="fi-x size-18"></i></a>
</div>
<div ng-if="btx.ts || btx.createdTs " class="m20v line-b">
<i>Date:</i>
<time >{{ (btx.ts || btx.createdTs ) | amCalendar}}</time>
</div>
<table>
<tr ng-if="btx.ts || btx.createdTs">
<td width="30"><i translate>Date:</i></td>
<td><time>{{ (btx.ts || btx.createdTs ) | amCalendar}}</time></td>
</tr>
<div ng-show="btx.comment" class="line-b m20v lh140">
<i>Note:</i>
<span>{{btx.comment}}</span>
</div>
<tr ng-if="btx.comment">
<td width="30"><i translate>Note:</i></td>
<td class="">{{btx.comment}}</td>
</tr>
<div ng-if="btx.merchant" class="lh140 m10v line-b">
<i>Merchant Message:</i>
<p class="text-gray size-14">{{btx.merchant.pr.pd.memo}}</p>
</div>
<tr ng-if="btx.merchant">
<td width="30"><i translate>Merchant Message:</i></td>
<td class="text-gray">{{btx.merchant.pr.pd.memo}}</td>
</tr>
<div class="m10v line-b">
<span class="label alert" ng-show="!btx.ts && (!btx.confirmations || btx.confirmations == 0)">
<span translate>Unconfirmed</span>
</span>
<span ng-show="btx.confirmations>0" class="m10v">
<i translate>Confirmations: </i>
<p class="label radius">{{btx.confirmations}}</p>
</span>
</div>
<div ng-if="btx.actionList[0]" class="m10v">
<i>Signatures:</i>
<ul class="tx-copayers m10t" ng-if="btx.actionList[0]">
<li ng-repeat="c in btx.actionList" ng-class="{'bottom-line-copayers':!$last}" ng-if="c.actions.rejected || c.actions.sign || c.actions.create">
<span>
<i ng-if="c.actions.rejected" class="fi-x icon-sign x"></i>
<i ng-if="c.actions.sign" class="fi-check icon-sign check"></i>
<tr ng-if="btx.ts">
<td width="30"><i translate>Confirmations: </i></td>
<td><span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
Unconfirmed
</span>
<span>
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active m10r"></i>
<span class="text-secondary" ng-show="btx.confirmations>0">
{{btx.confirmations}}
</span>
<span>{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}</span>
</li>
</ul>
</div>
<small class="ellipsis text-gray m10v" ng-if="btx.txid" > ID: {{btx.txid}} </small>
<div class="oh">
<a class="button outline light-gray tiny right" ng-click="$root.openExternalLink('http://' + getShortNetworkName() + '.insight.is/tx/' + btx.txid)" ng-if="btx.txid">
See it on the blockchain <i class="icon-arrow-right2 vm"></i>
</a>
</div>
</td>
</tr>
<tr ng-if="btx.actionList[0]">
<td width="30"><i translate>Signatures:</i></td>
<td>
<ul class="no-bullet size-10 m0" ng-if="btx.actionList[0]">
<li ng-repeat="c in btx.actionList" ng-class="{'m5b':!$last}" ng-if="c.actions.rejected || c.actions.sign || c.actions.create">
<span>
<i ng-if="c.actions.rejected" class="fi-x icon-sign x"></i>
<i ng-if="c.actions.sign" class="fi-check icon-sign check"></i>
</span>
<span>{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}</span>
</li>
</ul>
</td>
</tr>
</table>
<small class="ellipsis text-gray m20b text-right" ng-if="btx.txid" > ID: {{btx.txid}} </small>
<a class="button outline light-gray tiny right" ng-click="$root.openExternalLink('http://' + getShortNetworkName() + '.insight.is/tx/' + btx.txid)" ng-if="btx.txid">
See it on the blockchain <i class="icon-arrow-right2 vm"></i>
</a>
</div>

View File

@ -90,16 +90,14 @@
<div class="large-5 medium-5 small-5 columns">
<button class="button warning m0 expand" ng-click="hideTxInfo = true; hideSign = true; reject(tx.ntxid);"
ng-disabled="loading" ng-show="!hideReject">
<i class="fi-x icon-sign x" ng-show="!loading"></i>
<i class="fi-bitcoin-circle icon-rotate spinner" ng-show="loading"></i>
<i class="fi-x icon-sign x"></i>
<span translate>Reject</span>
</button>
</div>
<div class="large-5 medium-5 small-5 columns text-right">
<button class="button primary m0 expand" ng-click="hideTxInfo = true; hideReject = true; sign(tx.ntxid)"
ng-disabled="loading" ng-show="!hideSign">
<i class="fi-check icon-sign check" ng-show="!loading"></i>
<i class="fi-bitcoin-circle icon-rotate spinner" ng-show="loading"></i>
<i class="fi-check icon-sign check"></i>
<span translate>Sign</span>
</button>
</div>

View File

@ -33,19 +33,16 @@
<div ng-repeat="addr in addresses" ng-click="openAddressModal(addr)" class="pointer">
<div class="panel">
<div class="row">
<div class="large-7 medium-7 small-9 columns">
<contact class="ellipsis" address="{{::addr.address}}">
<div class="large-3 medium-4 small-5 columns">
<contact class="size-12 ellipsis" address="{{::addr.address}}"></contact>
</div>
<div class="large-1 medium-2 small-3 columns text-right">
<small translate class="label" ng-show="::addr.isChange">change</small>
<div class="large-1 medium-1 small-2 columns">
<span translate class="text-secondary size-10" ng-show="::addr.isChange">change</span>
</div>
<div class="large-4 medium-3 small-12 columns text-right">
<span ng-show="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
<span class="size-14" ng-show="!$root.updatingBalance">
<b>{{addr.balance || '0'}} {{$root.wallet.settings.unitName}}</b>
</span>
<div class="large-8 medium-7 small-5 columns text-right">
<span class="size-12" ng-show="!$root.updatingBalance">
<b>{{addr.balance || '0'}} {{$root.wallet.settings.unitName}}</b>
</span>
</div>
</div>
<!-- end of panel mobile -->

View File

@ -1,40 +1,42 @@
<div class="send" ng-controller="SendController" ng-init="init()">
<div class="columns" ng-show="$root.wallet.balanceInfo.lockedBalance">
<div class="panel">
<div class="left">
<i class="fi-info size-42 m10r"></i>
</div>
<div>
<p class="m0 size-14 text-bold">Available Balance: {{$root.wallet.balanceInfo.availableBalance}} {{$root.wallet.settings.unitName}}</p>
<span class="size-12 text-gray">{{$root.wallet.balanceInfo.lockedBalance}} {{$root.wallet.settings.unitName}} in pending transactions</span>
</div>
</div>
</div>
<div class="row show-for-large-up">
<div class="large-8 large-centered columns">
<h1>{{$root.title}}</h1>
</div>
</div>
<div class="row" ng-show="fetchingURL">
<div class="row" ng-show="$root.wallet.balanceInfo.lockedBalance">
<div class="large-12 columns">
<div class="panel">
<div class="box-notification">
<div class="box-icon secondary">
<i class="fi-bitcoin-circle icon-rotate spinner size-24"></i>
</div>
<span class="text-secondary size-14">
Fetching Payment Information...
</span>
<div class="left">
<i class="fi-info size-42 m10r"></i>
</div>
<div>
<p class="m0 size-14 text-bold">Available Balance: {{$root.wallet.balanceInfo.availableBalance}} {{$root.wallet.settings.unitName}}</p>
<span class="size-12 text-gray">{{$root.wallet.balanceInfo.lockedBalance}} {{$root.wallet.settings.unitName}} in pending transactions</span>
</div>
</div>
</div>
</div>
<div class="row" ng-show="!fetchingURL">
<div class="row">
<div class="large-8 large-centered columns">
<form name="sendForm" ng-submit="submitForm(sendForm)" ng-disabled="loading" novalidate>
<div class="row show-for-large-up">
<div class="large-7 columns">
<h1>{{$root.title}}</h1>
</div>
<div class="large-5 columns show-for-large-up text-right"
ng-show="(!lockAddress && !_merchantData && !fetchingURL)">
<div ng-hide="showScanner || disableScanner">
<a class="button radius black tiny m0" ng-click="openScanner()"><i class="fi-camera size-18 vm m5r"></i> Scan QR </a>
</div>
<div ng-show="showScanner">
<a translate class="button radius tiny warning m0" ng-click="cancelScanner()"><i class="fi-x size-18"></i> </a>
</div>
</div>
</div>
<div class="box-notification" ng-show="fetchingURL">
<div class="box-icon secondary">
<i class="fi-bitcoin-circle size-24"></i>
</div>
<span class="text-secondary size-14">
Fetching Payment Information...
</span>
</div>
<form ng-show="!fetchingURL" name="sendForm" ng-submit="submitForm(sendForm)" ng-disabled="loading" novalidate>
<div class="panel">
<div class="box-notification" ng-show="error && !hideForWP ">
<div class="box-icon error">
@ -63,15 +65,15 @@
</label>
<span ng-hide="sendForm.address.$pristine">
<span translate class="has-error right size-12" ng-show="sendForm.address.$invalid && _address">
<span class="icon-input">
<i class="fi-x"></i>
</span>
Not valid
</span>
<small class="icon-input right" ng-show="!sendForm.address.$invalid">
<i class="fi-check"></i>
</small>
<span translate class="has-error right size-12" ng-show="sendForm.address.$invalid && _address">
<span class="icon-input">
<i class="fi-x"></i>
</span>
Not valid
</span>
<small class="icon-input right" ng-show="!sendForm.address.$invalid">
<i class="fi-check"></i>
</small>
</span>
</div>
@ -101,10 +103,10 @@
<div class="m5b right" ng-hide="sendForm.amount.$pristine">
<span translate class="has-error right size-12" ng-show="sendForm.amount.$invalid">
<span class="icon-input"><i class="fi-x"></i></span>
Not valid
Not valid
</span>
<small class="icon-input right" ng-show="!sendForm.amount.$invalid">
<i class="fi-check"></i>
<i class="fi-check"></i>
</small>
</div>
<div ng-show="!showAlternative">
@ -141,21 +143,13 @@
</div>
<div class="row">
<div class="large-6 medium-6 small-12 columns text-right">
<div class="large-6 medium-6 small-12 columns">
<button type="submit" class="button primary expand" ng-disabled="sendForm.$invalid || loading">
Send
</button>
</div>
<div class="large-4 medium-4 small-12 columns text-left">
<div class="show-for-large-up text-right" ng-show="!lockAddress && !_merchantData">
<div ng-hide="showScanner || disableScanner">
<a class="button radius black size-12" ng-click="openScanner()"><i class="fi-camera size-18 vm m5r"></i> Scan QR </a>
</div>
<div ng-show="showScanner">
<a translate class="button radius tiny warning" ng-click="cancelScanner()"><i class="fi-x size-18"></i> </a>
</div>
</div>
<a ng-click="resetForm()" class="button expand warning m0"
<div class="large-4 medium-4 small-12 columns text-right">
<a ng-click="resetForm()" class="button expand warning"
ng-show="(_merchantData || lockAddress) && !loading">Cancel</a>
</div>
</div>

View File

@ -39,23 +39,23 @@
<input type="text" ng-model="insightTestnet" class="form-control" name="insightTestnet" valid-url required>
</div>
<div translate class="small text-gray">
<small translate class="text-gray">
Insight API server is open-source software. You can run your own instances, check
<a href
ng-click="$root.openExternalLink('https://insight.is')">Insight API Homepage</a>
</div>
</small>
</fieldset>
<fieldset>
<legend translate>Storage</legend>
<label for="insightTestnet">Read and Store Profiles:</label>
<select class="form-control" ng-model="selectedStorage" ng-options="o.name for o in availableStorages" required>
</select>
<div translate class="small text-gray">
<small translate class="text-gray">
Wallets and profiles are stored encrypted using your password as a key. You can store the encrypted data locally, on this device, or remotely on the cloud (Insight Server).
<a href
ng-click="$root.openExternalLink('https://github.com/bitpay/copay/tree/master/js/plugins')">
More pluggins are welcomed!</a>
</div>
</small>
</fieldset>
<fieldset>
<legend translate>Language</legend>
@ -66,9 +66,9 @@
<legend translate>Log level</legend>
<select class="form-control" ng-model="selectedLogLevel" ng-options="o.name for o in availableLogLevels" required>
</select>
<div translate class="small text-gray">
<small translate class="text-gray">
Log level shows information on the console. This is useful to find bugs and to help users. 'debug' is the most verbose level while 'fatal' only shows unexpected errors
</div>
</small>
</fieldset>
<button translate type="submit" class="button primary radius expand m0" ng-disabled="settingsForm.$invalid || loading" ng-click="save()">
Save