Merge branch 'ref/design' of https://github.com/bitpay/bitpay-wallet into feature/onboarding_last_steps
This commit is contained in:
commit
57c1942740
33 changed files with 566 additions and 591 deletions
|
|
@ -13,14 +13,14 @@
|
||||||
],
|
],
|
||||||
"main": "public/index.html",
|
"main": "public/index.html",
|
||||||
"window": {
|
"window": {
|
||||||
"title": "Copay - A multisignature bitcoin wallet",
|
"title": "*NAMECASE* - *DESCRIPTION*",
|
||||||
"icon": "./public/img/icons/icon-256.png",
|
"icon": "./public/img/icons/icon-256.png",
|
||||||
"toolbar": false,
|
"toolbar": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"visible": true,
|
"visible": true,
|
||||||
"resizable": true,
|
"resizable": true,
|
||||||
"frame": true,
|
"frame": true,
|
||||||
"width": 800,
|
"width": 400,
|
||||||
"height": 600,
|
"height": 600,
|
||||||
"position": "center",
|
"position": "center",
|
||||||
"fullscreen": false
|
"fullscreen": false
|
||||||
|
|
@ -85,7 +85,7 @@
|
||||||
"xcode": "^0.8.2"
|
"xcode": "^0.8.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "bower install && cd app-template && node apply.js",
|
"preinstall": "bower install && npm i fs-extra && cd app-template && node apply.js",
|
||||||
"postinstall": "npm run build",
|
"postinstall": "npm run build",
|
||||||
"build": "grunt",
|
"build": "grunt",
|
||||||
"start": "node app.js",
|
"start": "node app.js",
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "BitPay",
|
"name": "BitPay",
|
||||||
"description": "The BitPay Bitcoin Wallet",
|
"description": "The BitPay Bitcoin Wallet",
|
||||||
"version": "0.8.0",
|
"version": "0.10.0",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"storage",
|
"storage",
|
||||||
"unlimitedStorage",
|
"unlimitedStorage",
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
"name": "bitpay",
|
"name": "bitpay",
|
||||||
"description": "The BitPay Bitcoin Wallet",
|
"description": "The BitPay Bitcoin Wallet",
|
||||||
"author": "BitPay",
|
"author": "BitPay",
|
||||||
"version": "0.8.0",
|
"version": "0.10.0",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"wallet",
|
"wallet",
|
||||||
"copay",
|
"copay",
|
||||||
|
|
@ -16,14 +16,14 @@
|
||||||
],
|
],
|
||||||
"main": "public/index.html",
|
"main": "public/index.html",
|
||||||
"window": {
|
"window": {
|
||||||
"title": "Copay - A multisignature bitcoin wallet",
|
"title": "BitPay - The BitPay Bitcoin Wallet",
|
||||||
"icon": "./public/img/icons/icon-256.png",
|
"icon": "./public/img/icons/icon-256.png",
|
||||||
"toolbar": false,
|
"toolbar": false,
|
||||||
"show": true,
|
"show": true,
|
||||||
"visible": true,
|
"visible": true,
|
||||||
"resizable": true,
|
"resizable": true,
|
||||||
"frame": true,
|
"frame": true,
|
||||||
"width": 800,
|
"width": 400,
|
||||||
"height": 600,
|
"height": 600,
|
||||||
"position": "center",
|
"position": "center",
|
||||||
"fullscreen": false
|
"fullscreen": false
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
"xcode": "^0.8.2"
|
"xcode": "^0.8.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"preinstall": "bower install && cd app-template && ./apply.js",
|
"preinstall": "bower install && npm i fs-extra && cd app-template && node apply.js",
|
||||||
"postinstall": "npm run build",
|
"postinstall": "npm run build",
|
||||||
"build": "grunt",
|
"build": "grunt",
|
||||||
"start": "node app.js",
|
"start": "node app.js",
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
<ion-view>
|
<ion-view>
|
||||||
<ion-nav-bar class="bar-royal">
|
<ion-nav-bar class="bar-royal">
|
||||||
<ion-nav-buttons side="primary">
|
<ion-nav-buttons side="primary">
|
||||||
<button class="button back-button" ui-sref="tabs.home">
|
<button class="button button-clear" ui-sref="tabs.home">
|
||||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
Close
|
||||||
</button>
|
</button>
|
||||||
</ion-nav-buttons>
|
</ion-nav-buttons>
|
||||||
<ion-nav-title>BitPay Card</ion-nav-title>
|
<ion-nav-title>BitPay Card</ion-nav-title>
|
||||||
<ion-nav-buttons side="secondary">
|
<ion-nav-buttons side="secondary">
|
||||||
<button class="button no-border" ui-sref="bitpayCard.preferences">
|
<button class="button button-clear" ui-sref="bitpayCard.preferences">
|
||||||
<i class="icon ion-gear-b"></i>
|
<i class="icon ion-gear-b"></i>
|
||||||
</button>
|
</button>
|
||||||
</ion-nav-buttons>
|
</ion-nav-buttons>
|
||||||
|
|
@ -93,8 +93,8 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-show="bitpayCard.bitpayCardAuthenticated && !bitpayCard.visaCardActivated && !addFunds">
|
<div ng-show="bitpayCard.bitpayCardAuthenticated && !bitpayCard.visaCardActivated && !addFunds">
|
||||||
<div class="oh pr">
|
<div id="bitpayCard" class="oh pr">
|
||||||
<div class="amount" ng-style="{'background-color': '#293C92'}">
|
<div class="amount">
|
||||||
<div ng-show="!loadingHistory && bitpayCard.bitpayCardCurrentBalance" ng-click="bitpayCard.update()">
|
<div ng-show="!loadingHistory && bitpayCard.bitpayCardCurrentBalance" ng-click="bitpayCard.update()">
|
||||||
<strong class="size-36">${{bitpayCard.bitpayCardCurrentBalance}}</strong>
|
<strong class="size-36">${{bitpayCard.bitpayCardCurrentBalance}}</strong>
|
||||||
<div class="size-12">Available balance</div>
|
<div class="size-12">Available balance</div>
|
||||||
|
|
@ -110,7 +110,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<select ng-model="dateRange" ng-change="bitpayCard.update(dateRange)">
|
<select class="m10" ng-model="dateRange" ng-change="bitpayCard.update(dateRange)">
|
||||||
<option value="last30Days">Recent Activity</option>
|
<option value="last30Days">Recent Activity</option>
|
||||||
<option value="lastMonth">Last Month</option>
|
<option value="lastMonth">Last Month</option>
|
||||||
<option value="all">All Activity</option>
|
<option value="all">All Activity</option>
|
||||||
|
|
@ -127,10 +127,10 @@
|
||||||
<i class="icon ion-android-sync"></i>
|
<i class="icon ion-android-sync"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="card list" ng-show="!loadingHistory">
|
||||||
<div
|
<div
|
||||||
ng-show="!loadingHistory"
|
|
||||||
ng-repeat="tx in bitpayCard.bitpayCardTransactionHistory | orderBy: ['pending','-timestamp']"
|
ng-repeat="tx in bitpayCard.bitpayCardTransactionHistory | orderBy: ['pending','-timestamp']"
|
||||||
class="row"
|
class="item row"
|
||||||
ng-init="bitpayCard.getMerchantInfo(tx)">
|
ng-init="bitpayCard.getMerchantInfo(tx)">
|
||||||
<div class="col" ng-init="icon = bitpayCard.getIconName(tx)">
|
<div class="col" ng-init="icon = bitpayCard.getIconName(tx)">
|
||||||
<img class="m5t" ng-src="img/mcc-icons/{{icon}}.svg" width="22">
|
<img class="m5t" ng-src="img/mcc-icons/{{icon}}.svg" width="22">
|
||||||
|
|
@ -164,6 +164,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div ng-show="bitpayCard.bitpayCardAuthenticated && !bitpayCard.visaCardActivated && addFunds">
|
<div ng-show="bitpayCard.bitpayCardAuthenticated && !bitpayCard.visaCardActivated && addFunds">
|
||||||
<form
|
<form
|
||||||
|
|
@ -171,7 +172,7 @@
|
||||||
ng-submit="bitpayCard.sendFunds()"
|
ng-submit="bitpayCard.sendFunds()"
|
||||||
novalidate>
|
novalidate>
|
||||||
|
|
||||||
<div class="list">
|
<div class="card list">
|
||||||
<label class="item item-input item-stacked-label">
|
<label class="item item-input item-stacked-label">
|
||||||
<span class="input-label">Amount</span>
|
<span class="input-label">Amount</span>
|
||||||
<input
|
<input
|
||||||
|
|
@ -198,14 +199,14 @@
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<button class="button button-block button-stable"
|
<button class="button button-block button-light"
|
||||||
type="button"
|
type="button"
|
||||||
ng-click="addFunds = false">
|
ng-click="addFunds = false; fiat = null">
|
||||||
Cancel
|
Cancel
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<button class="button button-block"
|
<button class="button button-block button-positive"
|
||||||
ng-disabled="!fiat"
|
ng-disabled="!fiat"
|
||||||
type="submit">
|
type="submit">
|
||||||
Send
|
Send
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<h1 class="text-center" translate>Share this invitation with your copayers</h1>
|
<h1 class="text-center" translate>Share this invitation with your copayers</h1>
|
||||||
|
|
||||||
<div ng-click="copySecret()" ng-class="{'enable_text_select': !isCordova}">
|
<div ng-click="copySecret()" ng-class="{'enable_text_select': !isCordova}">
|
||||||
<div class="text-center">
|
<div class="text-center" copy-to-clipboard="secret">
|
||||||
<qrcode size="220" error-correction-level="L" data="{{secret}}"></qrcode>
|
<qrcode size="220" error-correction-level="L" data="{{secret}}"></qrcode>
|
||||||
<div ng-show="!secret" style="position:relative; top:-226px; height:0px">
|
<div ng-show="!secret" style="position:relative; top:-226px; height:0px">
|
||||||
<div style="height:220px; width:220px; margin:auto; background: white">
|
<div style="height:220px; width:220px; margin:auto; background: white">
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,22 @@
|
||||||
<ion-view >
|
<ion-view>
|
||||||
<ion-tabs class="tabs-striped tabs-color-positive tabs-color-active-positive tabs-top">
|
<ion-nav-bar class="bar-royal">
|
||||||
|
<ion-nav-title>{{'Export wallet' | translate}}</ion-nav-title>
|
||||||
|
<ion-nav-back-button>
|
||||||
|
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||||
|
</ion-nav-back-button>
|
||||||
|
</ion-nav-bar>
|
||||||
|
|
||||||
<ion-tab title="File/Text" ui-sref="tabs.preferences.export.file">
|
<ion-content ng-controller="exportController" ng-init="file = true; init();">
|
||||||
<ion-nav-view name="tab-export-file"></ion-nav-view>
|
<div class="row text-center">
|
||||||
</ion-tab>
|
<div class="col" ng-click="file = true" ng-style="file && {'border-bottom': '2px solid'}">
|
||||||
|
<span class="" translate>File/Text</span>
|
||||||
|
</div>
|
||||||
|
<div class="col" ng-click="file = false" ng-style="!file && {'border-bottom': '2px solid'}">
|
||||||
|
<span class="" translate>QR Code</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<ion-tab title="QR Code" ui-sref="tabs.preferences.export.qrCode">
|
<div ng-include="'views/tab-export-file.html'" ng-if="file"></div>
|
||||||
<ion-nav-view name="tab-export-qrCode"></ion-nav-view>
|
<div ng-include="'views/tab-export-qrCode.html'" ng-if="!file"></div>
|
||||||
</ion-tab>
|
</ion-content>
|
||||||
|
|
||||||
</ion-tabs>
|
|
||||||
</ion-view>
|
</ion-view>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
<ion-modal-view>
|
<ion-modal-view>
|
||||||
<ion-header-bar align-title="center" class="tab-bar" ng-style="{'background-color':color}">
|
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color':color}">
|
||||||
<div class="left-small">
|
<button class="button button-clear" ng-click="close()">
|
||||||
<a ng-click="close()" class="p10">
|
Close
|
||||||
<span class="text-close" translate>Close</span>
|
</button>
|
||||||
</a>
|
<div class="title" translate>
|
||||||
|
Search Transactions
|
||||||
</div>
|
</div>
|
||||||
<h1 class="title ellipsis" translate>Search Transactions</h1>
|
|
||||||
</ion-header-bar>
|
</ion-header-bar>
|
||||||
|
|
||||||
<ion-content ng-controller="searchController" ng-init="search = ''">
|
<ion-content ng-controller="searchController" ng-init="search = ''">
|
||||||
|
|
@ -18,14 +18,33 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<div class="row item" ng-repeat="btx in txHistorySearchResults track by btx.txid" ng-click="openTxModal(btx)">
|
<div class="item" ng-repeat="btx in txHistorySearchResults track by btx.txid" ng-click="openTxModal(btx)">
|
||||||
<div class="col col-10">
|
|
||||||
<img src="img/icon-receive-history.svg" alt="sync" width="40" ng-if="btx.action == 'received'">
|
|
||||||
<img src="img/icon-sent-history.svg" alt="sync" width="40" ng-if="btx.action == 'sent'">
|
|
||||||
<img src="img/icon-moved.svg" alt="sync" width="40" ng-if="btx.action == 'moved'">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-50">
|
<span class="item-note text-right">
|
||||||
|
<span class="size-16" ng-class="{'text-bold': btx.recent}">
|
||||||
|
<span ng-if="btx.action == 'received'">+</span>
|
||||||
|
<span ng-if="btx.action == 'sent'">-</span>
|
||||||
|
<span class="size-12" ng-if="btx.action == 'invalid'" translate>
|
||||||
|
(possible double spend)
|
||||||
|
</span>
|
||||||
|
<span ng-if="btx.action != 'invalid'">
|
||||||
|
{{btx.amountStr}}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<p>
|
||||||
|
<time ng-if="btx.time">{{btx.time * 1000 | amTimeAgo}}</time>
|
||||||
|
<span translate class="text-warning"
|
||||||
|
ng-show="!btx.time && (!btx.confirmations || btx.confirmations == 0)" translate>
|
||||||
|
Unconfirmed
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<img class="left m10r" src="img/icon-receive-history.svg" alt="sync" width="40" ng-if="btx.action == 'received'">
|
||||||
|
<img class="left m10r" src="img/icon-sent-history.svg" alt="sync" width="40" ng-if="btx.action == 'sent'">
|
||||||
|
<img class="left m10r" src="img/icon-moved.svg" alt="sync" width="40" ng-if="btx.action == 'moved'">
|
||||||
|
|
||||||
|
<h2>
|
||||||
<div class="padding" ng-if="btx.action == 'received'">
|
<div class="padding" ng-if="btx.action == 'received'">
|
||||||
<span class="ellipsis">
|
<span class="ellipsis">
|
||||||
<h2 ng-if="btx.note.body">{{btx.note.body}}</h2>
|
<h2 ng-if="btx.note.body">{{btx.note.body}}</h2>
|
||||||
|
|
@ -49,31 +68,8 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="label tu warning radius" ng-if="btx.action == 'invalid'" translate>Invalid</span>
|
<span class="label tu warning radius" ng-if="btx.action == 'invalid'" translate>Invalid</span>
|
||||||
</div>
|
</h2>
|
||||||
|
|
||||||
<div class="col col-30 padding">
|
|
||||||
<span class="size-16" ng-class="{'text-bold': btx.recent}">
|
|
||||||
<span ng-if="btx.action == 'received'">+</span>
|
|
||||||
<span ng-if="btx.action == 'sent'">-</span>
|
|
||||||
<span class="size-12" ng-if="btx.action == 'invalid'" translate>
|
|
||||||
(possible double spend)
|
|
||||||
</span>
|
|
||||||
<span ng-if="btx.action != 'invalid'">
|
|
||||||
{{btx.amountStr}}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
<p>
|
|
||||||
<time ng-if="btx.time">{{btx.time * 1000 | amTimeAgo}}</time>
|
|
||||||
<span translate class="text-warning"
|
|
||||||
ng-show="!btx.time && (!btx.confirmations || btx.confirmations == 0)" translate>
|
|
||||||
Unconfirmed
|
|
||||||
</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-10 text-center">
|
|
||||||
<i class="icon ion-chevron-right"></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="text-gray text-center size-12 p10t" ng-if="txHistoryShowMore">
|
<div class="text-gray text-center size-12 p10t" ng-if="txHistoryShowMore">
|
||||||
<span class="size-12" translate>{{filteredTxHistory.length - txHistorySearchResults.length}} more</span>
|
<span class="size-12" translate>{{filteredTxHistory.length - txHistorySearchResults.length}} more</span>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
<ion-modal-view ng-controller="txDetailsController">
|
<ion-modal-view ng-controller="txDetailsController">
|
||||||
<ion-header-bar align-title="center" class="tab-bar" ng-style="{'background-color':color}">
|
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color':color}">
|
||||||
<div class="left-small">
|
<button class="button button-clear" ng-click="cancel()">
|
||||||
<a ng-click="cancel()" class="p10">
|
Close
|
||||||
<span class="text-close" translate>Close</span>
|
</button>
|
||||||
</a>
|
<div class="title" translate>
|
||||||
|
Transaction
|
||||||
</div>
|
</div>
|
||||||
<h1 class="title ellipsis" translate>Transaction</h1>
|
|
||||||
</ion-header-bar>
|
</ion-header-bar>
|
||||||
|
|
||||||
<ion-content ng-style="{'background-color': '#F6F7F9'}">
|
<ion-content>
|
||||||
<div class="modal-content">
|
|
||||||
<div class="header-modal text-center" ng-init="getAlternativeAmount(btx)">
|
<div class="header-modal text-center" ng-init="getAlternativeAmount(btx)">
|
||||||
<div ng-show="btx.action != 'invalid'">
|
<div ng-show="btx.action != 'invalid'">
|
||||||
<div ng-show="btx.action == 'received'">
|
<div ng-show="btx.action == 'received'">
|
||||||
|
|
@ -42,10 +41,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h4 class="title m0" translate>Details</h4>
|
<ul class="list">
|
||||||
|
<div class="item item-divider" translate>Details</div>
|
||||||
<ul class="no-bullet size-14 m0">
|
<li ng-if="!btx.hasMultiplesOutputs && btx.addressTo && btx.addressTo != 'N/A'" class="item"
|
||||||
<li ng-if="!btx.hasMultiplesOutputs && btx.addressTo && btx.addressTo != 'N/A'" class="line-b p10 oh"
|
|
||||||
copy-to-clipboard="btx.addressTo">
|
copy-to-clipboard="btx.addressTo">
|
||||||
<span class="text-gray" translate>To</span>
|
<span class="text-gray" translate>To</span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
|
|
@ -60,7 +58,7 @@
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li ng-show="btx.hasMultiplesOutputs" class="line-b p10 oh"
|
<li ng-show="btx.hasMultiplesOutputs" class="item"
|
||||||
ng-click="showMultiplesOutputs = !showMultiplesOutputs">
|
ng-click="showMultiplesOutputs = !showMultiplesOutputs">
|
||||||
<span class="text-gray" translate>Recipients</span>
|
<span class="text-gray" translate>Recipients</span>
|
||||||
<span class="right">{{btx.recipientCount}}
|
<span class="right">{{btx.recipientCount}}
|
||||||
|
|
@ -69,18 +67,18 @@
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<div class="line-b" ng-show="btx.hasMultiplesOutputs && showMultiplesOutputs"
|
<div class="item" ng-show="btx.hasMultiplesOutputs && showMultiplesOutputs"
|
||||||
ng-repeat="output in btx.outputs"
|
ng-repeat="output in btx.outputs"
|
||||||
ng-include="'views/includes/output.html'">
|
ng-include="'views/includes/output.html'">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<li ng-if="btx.action == 'invalid'" class="line-b p10 oh">
|
<li ng-if="btx.action == 'invalid'" class="item">
|
||||||
<span class="right" translate>
|
<span class="right" translate>
|
||||||
This transaction has become invalid; possibly due to a double spend attempt.
|
This transaction has become invalid; possibly due to a double spend attempt.
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li ng-if="btx.time" class="line-b p10 oh">
|
<li ng-if="btx.time" class="item">
|
||||||
<span class="text-gray" translate>Date</span>
|
<span class="text-gray" translate>Date</span>
|
||||||
<span class="right enable_text_select">
|
<span class="right enable_text_select">
|
||||||
<time>{{ btx.time * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
|
<time>{{ btx.time * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
|
||||||
|
|
@ -88,19 +86,19 @@
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="line-b p10" ng-show="btx.action != 'received'"
|
<li class="item" ng-show="btx.action != 'received'"
|
||||||
copy-to-clipboard="btx.feeStr">
|
copy-to-clipboard="btx.feeStr">
|
||||||
<span class="text-gray" translate>Fee</span>
|
<span class="text-gray" translate>Fee</span>
|
||||||
<span class="right enable_text_select">{{btx.feeStr}}</span>
|
<span class="right enable_text_select">{{btx.feeStr}}</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="line-b p10 oh" ng-if="btx.message && btx.action != 'received'"
|
<li class="item" ng-if="btx.message && btx.action != 'received'"
|
||||||
copy-to-clipboard="btx.message">
|
copy-to-clipboard="btx.message">
|
||||||
<span class="text-gray" translate>Description</span>
|
<span class="text-gray" translate>Description</span>
|
||||||
<span class="right enable_text_select">{{btx.message}}</span>
|
<span class="right enable_text_select">{{btx.message}}</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li ng-if="btx.merchant" class="line-b p10 oh"
|
<li ng-if="btx.merchant" class="item"
|
||||||
copy-to-clipboard="btx.merchant.pr.pd.memo">
|
copy-to-clipboard="btx.merchant.pr.pd.memo">
|
||||||
<span class="text-gray" translate>Merchant message</span>
|
<span class="text-gray" translate>Merchant message</span>
|
||||||
<span class="right enable_text_select">
|
<span class="right enable_text_select">
|
||||||
|
|
@ -108,7 +106,7 @@
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li ng-if="btx.time" class="line-b p10 oh">
|
<li ng-if="btx.time" class="item">
|
||||||
<span class="text-gray" translate>Confirmations</span>
|
<span class="text-gray" translate>Confirmations</span>
|
||||||
<span class="right" >
|
<span class="right" >
|
||||||
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
|
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
|
||||||
|
|
@ -123,7 +121,7 @@
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="p10 oh" ng-show="btx.note && btx.note.body">
|
<li class="item" ng-show="btx.note && btx.note.body">
|
||||||
<span class="text-gray" translate>Comment</span>
|
<span class="text-gray" translate>Comment</span>
|
||||||
<span class="right enable_text_select">{{btx.note.body}}</span><br>
|
<span class="right enable_text_select">{{btx.note.body}}</span><br>
|
||||||
<span class="right text-italic text-gray size-12">
|
<span class="right text-italic text-gray size-12">
|
||||||
|
|
@ -133,32 +131,30 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div ng-if="btx.actions[0] && isShared">
|
<div class="list" ng-if="btx.actions[0] && isShared">
|
||||||
<h4 class="title m0" translate>Participants</h4>
|
<div class="item item-divider" translate>Participants</div>
|
||||||
<ul class="no-bullet size-14 m0">
|
<div class="item" ng-repeat="c in btx.actions">
|
||||||
<li class="line-b p10 text-gray" ng-repeat="c in btx.actions">
|
<span class="item-note">
|
||||||
<i class="icon-contact size-24"></i>
|
|
||||||
<span class="right">
|
|
||||||
<i ng-if="c.type == 'reject'" class="fi-x icon-sign x db"></i>
|
<i ng-if="c.type == 'reject'" class="fi-x icon-sign x db"></i>
|
||||||
<i ng-if="c.type == 'accept'" class="fi-check icon-sign check db"></i>
|
<i ng-if="c.type == 'accept'" class="fi-check icon-sign check db"></i>
|
||||||
</span>
|
</span>
|
||||||
{{c.copayerName}} <span ng-if="c.copayerId == copayerId">({{'Me'|translate}})</span>
|
{{c.copayerName}} <span ng-if="c.copayerId == copayerId">({{'Me'|translate}})</span>
|
||||||
</li>
|
</div>
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div ng-show="btx.txid" class="tx-details-blockchain">
|
<div ng-show="btx.txid" class="row">
|
||||||
<div class="text-center m20t">
|
<div class="col">
|
||||||
<button class="button button-positive" ng-click="openExternalLink('https://' +
|
<button class="button button-block button-positive" ng-click="openExternalLink('https://' +
|
||||||
(getShortNetworkName() == 'test' ? 'test-' : '') + 'insight.bitpay.com/tx/' + btx.txid)">
|
(getShortNetworkName() == 'test' ? 'test-' : '') + 'insight.bitpay.com/tx/' + btx.txid)">
|
||||||
<span class="text-gray" translate>See it on the blockchain</span>
|
<span class="text-gray" translate>See it on the blockchain</span>
|
||||||
</button>
|
</button>
|
||||||
<button class="button button-positive" ng-click="showCommentPopup()">
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<button class="button button-block button-positive" ng-click="showCommentPopup()">
|
||||||
<span class="text-gray" translate ng-show="!btx.note">Add comment</i></span>
|
<span class="text-gray" translate ng-show="!btx.note">Add comment</i></span>
|
||||||
<span class="text-gray" translate ng-show="btx.note">Edit comment</span>
|
<span class="text-gray" translate ng-show="btx.note">Edit comment</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</ion-content>
|
</ion-content>
|
||||||
</ion-modal-view>
|
</ion-modal-view>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
<span translate>Sent</span>
|
<span translate>Sent</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center m20t">
|
<div class="text-center m20t">
|
||||||
<a class="button" ng-click="cancel()" translate>OKAY</a>
|
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<span translate>Payment Proposal Created</span>
|
<span translate>Payment Proposal Created</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a class="button" ng-click="cancel()" translate>OKAY</a>
|
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
<span translate>Payment Accepted</span>
|
<span translate>Payment Accepted</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a class="button" ng-click="cancel()" translate>OKAY</a>
|
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -41,7 +41,7 @@
|
||||||
<span translate>Payment Rejected</span>
|
<span translate>Payment Rejected</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a class="button" ng-click="cancel()" translate>OKAY</a>
|
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</ion-modal-view>
|
</ion-modal-view>
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,30 @@
|
||||||
<ion-modal-view ng-controller="txpDetailsController">
|
<ion-modal-view ng-controller="txpDetailsController">
|
||||||
<ion-header-bar align-title="center" class="tab-bar">
|
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color':color}">
|
||||||
<div class="left-small">
|
<button class="button button-clear" ng-click="close()">
|
||||||
<a ng-click="close()" class="p10">
|
Close
|
||||||
<span class="text-close" translate>Close</span>
|
</button>
|
||||||
</a>
|
<div class="title" translate>
|
||||||
|
Payment Proposal
|
||||||
</div>
|
</div>
|
||||||
<h1 class="title ellipsis" translate>Payment Proposal</h1>
|
|
||||||
</ion-header-bar>
|
</ion-header-bar>
|
||||||
|
|
||||||
<ion-content ng-style="{'background-color': '#F6F7F9'}" ng-init="updateCopayerList()">
|
<ion-content ng-init="updateCopayerList()">
|
||||||
<div class="list card">
|
|
||||||
<ul>
|
|
||||||
<li class="item" >
|
|
||||||
<div class="payment-proposal-head" ng-style="{'background-color':color}">
|
<div class="payment-proposal-head" ng-style="{'background-color':color}">
|
||||||
<div class="size-36">{{tx.amountStr}}</div>
|
<div class="size-36">{{tx.amountStr}}</div>
|
||||||
<div class="size-14 text-light" ng-show="tx.alternativeAmountStr">{{tx.alternativeAmountStr}}</div>
|
<div class="size-14 text-light" ng-show="tx.alternativeAmountStr">{{tx.alternativeAmountStr}}</div>
|
||||||
<i class="db fi-arrow-down size-24 m10v"></i>
|
<i class="icon ion-ios-arrow-thin-down"></i>
|
||||||
<span class="payment-proposal-to" copy-to-clipboard="tx.toAddress">
|
<span class="payment-proposal-to" copy-to-clipboard="tx.toAddress">
|
||||||
<i class="fi-bitcoin left"></i>
|
|
||||||
<contact ng-if="!tx.hasMultiplesOutputs" class="dib enable_text_select ellipsis m5t m5b size-14" address="{{tx.toAddress}}"></contact>
|
<contact ng-if="!tx.hasMultiplesOutputs" class="dib enable_text_select ellipsis m5t m5b size-14" address="{{tx.toAddress}}"></contact>
|
||||||
<span ng-if="tx.hasMultiplesOutputs" translate>Multiple recipients</span>
|
<span ng-if="tx.hasMultiplesOutputs" translate>Multiple recipients</span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</li>
|
|
||||||
<li class="item">
|
|
||||||
|
|
||||||
<div class="row" ng-if="tx.removed">
|
<div class="row" ng-if="tx.removed">
|
||||||
<div class="column m20t text-center text-warning size-12" translate>
|
<div class="column m20t text-center text-warning size-12" translate>
|
||||||
The payment was removed by creator
|
The payment was removed by creator
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
|
||||||
<li class="item">
|
|
||||||
|
|
||||||
<div class="button-bar" ng-if="tx.pendingForUs">
|
<div class="button-bar" ng-if="tx.pendingForUs">
|
||||||
<button class="button button-assertive button-block" ng-click="reject()" ng-disabled="loading" ng-show="isShared">
|
<button class="button button-assertive button-block" ng-click="reject()" ng-disabled="loading" ng-show="isShared">
|
||||||
|
|
@ -45,8 +37,6 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</li>
|
|
||||||
<li class="item">
|
|
||||||
|
|
||||||
<div ng-show="tx.status != 'pending'">
|
<div ng-show="tx.status != 'pending'">
|
||||||
<div ng-show="tx.status=='accepted' && !tx.isGlidera">
|
<div ng-show="tx.status=='accepted' && !tx.isGlidera">
|
||||||
|
|
@ -63,56 +53,50 @@
|
||||||
<div class="balanced" ng-show="tx.status == 'broadcasted'" translate>Payment Sent</div>
|
<div class="balanced" ng-show="tx.status == 'broadcasted'" translate>Payment Sent</div>
|
||||||
<div class="assertive" ng-show="tx.status=='rejected'" translate>Payment Rejected</div>
|
<div class="assertive" ng-show="tx.status=='rejected'" translate>Payment Rejected</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
|
||||||
<li class="item">
|
|
||||||
<h4 class="title m0" translate>Details</h4>
|
|
||||||
|
|
||||||
<ul class="no-bullet size-14 m0">
|
<ul class="list">
|
||||||
<li class="line-b p10 oh" ng-show="tx.message">
|
<div class="item item-divider" translate>Details</div>
|
||||||
|
<li class="item" ng-show="tx.message">
|
||||||
<span class="text-gray" translate>Description</span>
|
<span class="text-gray" translate>Description</span>
|
||||||
<span class="right">{{tx.message}}</span>
|
<span class="right">{{tx.message}}</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li ng-show="tx.hasMultiplesOutputs" class="line-b p10 oh" ng-click="showMultiplesOutputs = !showMultiplesOutputs">
|
<li ng-show="tx.hasMultiplesOutputs" class="item" ng-click="showMultiplesOutputs = !showMultiplesOutputs">
|
||||||
<span class="text-gray" translate>Recipients</span>
|
<span class="text-gray" translate>Recipients</span>
|
||||||
<span class="right">{{tx.recipientCount}}
|
<span class="right">{{tx.recipientCount}}
|
||||||
<i ng-show="showMultiplesOutputs" class="icon-arrow-up3 size-24"></i>
|
<i ng-show="showMultiplesOutputs" class="icon ion-ios-arrow-up"></i>
|
||||||
<i ng-show="!showMultiplesOutputs" class="icon-arrow-down3 size-24"></i>
|
<i ng-show="!showMultiplesOutputs" class="icon ion-ios-arrow-up"></i>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<div class="line-b" ng-show="tx.hasMultiplesOutputs && showMultiplesOutputs"
|
<div class="item" ng-show="tx.hasMultiplesOutputs && showMultiplesOutputs"
|
||||||
ng-repeat="output in tx.outputs" ng-include="'views/includes/output.html'">
|
ng-repeat="output in tx.outputs" ng-include="'views/includes/output.html'">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<li class="line-b p10">
|
<li class="item">
|
||||||
<span class="text-gray" translate>Fee</span>
|
<span class="text-gray" translate>Fee</span>
|
||||||
<span class="right">{{tx.feeStr}}</span>
|
<span class="right">{{tx.feeStr}}</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="line-b p10">
|
<li class="item">
|
||||||
<span class="text-gray" translate>Time</span>
|
<span class="text-gray" translate>Time</span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<time>{{ (tx.ts || tx.createdOn ) * 1000 | amTimeAgo}}</time>
|
<time>{{ (tx.ts || tx.createdOn ) * 1000 | amTimeAgo}}</time>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="line-b p10 oh">
|
<li class="item">
|
||||||
<span class="text-gray" translate>Created by</span>
|
<span class="text-gray" translate>Created by</span>
|
||||||
<span class="right">{{tx.creatorName}}</span>
|
<span class="right">{{tx.creatorName}}</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="p10 text-center size-12" ng-show="!currentSpendUnconfirmed && tx.hasUnconfirmedInputs">
|
<div class="item" ng-show="!currentSpendUnconfirmed && tx.hasUnconfirmedInputs">
|
||||||
<span class="text-warning" translate>Warning: this transaction has unconfirmed inputs</span>
|
<span class="text-warning" translate>Warning: this transaction has unconfirmed inputs</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
|
||||||
<li class="item">
|
|
||||||
|
|
||||||
<div ng-if="tx.paypro">
|
<div ng-if="tx.paypro">
|
||||||
<h4 class="title m0" translate>Payment details</h4>
|
<div class="item item-divider" translate>Payment details</div>
|
||||||
<ul class="no-bullet size-14 m0">
|
<li class="item">
|
||||||
<li class="line-b p10">
|
|
||||||
<span class="text-gray" translate>To</span>
|
<span class="text-gray" translate>To</span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<span>
|
<span>
|
||||||
|
|
@ -122,56 +106,48 @@
|
||||||
<contact address="{{tx.toAddress}}" ng-hide="tx.merchant"></contact>
|
<contact address="{{tx.toAddress}}" ng-hide="tx.merchant"></contact>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="line-b p10" ng-if="paymentExpired">
|
<li class="item" ng-if="paymentExpired">
|
||||||
<span class="text-gray" translate>Expired</span>
|
<span class="text-gray" translate>Expired</span>
|
||||||
<span class="right text-alert">
|
<span class="right text-alert">
|
||||||
<time>{{tx.paypro.expires * 1000 | amTimeAgo }}</time>
|
<time>{{tx.paypro.expires * 1000 | amTimeAgo }}</time>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="line-b p10" ng-if="!paymentExpired">
|
<li class="item" ng-if="!paymentExpired">
|
||||||
<span class="text-gray" translate>Expires</span>
|
<span class="text-gray" translate>Expires</span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<time>{{expires}}</time>
|
<time>{{expires}}</time>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="line-b p10">
|
<li class="item">
|
||||||
<span class="text-gray" translate>Merchant Message</span>
|
<span class="text-gray" translate>Merchant Message</span>
|
||||||
<span class="db">{{tx.paypro.pr.pd.memo}}</span>
|
<span class="db">{{tx.paypro.pr.pd.memo}}</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</li>
|
<div ng-if="tx.actions[0] && !txRejected && !txBroadcasted">
|
||||||
<li class="item" ng-if="tx.actions[0] && !txRejected && !txBroadcasted">
|
<div class="item item-divider">
|
||||||
<h4 class="title m0">
|
|
||||||
<div class="right size-12 text-gray m10r">
|
<div class="right size-12 text-gray m10r">
|
||||||
{{tx.requiredSignatures}}/{{tx.walletN}}
|
{{tx.requiredSignatures}}/{{tx.walletN}}
|
||||||
</div>
|
</div>
|
||||||
<span translate>Participants</span>
|
<span translate>Participants</span>
|
||||||
</h4>
|
</div>
|
||||||
<ul class="no-bullet size-14 m0">
|
<li class="item" ng-repeat="ac in tx.actions">
|
||||||
<li class="line-b p10 text-gray" ng-repeat="ac in tx.actions">
|
<span class="item-note">
|
||||||
<i class="icon-contact size-24"></i>
|
<i ng-if="ac.type == 'reject'" class="icon ion-ios-close-empty"></i>
|
||||||
<span class="right">
|
<i ng-if="ac.type == 'accept'" class="icon ion-ios-checkmark-empty"></i>
|
||||||
<i ng-if="ac.type == 'reject'" class="fi-x icon-sign x db"></i>
|
|
||||||
<i ng-if="ac.type == 'accept'" class="fi-check icon-sign check db"></i>
|
|
||||||
</span>
|
</span>
|
||||||
{{ac.copayerName}} <span ng-if="ac.copayerId == copayerId">({{'Me'|translate}})</span>
|
{{ac.copayerName}} <span ng-if="ac.copayerId == copayerId">({{'Me'|translate}})</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
</ul>
|
||||||
</li>
|
<div class="m20t" ng-if="tx.canBeRemoved || (tx.status == 'accepted' && !tx.broadcastedOn)">
|
||||||
<li class="item" ng-if="tx.canBeRemoved || (tx.status == 'accepted' && !tx.broadcastedOn)">
|
<div class="size-12 padding" ng-show="!tx.isGlidera && isShared" translate>
|
||||||
<div class="text-gray size-12 m20b" ng-show="!tx.isGlidera && isShared" translate>
|
|
||||||
* A payment proposal can be deleted if 1) you are the creator, and no other copayer has signed, or 2) 24 hours have passed since the proposal was created.
|
* A payment proposal can be deleted if 1) you are the creator, and no other copayer has signed, or 2) 24 hours have passed since the proposal was created.
|
||||||
</div>
|
</div>
|
||||||
<button class="button button-assertive button-block" ng-click="remove()" ng-disabled="loading">
|
<button class="button button-assertive button-block" ng-click="remove()" ng-disabled="loading">
|
||||||
<i class="fi-trash size-14 m5r"></i>
|
<i class="fi-trash size-14 m5r"></i>
|
||||||
<span translate>Delete Payment Proposal</span>
|
<span translate>Delete Payment Proposal</span>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
</ion-modal-view>
|
</ion-modal-view>
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,10 @@
|
||||||
<input type="email" id="email" name="email" ng-model="email" required></input>
|
<input type="email" id="email" name="email" ng-model="email" required></input>
|
||||||
</label>
|
</label>
|
||||||
</form>
|
</form>
|
||||||
<div class="text-center">
|
<button class="button button-block button-positive button-clear" ng-click="onboardingMailSkip()">
|
||||||
<button class="button button-back no-border" ng-click="onboardingMailSkip()">
|
|
||||||
{{'Skip' | translate}}
|
{{'Skip' | translate}}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="overlay"></div>
|
<div class="overlay"></div>
|
||||||
</ion-content>
|
</ion-content>
|
||||||
</ion-view>
|
</ion-view>
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
<span translate>Sweep paper wallet</span>
|
<span translate>Sweep paper wallet</span>
|
||||||
<i class="icon nav-item-arrow-right"></i>
|
<i class="icon nav-item-arrow-right"></i>
|
||||||
</a>
|
</a>
|
||||||
<a class="item item-icon-right" ui-sref="tabs.preferences.export.file">
|
<a class="item item-icon-right" ui-sref="tabs.preferences.export">
|
||||||
<span translate>Export Wallet</span>
|
<span translate>Export Wallet</span>
|
||||||
<i class="icon nav-item-arrow-right"></i>
|
<i class="icon nav-item-arrow-right"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@
|
||||||
<ion-nav-title>Preferences</ion-nav-title>
|
<ion-nav-title>Preferences</ion-nav-title>
|
||||||
</ion-nav-bar>
|
</ion-nav-bar>
|
||||||
|
|
||||||
<ion-content ng-controller="preferencesBitpayCardController as bitpay">
|
<ion-content ng-controller="preferencesBitpayCardController">
|
||||||
<ul class="list">
|
<ul class="list">
|
||||||
<li class="item assertive" ng-click="bitpay.logout()">
|
<li class="item assertive" ng-click="logout()">
|
||||||
Log out
|
Log out
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,35 @@
|
||||||
<ion-view>
|
<div ng-show="!backupWalletPlainText">
|
||||||
<ion-nav-bar class="bar-royal">
|
|
||||||
<ion-nav-title>{{'Export Wallet' | translate}}</ion-nav-title>
|
|
||||||
<ion-nav-buttons side="primary">
|
|
||||||
<button class="button back-button" ui-sref="tabs.preferences.preferencesAdvanced">
|
|
||||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
|
||||||
</button>
|
|
||||||
</ion-nav-buttons>
|
|
||||||
</ion-nav-bar>
|
|
||||||
|
|
||||||
<ion-content ng-controller="exportController" ng-init="init()" cache-view="true">
|
|
||||||
|
|
||||||
<div ng-show="!backupWalletPlainText">
|
|
||||||
<div class="size-14" ng-show="error">
|
<div class="size-14" ng-show="error">
|
||||||
<i class="ion-alert-circled"></i>
|
<i class="ion-alert-circled"></i>
|
||||||
<span translate>Failed to export</span>
|
<span translate>Failed to export</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form name="exportForm" novalidate>
|
<form name="exportForm" novalidate>
|
||||||
|
<div class="card">
|
||||||
<label class="item item-input item-stacked-label">
|
<label class="item item-input item-stacked-label">
|
||||||
<span class="input-label" transalate>Set up a password</span>
|
<span class="input-label" transalate>Set up a password</span>
|
||||||
<input type="password" placeholder="{{'Your password'|translate}}" name="password" ng-model="password">
|
<input type="password" placeholder="{{'Your password'|translate}}" ng-model="formData.password">
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label class="item item-input item-stacked-label">
|
<label class="item item-input item-stacked-label">
|
||||||
<span class="input-label" transalate>Repeat the password</span>
|
<span class="input-label" transalate>Repeat the password</span>
|
||||||
<input type="password" class="form-control" placeholder="{{'Repeat password'|translate}}" name="password" ng-model="repeatpassword">
|
<input type="password" placeholder="{{'Repeat password'|translate}}" ng-model="formData.repeatpassword">
|
||||||
</label>
|
</label>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<ion-toggle ng-show="canSign" ng-model="showAdvanced" toggle-class="toggle-balanced">
|
<ion-toggle ng-show="canSign" ng-model="formData.showAdvanced" toggle-class="toggle-balanced">
|
||||||
<span translate ng-show="!showAdvanced">Show advanced options</span>
|
<span translate ng-show="!formData.showAdvanced">Show advanced options</span>
|
||||||
<span translate ng-show="showAdvanced">Hide advanced options</span>
|
<span translate ng-show="formData.showAdvanced">Hide advanced options</span>
|
||||||
</ion-toggle>
|
</ion-toggle>
|
||||||
|
|
||||||
<ion-toggle ng-model="noSignEnabled" ng-show="showAdvanced" toggle-class="toggle-balanced" class="r0" ng-change="noSignEnabledChange()">
|
<div class="card" ng-show="formData.showAdvanced">
|
||||||
|
<ion-checkbox ng-model="formData.noSignEnabled" class="checkbox-balanced" ng-change="noSignEnabledChange()">
|
||||||
<span class="toggle-label" translate>Do not include private key</span>
|
<span class="toggle-label" translate>Do not include private key</span>
|
||||||
</ion-toggle>
|
</ion-checkbox>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="box-notification" ng-show="!canSign">
|
<div class="box-notification error" ng-show="!canSign">
|
||||||
<span class="size-14">
|
<span class="size-14">
|
||||||
<i class="ion-alert-circled"></i>
|
<i class="ion-alert-circled"></i>
|
||||||
<span translate>
|
<span translate>
|
||||||
|
|
@ -45,7 +38,7 @@
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="box-notification" ng-show="noSignEnabled">
|
<div class="box-notification error" ng-show="formData.noSignEnabled">
|
||||||
<span class="size-14">
|
<span class="size-14">
|
||||||
<i class="ion-alert-circled"></i>
|
<i class="ion-alert-circled"></i>
|
||||||
<span translate>
|
<span translate>
|
||||||
|
|
@ -57,7 +50,7 @@
|
||||||
<button
|
<button
|
||||||
ng-click="downloadWalletBackup()"
|
ng-click="downloadWalletBackup()"
|
||||||
class="button button-block button-positive"
|
class="button button-block button-positive"
|
||||||
ng-disabled="(!password || password != repeatpassword)"
|
ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||||
ng-style="{'background-color':wallet.color}"
|
ng-style="{'background-color':wallet.color}"
|
||||||
ng-show="!isSafari && !isCordova">
|
ng-show="!isSafari && !isCordova">
|
||||||
<i class="fi-download"></i>
|
<i class="fi-download"></i>
|
||||||
|
|
@ -67,38 +60,34 @@
|
||||||
<button
|
<button
|
||||||
ng-click="viewWalletBackup()"
|
ng-click="viewWalletBackup()"
|
||||||
class="button button-block button-positive"
|
class="button button-block button-positive"
|
||||||
ng-disabled="(!password || password != repeatpassword)"
|
ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||||
ng-style="{'background-color':wallet.color}"
|
ng-style="{'background-color':wallet.color}"
|
||||||
ng-show="isSafari && !isCordova">
|
ng-show="isSafari && !isCordova">
|
||||||
<i class="fi-eye"></i>
|
<i class="fi-eye"></i>
|
||||||
<span translate>View</span>
|
<span translate>View</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div ng-show="isCordova">
|
<div ng-show="isCordova">
|
||||||
<h4 translate>Export options</h4>
|
<h4 translate>Export options</h4>
|
||||||
<button class="button button-block button-positive"
|
<button class="button button-block button-positive"
|
||||||
ng-disabled="(!password || password != repeatpassword)"
|
ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||||
ng-style="{'background-color':wallet.color}"
|
ng-style="{'background-color':wallet.color}"
|
||||||
ng-click="copyWalletBackup()">
|
ng-click="copyWalletBackup()">
|
||||||
<i class="fi-clipboard-pencil"></i>
|
<i class="fi-clipboard-pencil"></i>
|
||||||
<span translate>Copy to clipboard</span></button>
|
<span translate>Copy to clipboard</span></button>
|
||||||
<button class="button button-block button-positive" ng-disabled="(!password || password != repeatpassword)"
|
<button class="button button-block button-positive" ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||||
ng-style="{'background-color':wallet.color}"
|
ng-style="{'background-color':wallet.color}"
|
||||||
ng-click="sendWalletBackup()"><i class="fi-mail"></i>
|
ng-click="sendWalletBackup()"><i class="fi-mail"></i>
|
||||||
<span translate>Send by email</span></button>
|
<span translate>Send by email</span></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row" ng-show="backupWalletPlainText">
|
<div ng-show="backupWalletPlainText" class="text-center card">
|
||||||
<div class="large-12 columns">
|
<label class="item item-input item-stacked-label">
|
||||||
<h3 translate>Wallet Export</h3>
|
|
||||||
<div class="input">
|
|
||||||
<textarea rows="12">{{backupWalletPlainText}}</textarea>
|
<textarea rows="12">{{backupWalletPlainText}}</textarea>
|
||||||
|
</label>
|
||||||
|
<div class="item text-gray item-icon-left">
|
||||||
|
<i class="icon ion-compose"></i>
|
||||||
|
<p translate>Copy this text as it is to a safe place (notepad or email)</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="size-12 text-gray text-right">
|
</div>
|
||||||
<i class="icon-compose"></i>
|
|
||||||
<span translate>Copy this text as it is to a safe place (notepad or email)</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</ion-content>
|
|
||||||
</ion-view>
|
|
||||||
|
|
@ -1,25 +1,10 @@
|
||||||
<ion-view>
|
<div class="m20t text-gray" ng-show="formData.supported">
|
||||||
<ion-nav-bar class="bar-royal">
|
|
||||||
<ion-nav-title>{{'Export Wallet' | translate}}</ion-nav-title>
|
|
||||||
<ion-nav-buttons side="primary">
|
|
||||||
<button class="button back-button" ui-sref="tabs.preferences.preferencesAdvanced">
|
|
||||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
|
||||||
</button>
|
|
||||||
</ion-nav-buttons>
|
|
||||||
</ion-nav-bar>
|
|
||||||
|
|
||||||
<ion-content ng-controller="exportController" ng-init="init()">
|
|
||||||
|
|
||||||
<div class="m20t text-gray" ng-show="supported">
|
|
||||||
<div class="text-center m20b">
|
<div class="text-center m20b">
|
||||||
<qrcode size="220" version="8" error-correction-level="M" data="{{exportWalletInfo}}"></qrcode>
|
<qrcode size="220" version="8" error-correction-level="M" data="{{formData.exportWalletInfo}}"></qrcode>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center size-12 m10" translate>From the destination device, go to Add wallet > Import wallet and scan this QR code</div>
|
<div class="text-center size-12 m10" translate>From the destination device, go to Add wallet > Import wallet and scan this QR code</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="m20t text-gray" ng-show="!supported">
|
<div class="m20t text-gray" ng-show="!formData.supported">
|
||||||
<div class="text-center size-12 m10" translate>Exporting via QR not supported for this wallet</div>
|
<div class="text-center size-12 m10" translate>Exporting via QR not supported for this wallet</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ion-content>
|
|
||||||
</ion-view>
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="list card">
|
<div class="list card" ng-if="notifications[0]">
|
||||||
<a class="item item-icon-right item-heading" ui-sref="tabs.activity" translate>
|
<a class="item item-icon-right item-heading" ui-sref="tabs.activity" translate>
|
||||||
Recent Activity
|
Recent Activity
|
||||||
<i class="icon nav-item-arrow-right"></i>
|
<i class="icon nav-item-arrow-right"></i>
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
<ion-spinner icon="lines"></ion-spinner>
|
<ion-spinner icon="lines"></ion-spinner>
|
||||||
<div translate>Updating activity. Please stand by</div>
|
<div translate>Updating activity. Please stand by</div>
|
||||||
</span>
|
</span>
|
||||||
<a ng-if="notifications[0]" class="item" ng-repeat="x in notifications" ng-click="x.action()">
|
<a class="item" ng-repeat="x in notifications" ng-click="x.action()">
|
||||||
<span ng-include="'views/includes/walletActivity.html'"></span>
|
<span ng-include="'views/includes/walletActivity.html'"></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,9 @@
|
||||||
<ion-content ng-controller="tabSettingsController" ng-init="init()">
|
<ion-content ng-controller="tabSettingsController" ng-init="init()">
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<div class="item item-divider"></div>
|
<div class="item item-divider"></div>
|
||||||
<a class="item item-icon-left item-icon-right" ng-click="openAddressbookModal()">
|
<a class="item item-icon-left" ng-click="openAddressbookModal()">
|
||||||
<i class="icon ion-ios-book-outline"></i>
|
<i class="icon ion-ios-book-outline"></i>
|
||||||
<span translate>Address Book</span>
|
<span translate>Address Book</span>
|
||||||
<i class="icon nav-item-arrow-right"></i>
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<div class="item item-divider" translate>Preferences</div>
|
<div class="item item-divider" translate>Preferences</div>
|
||||||
|
|
|
||||||
|
|
@ -84,29 +84,23 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div ng-if="txps[0]">
|
<div class="card list" ng-if="txps[0]">
|
||||||
<h4 ng-show="requiresMultipleSignatures" class="title m0" translate>Payment Proposals</h4>
|
<div class="item item-heading" translate>
|
||||||
<h4 ng-show="!requiresMultipleSignatures" class="title m0" translate>Unsent transactions</h4>
|
<span ng-show="requiresMultipleSignatures" translate>Payment Proposals</span>
|
||||||
<div class="list card">
|
<span ng-show="!requiresMultipleSignatures" translate>Unsent transactions</span>
|
||||||
<ul>
|
|
||||||
<li ng-repeat="tx in txps" class="item item-icon-left" ng-click="openTxpModal(tx)">
|
|
||||||
<span ng-include="'views/includes/txp.html'"></span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div ng-show="lockedBalanceSat">
|
|
||||||
<span translate>Total Locked Balance</span>:
|
|
||||||
<b>{{lockedBalanceStr}} </b>
|
|
||||||
<span> {{lockedBalanceAlternative}} {{alternativeIsoCode}} </span>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div ng-repeat="tx in txps" class="item item-icon-left" ng-click="openTxpModal(tx)">
|
||||||
|
<span ng-include="'views/includes/txp.html'"></span>
|
||||||
|
</div>
|
||||||
|
<div class="item item-footer" ng-show="status.lockedBalanceSat">
|
||||||
|
<span translate>Total Locked Balance</span>:
|
||||||
|
<b>{{status.lockedBalanceStr}} </b>
|
||||||
|
<span> {{status.lockedBalanceAlternative}} {{status.alternativeIsoCode}} </span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Transactions -->
|
<!-- Transactions -->
|
||||||
<h4 class="title" ng-show="!notAuthorized">
|
|
||||||
<span translate>Activity</span>
|
|
||||||
</h4>
|
|
||||||
|
|
||||||
<div class="oh pr m20t text-gray size-12 text-center"
|
<div class="oh pr m20t text-gray size-12 text-center"
|
||||||
ng-show="!txHistory[0] && !updatingTxHistory && !txHistoryError && !updateStatusError && !notAuthorized"
|
ng-show="!txHistory[0] && !updatingTxHistory && !txHistoryError && !updateStatusError && !notAuthorized"
|
||||||
|
|
@ -139,41 +133,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="list">
|
<div class="card list" ng-show="txHistory[0]">
|
||||||
<div class="row item" ng-repeat="btx in txHistory track by btx.txid" ng-click="openTxModal(btx)">
|
<div class="item" ng-repeat="btx in txHistory track by btx.txid" ng-click="openTxModal(btx)">
|
||||||
<div class="col col-10">
|
<span class="item-note text-right">
|
||||||
<img src="img/icon-receive-history.svg" alt="sync" width="40" ng-if="btx.action == 'received'">
|
|
||||||
<img src="img/icon-sent-history.svg" alt="sync" width="40" ng-if="btx.action == 'sent'">
|
|
||||||
<img src="img/icon-moved.svg" alt="sync" width="40" ng-if="btx.action == 'moved'">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-50">
|
|
||||||
<div class="padding" ng-if="btx.action == 'received'">
|
|
||||||
<span class="ellipsis">
|
|
||||||
<h2 ng-if="btx.note.body">{{btx.note.body}}</h2>
|
|
||||||
<h2 ng-if="!btx.note.body" translate> Received</h2>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="padding" ng-if="btx.action == 'sent'">
|
|
||||||
<span class="ellipsis">
|
|
||||||
<h2 ng-if="btx.message">{{btx.message}}</h2>
|
|
||||||
<h2 ng-if="!btx.message && btx.note.body">{{btx.note.body}}</h2>
|
|
||||||
<h2 ng-if="!btx.message && !btx.note.body && wallet.addressbook[btx.addressTo]">{{wallet.addressbook[btx.addressTo]}}</h2>
|
|
||||||
<h2 ng-if="!btx.message && !btx.note.body && !wallet.addressbook[btx.addressTo]" translate> Sent</h2>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="padding" ng-if="btx.action == 'moved'">
|
|
||||||
<span class="ellipsis">
|
|
||||||
<h2 ng-if="btx.note.body">{{btx.note.body}}</h2>
|
|
||||||
<h2 ng-if="!btx.note.body" translate>Moved</h2>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<span class="label tu warning radius" ng-if="btx.action == 'invalid'" translate>Invalid</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col col-30 padding">
|
|
||||||
<span class="size-16" ng-class="{'text-bold': btx.recent}">
|
<span class="size-16" ng-class="{'text-bold': btx.recent}">
|
||||||
<span ng-if="btx.action == 'received'">+</span>
|
<span ng-if="btx.action == 'received'">+</span>
|
||||||
<span ng-if="btx.action == 'sent'">-</span>
|
<span ng-if="btx.action == 'sent'">-</span>
|
||||||
|
|
@ -191,11 +153,37 @@
|
||||||
Unconfirmed
|
Unconfirmed
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
</span>
|
||||||
|
<img class="left m10r" src="img/icon-receive-history.svg" alt="sync" width="40" ng-if="btx.action == 'received'">
|
||||||
|
<img class="left m10r" src="img/icon-sent-history.svg" alt="sync" width="40" ng-if="btx.action == 'sent'">
|
||||||
|
<img class="left m10r" src="img/icon-moved.svg" alt="sync" width="40" ng-if="btx.action == 'moved'">
|
||||||
|
|
||||||
|
<h2 class="p10t">
|
||||||
|
<div ng-if="btx.action == 'received'">
|
||||||
|
<span class="ellipsis">
|
||||||
|
<h2 ng-if="btx.note.body">{{btx.note.body}}</h2>
|
||||||
|
<h2 ng-if="!btx.note.body" translate> Received</h2>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-10 text-center">
|
<div ng-if="btx.action == 'sent'">
|
||||||
<i class="icon ion-chevron-right"></i>
|
<span class="ellipsis">
|
||||||
|
<h2 ng-if="btx.message">{{btx.message}}</h2>
|
||||||
|
<h2 ng-if="!btx.message && btx.note.body">{{btx.note.body}}</h2>
|
||||||
|
<h2 ng-if="!btx.message && !btx.note.body && wallet.addressbook[btx.addressTo]">{{wallet.addressbook[btx.addressTo]}}</h2>
|
||||||
|
<h2 ng-if="!btx.message && !btx.note.body && !wallet.addressbook[btx.addressTo]" translate> Sent</h2>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div ng-if="btx.action == 'moved'">
|
||||||
|
<span class="ellipsis">
|
||||||
|
<h2 ng-if="btx.note.body">{{btx.note.body}}</h2>
|
||||||
|
<h2 ng-if="!btx.note.body" translate>Moved</h2>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span class="label tu warning radius" ng-if="btx.action == 'invalid'" translate>Invalid</span>
|
||||||
|
</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ion-infinite-scroll
|
<ion-infinite-scroll
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('bitpayCardController', function($scope, $timeout, $log, lodash, bitpayCardService, configService, profileService, walletService, ongoingProcess, pbkdf2Service, moment, popupService) {
|
angular.module('copayApp.controllers').controller('bitpayCardController', function($scope, $timeout, $log, lodash, bitpayCardService, configService, profileService, walletService, ongoingProcess, pbkdf2Service, moment, popupService, gettextCatalog, bwcError) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
var wallet;
|
var wallet;
|
||||||
|
|
@ -168,6 +168,7 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi
|
||||||
};
|
};
|
||||||
|
|
||||||
walletService.createTx(wallet, txp, function(err, createdTxp) {
|
walletService.createTx(wallet, txp, function(err, createdTxp) {
|
||||||
|
ongoingProcess.set('Processing Transaction...', false);
|
||||||
if (err) {
|
if (err) {
|
||||||
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
|
popupService.showAlert(gettextCatalog.getString('Error'), bwcError.msg(err));
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,11 @@ angular.module('copayApp.controllers').controller('confirmController', function(
|
||||||
|
|
||||||
|
|
||||||
$scope.showDescriptionPopup = function() {
|
$scope.showDescriptionPopup = function() {
|
||||||
|
|
||||||
|
$scope.data = {
|
||||||
|
comment: null
|
||||||
|
};
|
||||||
|
|
||||||
var commentPopup = $ionicPopup.show({
|
var commentPopup = $ionicPopup.show({
|
||||||
templateUrl: "views/includes/note.html",
|
templateUrl: "views/includes/note.html",
|
||||||
title: gettextCatalog.getString('Set description'),
|
title: gettextCatalog.getString('Set description'),
|
||||||
|
|
@ -25,9 +30,9 @@ angular.module('copayApp.controllers').controller('confirmController', function(
|
||||||
$scope.commentPopupClose = function() {
|
$scope.commentPopupClose = function() {
|
||||||
commentPopup.close();
|
commentPopup.close();
|
||||||
};
|
};
|
||||||
$scope.commentPopupSave = function(description) {
|
$scope.commentPopupSave = function() {
|
||||||
$log.debug('Saving description: ' + description);
|
$log.debug('Saving description: ' + $scope.data.comment);
|
||||||
$scope.description = description;
|
$scope.description = $scope.data.comment;
|
||||||
commentPopup.close();
|
commentPopup.close();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,15 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('exportController',
|
angular.module('copayApp.controllers').controller('exportController',
|
||||||
function($rootScope, $scope, $timeout, $log, $ionicHistory, lodash, backupService, walletService, storageService, profileService, platformInfo, gettext, gettextCatalog, $state, $stateParams, popupService) {
|
function($scope, $timeout, $log, $ionicHistory, backupService, walletService, storageService, profileService, platformInfo, gettextCatalog, $state, $stateParams, popupService) {
|
||||||
var prevState;
|
|
||||||
var isWP = platformInfo.isWP;
|
|
||||||
var isAndroid = platformInfo.isAndroid;
|
|
||||||
|
|
||||||
var wallet = profileService.getWallet($stateParams.walletId);
|
var wallet = profileService.getWallet($stateParams.walletId);
|
||||||
|
|
||||||
|
$scope.init = function() {
|
||||||
|
$scope.formData = {};
|
||||||
$scope.isEncrypted = wallet.isPrivKeyEncrypted();
|
$scope.isEncrypted = wallet.isPrivKeyEncrypted();
|
||||||
$scope.isCordova = platformInfo.isCordova;
|
$scope.isCordova = platformInfo.isCordova;
|
||||||
$scope.isSafari = platformInfo.isSafari;
|
$scope.isSafari = platformInfo.isSafari;
|
||||||
|
$scope.formData.noSignEnabled = false;
|
||||||
$scope.init = function() {
|
|
||||||
$scope.supported = true;
|
|
||||||
$scope.exportQR = false;
|
|
||||||
$scope.noSignEnabled = false;
|
|
||||||
$scope.showAdvanced = false;
|
$scope.showAdvanced = false;
|
||||||
$scope.wallet = wallet;
|
$scope.wallet = wallet;
|
||||||
$scope.canSign = wallet.canSign();
|
$scope.canSign = wallet.canSign();
|
||||||
|
|
@ -22,13 +17,15 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
walletService.getEncodedWalletInfo(wallet, function(err, code) {
|
walletService.getEncodedWalletInfo(wallet, function(err, code) {
|
||||||
if (err || !code) {
|
if (err || !code) {
|
||||||
$log.warn(err);
|
$log.warn(err);
|
||||||
return $state.go('wallet.preferencesAdvanced')
|
return $ionicHistory.goBack();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!code)
|
if (!code)
|
||||||
$scope.supported = false;
|
$scope.formData.supported = false;
|
||||||
else
|
else {
|
||||||
$scope.exportWalletInfo = code;
|
$scope.formData.supported = true;
|
||||||
|
$scope.formData.exportWalletInfo = code;
|
||||||
|
}
|
||||||
|
|
||||||
$timeout(function() {
|
$timeout(function() {
|
||||||
$scope.$apply();
|
$scope.$apply();
|
||||||
|
|
@ -38,14 +35,25 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
EXPORT WITHOUT PRIVATE KEY - PENDING
|
EXPORT WITHOUT PRIVATE KEY - PENDING
|
||||||
|
*/
|
||||||
|
|
||||||
$scope.noSignEnabledChange = function() {
|
$scope.noSignEnabledChange = function() {
|
||||||
$scope.exportWalletInfo = encodeWalletInfo();
|
if (!$scope.formData.supported) return;
|
||||||
|
|
||||||
|
walletService.getEncodedWalletInfo(wallet, function(err, code) {
|
||||||
|
if (err) {
|
||||||
|
$log.error(err);
|
||||||
|
$scope.formData.supported = false;
|
||||||
|
$scope.formData.exportWalletInfo = null;
|
||||||
|
} else {
|
||||||
|
$scope.formData.supported = true;
|
||||||
|
$scope.formData.exportWalletInfo = code;
|
||||||
|
}
|
||||||
$timeout(function() {
|
$timeout(function() {
|
||||||
$scope.$apply();
|
$scope.$apply();
|
||||||
}, 1);
|
}, 1);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
*/
|
|
||||||
|
|
||||||
$scope.downloadWalletBackup = function() {
|
$scope.downloadWalletBackup = function() {
|
||||||
$scope.getAddressbook(function(err, localAddressBook) {
|
$scope.getAddressbook(function(err, localAddressBook) {
|
||||||
|
|
@ -54,11 +62,11 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var opts = {
|
var opts = {
|
||||||
noSign: $scope.noSignEnabled,
|
noSign: $scope.formData.noSignEnabled,
|
||||||
addressBook: localAddressBook
|
addressBook: localAddressBook
|
||||||
};
|
};
|
||||||
|
|
||||||
backupService.walletDownload($scope.password, opts, function(err) {
|
backupService.walletDownload($scope.formData.password, opts, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
||||||
return;
|
return;
|
||||||
|
|
@ -91,11 +99,11 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
return cb(null);
|
return cb(null);
|
||||||
}
|
}
|
||||||
var opts = {
|
var opts = {
|
||||||
noSign: $scope.noSignEnabled,
|
noSign: $scope.formData.noSignEnabled,
|
||||||
addressBook: localAddressBook
|
addressBook: localAddressBook
|
||||||
};
|
};
|
||||||
|
|
||||||
var ew = backupService.walletExport($scope.password, opts);
|
var ew = backupService.walletExport($scope.formData.password, opts);
|
||||||
if (!ew) {
|
if (!ew) {
|
||||||
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Failed to export'));
|
||||||
}
|
}
|
||||||
|
|
@ -132,7 +140,7 @@ angular.module('copayApp.controllers').controller('exportController',
|
||||||
var ew = backup;
|
var ew = backup;
|
||||||
if (!ew) return;
|
if (!ew) return;
|
||||||
|
|
||||||
if ($scope.noSignEnabled)
|
if ($scope.formData.noSignEnabled)
|
||||||
name = name + '(No Private Key)';
|
name = name + '(No Private Key)';
|
||||||
|
|
||||||
var subject = 'Copay Wallet Backup: ' + name;
|
var subject = 'Copay Wallet Backup: ' + name;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('termsController', function($scope, $log, $state, uxLanguage, profileService, externalLinkService) {
|
angular.module('copayApp.controllers').controller('termsController', function($scope, $log, $state, $window, uxLanguage, profileService, externalLinkService) {
|
||||||
$scope.lang = uxLanguage.currentLanguage;
|
$scope.lang = uxLanguage.currentLanguage;
|
||||||
$scope.disclaimerUrl = $window.appConfig.disclaimerUrl;
|
$scope.disclaimerUrl = $window.appConfig.disclaimerUrl;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('preferencesBitpayCardController',
|
angular.module('copayApp.controllers').controller('preferencesBitpayCardController',
|
||||||
function($scope, $ionicModal, bitpayCardService) {
|
function($scope, $state, $timeout, bitpayCardService, popupService) {
|
||||||
|
|
||||||
this.logout = function() {
|
$scope.logout = function() {
|
||||||
$ionicModal.fromTemplateUrl('views/modals/bitpay-card-confirmation.html', {
|
var title = 'Are you sure you would like to log out of your Bitpay Card account?';
|
||||||
scope: $scope,
|
popupService.showConfirm(title, null, function(res) {
|
||||||
animation: 'slide-in-up'
|
if (res) logout();
|
||||||
}).then(function(modal) {
|
});
|
||||||
$scope.bitpayCardConfirmationModal = modal;
|
};
|
||||||
$scope.bitpayCardConfirmationModal.show();
|
|
||||||
|
var logout = function() {
|
||||||
|
bitpayCardService.logout(function() {
|
||||||
|
$timeout(function() {
|
||||||
|
$state.go('bitpayCard.main');
|
||||||
|
}, 100);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.updateTxHistory = function(cb) {
|
$scope.updateTxHistory = function(cb) {
|
||||||
|
if (!cb) cb = function() {};
|
||||||
if ($scope.updatingTxHistory) return;
|
if ($scope.updatingTxHistory) return;
|
||||||
|
|
||||||
$scope.updatingTxHistory = true;
|
$scope.updatingTxHistory = true;
|
||||||
|
|
|
||||||
|
|
@ -434,7 +434,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.state('tabs.preferences.export', {
|
.state('tabs.preferences.export', {
|
||||||
abstract: true,
|
|
||||||
url: '/export',
|
url: '/export',
|
||||||
views: {
|
views: {
|
||||||
'preferences': {
|
'preferences': {
|
||||||
|
|
@ -442,24 +441,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.state('tabs.preferences.export.file', {
|
|
||||||
url: '/tab-export-file',
|
|
||||||
needProfile: true,
|
|
||||||
views: {
|
|
||||||
'tab-export-file': {
|
|
||||||
templateUrl: 'views/tab-export-file.html',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.state('tabs.preferences.export.qrCode', {
|
|
||||||
url: '/tab-export-qrCode',
|
|
||||||
needProfile: true,
|
|
||||||
views: {
|
|
||||||
'tab-export-qrCode': {
|
|
||||||
templateUrl: 'views/tab-export-qrCode.html',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.state('tabs.preferences.preferencesBwsUrl', {
|
.state('tabs.preferences.preferencesBwsUrl', {
|
||||||
url: '/preferencesBwsUrl',
|
url: '/preferencesBwsUrl',
|
||||||
views: {
|
views: {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ angular.module('copayApp.services')
|
||||||
|
|
||||||
root.updateWalletSettings = function(wallet) {
|
root.updateWalletSettings = function(wallet) {
|
||||||
var defaults = configService.getDefaults();
|
var defaults = configService.getDefaults();
|
||||||
configService.whenAvailable(function(config){
|
configService.whenAvailable(function(config) {
|
||||||
wallet.usingCustomBWS = config.bwsFor && config.bwsFor[wallet.id] && (config.bwsFor[wallet.id] != defaults.bws.url);
|
wallet.usingCustomBWS = config.bwsFor && config.bwsFor[wallet.id] && (config.bwsFor[wallet.id] != defaults.bws.url);
|
||||||
wallet.name = (config.aliasFor && config.aliasFor[wallet.id]) || wallet.credentials.walletName;
|
wallet.name = (config.aliasFor && config.aliasFor[wallet.id]) || wallet.credentials.walletName;
|
||||||
wallet.color = (config.colorFor && config.colorFor[wallet.id]) || '#4A90E2';
|
wallet.color = (config.colorFor && config.colorFor[wallet.id]) || '#4A90E2';
|
||||||
|
|
@ -762,7 +762,7 @@ angular.module('copayApp.services')
|
||||||
var TIME_STAMP = 60 * 60 * 24 * 7;
|
var TIME_STAMP = 60 * 60 * 24 * 7;
|
||||||
var MAX = 100;
|
var MAX = 100;
|
||||||
|
|
||||||
var ignored = {
|
var typeFilter1 = {
|
||||||
'NewBlock': 1,
|
'NewBlock': 1,
|
||||||
'BalanceUpdated': 1,
|
'BalanceUpdated': 1,
|
||||||
'NewOutgoingTxByThirdParty': 1,
|
'NewOutgoingTxByThirdParty': 1,
|
||||||
|
|
@ -771,6 +771,12 @@ angular.module('copayApp.services')
|
||||||
'TxProposalFinallyRejected': 1,
|
'TxProposalFinallyRejected': 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var typeFilter2 = {
|
||||||
|
'TxProposalAcceptedBy': 1,
|
||||||
|
'TxProposalRejectedBy': 1,
|
||||||
|
'NewTxProposal': 1,
|
||||||
|
}
|
||||||
|
|
||||||
var w = root.getWallets();
|
var w = root.getWallets();
|
||||||
if (lodash.isEmpty(w)) return cb();
|
if (lodash.isEmpty(w)) return cb();
|
||||||
|
|
||||||
|
|
@ -868,9 +874,15 @@ angular.module('copayApp.services')
|
||||||
$log.warn('Error updating notifications:' + err);
|
$log.warn('Error updating notifications:' + err);
|
||||||
} else {
|
} else {
|
||||||
var n = lodash.filter(wallet.cachedActivity.n, function(x) {
|
var n = lodash.filter(wallet.cachedActivity.n, function(x) {
|
||||||
return !ignored[x.type];
|
return !typeFilter1[x.type];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (wallet.n == 1) {
|
||||||
|
var n = lodash.filter(n, function(x) {
|
||||||
|
return !typeFilter2[x.type];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var idToName = {};
|
var idToName = {};
|
||||||
if (wallet.cachedStatus) {
|
if (wallet.cachedStatus) {
|
||||||
lodash.each(wallet.cachedStatus.wallet.copayers, function(c) {
|
lodash.each(wallet.cachedStatus.wallet.copayers, function(c) {
|
||||||
|
|
@ -911,7 +923,7 @@ angular.module('copayApp.services')
|
||||||
txps = txps.concat(x.pendingTxps);
|
txps = txps.concat(x.pendingTxps);
|
||||||
});
|
});
|
||||||
txps = lodash.sortBy(txps, 'pendingForUs', 'createdOn');
|
txps = lodash.sortBy(txps, 'pendingForUs', 'createdOn');
|
||||||
txps = lodash.compact(lodash.flatten(txps)).slice(0,MAX);
|
txps = lodash.compact(lodash.flatten(txps)).slice(0, MAX);
|
||||||
var n = txps.length;
|
var n = txps.length;
|
||||||
return cb(null, txps, n);
|
return cb(null, txps, n);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,10 @@
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.item.item-footer {
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
|
||||||
.icon.list-add-button {
|
.icon.list-add-button {
|
||||||
color: #666;
|
color: #666;
|
||||||
font-size: 38px;
|
font-size: 38px;
|
||||||
|
|
|
||||||
|
|
@ -343,7 +343,7 @@ ul.wallet-selection.wallets {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: inherit;
|
top: inherit;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
bottom: 26px;
|
bottom: 15px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
@ -996,5 +996,6 @@ input[type=number] {
|
||||||
@import "views/add";
|
@import "views/add";
|
||||||
@import "views/tab-home";
|
@import "views/tab-home";
|
||||||
@import "views/walletDetails";
|
@import "views/walletDetails";
|
||||||
|
@import "views/bitpayCard";
|
||||||
@import 'views/onboarding/onboarding';
|
@import 'views/onboarding/onboarding';
|
||||||
@import "views/includes/walletActivity";
|
@import "views/includes/walletActivity";
|
||||||
|
|
|
||||||
16
src/sass/views/bitpayCard.scss
Normal file
16
src/sass/views/bitpayCard.scss
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#bitpayCard {
|
||||||
|
.amount {
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
padding: 2rem 1rem 1.5rem 1rem;
|
||||||
|
min-height: 115px;
|
||||||
|
margin-bottom: 25px;
|
||||||
|
border-color: #172565;
|
||||||
|
background-color: #1e3186;
|
||||||
|
background-image: linear-gradient(0deg, #172565, #172565 0%, transparent 0%);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
strong {
|
||||||
|
line-height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,14 +14,14 @@
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
color: rgb(108, 108, 108);
|
color: rgb(108, 108, 108);
|
||||||
height: 13rem;
|
height: 14rem;
|
||||||
animation-name: topBottom;
|
animation-name: topBottom;
|
||||||
animation-iteration-count: 1;
|
animation-iteration-count: 1;
|
||||||
animation-timing-function: ease-in;
|
animation-timing-function: ease-in;
|
||||||
animation-duration: 1s;
|
animation-duration: 1s;
|
||||||
animation-delay: 2s;
|
animation-delay: 2s;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: -13rem;
|
bottom: -14rem;
|
||||||
animation-fill-mode: forwards;
|
animation-fill-mode: forwards;
|
||||||
z-index: 5;
|
z-index: 5;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
#walletDetails {
|
#walletDetails {
|
||||||
.bar-header {
|
.bar-header {
|
||||||
border: 0;
|
border: 0;
|
||||||
|
background: none;
|
||||||
.title, .button {
|
.title, .button {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
@ -12,13 +13,17 @@
|
||||||
.amount {
|
.amount {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 2.5rem 1rem 1.5rem 1rem;
|
padding: 2rem 1rem 1.5rem 1rem;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
height: 150px;
|
min-height: 115px;
|
||||||
margin-bottom: 25px;
|
margin-bottom: 10px;
|
||||||
|
|
||||||
&-alternative {
|
&-alternative {
|
||||||
line-height: 48px;
|
line-height: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
line-height: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
Version=0.8.0
|
Version=0.10.0
|
||||||
Name=BitPay
|
Name=BitPay
|
||||||
Comment=The BitPay Bitcoin Wallet
|
Comment=The BitPay Bitcoin Wallet
|
||||||
Exec=bitpay
|
Exec=bitpay
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||||
|
|
||||||
#define MyAppName "bitpay"
|
#define MyAppName "bitpay"
|
||||||
#define MyAppVersion "0.8.0"
|
#define MyAppVersion "0.10.0"
|
||||||
#define MyAppPublisher "BitPay"
|
#define MyAppPublisher "BitPay"
|
||||||
#define MyAppURL "https://bitpay.com"
|
#define MyAppURL "https://bitpay.com"
|
||||||
#define MyAppExeName "*NAMECASENOSPACE.exe"
|
#define MyAppExeName "*NAMECASENOSPACE.exe"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue