build(www): rename public directory to www
This commit is contained in:
parent
2c264dfffa
commit
de6e8062d5
367 changed files with 1 additions and 1 deletions
30
www/views/activity.html
Normal file
30
www/views/activity.html
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Recent Activity'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content class="padding">
|
||||
|
||||
<div ng-if="fetchingNotifications" class="updatingHistory">
|
||||
<div class="text-center">
|
||||
<ion-spinner class="spinner-dark" icon="lines"></ion-spinner>
|
||||
<div translate>Updating activity. Please stand by</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!fetchingNotifications">
|
||||
<div class="list card">
|
||||
<div class="item" ng-repeat="notification in notifications" ng-click="openNotificationModal(notification)">
|
||||
<span ng-include="'views/includes/walletActivity.html'"></span>
|
||||
</div>
|
||||
|
||||
<div class="item" ng-show="!notifications[0]">
|
||||
<span translate>No recent activity</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
44
www/views/add.html
Normal file
44
www/views/add.html
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<ion-view id="view-add">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Add wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
<ion-list>
|
||||
<a class="item item-remove-animate item-icon-right item-icon-left item-big-icon-left" type="item-text-wrap" ui-sref="tabs.add.create-personal">
|
||||
<i class="icon big-icon-svg">
|
||||
<img src="img/icon-wallet.svg" class="bg"/>
|
||||
</i>
|
||||
<h2 translate>New Personal Wallet</h2>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<a class="item item-remove-animate item-icon-right item-icon-left item-big-icon-left" type="item-text-wrap" ui-sref="tabs.add.create-shared">
|
||||
<i class="icon big-icon-svg">
|
||||
<img src="img/icon-wallet.svg" class="bg"/>
|
||||
</i>
|
||||
<h2 translate>Create Shared Wallet</h2>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<a class="item item-remove-animate item-icon-right item-icon-left item-big-icon-left" type="item-text-wrap" ui-sref="tabs.add.join">
|
||||
<i class="icon big-icon-svg">
|
||||
<img src="img/item-ico-addwallet.svg" class="bg join"/>
|
||||
</i>
|
||||
<h2 translate>Join shared wallet</h2>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<a class="item item-remove-animate item-icon-right item-icon-left item-big-icon-left" type="item-text-wrap" ui-sref="tabs.add.import">
|
||||
<i class="icon big-icon-svg">
|
||||
<img src="img/item-ico-import.svg" class="bg"/>
|
||||
</i>
|
||||
<h2 translate>Import wallet</h2>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
</ion-list>
|
||||
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
66
www/views/addressbook.add.html
Normal file
66
www/views/addressbook.add.html
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<ion-view id="add-address">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
<span translate>Add Contact</span>
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="button back-button" ng-click="goHome()" ng-if="fromSendTab">
|
||||
{{'Cancel' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<form name="addressbookForm" no-validate>
|
||||
|
||||
<div class="list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Name</span>
|
||||
<input type="text"
|
||||
id="name"
|
||||
name="name"
|
||||
ng-model="addressbookEntry.name"
|
||||
required>
|
||||
</label>
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Email</span>
|
||||
<input type="text"
|
||||
id="email"
|
||||
placeholder="name@example.com"
|
||||
name="email"
|
||||
ng-model="addressbookEntry.email">
|
||||
</label>
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Bitcoin Address</span>
|
||||
<div class="input-notification">
|
||||
<i class="icon ion-checkmark-circled balanced"
|
||||
ng-show="!addressbookForm.address.$invalid"></i>
|
||||
<i class="icon ion-close-circled assertive"
|
||||
ng-show="addressbookForm.address.$invalid && addressbookEntry.address"></i>
|
||||
</div>
|
||||
<div class="qr-scan-icon">
|
||||
<qr-scanner on-scan="onQrCodeScanned(data, addressbookForm)"></qr-scanner>
|
||||
<input type="text"
|
||||
id="address"
|
||||
name="address"
|
||||
ng-model="addressbookEntry.address"
|
||||
valid-address required>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="padding">
|
||||
<button type="submit"
|
||||
class="button button-block button-positive"
|
||||
ng-click="add(addressbookEntry)"
|
||||
ng-disabled="!addressbookForm.$valid" translate>
|
||||
Save
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
61
www/views/addressbook.html
Normal file
61
www/views/addressbook.html
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<ion-view id="view-address-book">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>
|
||||
<span translate>Addressbook</span>
|
||||
</ion-nav-title>
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="button button-back button-clear" ng-show="!isEmptyList" ui-sref="tabs.addressbook.add">
|
||||
<i class="icon ion-ios-plus-empty"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="bar bar-header item-input-inset" ng-show="!isEmptyList">
|
||||
<label class="item-input-wrapper">
|
||||
<i class="icon ion-ios-search placeholder-icon"></i>
|
||||
<input type="search"
|
||||
placeholder="Search"
|
||||
ng-model="addrSearch"
|
||||
ng-change="findAddressbook(addrSearch)" ng-model-onblur>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<ion-list>
|
||||
<ion-item ng-repeat="addrEntry in addressbook"
|
||||
class="item-icon-right item-avatar"
|
||||
ui-sref="tabs.addressbook.view({address:addrEntry.address})">
|
||||
<gravatar name="{{addrEntry.name}}" width="50" email="{{addrEntry.email}}"></gravatar>
|
||||
<h2>{{addrEntry.name}}</h2>
|
||||
<p>{{addrEntry.address}}</p>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
|
||||
<ion-option-button class="button-assertive" ng-click="remove(addrEntry.address)">
|
||||
<i class="icon ion-minus-circled"></i>
|
||||
</ion-option-button>
|
||||
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
<div class="text-center absolute-center" ng-show="isEmptyList">
|
||||
<div id="add-contact" class="col col-80 center-block">
|
||||
<div class="row">
|
||||
<img class="col col-60 center-block" src="img/address-book-add.svg">
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<h2 class="col" translate>No contacts yet</h2>
|
||||
</div>
|
||||
<div class="row">
|
||||
<p class="text-center" translate>
|
||||
You haven’t added any contacts to your address book yet. Get started by adding your first one.
|
||||
</p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button class="button button-block button-positive col" ui-sref="tabs.addressbook.add" translate>Add Contact</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
37
www/views/addressbook.view.html
Normal file
37
www/views/addressbook.view.html
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>
|
||||
<span translate>Addressbook</span>
|
||||
</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="gravatar-content">
|
||||
<gravatar name="{{addressbookEntry.name}}" width="80" email="{{addressbookEntry.email}}"></gravatar>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-text-wrap">
|
||||
<h3 translate>Name</h3>
|
||||
<strong>{{addressbookEntry.name}}</strong>
|
||||
</div>
|
||||
<div class="item item-text-wrap" ng-show="addressbookEntry.email">
|
||||
<h3 translate>Email</h3>
|
||||
<strong>{{addressbookEntry.email}}</strong>
|
||||
</div>
|
||||
<div class="item item-text-wrap">
|
||||
<h3 translate>Address</h3>
|
||||
<strong>{{addressbookEntry.address}}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="button button-block button-positive"
|
||||
ng-click="sendTo()" translate>
|
||||
Send Money
|
||||
</button>
|
||||
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
63
www/views/advancedSettings.html
Normal file
63
www/views/advancedSettings.html
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
<ion-view id="advanced-settings" class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Advanced Settings' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
<div class="list">
|
||||
<div class="item item-divider" translate>Enabled Integrations</div>
|
||||
|
||||
<ion-toggle ng-show="!isWP" ng-model="bitpayCardEnabled.value" toggle-class="toggle-balanced" ng-change="bitpayCardChange()">
|
||||
<span class="toggle-label" translate>Enable Bitpay Card Integration</span>
|
||||
</ion-toggle>
|
||||
|
||||
<ion-toggle ng-show="!isWP" ng-model="amazonEnabled.value" toggle-class="toggle-balanced" ng-change="amazonChange()">
|
||||
<span class="toggle-label" translate>Enable Amazon Integration</span>
|
||||
</ion-toggle>
|
||||
|
||||
<ion-toggle ng-show="!isWP" ng-model="glideraEnabled.value" toggle-class="toggle-balanced" ng-change="glideraChange()">
|
||||
<span class="toggle-label" translate>Enable Glidera Service</span>
|
||||
</ion-toggle>
|
||||
|
||||
<!-- disable coinbase for this release -->
|
||||
|
||||
<!-- <ion-toggle ng-show="!isWP" ng-model="coinbaseEnabled" toggle-class="toggle-balanced" ng-change="coinbaseChange()">
|
||||
<span class="toggle-label" translate>Enable Coinbase Service</span>
|
||||
</ion-toggle> -->
|
||||
|
||||
|
||||
<div class="item item-divider" translate>Wallet Operation</div>
|
||||
|
||||
<ion-toggle ng-model="spendUnconfirmed.value" toggle-class="toggle-balanced" ng-change="spendUnconfirmedChange()">
|
||||
<span class="toggle-label" translate>Use Unconfirmed Funds</span>
|
||||
</ion-toggle>
|
||||
<div class="comment">
|
||||
<span translate>If enabled, wallets will also try to spend unconfirmed funds. This option may cause transaction delays.</span>
|
||||
</div>
|
||||
|
||||
<div class="item item-divider" translate>Experimental Features</div>
|
||||
<div class="divider-comment">
|
||||
<span translate>These features aren't quite ready for primetime. They may change, stop working, or disappear at any time.</span>
|
||||
</div>
|
||||
|
||||
<ion-toggle ng-show="!isWP" ng-model="recentTransactionsEnabled.value" toggle-class="toggle-balanced" ng-change="recentTransactionsChange()">
|
||||
<span class="toggle-label" translate>Recent Transaction Card</span>
|
||||
</ion-toggle>
|
||||
<div class="comment">
|
||||
<span transaction>If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home tab.</span>
|
||||
</div>
|
||||
|
||||
<!-- disable frequently used for this release -->
|
||||
|
||||
<!-- <ion-toggle ng-show="!isWP" ng-model="frequentlyUsedEnabled.value" toggle-class="toggle-balanced" ng-change="frequentlyUsedChange()">
|
||||
<span class="toggle-label" translate>Frequently Used Card</span>
|
||||
</ion-toggle>
|
||||
<div ng-style="{'padding':'15px', 'background-color': '#fff', 'color': 'rgba(74, 74, 74, 0.8)'}">
|
||||
<span transaction>If enabled, the Frequently Used card - a list of the most commonly chosen recipients - will appear in the Send tab.</span>
|
||||
</div> -->
|
||||
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
64
www/views/amazon.html
Normal file
64
www/views/amazon.html
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Amazon.com Gift Cards</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="box-notification warning" ng-show="network == 'testnet'">
|
||||
Sandbox version. Only for testing purpose
|
||||
</div>
|
||||
|
||||
<div class="m20t text-center" ng-click="updatePendingGiftCards()">
|
||||
<img src="img/GCs-logo-cllb.png" alt="Amazon.com Gift Card" width="200">
|
||||
<div class="size-11 m10t"><b>Only</b> redeemable on www.amazon.com (USA website)</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!giftCards" class="m20t padding text-center">
|
||||
|
||||
<button class="button button-block button-positive" ui-sref="tabs.giftcards.amazon.buy">
|
||||
Buy now
|
||||
</button>
|
||||
|
||||
<div class="text-left m30v">
|
||||
Amazon.com Gift Cards never expire and can be redeemed towards millions of items at
|
||||
<a ng-click="openExternalLink('https://www.amazon.com')">www.amazon.com</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m20t" ng-if="giftCards">
|
||||
<div class="list">
|
||||
<a class="item item-icon-left item-icon-right" href ui-sref="tabs.giftcards.amazon.buy">
|
||||
<i class="icon ion-bag"></i>
|
||||
Buy Gift Card
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-heading">
|
||||
Your cards
|
||||
</div>
|
||||
<div ng-repeat="(id, item) in giftCards | orderObjectBy:'date':true track by $index"
|
||||
ng-click="openCardModal(item)"
|
||||
class="item item-avatar">
|
||||
<img src="img/a-smile_color_btn.png" alt="{{id}}" width="40">
|
||||
<h2 ng-if="item.claimCode">
|
||||
{{item.amount | currency : '$ ' : 2}}
|
||||
</h2>
|
||||
<h2 ng-if="!item.claimCode">
|
||||
-
|
||||
</h2>
|
||||
<p>
|
||||
<span class="text-warning" ng-if="item.status == 'FAILURE' || item.status == 'RESEND'">Error</span>
|
||||
<span class="text-gray" ng-if="item.status == 'PENDING'">Pending to confirmation</span>
|
||||
<span class="text-gray" ng-if="item.status == 'SUCCESS' && item.cardStatus == 'Canceled'">Canceled</span>
|
||||
<span class="text-gray" ng-if="item.status == 'SUCCESS' && item.cardStatus == 'Fulfilled'">{{item.date | amTimeAgo}}</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
83
www/views/amount.html
Normal file
83
www/views/amount.html
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
<ion-view id="view-amount">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Enter Amount'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content scroll="false">
|
||||
|
||||
<div>
|
||||
<div class="item item-no-bottom-border" translate>Recipient</div>
|
||||
|
||||
<div class="item item-text-wrap item-icon-left bitcoin-address" ng-class="{'item-big-icon-left':isCard}">
|
||||
<i ng-if="isWallet" class="icon ion-briefcase size-21"></i>
|
||||
<span ng-if="!isWallet">
|
||||
<gravatar ng-if="!isCard" class="send-gravatar" name="{{toName}}" width="30" email="{{toEmail}}"></gravatar>
|
||||
<i ng-if="isCard" class="icon big-icon-svg">
|
||||
<div class="bg icon-bitpay-card"></div>
|
||||
</i>
|
||||
</span>
|
||||
<span ng-class="{'m10l':isCard}">{{toName || toAddress}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="amount-pane">
|
||||
|
||||
<div class="amount-bar">
|
||||
<div class="title" translate>Amount</div>
|
||||
<a class="postfix" ng-click="toggleAlternative()" ng-show="showAlternativeAmount">{{alternativeIsoCode}}</a>
|
||||
<a class="postfix" ng-click="toggleAlternative()" ng-show="!showAlternativeAmount">{{unitName}}</a>
|
||||
</div>
|
||||
|
||||
<div class="amount">
|
||||
<div class="text-light text-black m15b" ng-class="{'size-28': smallFont, 'size-36': !smallFont}"><span> {{amount || "0.00" }}</div>
|
||||
<div class="text-light text-black" ng-class="{'size-16': smallFont, 'size-17': !smallFont}" ng-show="!showAlternativeAmount">
|
||||
{{globalResult}} <span class="label gray text-white radius">{{amountResult || '0.00'}} {{alternativeIsoCode}}</span>
|
||||
</div>
|
||||
<div class="text-light text-black size-17" ng-show="showAlternativeAmount">
|
||||
{{globalResult}} <span class="label gray text-white radius">{{alternativeResult || '0.00'}} {{unitName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="keypad">
|
||||
<div class="row">
|
||||
<div class="col col-25 col-offset-75 operator-send"
|
||||
ng-show="amount > 0 || alternativeResult > 0 || amountResult > 0" ng-click="finish()">
|
||||
<i class="icon ion-ios-arrow-thin-right"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col digit" ng-click="pushDigit('7')">7</div>
|
||||
<div class="col digit" ng-click="pushDigit('8')">8</div>
|
||||
<div class="col digit" ng-click="pushDigit('9')">9</div>
|
||||
<div class="col operator" ng-click="pushOperator('/')">/</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col digit" ng-click="pushDigit('4')">4</div>
|
||||
<div class="col digit" ng-click="pushDigit('5')">5</div>
|
||||
<div class="col digit" ng-click="pushDigit('6')">6</div>
|
||||
<div class="col operator" ng-click="pushOperator('x')">x</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col digit" ng-click="pushDigit('1')">1</div>
|
||||
<div class="col digit" ng-click="pushDigit('2')">2</div>
|
||||
<div class="col digit" ng-click="pushDigit('3')">3</div>
|
||||
<div class="col operator" ng-click="pushOperator('+')">+</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col digit" ng-click="pushDigit('.')">.</div>
|
||||
<div class="col digit" ng-click="pushDigit('0')">0</div>
|
||||
<div class="col digit icon ion-backspace-outline" ng-click="removeDigit()"></div>
|
||||
<div class="col operator" ng-click="pushOperator('-')">-</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
78
www/views/backup.html
Normal file
78
www/views/backup.html
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<ion-view id="wallet-backup-phrase">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{viewTitle}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="ng-hide" ng-show="deleted">
|
||||
<div class="row text-center">
|
||||
<h3 translate class="col col-75 center-block">Wallet recovery phrase not available.</h3>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p translate class="col col-75 center-block">
|
||||
You can still export it from Advanced > Export.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<!--
|
||||
## STEP 1
|
||||
-->
|
||||
<div class="ng-hide" ng-show="step == 1 && (mnemonicWords || (!credentialsEncrypted && !deleted))">
|
||||
<div class="backup-phrase" ng-class="{'enable_text_select': wallet.network == 'testnet'}">
|
||||
<span ng-repeat="word in mnemonicWords track by $index"><span style="white-space:nowrap">{{word}}</span><span ng-show="useIdeograms"> </span> </span>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p class="col col-70" translate>
|
||||
Please carefully write down this phrase
|
||||
</p>
|
||||
</div>
|
||||
<div class="row text-center" ng-show="mnemonicHasPassphrase">
|
||||
<p class="bold-text col col-80 center-block">
|
||||
<span translate>
|
||||
This recovery phrase was created with a password. To recover this wallet both the recovery phrase and password are needed.
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="cta-buttons">
|
||||
<button ng-show="!deleted" ng-disabled="credentialsEncrypted || error" class="button button-block button-positive" ng-click="goToStep(2);" translate>I've written it down
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!--
|
||||
## STEP 2
|
||||
-->
|
||||
<div class="ng-hide" ng-show="step == 2">
|
||||
<div class="backup-phrase">
|
||||
<span ng-repeat="cword in customWords track by $index" ng-show="customWords[$index]">
|
||||
<button class="button select-word" ng-click="removeButton($index, cword)">{{cword.word}}</button>
|
||||
</span>
|
||||
</div>
|
||||
<div id="select-phrase">
|
||||
<p translate>
|
||||
Please tap each word in the correct order.
|
||||
</p>
|
||||
<span ng-repeat="shuffledWord in shuffledMnemonicWords track by $index">
|
||||
<button class="button select-word" ng-click="addButton($index, shuffledWord)"
|
||||
ng-disabled="shuffledWord.selected">{{shuffledWord.word}}
|
||||
</button>
|
||||
</span>
|
||||
<button ng-show="selectComplete" id="confirm-phrase" class="button button-block button-positive" ng-click="goToStep(3);" translate>Confirm</button>
|
||||
</div>
|
||||
</div>
|
||||
<!--
|
||||
## STEP 3
|
||||
-->
|
||||
<div class="ng-hide" ng-show="step == 3">
|
||||
<h5 translate>Enter your password</h5>
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" transalate>In order to verify your wallet backup, please type your password:</span>
|
||||
<input type="text" id="passphrase" ng-model="data.passphrase" autocapitalize="off" spellcheck="false" autofocus/>
|
||||
</label>
|
||||
<button ng-disabled="!data.passphrase" class="button button-block button-positive" ng-click="goToStep(4);" translate>Confirm
|
||||
</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
32
www/views/backupWarning.html
Normal file
32
www/views/backupWarning.html
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<ion-view id="backup-warning" class="onboarding" ng-controller="backupWarningController">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button button-back button-clear" ng-click="goBack()">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content scroll="false">
|
||||
<div class="row text-center">
|
||||
<h3 translate class="col col-80">
|
||||
Are you being watched?
|
||||
</h3>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p class="col col-75 tagline">
|
||||
Now is a perfect time to assess your surroundings. Nearby windows? Hidden cameras? Shoulder-spies?
|
||||
</p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<img src="img/backup-warning.svg" class="col col-60 warning-image">
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p class="col col-60">
|
||||
Anyone with your backup phrase can access or spend your bitcoin.
|
||||
</p>
|
||||
</div>
|
||||
<div class="cta-buttons">
|
||||
<button class="button button-block button-primary col col-75" ng-click="openPopup()" translate>All clear, let's do this</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
162
www/views/bitpayCard.html
Normal file
162
www/views/bitpayCard.html
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
<ion-view id="bitpayCard">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>BitPay Card</ion-nav-title>
|
||||
<ion-nav-buttons side="secondary" ng-show="bitpayCard.bitpayCardAuthenticated">
|
||||
<button class="button back-button" ui-sref="tabs.bitpayCard.preferences">
|
||||
<i class="icon ion-ios-gear-outline"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="box-notification warning m0" ng-show="network == 'testnet'">
|
||||
Sandbox version. Only for testing purpose
|
||||
</div>
|
||||
|
||||
<div class="m20t text-center size-12 text-gray" ng-show="!bitpayCard.bitpayCardAuthenticated && bitpayCard.loadingSession">
|
||||
Loading...
|
||||
</div>
|
||||
|
||||
<div ng-show="!bitpayCard.bitpayCardAuthenticated && !bitpayCard.loadingSession">
|
||||
<div class="text-center m20t">
|
||||
<img src="img/bitpay-card-visa.svg" width="200">
|
||||
</div>
|
||||
<h4 class="text-center">
|
||||
<span ng-show="!bitpayCard.bitpayCardTwoFactorPending">Login to your account</span>
|
||||
<span ng-show="bitpayCard.bitpayCardTwoFactorPending">2-Step Verification</span>
|
||||
</h4>
|
||||
|
||||
<form
|
||||
ng-show="!bitpayCard.bitpayCardTwoFactorPending"
|
||||
name="authenticateForm"
|
||||
ng-submit="bitpayCard.authenticate(email, password)"
|
||||
novalidate>
|
||||
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Email</span>
|
||||
<input name="email"
|
||||
type="email"
|
||||
ng-model="email"
|
||||
ng-disabled="bitpayCard.authenticating"
|
||||
required>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Password</span>
|
||||
<input name="password"
|
||||
type="password"
|
||||
ng-model="password"
|
||||
ng-disabled="bitpayCard.authenticating"
|
||||
required>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<input class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="!authenticateForm.$valid || bitpayCard.authenticating"
|
||||
value="Login">
|
||||
</form>
|
||||
|
||||
<p ng-show="bitpayCard.bitpayCardTwoFactorPending" class="size-12 text-center text-gray">
|
||||
Enter the verification code generated by the authenticator app on your phone.
|
||||
</p>
|
||||
|
||||
<form
|
||||
ng-show="bitpayCard.bitpayCardTwoFactorPending"
|
||||
name="authenticate2FAForm"
|
||||
ng-submit="bitpayCard.authenticate2FA(twoFactorCode)"
|
||||
novalidate>
|
||||
|
||||
<div class="list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Verification Code</span>
|
||||
<input name="twoFactorCode"
|
||||
type="text"
|
||||
ng-model="twoFactorCode"
|
||||
ng-disabled="bitpayCard.authenticating"
|
||||
required>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<input class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="!authenticate2FAForm.$valid || bitpayCard.authenticating"
|
||||
value="Login">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div ng-show="bitpayCard.bitpayCardAuthenticated">
|
||||
<div class="oh pr">
|
||||
<div class="amount">
|
||||
<div ng-if="!loadingHistory && bitpayCard.bitpayCardCurrentBalance" ng-click="bitpayCard.update()">
|
||||
<div class="size-36 m20b">${{bitpayCard.bitpayCardCurrentBalance}}</div>
|
||||
<a class="button button-positive button-small" ui-sref="tabs.bitpayCard.amount({'isCard': true, 'toName': 'BitPay Card'})">
|
||||
<i class="icon ion-ios-plus-empty"></i> {{'Add Funds'|translate}}
|
||||
</a>
|
||||
</div>
|
||||
<div ng-if="loadingHistory" class="m10t">
|
||||
<strong class="size-36">...</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="m10t text-center padding"
|
||||
ng-show="!bitpayCard.bitpayCardTransactionHistory[0] &&
|
||||
!bitpayCard.bitpayCardInvoiceHistory[0] && (!loadingHistory || !bitpayCardCached)">
|
||||
<i class="icon ion-ios-arrow-thin-up size-24"></i>
|
||||
<h1>Get started</h1>
|
||||
<h4>Your BitPay Card is ready. Add funds to your card to start using your card at stores and ATMs worldwide.</h4>
|
||||
</div>
|
||||
|
||||
<div class="list" ng-if="bitpayCardCached">
|
||||
<div class="item item-divider">
|
||||
<select class="select-style" ng-model="dateRange" ng-change="bitpayCard.update(dateRange)">
|
||||
<option value="last30Days">Recent Activity</option>
|
||||
<option value="lastMonth">Last Month</option>
|
||||
<option value="all">All Activity</option>
|
||||
</select>
|
||||
</div>
|
||||
<div
|
||||
ng-repeat="tx in bitpayCard.bitpayCardTransactionHistory | orderBy: ['pending','-timestamp']"
|
||||
class="item row"
|
||||
ng-init="bitpayCard.getMerchantInfo(tx)">
|
||||
<div class="col col-10" ng-init="icon = bitpayCard.getIconName(tx)">
|
||||
<img class="m5t" ng-src="img/mcc-icons/{{icon}}.svg" width="22">
|
||||
</div>
|
||||
|
||||
<div class="col">
|
||||
<div class="size-12 text-bold">
|
||||
{{tx.merchant.name}}
|
||||
</div>
|
||||
<div class="size-12">
|
||||
{{tx.merchant.city}}, {{tx.merchant.state}}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
ng-init="desc = bitpayCard.processDescription(tx)"
|
||||
class="col size-12">
|
||||
{{desc}}
|
||||
</div>
|
||||
<div class="col">
|
||||
<img ng-show="!tx.pending" ng-src="img/check.svg" width="14">
|
||||
<img ng-show="tx.pending" ng-src="img/sync.svg" width="14">
|
||||
</div>
|
||||
<div class="col text-right size-12 text-gray">
|
||||
<div class="size-14"
|
||||
ng-class="{
|
||||
'text-success': tx.amount.indexOf('-') == -1 && !tx.pending,
|
||||
'text-gray': tx.amount.indexOf('-') == -1 && tx.pending}">
|
||||
{{tx.amount | currency:'$':2 }}
|
||||
</div>
|
||||
<time>{{tx.timestamp | amTimeAgo}}</time>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
152
www/views/buyAmazon.html
Normal file
152
www/views/buyAmazon.html
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Buy</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div ng-show="!buy.giftCard">
|
||||
|
||||
<div class="box-notification error" ng-show="buy.errorInfo" ng-click="buy.errorInfo = null">
|
||||
There was an error when trying to buy gift card, but the funds were sent to BitPay Invoice. Please, contact
|
||||
BitPay to refund your bitcoin
|
||||
<div>
|
||||
Amount: {{buy.errorInfo.amount}} {{buy.errorInfo.currency}}<br>
|
||||
BitPay Invoice ID: {{buy.errorInfo.invoiceId}}.
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a ng-click="openExternalLink(buy.errorInfo.invoiceUrl)">Open invoice</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="padding text-center">
|
||||
<img src="img/a_generic.jpg" alt="Amazon.com Gift Card" width="180">
|
||||
<div class="text-center size-12 m10t">
|
||||
Use your Amazon.com Gift Card* to shop from a huge selection of books, electronics, music, movies, software, apparel, toys, and more.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form class="m20t"
|
||||
name="buyAmazonForm"
|
||||
ng-submit="buy.confirm()"
|
||||
novalidate>
|
||||
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Amount</span>
|
||||
<input type="number"
|
||||
id="fiat"
|
||||
name="fiat"
|
||||
ng-attr-placeholder="{{'Amount in USD'}}"
|
||||
min="0.01"
|
||||
max="500"
|
||||
ng-model="formData.fiat"
|
||||
ng-pattern="/^[0-9]+(\.[0-9]{1,2})?$/"
|
||||
step="0.01"
|
||||
autocomplete="off" ignore-mouse-wheel required>
|
||||
<a class="postfix">USD</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
|
||||
<button class="button button-block button-positive"
|
||||
ng-disabled="!formData.fiat"
|
||||
type="submit">
|
||||
Buy now
|
||||
</button>
|
||||
<div class="size-10 text-gray text-center">
|
||||
Purchase Amount is limited to USD 500 per day
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="m10t" ng-show="buy.giftCard">
|
||||
<div class="m10h" ng-show="buy.giftCard.status != 'SUCCESS' && buy.giftCard.status != 'PENDING'">
|
||||
<h1 class="text-center">Gift card could not be created</h1>
|
||||
<div class="box-notification error">
|
||||
There was an error when trying to create the Amazon.com Gift Card. Status: {{buy.giftCard.status}}
|
||||
</div>
|
||||
<div class="text-gray size-12 m20t">
|
||||
<span ng-show="buy.giftCard.status == 'RESEND'">
|
||||
This is a temporary/recoverable system failure that can be
|
||||
resolved retrying the request from your list of cards
|
||||
</span>
|
||||
<span ng-show="buy.giftCard.status == 'FAILURE'">
|
||||
This failure could not be recoverable. Request your refund from your list of cards
|
||||
</span>
|
||||
<button class="button button-block button-positive" ng-click="$root.go('amazon')">
|
||||
Back
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="buy.giftCard.status == 'SUCCESS'">
|
||||
<div class="size-12 p15h">
|
||||
Thank you for participating in the BitPay offer. It is our pleasure to send
|
||||
you this Amazon.com Gift Card* that can be redeemed towards millions of items at
|
||||
<a ng-click="openExternalLink('https://www.amazon.com')">www.amazon.com</a>.
|
||||
You may want to print this screen for easy reference later you will need the gift card claim code below.
|
||||
</div>
|
||||
|
||||
<div class="oh m20t p15 white size-12 text-center">
|
||||
<img class="m10h" src="img/a_generic.jpg" alt="Amazon.com Gift Cards" width="200">
|
||||
<div class="m10t size-14">
|
||||
Gift Card Amount:
|
||||
<span class="text-bold">
|
||||
{{buy.giftCard.amount | currency : '$ ' : 2 }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="size-14">
|
||||
Claim code: <span class="text-bold" copy-to-clipboard="buy.giftCard.claimCode">{{buy.giftCard.claimCode}}</span>
|
||||
</div>
|
||||
<div class="m10t">
|
||||
<button class="button button-positive"
|
||||
ng-click="openExternalLink('https://www.amazon.com/gc/redeem?claimCode=' + buy.giftCard.claimCode, '_system')">
|
||||
Redeem Now
|
||||
</button>
|
||||
</div>
|
||||
<div class="m10t text-center">
|
||||
<a class="button button-clear button-calm" ng-click="openExternalLink(buy.giftCard.invoiceUrl)">See invoice</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh m20t p15h size-12">
|
||||
To redeem your gift card, follow these steps:
|
||||
|
||||
<ol class="m10t size-12">
|
||||
<li>1. Visit <a ng-click="openExternalLink('https://www.amazon.com/gc')">www.amazon.com/gc</a>
|
||||
<li>2. Click Apply to Account and enter the Claim Code when prompted.
|
||||
<li>3. Gift card funds will be applied automatically to eligible orders during the checkout process.
|
||||
<li>4. You must pay for any remaining balance on your order with another payment method.
|
||||
</ol>
|
||||
|
||||
<p class="size-12">
|
||||
Your gift card claim code may also be entered when prompted during checkout. To redeem your gift card using
|
||||
the Amazon.com 1-Click® service, first add the gift card funds to Your Account.
|
||||
</p>
|
||||
|
||||
<p class="size-12">
|
||||
If you have questions about redeeming your gift card, please visit
|
||||
<a ng-click="openExternalLink('https://www.amazon.com/gc-redeem')">www.amazon.com/gc-redeem</a>.
|
||||
If you have questions regarding the BitPay Introductory offer, please contact BitPay.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="size-12 white p15 m20t">
|
||||
* <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a> is not a sponsor of this promotion.
|
||||
Except as required by law, <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a>
|
||||
Gift Cards ("GCs") cannot be transferred for value or redeemed for cash. GCs may be used only for purchases of
|
||||
eligible goods at <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a> or certain of its
|
||||
affiliated websites. For complete terms and conditions, see
|
||||
<a ng-click="openExternalLink('https://www.amazon.com/gc-legal')">www.amazon.com/gc-legal</a>.
|
||||
GCs are issued by ACI Gift Cards, Inc., a Washington corporation. All Amazon ®, ™ & © are IP
|
||||
of <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a>, Inc. or its affiliates.
|
||||
No expiration date or service fees.
|
||||
</div>
|
||||
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
169
www/views/buyCoinbase.html
Normal file
169
www/views/buyCoinbase.html
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
<div
|
||||
class="topbar-container"
|
||||
ng-include="'views/includes/topbar.html'"
|
||||
ng-init="titleSection='Buy'; goBackToState = 'coinbase'; noColor = true">
|
||||
</div>
|
||||
|
||||
|
||||
<div class="content coinbase" ng-controller="buyCoinbaseController as buy">
|
||||
|
||||
<div class="row m20t" ng-show="buy.error || index.coinbaseError" ng-click="buy.error = null">
|
||||
<div class="columns">
|
||||
<div class="box-notification">
|
||||
<ul class="no-bullet m0 size-12 text-warning">
|
||||
<li ng-repeat="err in (buy.error.errors || index.coinbaseError.errors)" ng-bind-html="err.message"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m20ti"
|
||||
ng-show="index.coinbaseAccount && !buy.buyInfo && !buy.receiveInfo">
|
||||
<div class="columns">
|
||||
|
||||
<form name="buyCoinbaseForm"
|
||||
ng-submit="buy.buyRequest(index.coinbaseToken, index.coinbaseAccount)" novalidate>
|
||||
|
||||
<div ng-if="index.coinbaseToken" ng-init="buy.getPaymentMethods(index.coinbaseToken)">
|
||||
<label>Payment method</label>
|
||||
<select
|
||||
ng-model="selectedPaymentMethod.id"
|
||||
ng-options="item.id as item.name for item in buy.paymentMethods">
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<label>Amount
|
||||
<span
|
||||
ng-if="index.coinbaseToken"
|
||||
ng-init="buy.getPrice(index.coinbaseToken)"
|
||||
ng-show="buy.buyPrice"
|
||||
class="size-11 text-light right">
|
||||
1 BTC <i class="icon-arrow-right"></i> {{buy.buyPrice.amount}} {{buy.buyPrice.currency}}
|
||||
</span>
|
||||
</label>
|
||||
|
||||
<div class="input">
|
||||
<input ng-show="!showAlternative" type="number" id="amount" ignore-mouse-wheel
|
||||
name="amount" ng-attr-placeholder="{{'Amount in ' + (showAlternative ? 'USD' : 'BTC')}}"
|
||||
ng-minlength="0.00000001" ng-maxlength="10000000000"
|
||||
ng-model="amount" autocomplete="off" ng-disabled="buy.loading">
|
||||
|
||||
<input ng-show="showAlternative" type="number" id="fiat" ignore-mouse-wheel
|
||||
name="fiat" ng-attr-placeholder="{{'Amount in ' + (showAlternative ? 'USD' : 'BTC')}}"
|
||||
ng-model="fiat" autocomplete="off" ng-disabled="buy.loading">
|
||||
|
||||
<a ng-show="!showAlternative" class="postfix button"
|
||||
ng-click="showAlternative = true; amount = null">BTC</a>
|
||||
<a ng-show="showAlternative" class="postfix button black"
|
||||
ng-click="showAlternative = false; fiat = null">USD</a>
|
||||
</div>
|
||||
|
||||
<div class="text-center text-gray size-12 m10b">
|
||||
<span ng-show="!(amount || fiat)">
|
||||
Enter the amount to get the exchange rate
|
||||
</span>
|
||||
<span ng-show="!buy.buyPrice && (amount || fiat)">
|
||||
Not available
|
||||
</span>
|
||||
<span ng-show="buy.buyPrice && amount && !fiat">
|
||||
~ {{buy.buyPrice.amount * amount | currency : 'USD ' : 2}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<i class="db fi-arrow-down size-24 m10v"></i>
|
||||
</div>
|
||||
|
||||
<div
|
||||
ng-if="index.coinbaseToken"
|
||||
ng-init="buy.init(index.coinbaseTestnet)"
|
||||
ng-click="openWalletsModal(buy.allWallets)">
|
||||
<label>Copay Wallet</label>
|
||||
<div class="input">
|
||||
<input type="text" id="address" name="address" ng-disabled="buy.selectedWalletId"
|
||||
ng-attr-placeholder="{{'Choose a wallet to receive bitcoin'}}" ng-model="buy.selectedWalletName" required>
|
||||
<a class="postfix size-12 m0 text-gray">
|
||||
<i class="icon-wallet size-18"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="input m20t">
|
||||
<input class="button black expand round"
|
||||
ng-disabled="buy.loading || (!amount && !fiat) || !selectedPaymentMethod"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
type="submit" value="{{'Continue'}}">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m20ti row" ng-show="buy.receiveInfo && !buy.sellInfo && !buy.success">
|
||||
<div class="columns">
|
||||
<h1>Funds sent to Copay Wallet</h1>
|
||||
<p class="size-12 text-gray">
|
||||
Buy confirmed. Funds will be send soon to your selected Copay Wallet
|
||||
</p>
|
||||
<button class="m20t outline black round expand"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
href ui-sref="coinbase">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="buy.buyInfo && !buy.receiveInfo && !buy.success">
|
||||
<h4 class="title">Confirm transaction</h4>
|
||||
|
||||
<ul class="no-bullet m10t size-12 white">
|
||||
<li class="line-b line-t p15">
|
||||
<span class="m10 text-normal text-bold">Amount</span>
|
||||
<span class="right text-gray">{{buy.buyInfo.amount.amount}} {{buy.buyInfo.amount.currency}}</span>
|
||||
</li>
|
||||
<li class="line-b oh p15">
|
||||
<span class="m10 text-normal text-bold">Fees</span>
|
||||
<span class="right text-gray">
|
||||
<div ng-repeat="fee in buy.buyInfo.fees">
|
||||
<b>{{fee.type}}</b> {{fee.amount.amount}} {{fee.amount.currency}}
|
||||
</div>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p15">
|
||||
<span class="m10 text-normal text-bold">Subtotal</span>
|
||||
<span class="right text-gray">{{buy.buyInfo.subtotal.amount}} {{buy.buyInfo.subtotal.currency}}</span>
|
||||
</li>
|
||||
<li class="line-b p15">
|
||||
<span class="m10 text-normal text-bold">Total</span>
|
||||
<span class="right text-gray">{{buy.buyInfo.total.amount}} {{buy.buyInfo.total.currency}}</span>
|
||||
</li>
|
||||
<li class="line-b p15">
|
||||
<span class="m10 text-normal text-bold">Payout at</span>
|
||||
<span class="right text-gray">{{buy.buyInfo.payout_at | amCalendar}}</span>
|
||||
</li>
|
||||
<li class="line-b p15">
|
||||
<span class="m10 text-normal text-bold">Deposit into Copay Wallet</span>
|
||||
<span class="right text-gray">{{buy.selectedWalletName}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="row">
|
||||
<div class="columns">
|
||||
<button class="button black round expand"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
ng-click="buy.confirmBuy(index.coinbaseToken, index.coinbaseAccount, buy.buyInfo)"
|
||||
ng-disabled="buy.loading">
|
||||
Buy
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m20t row text-center" ng-show="buy.success">
|
||||
<div class="columns">
|
||||
<h1>Purchase initiated</h1>
|
||||
<p class="text-gray">
|
||||
Bitcoin purchase completed. Coinbase has queued the transfer to your selected Copay wallet.
|
||||
</p>
|
||||
|
||||
<button class="outline dark-gray round expand" href ui-sref="coinbase">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
123
www/views/buyGlidera.html
Normal file
123
www/views/buyGlidera.html
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Buy</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="box-notification warning" ng-show="network == 'testnet'">
|
||||
Testnet wallets only work with Glidera Sandbox Accounts
|
||||
</div>
|
||||
|
||||
<div class="box-notification notice" ng-show="limits && !buy.show2faCodeInput && !buy.success">
|
||||
<span class="text-light">Daily buy limit</span>:
|
||||
{{limits.dailyBuy|currency:'':2}} {{limits.currency}}
|
||||
(remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}})
|
||||
<br>
|
||||
<span class="text-light">Monthly buy limit</span>:
|
||||
{{limits.monthlyBuy|currency:'':2}} {{limits.currency}}
|
||||
(remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}})
|
||||
</div>
|
||||
|
||||
<div class="box-notification warning" ng-show="limits.transactDisabledPendingFirstTransaction && !buy.success">
|
||||
<span class="text-warning">
|
||||
This operation was disabled because you have a pending first transaction
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="!buy.show2faCodeInput && !buy.success">
|
||||
|
||||
<form name="buyPriceForm" ng-if="token"
|
||||
ng-submit="buy.get2faCode(token)" novalidate>
|
||||
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Amount in {{showAlternative ? 'USD' : 'BTC'}}</span>
|
||||
<input ng-show="!showAlternative"
|
||||
type="number"
|
||||
id="qty" ignore-mouse-wheel
|
||||
name="qty"
|
||||
ng-attr-placeholder="{{'Amount'}}"
|
||||
ng-minlength="0.00000001"
|
||||
ng-maxlength="10000000000"
|
||||
ng-model="qty"
|
||||
autocomplete="off"
|
||||
ng-change="buy.getBuyPrice(token, {'qty': qty})">
|
||||
|
||||
<input ng-show="showAlternative"
|
||||
type="number"
|
||||
id="fiat" ignore-mouse-wheel
|
||||
name="fiat"
|
||||
ng-attr-placeholder="{{'Amount'}}"
|
||||
ng-model="fiat"
|
||||
autocomplete="off"
|
||||
ng-change="buy.getBuyPrice(token, {'fiat': fiat})">
|
||||
|
||||
<a ng-show="!showAlternative"
|
||||
class="postfix"
|
||||
on-tap="showAlternative = true; qty = null; buy.buyPrice = null">BTC</a>
|
||||
<a ng-show="showAlternative"
|
||||
class="postfix"
|
||||
on-tap="showAlternative = false; fiat = null; buy.buyPrice = null">USD</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
|
||||
<div class="text-center text-gray size-12 m20b" ng-show="!buy.gettingBuyPrice && buy.buyPrice.qty">
|
||||
Buy
|
||||
<span ng-show="qty">{{buy.buyPrice.subtotal|currency:'':2}} {{buy.buyPrice.currency}} in Bitcoin</span>
|
||||
<span ng-show="fiat">{{buy.buyPrice.qty}} BTC</span>
|
||||
at {{buy.buyPrice.price}} {{buy.buyPrice.currency}}/BTC
|
||||
</div>
|
||||
<div class="text-center text-gray size-12 m20b" ng-show="!buy.gettingBuyPrice && !buy.buyPrice.qty">
|
||||
(Enter the amount to get the exchange rate)
|
||||
</div>
|
||||
|
||||
<div class="text-center text-gray size-12 m20b" ng-show="buy.gettingBuyPrice">
|
||||
...
|
||||
</div>
|
||||
|
||||
<button class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="limits.transactDisabledPendingFirstTransaction || !buy.buyPrice.qty || buy.loading">
|
||||
Continue
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div ng-show="buy.show2faCodeInput && !buy.success">
|
||||
<div class="m10t text-center">
|
||||
{{buy.buyPrice.subtotal|currency:'':2}} {{buy.buyPrice.currency}} → {{buy.buyPrice.qty}} BTC
|
||||
<p class="m20t">
|
||||
A SMS containing a confirmation code was sent to your phone. <br>
|
||||
Please, enter the code below
|
||||
</p>
|
||||
<form name="buyForm"
|
||||
ng-submit="buy.sendRequest(token, permissions, twoFaCode)" novalidate>
|
||||
<div class="card list">
|
||||
<label class="item item-input">
|
||||
<input type="number" ng-model="twoFaCode" placeholder="2FA Code" required ignore-mouse-wheel>
|
||||
</label>
|
||||
</div>
|
||||
<button class="button button-block button-positive"
|
||||
type="submit" ng-disabled="buyForm.$invalid || buy.loading">
|
||||
Buy
|
||||
</button>
|
||||
</form>
|
||||
<p class="m10t size-12 text-gray">
|
||||
Fiat will be immediately withdrawn from your bank account. The bitcoins will be purchased and deposited to your wallet in 2-4 business days.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center" ng-show="buy.success">
|
||||
<h1>Purchase initiated</h1>
|
||||
<p class="text-gray">
|
||||
A transfer has been initiated from your bank account. Your bitcoins should arrive to your wallet in 2-4 business days.
|
||||
</p>
|
||||
|
||||
<button class="button button-block button-positive" ui-sref="tabs.buyandsell.glidera">OK</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
15
www/views/buyandsell.html
Normal file
15
www/views/buyandsell.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title translate>Buy and sell</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<ion-list>
|
||||
<ion-item class="item item-icon-right" ui-sref="tabs.buyandsell.glidera">
|
||||
<img src="img/glidera-logo.png" width="90">
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
171
www/views/coinbase.html
Normal file
171
www/views/coinbase.html
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
<div class="topbar-container">
|
||||
<nav ng-controller="topbarController as topbar"
|
||||
class="tab-bar"
|
||||
ng-style="{'background-color': '#2b71b1'}">
|
||||
<section class="left-small">
|
||||
<a class="p10"
|
||||
ng-click="topbar.goHome()">
|
||||
<span class="text-close">Close</span>
|
||||
</a>
|
||||
</section>
|
||||
|
||||
<section class="right-small" ng-show="index.coinbaseAccount">
|
||||
<a class="p10" href ui-sref="preferencesCoinbase">
|
||||
<i class="fi-widget size-24"></i>
|
||||
</a>
|
||||
</section>
|
||||
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis">
|
||||
Buy & Sell Bitcoin
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="content coinbase p20b" ng-controller="coinbaseController as coinbase">
|
||||
<div class="row" ng-show="index.coinbaseError || (index.coinbaseToken && !index.coinbaseAccount)">
|
||||
<div class="m20b box-notification" ng-show="index.coinbaseError">
|
||||
<ul class="no-bullet m0 text-warning size-12">
|
||||
<li ng-repeat="err in index.coinbaseError.errors" ng-bind-html="err.message"></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="m20b box-notification" ng-show="index.coinbaseToken && !index.coinbaseAccount">
|
||||
<div class="text-warning">
|
||||
<span>Your primary account should be a WALLET. Set your wallet account as primary and try again.</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m10t text-center">
|
||||
<button
|
||||
class="dark-gray outline round tiny"
|
||||
ng-click="index.initCoinbase(index.coinbaseToken)">
|
||||
Reconnect
|
||||
</button>
|
||||
<div class="m20t size-12">
|
||||
Or go to <a class="text-gray" href ui-sref="preferencesCoinbase">Preferences</a> and log out manually.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!index.coinbaseToken && !index.coinbaseError" class="row">
|
||||
<div class="box-notification text-center size-12 text-warning" ng-show="index.coinbaseTestnet">
|
||||
<i class="fi-info"></i>
|
||||
Testnet wallets only work with Coinbase Sandbox Accounts
|
||||
</div>
|
||||
<div class="columns" ng-init="showOauthForm = false">
|
||||
<div class="text-center m20v">
|
||||
<img src="img/coinbase-logo.png" width="200">
|
||||
</div>
|
||||
<div class="text-center small-10 small-centered columns" ng-show="!showOauthForm">
|
||||
|
||||
<p class="m20t text-gray size-12">Connect your Coinbase account to get started</p>
|
||||
|
||||
<a class="button light-gray outline round small"
|
||||
ng-click="coinbase.openAuthenticateWindow(); showOauthForm = true">
|
||||
Connect to Coinbase
|
||||
</a>
|
||||
<div>
|
||||
<a href ng-click="showOauthForm = true" class="text-gray size-12">
|
||||
Do you already have the Oauth Code?
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center" ng-show="showOauthForm">
|
||||
<div class="text-left box-notification" ng-show="coinbase.error">
|
||||
<ul class="no-bullet m0 text-warning size-12">
|
||||
<li ng-repeat="err in coinbase.error.errors" ng-bind-html="err.message"></li>
|
||||
</ul>
|
||||
</div>
|
||||
<form name="oauthCodeForm" ng-submit="coinbase.submitOauthCode(code)" novalidate>
|
||||
<label>OAuth Code</label>
|
||||
<input type="text" ng-model="code" ng-disabled="coinbase.loading"
|
||||
ng-attr-placeholder="{{'Paste the authorization code here'}}" required>
|
||||
<input
|
||||
class="button expand round"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
type="submit" value="Get started" ng-disabled="oauthCodeForm.$invalid || coinbase.loading">
|
||||
</form>
|
||||
<button class="button light-gray expand outline round"
|
||||
ng-click="showOauthForm = false; index.coinbaseError = null; coinbase.error = null">
|
||||
<i class="fi-arrow-left"></i> <span class="tu">Back</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="index.coinbaseToken && index.coinbaseAccount && !index.coinbaseError">
|
||||
|
||||
<div class="p20v text-center" ng-show="index.coinbaseAccount" ng-click="index.updateCoinbase({updateAccount: true})">
|
||||
<img src="img/coinbase-logo.png" width="100">
|
||||
</div>
|
||||
|
||||
<ul ng-show="index.coinbaseAccount" class="no-bullet m0 size-12">
|
||||
<li class="line-b line-t p15 coinbase-pointer"
|
||||
href ui-sref="buyCoinbase">
|
||||
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="30">
|
||||
<span class="m10 text-normal text-bold">Buy Bitcoin</span>
|
||||
<span class="right text-gray">
|
||||
<i class="icon-arrow-right3 size-24 right"></i>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p15 coinbase-pointer"
|
||||
href ui-sref="sellCoinbase">
|
||||
<img src="img/sell-bitcoin.svg" alt="sell bitcoin" width="30">
|
||||
<span class="m10 text-normal text-bold">Sell Bitcoin</span>
|
||||
<span class="right text-gray">
|
||||
<i class="icon-arrow-right3 size-24 right"></i>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div ng-show="index.coinbasePendingTransactions && !index.coinbaseError">
|
||||
<h4 class="title">Activity</h4>
|
||||
<div class="m20b box-notification" ng-show="index.coinbasePendingError">
|
||||
<ul class="no-bullet m0 text-warning size-12">
|
||||
<li ng-repeat="err in index.coinbasePendingError.errors" ng-bind-html="err.message"></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div ng-repeat="(id, tx) in index.coinbasePendingTransactions | orderObjectBy:'updated_at':true track by $index"
|
||||
ng-click="coinbase.openTxModal(tx)"
|
||||
class="row collapse coinbase-last-transactions-content">
|
||||
<div class="large-2 medium-2 small-2 columns">
|
||||
<img src="img/bought-pending.svg" alt="bought" width="24" ng-show="(tx.type == 'buy' || (tx.to && tx.type == 'send')) && tx.status != 'completed'">
|
||||
<img src="img/bought.svg" alt="bought" width="30" ng-show="(tx.type == 'buy' || (tx.to && tx.type == 'send')) && tx.status == 'completed'">
|
||||
<img src="img/sold-pending.svg" alt="sold" width="24" ng-show="tx.from && tx.type == 'send'">
|
||||
<img src="img/sold.svg" alt="sold" width="30" ng-show="!tx.from && tx.type == 'sell' && tx.status == 'completed'">
|
||||
</div>
|
||||
|
||||
<div class="large-5 medium-5 small-5 columns">
|
||||
<div class="size-12 m5t">
|
||||
<span ng-show="tx.type == 'sell' && tx.status == 'completed'">Sold</span>
|
||||
<span ng-show="tx.type == 'buy' && tx.status == 'completed'">Bought</span>
|
||||
<span class="text-bold">
|
||||
<span ng-if="tx.type == 'sell' || (tx.type == 'send' && tx.from)">-</span>{{tx.amount.amount.replace('-','')}}
|
||||
{{tx.amount.currency}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-4 medium-4 small-4 columns text-right">
|
||||
<div ng-show="tx.error" class="m5t size-12 text-warning">
|
||||
Error
|
||||
</div>
|
||||
<div ng-show="!tx.error" class="m5t size-12 text-gray">
|
||||
<div ng-show="tx.status == 'completed'">
|
||||
<time ng-if="tx.created_at">{{tx.created_at | amTimeAgo}}</time>
|
||||
</div>
|
||||
<div ng-show="tx.status == 'pending'">
|
||||
<span class="label outline gray radius text-gray text-info" ng-if="tx.status == 'pending'">Pending</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="large-1 medium-1 small-1 columns text-right">
|
||||
<i class="icon-arrow-right3 size-18"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
</div>
|
||||
22
www/views/coinbaseUri.html
Normal file
22
www/views/coinbaseUri.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<div
|
||||
class="topbar-container"
|
||||
ng-include="'views/includes/topbar.html'"
|
||||
ng-init="titleSection='Coinbase'; closeToHome = true">
|
||||
</div>
|
||||
|
||||
<div class="content coinbase" ng-controller="coinbaseUriController as coinbase" ng-init="coinbase.checkCode()">
|
||||
|
||||
<div class="row m20t">
|
||||
<div class="large-12 columns">
|
||||
<div class="text-center">
|
||||
<img src="img/coinbase-logo.png"
|
||||
ng-click="index.updateCoinbase()" width="100">
|
||||
</div>
|
||||
|
||||
<div class="m10t text-center" ng-show="coinbase.error">
|
||||
<div class="notification m10b size-12 text-warning">{{coinbase.error}}</div>
|
||||
<button class="outline dark-gray tiny round" ng-click="coinbase.submitOauthCode(coinbase.code)">Try again</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
65
www/views/confirm.html
Normal file
65
www/views/confirm.html
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<ion-view id="view-confirm">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Confirm'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-class="{'slide-to-pay': isCordova}">
|
||||
|
||||
<div class="list card">
|
||||
<div class="item item-text-wrap">
|
||||
<i class="icon ion-arrow-up-c"></i> <span class="text-bold size-16">Sending</span>
|
||||
<div class="text-bold size-28 m15t">{{amountStr}} </div>
|
||||
<div class="text-light size-20 m5t">{{alternativeAmountStr}} </div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list card">
|
||||
<div class="item">Fee: {{feeLevel}}
|
||||
<span class="item-note">
|
||||
{{fee || '...'}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item item-icon-left">
|
||||
<i ng-if="isWallet" class="icon ion-briefcase size-21"></i>
|
||||
<div ng-if="!isWallet">
|
||||
<gravatar ng-if="!isCard" class="send-gravatar" name="{{toName}}" width="30" email="{{toEmail}}"></gravatar>
|
||||
<i ng-if="isCard" class="icon big-icon-svg">
|
||||
<div class="bg icon-bitpay-card"></div>
|
||||
</i>
|
||||
</div>
|
||||
<div ng-class="{'m10l':isCard}">
|
||||
<span translate>To</span>: {{toAddress}}
|
||||
<p ng-show="toName">{{toName}}</p>
|
||||
|
||||
<div ng-show="_paypro" ng-click="openPPModal(_paypro)">
|
||||
<i ng-show="_paypro.verified && _paypro.caTrusted" class="ion-locked" style="color:green"></i>
|
||||
<i ng-show="!_paypro.caTrusted" class="ion-unlocked" style="color:red"></i>
|
||||
{{_paypro.domain}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center" ng-show="notAvailable">
|
||||
<span class="badge badge-assertive" translate>No wallet with enough funds</span>
|
||||
</div>
|
||||
|
||||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
|
||||
<div class="list card">
|
||||
<div class="item item-icon-left item-icon-right" ng-click="showDescriptionPopup()">
|
||||
<i class="icon ion-ios-chatbubble-outline size-21"></i>
|
||||
<span ng-show="!description" translate>Add description</span>
|
||||
<span ng-show="description">{{description}}</span>
|
||||
<i ng-show="!description" class="icon ion-ios-plus-empty size-21"></i>
|
||||
</div>
|
||||
</div>
|
||||
<button class="button button-block button-positive" ng-click="approve()" ng-if="!isCordova" translate>Click to pay</button>
|
||||
</ion-content>
|
||||
<accept class="accept-slide" ng-if="isCordova"></accept>
|
||||
</ion-view>
|
||||
66
www/views/copayers.html
Normal file
66
www/views/copayers.html
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
|
||||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>{{wallet.name}}</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
<div ng-show="!wallet.notAuthorized">
|
||||
<div class="list card text-center">
|
||||
<a class="item item-heading" ng-style="{'border-width': 0}" translate>
|
||||
Share this invitation with your copayers
|
||||
</a>
|
||||
<div ng-click="copySecret()" ng-class="{'enable_text_select': !isCordova}">
|
||||
<div class="text-center" copy-to-clipboard="secret">
|
||||
<qrcode size="220" error-correction-level="L" data="{{secret}}"></qrcode>
|
||||
<div ng-show="!secret" style="position:relative; top:-226px; height:0px">
|
||||
<div style="height:220px; width:220px; margin:auto; background: white">
|
||||
<ion-spinner class="spinner-dark" icon="lines"></ion-spinner>
|
||||
</div>
|
||||
</div>
|
||||
<div class="copayers-secret">
|
||||
{{secret || ('Loading...'|translate)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="secret">
|
||||
<div class="text-center m10t" ng-if="isCordova">
|
||||
<button class="button button-outline button-positive"
|
||||
ng-click="shareSecret()">
|
||||
<i class="icon ion-ios-upload-outline"></i>
|
||||
<span translate>Share invitation</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="m30v line-t">
|
||||
<h4 class="size-14 p10h m10t">
|
||||
<span translate>Waiting for copayers</span>
|
||||
<span class="text-gray right">
|
||||
[ <span translate>{{wallet.m}}-of-{{wallet.n}}</span> ]
|
||||
</span>
|
||||
</h4>
|
||||
<div ng-include="'views/includes/copayers.html'"></div>
|
||||
<div ng-if="!wallet.isComplete()" class="line-b p10 white size-12">
|
||||
<i class="icon ion-loop"></i>
|
||||
<span translate>Waiting...</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m20b text-center" ng-show="wallet.notAuthorized">
|
||||
<h1 translate>Wallet incomplete and broken</h1>
|
||||
<h4 translate>Delete it and create a new one</h4>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<button class="button button-block button-assertive" ng-click="showDeletePopup()">
|
||||
<i class="fi-trash"></i> <span translate>Cancel and delete the wallet</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
21
www/views/export.html
Normal file
21
www/views/export.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Export wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-init="file = true">
|
||||
<div class="row text-center">
|
||||
<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>
|
||||
|
||||
<div ng-include="'views/tab-export-file.html'" ng-if="file"></div>
|
||||
<div ng-include="'views/tab-export-qrCode.html'" ng-if="!file"></div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
164
www/views/glidera.html
Normal file
164
www/views/glidera.html
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Glidera</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="box-notification error" ng-show="!network">
|
||||
Glidera is disabled for this application
|
||||
</div>
|
||||
|
||||
<div class="box-notification warning" ng-show="network == 'testnet'">
|
||||
Testnet wallets only work with Glidera Sandbox Accounts
|
||||
</div>
|
||||
|
||||
<div ng-if="!token">
|
||||
|
||||
<div ng-init="showOauthForm = false">
|
||||
<div class="text-center m20v">
|
||||
<img src="img/glidera-logo.png" ng-click="update(token, permissions)" width="200">
|
||||
</div>
|
||||
<div class="text-center small-10 small-centered columns" ng-show="!showOauthForm">
|
||||
<p class="m10b">You can buy and sell Bitcoin with a US bank account directly in Copay.</p>
|
||||
|
||||
<p class="m20t padding text-gray size-12 text-left">
|
||||
DISCLOSURE.<br>
|
||||
Glidera Inc. (Glidera) is providing the service of buying or selling bitcoins to Copay users. To enable this
|
||||
service, Glidera has registered with US Treasury Department’s FinCEN as a Money Service Business
|
||||
(#31000042625755). Users of Copay must agree to the service agreement presented by Glidera prior to obtaining
|
||||
Glidera’s service of buying or selling bitcoins. Service available in U.S. and Canada only. In U.S. (buy & sell) CA, GA, IL, KS,
|
||||
MA, MD, MO, MT, MN, SC, TX, AZ, CO, DE, ME, NJ, PA, TN, UT, NV, WI. In Canada (buy & sell) AB, BC, MB, NB, NL, NS, NT, NU,
|
||||
ON, PE, SK, YT.
|
||||
</p>
|
||||
|
||||
<p class="m20t text-gray size-12">Connect your Glidera account to get started</p>
|
||||
|
||||
<button class="button button-block button-positive"
|
||||
ng-click="openExternalLink(glidera.getAuthenticateUrl(), '_system'); showOauthForm = true">
|
||||
Connect to Glidera
|
||||
</button>
|
||||
<div class="m10t">
|
||||
<a href ng-click="showOauthForm = true" class="text-gray size-12">
|
||||
Do you already have the Oauth Code?
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="showOauthForm">
|
||||
<form name="oauthCodeForm" ng-submit="glidera.submitOauthCode(code)" novalidate>
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">OAuth Code</span>
|
||||
<input type="text"
|
||||
ng-model="code"
|
||||
ng-attr-placeholder="{{'Paste the authorization code here'}}" required>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<input type="button"
|
||||
value="Cancel"
|
||||
class="button button-block button-light"
|
||||
ng-click="showOauthForm = false">
|
||||
</div>
|
||||
<div class="col">
|
||||
<input
|
||||
class="button button-block button-positive"
|
||||
type="submit"
|
||||
value="Get started"
|
||||
ng-disabled="oauthCodeForm.$invalid">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="token && permissions">
|
||||
<div class="text-center m20v">
|
||||
<img src="img/glidera-logo.png" ng-click="update(token, permissions)" width="200">
|
||||
</div>
|
||||
<div class="list">
|
||||
<a class="item item-icon-left item-icon-right" href ui-sref="tabs.buyandsell.glidera.preferences">
|
||||
<i class="icon ion-ios-gear"></i>
|
||||
<span ng-show="personalInfo">{{personalInfo.firstName}} {{personalInfo.lastName}}</span>
|
||||
<span class="item-note" ng-show="email">
|
||||
{{email}}
|
||||
</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="padding">
|
||||
<div class="text-center m30v size-12"
|
||||
ng-show="status && !status.userCanTransact">
|
||||
<h4 class="text-bold"> Complete Setup</h4>
|
||||
<div>Your Glidera account is not ready to transact. Please, verify it at <b>Glidera.io</b></div>
|
||||
<a class="button"
|
||||
ng-init="glideraUrl = network == 'testnet' ? 'https://sandbox.glidera.io/login' :
|
||||
'https://glidera.io/login'"
|
||||
ng-click="openExternalLink(glideraUrl)">
|
||||
Go to Glidera
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list"
|
||||
ng-show="status && status.userCanTransact">
|
||||
<a ng-show="status.userCanBuy"
|
||||
class="item item-icon-right"
|
||||
href ui-sref="tabs.buyandsell.glidera.buy">
|
||||
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="30">
|
||||
Buy Bitcoin
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right"
|
||||
ng-show="status.userCanSell"
|
||||
href ui-sref="tabs.buyandsell.glidera.sell">
|
||||
<img src="img/sell-bitcoin.svg" alt="buy bitcoin" width="30">
|
||||
Sell Bitcoin
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="list card" ng-show="permissions.transaction_history">
|
||||
<div class="item item-heading">
|
||||
Activity
|
||||
</div>
|
||||
<div ng-show="txs.length == 0 "
|
||||
class="item">
|
||||
No activity in your account
|
||||
</div>
|
||||
<a ng-repeat="tx in txs"
|
||||
ng-click="glidera.openTxModal(token, tx)"
|
||||
class="item">
|
||||
|
||||
<span class="item-note">
|
||||
<div ng-show="tx.status == 'COMPLETE'">
|
||||
<time ng-if="tx.transactionDate">{{tx.transactionDate | amTimeAgo}}</time>
|
||||
</div>
|
||||
<div ng-show="tx.status == 'PROCESSING'">
|
||||
<span ng-if="tx.status == 'PROCESSING'">Processing</span>
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<img class="left m10r" src="img/bought.svg" alt="bought" width="39" ng-show="tx.type == 'BUY' && tx.status == 'COMPLETE'">
|
||||
<img class="left m10r" src="img/bought-pending.svg" alt="bought" width="33" ng-show="tx.type == 'BUY' && tx.status == 'PROCESSING'">
|
||||
<img class="left m10r" src="img/sold.svg" alt="bought" width="39" ng-show="tx.type == 'SELL' && tx.status == 'COMPLETE'">
|
||||
<img class="left m10r" src="img/sold-pending.svg" alt="bought" width="33" ng-show="tx.type == 'SELL' && tx.status == 'PROCESSING'">
|
||||
|
||||
<h2>
|
||||
<span ng-show="tx.type == 'BUY'">Bought</span>
|
||||
<span ng-show="tx.type == 'SELL'">Sold</span>
|
||||
<b>{{tx.qty}}</b> BTC
|
||||
</h2>
|
||||
<p>
|
||||
{{tx.subtotal|currency:'':2}} {{tx.currency}}
|
||||
</p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
21
www/views/glideraUri.html
Normal file
21
www/views/glideraUri.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Glidera</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="box-notification warning" ng-show="network == 'testnet'">
|
||||
Testnet wallets only work with Glidera Sandbox Accounts
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<img src="img/glidera-logo.png" width="100">
|
||||
<div class="m20t" translate>
|
||||
Connecting...
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
25
www/views/import.html
Normal file
25
www/views/import.html
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<ion-view ng-controller="tabsController" ng-init="importInit()">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Import Wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="importController" ng-init="phrase = true; init()">
|
||||
<div class="row text-center">
|
||||
<div class="col" ng-click="phrase = true; file = hardware = false" ng-style="phrase && {'border-bottom': '2px solid'}">
|
||||
<span translate>Recovery phrase</span>
|
||||
</div>
|
||||
<div class="col" ng-click="file = true; phrase = hardware = false" ng-style="file && {'border-bottom': '2px solid'}">
|
||||
<span translate>File/Text</span>
|
||||
</div>
|
||||
<div class="col" ng-click="hardware = true; phrase = file = false" ng-style="hardware && {'border-bottom': '2px solid'}">
|
||||
<span translate>Hardware wallet</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-include="'views/tab-import-phrase.html'" ng-if="phrase"></div>
|
||||
<div ng-include="'views/tab-import-file.html'" ng-if="file"></div>
|
||||
<div ng-include="'views/tab-import-hardware.html'" ng-if="hardware"></div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
9
www/views/includes/acceptSlide.html
Normal file
9
www/views/includes/acceptSlide.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<ion-slides options="{loop: false, effect: 'flip', speed: 500, pagination: false, initialSlide: 1}" slider="data.slider">
|
||||
<ion-slide-page></ion-slide-page>
|
||||
<ion-slide-page>
|
||||
<div>
|
||||
<i class="icon ion-ios-arrow-thin-right"></i>
|
||||
<span translate>Slide to accept</span>
|
||||
</div>
|
||||
</ion-slide-page>
|
||||
</ion-slides>
|
||||
9
www/views/includes/alert.html
Normal file
9
www/views/includes/alert.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<div class="columns m20t">
|
||||
<div class="m20t size-14 text-center">
|
||||
<i class="fi-alert"></i>
|
||||
{{msg|translate}}
|
||||
</div>
|
||||
<div class="text-center m20t" ng-click="close()">
|
||||
<a class="button outline light-gray round tiny small-4">OK</a>
|
||||
</div>
|
||||
</div>
|
||||
10
www/views/includes/available-balance.html
Normal file
10
www/views/includes/available-balance.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<div>
|
||||
<span class="db text-bold">
|
||||
<span translate>Available Balance</span>:
|
||||
{{index.availableBalanceStr }}
|
||||
</span>
|
||||
<span class="text-gray" ng-show="index.lockedBalanceSat">
|
||||
{{index.lockedBalanceStr}}
|
||||
<span translate>locked by pending payments</span>
|
||||
</span>
|
||||
</div>
|
||||
10
www/views/includes/backupLaterPopup.html
Normal file
10
www/views/includes/backupLaterPopup.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<div>
|
||||
<h1 translate>Without a backup, you could lose money</h1>
|
||||
<span translate>If something happens to this device, this app is deleted, or your password forgotten, neither you nor Bitpay can revoer your funds.</span>
|
||||
<button ng-click="goBack()" class="button button-block button-light" translate>
|
||||
Go back
|
||||
</button>
|
||||
<button ng-click="continue()" class="button button-block button-light" translate>
|
||||
I understand
|
||||
</button>
|
||||
</div>
|
||||
27
www/views/includes/backupNeededPopup.html
Normal file
27
www/views/includes/backupNeededPopup.html
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<div id="backup-needed-modal" class="popup-modal">
|
||||
<div class="popup-modal-header popup-modal-header-warning">
|
||||
<div class="popup-modal-header-img-warning popup-modal-header-img"></div>
|
||||
</div>
|
||||
<div class="popup-modal-content popup-modal-content-warning">
|
||||
<div class="text-center">
|
||||
<h5 translate>Backup Needed</h5>
|
||||
<p translate>Now is a good time to backup your wallet. If this device is lost, it is impossible to access your funds without a backup.</p>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<button
|
||||
class="button button-clear expand"
|
||||
ng-click="close()"
|
||||
translate>Not now
|
||||
</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button
|
||||
class="button button-clear expand"
|
||||
ng-click="doBackup()"
|
||||
translate>Backup wallet now
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
7
www/views/includes/backupWarningPopup.html
Normal file
7
www/views/includes/backupWarningPopup.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<div>
|
||||
<h1 translate>Screenshots are not secure</h1>
|
||||
<span translate>if you take a screenshot, your backup may be viewed by others apps. You can make a safe backup with paper and a pen.</span>
|
||||
<button ng-click="close()" class="button button-block button-clear" translate>
|
||||
Got it
|
||||
</button>
|
||||
</div>
|
||||
0
www/views/includes/clientError.html
Normal file
0
www/views/includes/clientError.html
Normal file
39
www/views/includes/confirm-tx.html
Normal file
39
www/views/includes/confirm-tx.html
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<div class="m20t">
|
||||
<label class="size-14 text-center">
|
||||
<span translate>Send bitcoin</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="size-36">{{tx.amountStr}}</div>
|
||||
<div class="size-12 label gray radius" ng-show="tx.alternativeAmountStr">{{tx.alternativeAmountStr}}</div>
|
||||
<i class="db fi-arrow-down size-24 m10v"></i>
|
||||
<div class="payment-proposal-to" copy-to-clipboard="tx.toAddress">
|
||||
<i class="fi-bitcoin left m10l"></i>
|
||||
<contact ng-if="!tx.hasMultiplesOutputs" class="dib enable_text_select ellipsis m5t m5b m15l size-14" address="{{tx.toAddress}}"></contact>
|
||||
<span ng-if="tx.hasMultiplesOutputs" translate>
|
||||
Multiple recipients
|
||||
</span>
|
||||
</div>
|
||||
<div class="m10t size-12" ng-init="processFee(tx.amount, tx.fee)">
|
||||
<div ng-show="!showPercentage" ng-click="showPercentage = true">
|
||||
<span translate>Fee</span> <span class="tl">({{feeLevel|translate}})</span>:
|
||||
<span class="text-bold">{{tx.feeStr}}</span>
|
||||
<span class="label gray radius">{{feeAlternativeStr}}</span>
|
||||
</div>
|
||||
<div ng-show="showPercentage" ng-click="showPercentage = false" translate>
|
||||
{{feeRateStr}} of the transaction
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m20t dib">
|
||||
<div class="half-row left">
|
||||
<button ng-click="cancel()" class="round outline dark-gray expand">
|
||||
<span class="size-12" translate>Cancel</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="half-row left">
|
||||
<button ng-click="accept()" class="round expand" ng-style="{'background-color': color}" autofocus>
|
||||
<span class="size-12" translate>Confirm</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
16
www/views/includes/confirmBackupPopup.html
Normal file
16
www/views/includes/confirmBackupPopup.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<div id="backup-confirm-modal" class="popup-modal">
|
||||
<div class="popup-modal-header">
|
||||
<div ng-class="{'popup-modal-header-img-success': !backupError, 'popup-modal-header-img-fail': backupError}" class="popup-modal-header-img"></div>
|
||||
</div>
|
||||
<div class="popup-modal-content" ng-class="{'popup-modal-content-success': !backupError, 'popup-modal-content-fail': backupError}">
|
||||
<div class="text-center" ng-show="!backupError">
|
||||
<h5 translate>Your bitcoin wallet is backed up!</h5>
|
||||
<p translate> Be sure to store your recovery phrase in a secure place. If this app is deelted, you money cannot be recoved with out it.</p>
|
||||
<button
|
||||
class="button button-clear expand"
|
||||
ng-click="closeBackupResultModal()"
|
||||
translate>I Understand
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
8
www/views/includes/copayers.html
Normal file
8
www/views/includes/copayers.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<div ng-repeat="copayer in copayers">
|
||||
<span class="item size-12" ng-show="copayer.id == wallet.copayerId">
|
||||
<i class="icon ion-checkmark"></i> {{'Me'|translate}}
|
||||
</span>
|
||||
<span class="item size-12 text-gray" ng-show="copayer.id != wallet.copayerId">
|
||||
<i class="icon ion-checkmark"></i> {{copayer.name}}
|
||||
</span>
|
||||
</div>
|
||||
7
www/views/includes/copyToClipboard.html
Normal file
7
www/views/includes/copyToClipboard.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<ion-popover-view>
|
||||
<div class="columns m20t" ng-click="close()">
|
||||
<label class="size-10 text-center m20b">
|
||||
<span translate>Copied to clipboard</span>
|
||||
</label>
|
||||
</div>
|
||||
</ion-popover-view>
|
||||
12
www/views/includes/menu.html
Normal file
12
www/views/includes/menu.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<div class="bottom-bar row collapse p0i" ng-show="!index.notAuthorized">
|
||||
<div>
|
||||
<div class="row collapse p0i">
|
||||
<div class="medium-4 small-4 columns text-center bottombar-item"
|
||||
ng-repeat="item in index.menu">
|
||||
<span ng-include="'views/includes/menu-item.html'"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
11
www/views/includes/note.html
Normal file
11
www/views/includes/note.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<div class="padding">
|
||||
<input type="text" ng-model="data.comment" autofocus>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<button class="button button-dark button-block" ng-click="commentPopupClose()" translate>Cancel</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button class="button button-dark button-block" ng-click="commentPopupSave()" translate>Save</button>
|
||||
</div>
|
||||
</div>
|
||||
0
www/views/includes/offline.html
Normal file
0
www/views/includes/offline.html
Normal file
14
www/views/includes/output.html
Normal file
14
www/views/includes/output.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<li class="p10 oh" copy-to-clipboard="output.toAddress">
|
||||
<span class="text-gray" translate>To</span>:
|
||||
<span class="right enable_text_select">{{output.toAddress || output.address}}</span>
|
||||
</li>
|
||||
<li class="p10" copy-to-clipboard="output.amountStr">
|
||||
<span class="text-gray" translate>Amount</span>:
|
||||
<span class="right enable_text_select">{{output.amountStr}}
|
||||
<span ng-show="output.alternativeAmountStr" class="label gray radius">{{output.alternativeAmountStr}}</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="p10 oh" copy-to-clipboard="output.message">
|
||||
<span class="text-gray" translate>Note</span>:
|
||||
<span class="right enable_text_select">{{output.message}}</span>
|
||||
</li>
|
||||
42
www/views/includes/password.html
Normal file
42
www/views/includes/password.html
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
|
||||
<div class="columns m20t">
|
||||
<label class="size-14 text-center" for="password" ng-if="isSetup">
|
||||
<span ng-show="!isVerification" translate>Set up a spending password</span>
|
||||
<span ng-show="isVerification" translate>Repeat the spending password</span>
|
||||
</label>
|
||||
<label class="size-14 text-center" for="password" ng-if="!isSetup">
|
||||
<span translate>Enter your spending password</span>
|
||||
</label>
|
||||
|
||||
<div class="input m20t">
|
||||
<input type="password" placeholder="{{'Your spending password'|translate}}"
|
||||
id="passwordInput" name="password" ng-model="data.password" ng-keypress="keyPress($event)" autofocus>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="small-6 columns">
|
||||
<button
|
||||
class="round small-6 columns outline dark-gray expand"
|
||||
ng-click="cancel()"
|
||||
ng-disabled="loading">
|
||||
<span class="size-12" translate>Cancel</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="small-6 columns">
|
||||
<button class="round expand"
|
||||
ng-click="set()"
|
||||
ng-disabled="!data.password || loading"
|
||||
ng-style="{'background-color':index.backgroundColor}">
|
||||
<span ng-if="isSetup" class="size-12" translate>SET</span>
|
||||
<span ng-if="!isSetup" class="size-12">OK</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-warning size-12 columns m20t text-center" ng-show="isSetup">
|
||||
<i class="fi-alert"></i>
|
||||
<span ng-show="!error" translate> Your wallet key will be encrypted. The Spending Password cannot be recovered. Be sure to write it down</span>
|
||||
|
||||
<span ng-show="error">{{error|translate}}</span>
|
||||
</p>
|
||||
16
www/views/includes/screenshotWarningModal.html
Normal file
16
www/views/includes/screenshotWarningModal.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<div id="screenshot-warning-modal" class="popup-modal">
|
||||
<div class="popup-modal-header-success">
|
||||
<div class="popup-modal-header-img"></div>
|
||||
</div>
|
||||
<div class="popup-modal-content" ng-class="{'popup-modal-content-success': !backupError, 'popup-modal-content-fail': backupError}">
|
||||
<div class="text-center" ng-show="!backupError">
|
||||
<h5 translate>Screenshots are <br /> not secure</h5>
|
||||
<p translate> If you take a screenshot, your backup may be viewed by other apps. You can make a safe backup with physical paper and a pen.</p>
|
||||
<button
|
||||
class="button button-clear expand"
|
||||
ng-click="close()"
|
||||
translate>I Understand
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
12
www/views/includes/terms.html
Normal file
12
www/views/includes/terms.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<p translate>
|
||||
The software you are about to use functions as a free, open source, and multi-signature digital wallet. The software does not constitute an account where BitPay or other third parties serve as financial intermediaries or custodians of your bitcoin.
|
||||
</p>
|
||||
<p translate>
|
||||
While the software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, we cannot guarantee that there will be no bugs in the software. You acknowledge that your use of this software is at your own discretion and in compliance with all applicable laws. You are responsible for safekeeping your passwords, private key pairs, PINs and any other codes you use to access the software.
|
||||
</p>
|
||||
<p translate>
|
||||
IF YOU LOSE ACCESS TO YOUR COPAY WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT COPAY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The authors of the software, employees and affiliates of Bitpay, copyright holders, and BitPay, Inc. cannot retrieve your private keys or passwords if you lose or forget them and cannot guarantee transaction confirmation as they do not have control over the Bitcoin network.
|
||||
</p>
|
||||
<p translate>
|
||||
To the fullest extent permitted by law, this software is provided “as is” and no representations or warranties can be made of any kind, express or implied, including but not limited to the warranties of merchantability, fitness or a particular purpose and noninfringement. You assume any and all risks associated with the use of the software. In no event shall the authors of the software, employees and affiliates of Bitpay, copyright holders, or BitPay, Inc. be held liable for any claim, damages or other liability, whether in an action of contract, tort, or otherwise, arising from, out of or in connection with the software. We reserve the right to modify this disclaimer from time to time.
|
||||
</p>
|
||||
0
www/views/includes/transaction.html
Normal file
0
www/views/includes/transaction.html
Normal file
29
www/views/includes/txp.html
Normal file
29
www/views/includes/txp.html
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
|
||||
<div class="wallet-activity" ng-class="{'wallet-activity-not-pending':!tx.pendingForUs}">
|
||||
<div class="wallet-activity-amount">
|
||||
{{tx.amountStr}}
|
||||
</div>
|
||||
<span ng-show="!tx.merchant">
|
||||
<span ng-show="addressbook[tx.toAddress] && !tx.message">
|
||||
{{addressbook[tx.toAddress]}}
|
||||
</span>
|
||||
<span class="ellipsis" ng-show="!addressbook[tx.toAddress] && tx.message">
|
||||
{{tx.message}}
|
||||
</span>
|
||||
<span ng-show="!addressbook[tx.toAddress] && !tx.message" translate>
|
||||
Sending
|
||||
</span>
|
||||
</span>
|
||||
<span ng-show="tx.merchant">
|
||||
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock"></i> {{tx.merchant.domain}}</span>
|
||||
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock"></i> {{tx.merchant.domain}}</span>
|
||||
</span>
|
||||
<span>
|
||||
</span>
|
||||
|
||||
<p class="wallet-activity-note">
|
||||
<i class="icon ion-record wallet-activity-note-child" ng-style="{'color':tx.wallet.color}"></i>
|
||||
<span class="wallet-activity-note-child">{{tx.wallet.name}}</span>
|
||||
<time class="wallet-activity-note-child">{{tx.createdOn * 1000 | amTimeAgo}}</time>
|
||||
</p>
|
||||
</div>
|
||||
4
www/views/includes/version.html
Normal file
4
www/views/includes/version.html
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<span ng-controller="versionController as v">
|
||||
<small>v{{v.version}}</small>
|
||||
</span>
|
||||
|
||||
65
www/views/includes/walletActivity.html
Normal file
65
www/views/includes/walletActivity.html
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<span class="wallet-activity">
|
||||
<div ng-if="notification.type == 'NewCopayer' && notification.wallet.n>1" translate>
|
||||
Copayer joined
|
||||
</div>
|
||||
|
||||
<div ng-if="notification.type == 'NewCopayer' && notification.wallet.n==1" translate>
|
||||
Wallet created
|
||||
</div>
|
||||
|
||||
<div ng-if="notification.type == 'NewOutgoingTx'">
|
||||
<span translate>Payment Sent </span>
|
||||
<div class="wallet-activity-amount">
|
||||
{{notification.amountStr}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div ng-if="notification.type == 'NewIncomingTx'">
|
||||
<span translate>Payment Received</span>
|
||||
<div class="wallet-activity-amount">
|
||||
{{notification.amountStr}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="notification.type == 'TxProposalRemoved'">
|
||||
<span translate>Proposal Deleted</span>:
|
||||
<b>{{notification.message}}</b>
|
||||
<div class="wallet-activity-amount">
|
||||
{{notification.amountStr}}:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="notification.type == 'TxProposalRejectedBy'">
|
||||
<span translate>Proposal Rejected</span>:
|
||||
<b>{{notification.message}}</b>
|
||||
<div class="wallet-activity-amount">
|
||||
{{notification.amountStr}}:
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span ng-if="notification.type == 'NewTxProposal'">
|
||||
<span translate>New Proposal</span>:
|
||||
<b>{{notification.message}}</b>
|
||||
<div class="wallet-activity-amount">
|
||||
{{notification.amountStr}}
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<span ng-if="notification.type == 'TxProposalAcceptedBy'">
|
||||
<span translate>Proposal Accepted</span>:
|
||||
<b>{{notification.message}}</b>
|
||||
<div class="wallet-activity-amount">
|
||||
{{notification.amountStr}}
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<p class="wallet-activity-note">
|
||||
<!-- {{notification.types}} -->
|
||||
<i class="icon ion-record wallet-activity-note-child" ng-style="{'color':notification.wallet.color}"></i>
|
||||
<span ng-if="notification.creatorName" class="wallet-activity-note-child">{{ notification.creatorName}}@</span>
|
||||
<span class="wallet-activity-note-child">{{notification.wallet.name}}</span>
|
||||
<time class="wallet-activity-note-child">{{ notification.createdOn * 1000 | amTimeAgo}}</time>
|
||||
</p>
|
||||
</span>
|
||||
19
www/views/includes/walletInfo.html
Normal file
19
www/views/includes/walletInfo.html
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
|
||||
<span ng-show="wallet.isShared" class="size-12"><span translate>{{wallet.m}}-of-{{wallet.n}}</span></span>
|
||||
<span ng-show="wallet.isSingleAddress" class="size-12"><span translate>Auditable</span></span>
|
||||
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.network != 'livenet'" src="img/icon-testnet-white.svg">
|
||||
<img style="height:0.6em; margin-right: 1px;" ng-show="!wallet.canSign() && !wallet.isPrivKeyExternal()"
|
||||
src="img/icon-read-only-white.svg">
|
||||
|
||||
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.getPrivKeyExternalSourceName() == 'trezor'"
|
||||
src="img/icon-trezor-white.svg">
|
||||
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.getPrivKeyExternalSourceName() == 'ledger'"
|
||||
src="img/icon-ledger-white.svg">
|
||||
<span class="size-12 dib" style="height:0.6em; margin-right: 1px;" ng-show="wallet.account">#{{wallet.account || 0}} </span>
|
||||
|
||||
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.isPrivKeyEncrypted()" src="img/icon-lock-white.svg">
|
||||
|
||||
<!-- <img style="height:1em" ng-show="wallet.preferences.email" src="img/icon-email.svg"> -->
|
||||
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.usingCustomBWS" src="img/icon-bws-white.svg">
|
||||
|
||||
<img style="height:0.6em" ng-show="updatingTxHistory" src="img/icon-sync-white.svg">
|
||||
15
www/views/includes/wallets.html
Normal file
15
www/views/includes/wallets.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<div class="wallets" ng-show="wallets[0]">
|
||||
<ion-slides class="slides" slider="data.slider">
|
||||
<ion-slide-page ng-repeat="wallet in wallets track by $index">
|
||||
<div class="card" ng-click="slider.slideTo($index)">
|
||||
<div class="item item-icon-left text-right">
|
||||
<i class="icon ion-briefcase size-21" ng-style="{'color':wallet.color}"></i>
|
||||
<span>{{wallet.name || wallet.id}}</span>
|
||||
<span class="item-note m10l" ng-show="wallet.n > 1 && wallet.isComplete()">
|
||||
{{wallet.m}}-of-{{wallet.n}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</ion-slide-page>
|
||||
</ion-slides>
|
||||
</div>
|
||||
124
www/views/join.html
Normal file
124
www/views/join.html
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>{{'Join shared wallet' | translate}}</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
|
||||
<ion-content ng-controller="joinController as join">
|
||||
|
||||
<form name="joinForm" ng-submit="join.join(joinForm)" novalidate>
|
||||
|
||||
<div class="card list">
|
||||
|
||||
<label class="item item-input item-stacked-label no-border">
|
||||
<span class="input-label" translate>Your nickname</span>
|
||||
<input type="text"
|
||||
placeholder="{{'John'|translate}}"
|
||||
name="myName"
|
||||
ng-model="myName"
|
||||
ng-required="true">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label no-border">
|
||||
<span class="input-label" translate>Wallet Invitation</span>
|
||||
<div class="input-notification">
|
||||
<i class="icon ion-checkmark-circled balanced"
|
||||
ng-show="!joinForm.secret.$invalid"></i>
|
||||
<i class="icon ion-close-circled assertive"
|
||||
ng-show="joinForm.secret.$invalid && secret"></i>
|
||||
</div>
|
||||
<div class="qr-scan-icon">
|
||||
<qr-scanner class="qr-icon size-24" on-scan="join.onQrCodeScanned(data)"></qr-scanner>
|
||||
<input id="secret"
|
||||
type="text"
|
||||
placeholder="{{'Paste invitation here'|translate}}"
|
||||
name="secret"
|
||||
ng-model="secret"
|
||||
wallet-secret required>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" id="bwsurl" name="bwsurl" ng-model="bwsurl">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label" translate>
|
||||
Wallet Key
|
||||
</div>
|
||||
<select class="m10t"
|
||||
ng-model="seedSource"
|
||||
ng-options="seed as seed.label for seed in join.seedOptions"
|
||||
ng-change="join.setSeedSource()">
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label"
|
||||
ng-show="join.seedSourceId == 'trezor' || join.seedSourceId == 'ledger'">
|
||||
<span class="input-label" translate>Account Number</span>
|
||||
<input type="number" id="account" ng-model="account" ignore-mouse-wheel>
|
||||
</label>
|
||||
|
||||
<div class="card" ng-show="join.seedSourceId=='new' && createPassphrase">
|
||||
<div class="item item-text-wrap">
|
||||
<span translate>
|
||||
WARNING: The password cannot be recovered. <b>Be sure to write it down</b>. The wallet can not be restored without the password.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="join.seedSourceId=='new'">
|
||||
<span class="input-label" translate>Add a Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'Add an optional password to secure the recovery phrase'|translate}}"
|
||||
autocapitalize="off"
|
||||
name="createPassphrase"
|
||||
ng-model="createPassphrase">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="join.seedSourceId=='set'">
|
||||
<span class="input-label" translate>Wallet Recovery Phrase</span>
|
||||
<input id="ext-master"
|
||||
placeholder="{{'Enter the recovery phrase (BIP39)'|translate}}"
|
||||
autocapitalize="off"
|
||||
type="text"
|
||||
name="privateKey"
|
||||
ng-model="privateKey">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="join.seedSourceId=='set'">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
|
||||
autocapitalize="off"
|
||||
name="passphrase"
|
||||
ng-model="passphrase">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="join.seedSourceId == 'set'">
|
||||
<span class="input-label" translate>Derivation Path</span>
|
||||
<input type="text"
|
||||
placeholder="{{'BIP32 path for address derivation'|translate}}"
|
||||
name="derivationPath"
|
||||
ng-model="derivationPath">
|
||||
</label>
|
||||
|
||||
</div> <!-- advanced -->
|
||||
</div> <!-- list -->
|
||||
|
||||
<button type="submit" class="button button-block button-positive" ng-disabled="joinForm.$invalid" translate>
|
||||
Join
|
||||
</button>
|
||||
</form>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
105
www/views/modals/amazon-card-details.html
Normal file
105
www/views/modals/amazon-card-details.html
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
<ion-modal-view ng-controller="amazonCardDetailsController">
|
||||
<ion-header-bar align-title="center" class="bar-royal">
|
||||
<button class="button button-back button-clear" ng-click="cancel()">
|
||||
Close
|
||||
</button>
|
||||
<h1 class="title">Details</h1>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="header-modal text-center">
|
||||
<img src="img/a_generic.jpg" alt="Amazon.com Gift Card" width="230" ng-click="refreshGiftCard()">
|
||||
|
||||
<div ng-show="card.claimCode">
|
||||
<div class="m10t">
|
||||
Gift Card Amount:
|
||||
<span class="text-bold">
|
||||
{{card.amount | currency : '$ ' : 2}}
|
||||
</span>
|
||||
</div>
|
||||
<div ng-show="card.cardStatus !== 'Canceled'">
|
||||
Claim code: <span class="text-bold" copy-to-clipboard="card.claimCode">{{card.claimCode}}</span>
|
||||
</div>
|
||||
<div class="m10t" ng-show="card.cardStatus == 'Fulfilled'">
|
||||
<button class="button button-positive"
|
||||
ng-click="openExternalLink('https://www.amazon.com/gc/redeem?claimCode=' + card.claimCode, '_system')">
|
||||
Redeem Now
|
||||
</button>
|
||||
</div>
|
||||
<div class="m10t" ng-show="card.cardStatus == 'Canceled'">
|
||||
<div class="m10t">
|
||||
Status:
|
||||
<span class="text-bold">
|
||||
CANCELED
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="!card.claimCode">
|
||||
<div class="m10t">
|
||||
Status:
|
||||
<span class="text-bold" ng-show="card.status == 'PENDING'">
|
||||
PENDING
|
||||
</span>
|
||||
<span class="text-bold" ng-show="card.status == 'FAILURE' || card.status == 'RESEND'">
|
||||
FAILURE
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m10t text-center">
|
||||
<a class="button button-clear button-calm" ng-click="openExternalLink(card.invoiceUrl)">See invoice</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box-notification warning" ng-show="card.status == 'FAILURE' || card.status == 'RESEND'">
|
||||
There was a failure to the create gift card. Please, contact BitPay support.
|
||||
</div>
|
||||
|
||||
<div class="oh m20t size-12 p15h" ng-show="card.claimCode && card.cardStatus == 'Fulfilled'">
|
||||
To redeem your gift card, follow these steps:
|
||||
|
||||
<ol class="m10t size-12">
|
||||
<li>1. Visit <a ng-click="openExternalLink('https://www.amazon.com/gc')">www.amazon.com/gc</a>
|
||||
<li>2. Click Apply to Account and enter the Claim Code when prompted.
|
||||
<li>3. Gift card funds will be applied automatically to eligible orders during the checkout process.
|
||||
<li>4. You must pay for any remaining balance on your order with another payment method.
|
||||
</ol>
|
||||
|
||||
<p class="size-12">
|
||||
Your gift card claim code may also be entered when prompted during checkout. To redeem your gift card using
|
||||
the Amazon.com 1-Click® service, first add the gift card funds to Your Account.
|
||||
</p>
|
||||
|
||||
<p class="size-12">
|
||||
If you have questions about redeeming your gift card, please visit
|
||||
<a ng-click="openExternalLink('https://www.amazon.com/gc-redeem')">www.amazon.com/gc-redeem</a>.
|
||||
If you have questions regarding the BitPay Introductory offer, please contact BitPay.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="size-12 p15 m30v">
|
||||
* <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a> is not a sponsor of this promotion.
|
||||
Except as required by law, <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a>
|
||||
Gift Cards ("GCs") cannot be transferred for value or redeemed for cash. GCs may be used only for purchases of
|
||||
eligible goods at <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a> or certain of its
|
||||
affiliated websites. For complete terms and conditions, see
|
||||
<a ng-click="openExternalLink('https://www.amazon.com/gc-legal')">www.amazon.com/gc-legal</a>.
|
||||
GCs are issued by ACI Gift Cards, Inc., a Washington corporation. All Amazon ®, ™ & © are IP
|
||||
of <a ng-click="openExternalLink('http://amazon.com')">Amazon.com</a>, Inc. or its affiliates.
|
||||
No expiration date or service fees.
|
||||
</div>
|
||||
|
||||
<div class="list text-center">
|
||||
<a class="item" ng-show="card.status == 'SUCCESS' && card.cardStatus == 'Fulfilled'" ng-click="cancelGiftCard()">
|
||||
<span class="assertive">Cancel</span>
|
||||
</a>
|
||||
<a class="item" ng-show="card.status == 'FAILURE' || card.cardStatus == 'Canceled'
|
||||
|| card.cardStatus == 'Expired'" ng-click="remove()">
|
||||
<span class="assertive">Remove</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
20
www/views/modals/bitpay-card-confirmation.html
Normal file
20
www/views/modals/bitpay-card-confirmation.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<ion-modal-view>
|
||||
<ion-content ng-controller="bitpayCardConfirmationController">
|
||||
<div class="text-center">
|
||||
<h1 class="text-center m20b p20h">Are you sure you would like to log out of your Bitpay Card account?</h1>
|
||||
<p class="text-gray p20h">You will need to log back for fill in your Bitpay Card.</p>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<button class="button button-block button-stable" ng-click="cancel()">
|
||||
Cancel
|
||||
</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button class="button button-block button-assertive" ng-click="ok()">
|
||||
<span>Log out</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
18
www/views/modals/coinbase-confirmation.html
Normal file
18
www/views/modals/coinbase-confirmation.html
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<ion-modal-view ng-controller="coinbaseConfirmationController">
|
||||
<div class="m20tp text-center">
|
||||
<div class="row">
|
||||
<h1 class="text-center m20b p20h">Are you sure you would like to log out of your Coinbase account?</h1>
|
||||
<p class="text-gray p20h">You will need to log back in to buy or sell bitcoin in Copay.</p>
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="button light-gray expand outline round" ng-click="cancel()">
|
||||
<i class="fi-arrow-left"></i> <span class="tu">Back</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="button warning expand round" ng-click="ok()">
|
||||
<span>Log out</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-modal-view>
|
||||
104
www/views/modals/coinbase-tx-details.html
Normal file
104
www/views/modals/coinbase-tx-details.html
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
<ion-modal-view ng-controller="coinbaseTxDetailsController">
|
||||
<ion-header-bar align-title="center" class="tab-bar" ng-style="{'background-color': '#2b71b1'}">
|
||||
<div class="left-small">
|
||||
<a ng-click="cancel()">
|
||||
<i class="icon-arrow-left3 icon-back"></i>
|
||||
<span class="text-back">Back</span>
|
||||
</a>
|
||||
</div>
|
||||
<h1 class="title ellipsis" translate>Details</h1>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content>
|
||||
<div class="fix-modals-touch">
|
||||
<div class="header-modal bg-gray text-center">
|
||||
<div class="p20">
|
||||
<img src="img/bought.svg" alt="bought" width="65" ng-show="(tx.type == 'buy' || (tx.type == 'send' && tx.to)) && tx.status == 'completed'">
|
||||
<img src="img/bought-pending.svg" alt="bought" width="65"
|
||||
ng-show="(tx.type == 'buy' || (tx.type == 'send' && tx.to)) && tx.status != 'completed'">
|
||||
<img src="img/sold.svg" alt="bought" width="65" ng-show="tx.type == 'sell' && tx.status == 'completed'">
|
||||
<img src="img/sold-pending.svg" alt="bought" width="65"
|
||||
ng-show="(tx.type == 'sell' || (tx.type == 'send' && tx.from)) && tx.status != 'completed'">
|
||||
</div>
|
||||
<div ng-show="tx.status == 'completed'">
|
||||
<span ng-show="tx.type == 'buy' || tx.type == 'send'">Bought</span>
|
||||
<span ng-show="tx.type == 'sell'">Sold</span>
|
||||
</div>
|
||||
<div ng-show="tx.type == 'send' && (tx.to || tx.from) && tx.status != 'completed'">
|
||||
<span ng-show="tx.to">Receiving purchased bitcoin</span>
|
||||
<span ng-show="tx.from">Sending bitcoin to sell</span>
|
||||
</div>
|
||||
<div ng-show="(tx.type == 'sell' || tx.type == 'buy') && tx.status != 'completed'">
|
||||
<span ng-show="tx.type == 'buy'">Buying bitcoin</span>
|
||||
<span ng-show="tx.type == 'sell'">Selling bitcoin</span>
|
||||
</div>
|
||||
<div class="size-24 text-bold">
|
||||
<span ng-if="tx.type == 'sell' || (tx.type == 'send' && tx.from)">-</span>{{tx.amount.amount.replace('-','')}}
|
||||
{{tx.amount.currency}}
|
||||
</div>
|
||||
<div class="label gray radius m10b">
|
||||
<span ng-if="tx.type == 'sell' || (tx.type == 'send' && tx.from)">-</span>{{tx.native_amount.amount.replace('-','')}}
|
||||
{{tx.native_amount.currency}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="m20b box-notification" ng-show="tx.error">
|
||||
<ul class="no-bullet m0 text-warning size-12">
|
||||
<li ng-repeat="err in tx.error.errors" ng-bind-html="err.message"></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<ul class="no-bullet size-14">
|
||||
|
||||
<li ng-show="tx.details && tx.status != 'pending'" class="line-b p10 oh">
|
||||
<span class="text-gray">{{tx.details.title}}</span>
|
||||
<span class="right">{{tx.details.subtitle}}</span>
|
||||
</li>
|
||||
|
||||
<li class="line-b p10 oh">
|
||||
<span class="text-gray">Status</span>
|
||||
<span class="text-success right" ng-if="tx.status == 'completed'">Completed</span>
|
||||
<span class="text-info right" ng-if="tx.status == 'pending'">Pending</span>
|
||||
<span class="text-warning right" ng-if="tx.status == 'error'">Error</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.created_at" class="line-b p10 oh">
|
||||
<span class="text-gray">Date</span>
|
||||
<span class="right">{{tx.created_at | amCalendar}}</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.price_sensitivity" class="line-b p10 oh">
|
||||
<span class="text-gray">Price Sensitivity</span>
|
||||
<span class="right">{{tx.price_sensitivity.name}}</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.sell_price_amount" class="line-b p10 oh">
|
||||
<span class="text-gray">Sell Price</span>
|
||||
<span class="right">{{tx.sell_price_amount}} {{tx.sell_price_currency}}</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.description" class="line-b p10 oh">
|
||||
<span class="text-gray" ng-show="tx.from && tx.type == 'send'">Sent bitcoin from</span>
|
||||
<span class="text-gray" ng-show="tx.to && tx.type == 'send'">Receive bitcoin in</span>
|
||||
<span class="right text-bold">{{tx.description}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="row m20t" ng-show="tx.status == 'error'">
|
||||
<div class="columns">
|
||||
<p class="text-center size-12 text-gray">
|
||||
This action will remove the transaction.
|
||||
</p>
|
||||
<button class="button outline round dark-gray expand tiny"
|
||||
ng-click="remove()">
|
||||
<i class="fi-x"></i>
|
||||
Remove
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
18
www/views/modals/confirmation.html
Normal file
18
www/views/modals/confirmation.html
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<ion-modal-view ng-controller="confirmationController">
|
||||
<div class="m20tp text-center">
|
||||
<div class="row">
|
||||
<h1 class="text-center m20b p20">{{title|translate}}</h1>
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="button warning expand round" ng-disabled="loading" ng-click="ok()">
|
||||
<i class="fi-trash"></i> <span translate>Yes</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="button light-gray expand outline round" ng-disabled="loading"
|
||||
ng-click="cancel()">
|
||||
<i class="fi-x"></i> <span class="tu" translate>Cancel</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-modal-view>
|
||||
88
www/views/modals/customAmount.html
Normal file
88
www/views/modals/customAmount.html
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
<ion-modal-view ng-controller="customAmountController">
|
||||
<ion-header-bar align-title="center" class="tab-bar" ng-style="{'background-color':color}">
|
||||
<div class="left-small">
|
||||
<a ng-click="cancel()" class="p10">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</div>
|
||||
<h1 class="title ellipsis" translate>Request a specific amount</h1>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content ng-style="{'background-color': '#f6f7f9'}">
|
||||
<div class="fix-modals-touch">
|
||||
<div class="m20b" ng-show="customizedAmountBtc">
|
||||
<h4 class="title m0" translate>QR Code</h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li class="line-b p10 oh text-center">
|
||||
<qrcode size="220" data="bitcoin:{{addr + '?amount=' + customizedAmountBtc}}"></qrcode>
|
||||
<div class="m10t text-center" ng-show="isCordova">
|
||||
<span class="button outline dark-gray tiny round"
|
||||
ng-click="shareAddress('bitcoin:' + addr + '?amount=' + customizedAmountBtc)">
|
||||
<i class="fi-share"></i>
|
||||
<span translate>Share address</span>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="title m0" translate>Details</h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li class="line-b p10 oh">
|
||||
<span class="text-gray" translate>Address</span>:
|
||||
<span class="right">
|
||||
<span class="text-gray enable_text_select">{{addr}}</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p10 oh">
|
||||
<span class="text-gray" translate>Amount</span>:
|
||||
<span class="right">
|
||||
{{customizedAmountUnit}}
|
||||
<span class="label gray radius">{{customizedAlternativeUnit}}</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div ng-show="!customizedAmountBtc" class="row m20t">
|
||||
<div class="large-12 large-centered columns">
|
||||
<form name="amountForm" ng-submit="submitForm(amountForm)" novalidate>
|
||||
<div class="right" ng-hide="amountForm.amount.$pristine && !amountForm.amount.$modelValue ">
|
||||
<span class="has-error right size-12" ng-if="amountForm.amount.$invalid">
|
||||
<i class="icon-close-circle size-14"></i>
|
||||
<span clas="vm" translate>Not valid</span>
|
||||
</span>
|
||||
<small class="text-primary right" ng-if="!amountForm.amount.$invalid">
|
||||
<i class="icon-checkmark-circle size-14"></i>
|
||||
</small>
|
||||
</div>
|
||||
<div ng-show="!showAlternative">
|
||||
<label for="amount">
|
||||
<span translate>Amount</span>
|
||||
</label>
|
||||
<div class="input">
|
||||
<input type="number" id="amount" name="amount" ng-attr-placeholder="{{'Amount in'|translate}} {{unitName}}" ignore-mouse-wheel
|
||||
ng-model="_customAmount" ng-minlength="0.00000001" ng-maxlength="10000000000" valid-amount required autocomplete="off">
|
||||
<input type="number" id="alternative" name="alternative" ng-model="_customAlternative" style="display:none">
|
||||
<a class="postfix button" ng-style="{'background-color':color}" ng-click="toggleAlternative()">{{unitName}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="showAlternative">
|
||||
<label for="alternative"><span translate>Amount</span> [{{ alternativeIsoCode }}]
|
||||
</label>
|
||||
<div class="input">
|
||||
<input type="number" id="alternative" name="alternative" ng-attr-placeholder="{{'Amount in'|translate}} {{alternativeName}}" ignore-mouse-wheel
|
||||
ng-model="_customAlternative" required autocomplete="off" required>
|
||||
<input type="number" id="amount" name="amount" ng-model="_customAmount" style="display:none">
|
||||
<a class="postfix button black" ng-click="toggleAlternative()"> {{ alternativeIsoCode }}</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="button black round expand" ng-disabled="amountForm.$invalid" ng-style="{'background-color':color}" translate>
|
||||
Generate QR Code
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view-modal>
|
||||
63
www/views/modals/glidera-tx-details.html
Normal file
63
www/views/modals/glidera-tx-details.html
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
<ion-modal-view ng-controller="glideraTxDetailsController">
|
||||
<ion-header-bar class="bar-royal">
|
||||
<button class="button button-back button-clear"
|
||||
ng-click="cancel()">
|
||||
Close
|
||||
</button>
|
||||
<h1 class="title">Details</h1>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content>
|
||||
<div class="text-center">
|
||||
<div class="p20">
|
||||
<img src="img/bought.svg" alt="bought" width="80" ng-show="tx.type == 'BUY' && tx.status == 'COMPLETE'">
|
||||
<img src="img/bought-pending.svg" alt="bought" width="65" ng-show="tx.type == 'BUY' && tx.status == 'PROCESSING'">
|
||||
<img src="img/sold.svg" alt="bought" width="80" ng-show="tx.type == 'SELL' && tx.status == 'COMPLETE'">
|
||||
<img src="img/sold-pending.svg" alt="bought" width="65" ng-show="tx.type == 'SELL' && tx.status == 'PROCESSING'">
|
||||
</div>
|
||||
<span ng-show="tx.type == 'BUY'">Bought</span>
|
||||
<span ng-show="tx.type == 'SELL'">Sold</span>
|
||||
<b>{{tx.qty}}</b> BTC
|
||||
<div class="size-36 m20v">
|
||||
{{tx.subtotal|currency:'':2}} {{tx.currency}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="list">
|
||||
|
||||
<li class="item">
|
||||
Status
|
||||
<span class="item-note">
|
||||
<span class="text-success" ng-if="tx.status == 'COMPLETE'">Completed</span>
|
||||
<span class="text-info" ng-if="tx.status == 'PROCESSING'">Processing</span>
|
||||
<span class="text-warning" ng-if="tx.status == 'ERROR'">Error</span>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.transactionDate" class="item">
|
||||
Date
|
||||
<span class="item-note">{{tx.transactionDate | amCalendar}}</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.price" class="item">
|
||||
Exchange rate
|
||||
<span class="item-note">{{tx.price|currency:'':2}} {{tx.currency}}/BTC</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.subtotal" class="item">
|
||||
Subtotal
|
||||
<span class="item-note">{{tx.subtotal|currency:'':2}} {{tx.currency}}</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.fees" class="item">
|
||||
Fees
|
||||
<span class="item-note">{{tx.fees|currency:'':2}} {{tx.currency}}</span>
|
||||
</li>
|
||||
|
||||
<li ng-show="tx.total" class="item">
|
||||
Total
|
||||
<span class="item-note">{{tx.total|currency:'':2}} {{tx.currency}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
57
www/views/modals/paypro.html
Normal file
57
www/views/modals/paypro.html
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<ion-modal-view ng-controller="payproController">
|
||||
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color': color}">
|
||||
<button class="button button-clear" ng-click="cancel()">
|
||||
{{'Close' | translate}}
|
||||
</button>
|
||||
<div class="title" translate>
|
||||
Payment request
|
||||
</div>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content>
|
||||
<div class="header-modal text-center size-42">
|
||||
{{amountStr}}
|
||||
</div>
|
||||
|
||||
<div class="list">
|
||||
<div class="item item-divider" translate>
|
||||
Details
|
||||
</div>
|
||||
<div class="item">
|
||||
{{'Pay To'|translate}}
|
||||
<span class="item-note">{{_paypro.domain}}</span>
|
||||
</div>
|
||||
<div class="item" ng-if="_paypro.toAddress">
|
||||
{{'Address'|translate}}
|
||||
<span class="item-note">{{_paypro.toAddress}}</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
{{'Certified by'|translate}}
|
||||
<span class="item-note">
|
||||
<span ng-show="_paypro.caTrusted">
|
||||
<i class="ion-locked" style="color:green"></i>
|
||||
{{_paypro.caName}}<br>
|
||||
<span translate>(Trusted)</span>
|
||||
</span>
|
||||
<span ng-show="!_paypro.caTrusted">
|
||||
<span ng-show="_paypro.selfSigned">
|
||||
<i class="ion-unlocked" style="color:red"></i> <span translate>Self-signed Certificate</span>
|
||||
</span>
|
||||
<span ng-show="!_paypro.selfSigned">
|
||||
<i class="ion-locked" style="color:yellow"></i>{{_paypro.caName}}<br>
|
||||
<span translate>WARNING: UNTRUSTED CERTIFICATE</span>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" ng-if="_paypro.memo">
|
||||
{{'Memo'|translate}}
|
||||
<span class="item-note wrapword">{{_paypro.memo}}</span>
|
||||
</div>
|
||||
<div class="item" ng-if="_paypro.expires">
|
||||
{{'Expires'|translate}}
|
||||
<span class="item-note">{{_paypro.expires * 1000 | amTimeAgo }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
15
www/views/modals/receive-tips.html
Normal file
15
www/views/modals/receive-tips.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<ion-modal-view ng-style="{opacity: '0.9'}" ng-controller="receiveTipsController">
|
||||
<ion-nav-bar class="bar-ligt">
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="button" ng-click="close()">
|
||||
X
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content class="has-header">
|
||||
<div class="text-center">
|
||||
<h2>Receive bitcoin by sharing your address</h2>
|
||||
<h3>Other bitcoin users can scan this code to send you money</h3>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
15
www/views/modals/scan-tips.html
Normal file
15
www/views/modals/scan-tips.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<ion-modal-view ng-style="{opacity: '0.9'}" ng-controller="scanTipsController">
|
||||
<ion-nav-bar class="bar-ligt">
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="button" ng-click="close()">
|
||||
X
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content class="has-header">
|
||||
<div class="text-center">
|
||||
<h2>Scan the code to pay with bitcoin</h2>
|
||||
<h3>QR codes could also contain a bitcoin wallet invitation, or an URL</h3>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
12
www/views/modals/scanner.html
Normal file
12
www/views/modals/scanner.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<ion-modal-view ng-controller="scannerController" ng-init="init()">
|
||||
<ion-header-bar align-title="center" class="bar-royal">
|
||||
<button ng-click="cancel()" class="button button-back button-clear" translate>
|
||||
Close
|
||||
</button>
|
||||
<h1 class="title ellipsis" translate>QR-Scanner</h1>
|
||||
</ion-header-bar>
|
||||
<ion-content >
|
||||
<canvas id="qr-canvas" width="200" height="150"></canvas>
|
||||
<video id="qrcode-scanner-video" width="300" height="225"></video>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
86
www/views/modals/search.html
Normal file
86
www/views/modals/search.html
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
<ion-modal-view>
|
||||
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color':color}">
|
||||
<button class="button button-clear" ng-click="close()">
|
||||
Close
|
||||
</button>
|
||||
<div class="title" translate>
|
||||
Search Transactions
|
||||
</div>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content ng-controller="searchController" ng-init="search = ''">
|
||||
<div class="bar bar-header item-input-inset">
|
||||
<label class="item-input-wrapper">
|
||||
<i class="icon ion-ios-search placeholder-icon"></i>
|
||||
<input type="search" ng-model="search" ng-init="search = ''" ng-change="updateSearchInput(search)"
|
||||
placeholder="{{'Search transactions' | translate}}">
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="list">
|
||||
<div class="item" ng-repeat="btx in txHistorySearchResults track by btx.txid" ng-click="openTxModal(btx)">
|
||||
|
||||
<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'">
|
||||
<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>
|
||||
</h2>
|
||||
|
||||
</div>
|
||||
<div class="text-gray text-center size-12 p10t" ng-if="txHistoryShowMore">
|
||||
<span class="size-12" translate>{{filteredTxHistory.length - txHistorySearchResults.length}} more</span>
|
||||
|
||||
<i class="icon-arrow-down4"></i>
|
||||
</div>
|
||||
<ion-infinite-scroll
|
||||
ng-if="txHistoryShowMore"
|
||||
on-infinite="moreSearchResults()"
|
||||
distance="1%">
|
||||
</ion-infinite-scroll>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
19
www/views/modals/terms.html
Normal file
19
www/views/modals/terms.html
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<ion-modal-view id="terms-of-use">
|
||||
<ion-nav-bar class="bar-ligt">
|
||||
<ion-nav-title>{{'Terms of Use' | translate}}</ion-nav-title>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button no-border" ng-click="termsModal.hide()">
|
||||
<i class="ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content class="has-header" scroll="false">
|
||||
<ion-scroll ng-include="'views/includes/terms.html'" direction="y" ng-style="{'height': '60%'}"></ion-scroll>
|
||||
<div id="agree-to-terms">
|
||||
<a ng-click="openExternalLink('https://copay.io/disclaimer')" ng-show="lang != 'en'" translate>Official English Disclaimer</a>
|
||||
<ion-checkbox ng-model="terms.accept3"></ion-checkbox>
|
||||
<p translate>I have read, understood, and agree with the Terms of use.</p>
|
||||
<button ng-disabled="!terms.accept3" class="button button-block button-positive" ng-click="termsModal.hide(); confirm()" translate>Confirm & Finish</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
178
www/views/modals/tx-details.html
Normal file
178
www/views/modals/tx-details.html
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
<ion-modal-view ng-controller="txDetailsController" ng-init="init()" id="tx-details">
|
||||
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color': color}">
|
||||
<button class="button button-clear" ng-click="cancel()">
|
||||
{{'Close' | translate}}
|
||||
</button>
|
||||
<div class="title">
|
||||
{{title}}
|
||||
</div>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content>
|
||||
<div class="header-modal text-center" ng-init="showRate = false">
|
||||
<div ng-show="btx.action != 'invalid'">
|
||||
|
||||
<i class="icon big-icon-svg">
|
||||
<img src="img/icon-wallet.svg" ng-style="{'background-color': color}" class="bg"/>
|
||||
</i>
|
||||
|
||||
<div class="size-36 m20t" copy-to-clipboard="btx.amountStr">
|
||||
{{btx.amountStr}}
|
||||
</div>
|
||||
|
||||
<div class="m10t" style="height:20px;" ng-click="showRate =! showRate">
|
||||
<span ng-show="!showRate && alternativeAmountStr">
|
||||
{{alternativeAmountStr}}
|
||||
</span>
|
||||
<span ng-show="showRate && alternativeAmountStr">
|
||||
{{rateStr}} ({{rateDate | amDateFormat:'MM/DD/YYYY HH:mm a'}})
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="btx.action == 'sent'">
|
||||
<div>
|
||||
<span translate>Sent from</span>
|
||||
<strong ng-style="{'color': color}">{{wallet.credentials.walletName}}</strong>
|
||||
</div>
|
||||
<i class="icon ion-ios-arrow-thin-down size-24"></i>
|
||||
</div>
|
||||
|
||||
<div ng-show="btx.action == 'received'">
|
||||
<div class="padding-vertical">
|
||||
<i class="icon ion-ios-arrow-thin-up size-24"></i>
|
||||
</div>
|
||||
<span translate>Received Funds</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="btx.action == 'moved'">
|
||||
<span translate>Moved Funds</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="btx.action == 'invalid'">
|
||||
-
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list">
|
||||
<div class="item item-icon-left" ng-show="btx.action == 'sent'">
|
||||
<i class="icon ion-social-bitcoin-outline"></i>
|
||||
<div ng-if="!btx.hasMultiplesOutputs && btx.addressTo && btx.addressTo != 'N/A'" copy-to-clipboard="btx.addressTo">
|
||||
<span ng-if="btx.merchant">
|
||||
<span ng-show="btx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{btx.merchant.domain}}</span>
|
||||
<span ng-show="!btx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{btx.merchant.domain}}</span>
|
||||
</span>
|
||||
<span ng-if="!btx.merchant">
|
||||
<span ng-show="btx.labelTo">{{btx.labelTo}}</span>
|
||||
<contact ng-show="!btx.labelTo" address="{{btx.addressTo}}"></contact>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item item-icon-left"
|
||||
ng-click="openExternalLink('https://' + (getShortNetworkName() == 'test' ? 'test-' : '') + 'insight.bitpay.com/tx/' + btx.txid)">
|
||||
<i class="icon ion-ios-upload-outline"></i>
|
||||
<span class="text-gray" translate>View transaction on the blockchain</span>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<div ng-if="btx.action == 'received' || btx.action == 'moved'">
|
||||
{{'Date'|translate}}
|
||||
<span class="item-note">
|
||||
<time>{{ btx.time * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
|
||||
</span>
|
||||
</div>
|
||||
<div ng-if="btx.action == 'sent'">
|
||||
{{'Created by'|translate}} <strong>{{btx.creatorName}}</strong>
|
||||
<span class="item-note">
|
||||
<time>{{ btx.createdOn * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item" ng-if="btx.action != 'received' && btx.feeLevel" copy-to-clipboard="btx.feeStr">
|
||||
{{'Fee'|translate}}: {{btx.feeStr}}
|
||||
<span class="item-note">
|
||||
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
|
||||
Unconfirmed
|
||||
</span>
|
||||
<span class="label gray radius" ng-show="btx.confirmations>0 && !btx.safeConfirmed">
|
||||
{{btx.confirmations}}
|
||||
</span>
|
||||
<span class="label gray radius" ng-show="btx.safeConfirmed">
|
||||
{{btx.safeConfirmed}}
|
||||
</span>
|
||||
<span translate>Confirmations</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item" ng-if="btx.message && btx.action != 'received'" copy-to-clipboard="btx.message">
|
||||
{{'Description'|translate}}
|
||||
<span class="item-note">
|
||||
{{btx.message}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-if="btx.merchant" class="item" copy-to-clipboard="btx.merchant.pr.pd.memo">
|
||||
{{'Merchant message'|translate}}
|
||||
<span class="item-note">
|
||||
{{btx.merchant.pr.pd.memo}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="btx.hasMultiplesOutputs" class="item" ng-click="showMultiplesOutputs = !showMultiplesOutputs">
|
||||
{{'Recipients'|translate}}
|
||||
<span class="item-note">
|
||||
{{btx.recipientCount}}
|
||||
<i ng-show="showMultiplesOutputs" class="icon-arrow-up3 size-24"></i>
|
||||
<i ng-show="!showMultiplesOutputs" class="icon-arrow-down3 size-24"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item" ng-show="btx.hasMultiplesOutputs && showMultiplesOutputs"
|
||||
ng-repeat="output in btx.outputs"
|
||||
ng-include="'views/includes/output.html'">
|
||||
</div>
|
||||
|
||||
<div ng-if="btx.action == 'invalid'" class="item">
|
||||
<span class="right" translate>
|
||||
This transaction has become invalid; possibly due to a double spend attempt.
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item" ng-click="showCommentPopup()">
|
||||
{{'Memo'|translate}}
|
||||
<span class="item-note" translate ng-if="!btx.note">
|
||||
<i class="icon ion-ios-plus-empty"></i>
|
||||
</span>
|
||||
<span class="item-note" ng-if="btx.note && btx.note.body">
|
||||
{{btx.note.body}}
|
||||
<div>
|
||||
<span translate>Edited by</span> {{btx.note.editedByName}},
|
||||
<time>{{btx.note.editedOn * 1000 | amTimeAgo}}</time>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-if="actionList[0]">
|
||||
<div class="item item-divider" translate>Timeline</div>
|
||||
<div class="item" ng-class="{'action-created' : a.type == 'created' || a.type == 'accept', 'action-rejected' : a.type == 'reject'}" ng-repeat="a in actionList track by $index">
|
||||
<div class="row">
|
||||
<div class="col col-10">
|
||||
<span id="timeline-icon">{{$index + 1}}</span>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div>{{a.description}}</div>
|
||||
<div>
|
||||
<span>{{a.by}}</span>
|
||||
<span class="item-note">
|
||||
<time>{{ a.time * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
73
www/views/modals/tx-status.html
Normal file
73
www/views/modals/tx-status.html
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<ion-modal-view id="tx-status" ng-controller="txStatusController">
|
||||
<div ng-if="type == 'broadcasted'" class="popup-txsent text-center m30tp">
|
||||
<i class="icon ion-checkmark-round"></i>
|
||||
<div ng-show="tx.amountStr" class="m20t size-36">
|
||||
{{tx.amountStr}}
|
||||
</div>
|
||||
<div class="size-24 text-gray m20v">
|
||||
<span ng-if="!fromBitPayCard" translate>Sent</span>
|
||||
<span ng-if="fromBitPayCard" translate>Funds sent</span>
|
||||
</div>
|
||||
<div class="text-center m20t" ng-if="entryExist || !fromSendTab || fromPayPro">
|
||||
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||
</div>
|
||||
<div class="collect-address" ng-if="!entryExist && fromSendTab && !fromPayPro">
|
||||
<div class="row">
|
||||
<p translate class="col">Would you like to add this address to your address book?</p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<span class="address">
|
||||
<i class="icon ion-social-bitcoin"></i>
|
||||
<contact class="enable_text_select ellipsis" address="{{tx.toAddress}}"></contact>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col col-50">
|
||||
<button class="button button-block button-stable" ng-click="cancel()">
|
||||
{{'Skip' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
<div class="col col-50">
|
||||
<button class="button button-block button-stable" ng-click="save(tx.toAddress)">
|
||||
{{'Add Address' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div ng-if="type == 'created'" class="popup-txsigned text-center m30tp">
|
||||
<i class="icon ion-checkmark-round"></i>
|
||||
<div class="text-center size-24 tu text-bold m20v">
|
||||
<span translate>Payment Proposal Created</span>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div ng-if="type == 'accepted'" class="popup-txsigned text-center m30tp">
|
||||
<i class="icon ion-checkmark-round"></i>
|
||||
<div class="text-center size-24 tu text-bold m20v">
|
||||
<span translate>Payment Accepted</span>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="type=='rejected'" class="popup-txrejected text-center m30tp">
|
||||
<i class="icon ion-close-round"></i>
|
||||
<div class="text-center size-24 tu text-bold m20v">
|
||||
<span translate>Payment Rejected</span>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="button button-positive" ng-click="cancel()" translate>OKAY</a>
|
||||
</div>
|
||||
</div>
|
||||
</ion-modal-view>
|
||||
168
www/views/modals/txp-details.html
Normal file
168
www/views/modals/txp-details.html
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
<ion-modal-view id="txp-details" ng-controller="txpDetailsController" ng-init="init()">
|
||||
<ion-header-bar align-title="center" class="bar-royal" ng-style="{'background-color': wallet.color}">
|
||||
<button class="button button-clear" ng-click="close()">
|
||||
Close
|
||||
</button>
|
||||
<div class="title" translate>
|
||||
Payment Proposal
|
||||
</div>
|
||||
<button class="button button-clear" ng-click="reject()" ng-disabled="loading" ng-if="isShared && tx.pendingForUs">
|
||||
Reject
|
||||
</button>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content ng-init="updateCopayerList()" ng-class="{'slide-to-pay': tx.pendingForUs && canSign && isCordova}">
|
||||
<div class="list">
|
||||
<div class="item head">
|
||||
<div class="sending-label">
|
||||
<i class="icon ion-arrow-up-c"></i>
|
||||
<span translate>Sending</span>
|
||||
</div>
|
||||
<div class="amount-label">
|
||||
<div class="amount">{{tx.amountStr}}</div>
|
||||
<div class="alternative" ng-show="tx.alternativeAmountStr">{{tx.alternativeAmountStr}}</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center m10t assertive" ng-if="tx.removed" translate>
|
||||
The payment was removed by creator
|
||||
</div>
|
||||
|
||||
<div class="text-center m10t" ng-show="tx.status != 'pending'">
|
||||
<div ng-show="tx.status == 'accepted' && !tx.isGlidera">
|
||||
<div class="m10b positive" translate>Payment accepted, but not yet broadcasted</div>
|
||||
|
||||
<button class="button button-positive button-block" ng-click="broadcast(tx)" ng-disabled="loading">
|
||||
<i class="icon ion-ios-cloud-upload-outline"></i>
|
||||
<span translate>Broadcast Payment</span>
|
||||
</button>
|
||||
</div>
|
||||
<div ng-show="tx.status == 'accepted' && tx.isGlidera" >
|
||||
<div class="m10h" translate>Payment accepted. It will be broadcasted by Glidera. In case there is a problem, it can be deleted 6 hours after it was created.</div>
|
||||
</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>
|
||||
</div>
|
||||
|
||||
<div class="item assertive text-center" ng-show="!currentSpendUnconfirmed && tx.hasUnconfirmedInputs" translate>
|
||||
Warning: this transaction has unconfirmed inputs
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<div class="item">
|
||||
<span translate>To</span>
|
||||
<span class="payment-proposal-to" copy-to-clipboard="tx.toAddress">
|
||||
<i class="icon ion-social-bitcoin"></i>
|
||||
<contact ng-if="!tx.hasMultiplesOutputs" class="ellipsis" address="{{tx.toAddress}}"></contact>
|
||||
<span ng-if="tx.hasMultiplesOutputs" translate>Multiple recipients</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="tx.hasMultiplesOutputs" class="item" ng-click="showMultiplesOutputs = !showMultiplesOutputs">
|
||||
<span class="text-gray" translate>Recipients</span>
|
||||
<span class="right">{{tx.recipientCount}}
|
||||
<i ng-show="showMultiplesOutputs" class="icon ion-ios-arrow-up"></i>
|
||||
<i ng-show="!showMultiplesOutputs" class="icon ion-ios-arrow-up"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item" ng-show="tx.hasMultiplesOutputs && showMultiplesOutputs"
|
||||
ng-repeat="output in tx.outputs" ng-include="'views/includes/output.html'">
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
{{'From'|translate}}
|
||||
<span class="item-note">
|
||||
<i class="icon big-icon-svg right">
|
||||
<img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}" class="bg"/>
|
||||
</i>
|
||||
<div class="m10t m55r">{{wallet.name}}</div>
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
{{'Created by'|translate}}
|
||||
<span class="item-note">
|
||||
{{tx.creatorName}} <time>{{ (tx.ts || tx.createdOn ) * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" ng-show="tx.message">
|
||||
{{'Memo'|translate}}
|
||||
<span class="item-note">
|
||||
{{tx.message}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
{{'Fee'|translate}}
|
||||
<span class="item-note">
|
||||
{{tx.feeStr}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-if="tx.paypro">
|
||||
<div class="item item-divider" translate>Payment details</div>
|
||||
<div class="item">
|
||||
{{'To'|translate}}
|
||||
<span class="item-note">
|
||||
<span>
|
||||
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock"></i> {{tx.paypro.domain}}</span>
|
||||
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock"></i> {{tx.paypro.domain}}</span>
|
||||
</span>
|
||||
<contact address="{{tx.toAddress}}" ng-hide="tx.merchant"></contact>
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" ng-if="paymentExpired">
|
||||
{{'Expired'|translate}}
|
||||
<span class="item-note">
|
||||
<time>{{tx.paypro.expires * 1000 | amTimeAgo }}</time>
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" ng-if="!paymentExpired">
|
||||
{{'Expires'|translate}}
|
||||
<span class="item-note">
|
||||
<time>{{expires}}</time>
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
{{'Merchant Message'|translate}}
|
||||
<span class="item-note">{{tx.paypro.pr.pd.memo}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-if="actionList[0]">
|
||||
<div class="item item-divider" translate>Timeline</div>
|
||||
|
||||
<div class="item" ng-class="{'action-created' : a.type == 'created' || a.type == 'accept', 'action-rejected' : a.type == 'reject'}" ng-repeat="a in actionList track by $index">
|
||||
<div class="row">
|
||||
<div class="col col-10">
|
||||
<span id="timeline-icon">{{$index + 1}}</span>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div>{{a.description}}</div>
|
||||
<div>
|
||||
<span>{{a.by}}</span>
|
||||
<span class="item-note">
|
||||
<time>{{ a.time * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button class="button button-block button-positive"
|
||||
ng-click="sign()"
|
||||
ng-if="tx.pendingForUs && canSign && !loading && !paymentExpired && !isCordova" translate>
|
||||
Click to accept
|
||||
</button>
|
||||
<div class="m30t text-center" ng-if="tx.canBeRemoved || (tx.status == 'accepted' && !tx.broadcastedOn)">
|
||||
<div class="size-12 padding" 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.
|
||||
</div>
|
||||
<button class="button button-assertive button-clear" ng-click="remove()" ng-disabled="loading">
|
||||
<i class="fi-trash size-14 m5r"></i>
|
||||
<span translate>Delete Payment Proposal</span>
|
||||
</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
<accept class="accept-slide" ng-if="tx.pendingForUs && canSign && !loading && !paymentExpired && isCordova"></accept>
|
||||
</ion-modal-view>
|
||||
57
www/views/modals/wallets.html
Normal file
57
www/views/modals/wallets.html
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<ion-modal-view ng-controller="walletsController">
|
||||
<ion-header-bar align-title="center" class="tab-bar">
|
||||
<div class="left-small">
|
||||
<a ng-click="cancel()" class="p10">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</div>
|
||||
<h1 class="title ellipsis">
|
||||
<span ng-show="type == 'BUY' || type == 'RECEIVE'" translate>Choose your destination wallet</span>
|
||||
<span ng-show="type == 'SELL' || type == 'SEND'" translate>Choose your source wallet</span>
|
||||
</h1>
|
||||
</ion-header-bar>
|
||||
|
||||
<ion-content ng-style="{'background-color': '#F6F7F9'}">
|
||||
|
||||
<div>
|
||||
<div class="box-notification text-center size-12 text-warning m10t" ng-show="error">
|
||||
<i class="fi-error"></i> {{error}}
|
||||
</div>
|
||||
<div ng-show="type == 'SELL'">
|
||||
<h4 class="title m0 oh">
|
||||
<div class="left">
|
||||
<i class="fi-info size-18 m10r"></i>
|
||||
</div>
|
||||
<div class="size-10 m5t" translate>
|
||||
Notice: only 1-1 (single signature) wallets can be used for sell bitcoin
|
||||
</div>
|
||||
</h4>
|
||||
</div>
|
||||
<div ng-show="type != 'SELL'">
|
||||
<h4 class="title m0 oh">
|
||||
</h4>
|
||||
</div>
|
||||
<ul class="no-bullet">
|
||||
<li class="line-b" ng-repeat="w in wallets">
|
||||
<a ng-click="selectWallet(w.id)" class="db oh">
|
||||
<div class="avatar-wallet"
|
||||
ng-style="{'background-color':w.color}">
|
||||
<i class="icon-wallet size-21"></i>
|
||||
</div>
|
||||
<div class="ellipsis name-wallet text-bold">
|
||||
{{w.name || w.id}}
|
||||
<span class="has-error right text-light size-12" ng-show="errorSelectedWallet[w.id]">
|
||||
<i class="icon-close-circle size-14"></i>
|
||||
<span class="vm">{{errorSelectedWallet[w.id]}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="size-12">{{w.m}} of {{w.n}}
|
||||
<span ng-show="w.network=='testnet'">[Testnet]</span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-modal-view>
|
||||
29
www/views/onboarding/backupRequest.html
Normal file
29
www/views/onboarding/backupRequest.html
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<ion-view id="onboarding-backup-request" class="onboarding">
|
||||
<ion-content ng-controller="backupRequestController" scroll="false">
|
||||
<div class="row">
|
||||
<img src="img/onboarding-warning.svg" class="col col-75 warning">
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<h3 translate class="col-75 col">
|
||||
No backup, no bitcoin.
|
||||
</h3>
|
||||
</div>
|
||||
<div class="row">
|
||||
<p class="col col-60 text-center">
|
||||
Since only you control your money, you’ll need save your backup phrase in case this app is deleted.
|
||||
</p>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<i class="ion-ios-arrow-thin-down light-blue col col-60" id="arrow-down"></i>
|
||||
</div>
|
||||
<div class="cta-buttons">
|
||||
<div class="row">
|
||||
<button class="button button-block button-positive col-75 col" href
|
||||
ui-sref="onboarding.backupWarning({from: 'onboarding.backupRequest', walletId: walletId})" translate>Backup wallet</button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button class="button button-block button-transparent col-75 col" ng-click="openPopup()" translate>I'll backup my wallet later</button>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
51
www/views/onboarding/collectEmail.html
Normal file
51
www/views/onboarding/collectEmail.html
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<ion-view ng-controller="collectEmailController" id="onboarding-collect-email" class="onboarding">
|
||||
<ion-content>
|
||||
<div class="row">
|
||||
<img src="img/onboarding-success.svg" class="col col-75" id="success-image" />
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<h3 translate class="col">Wallet Created</h3>
|
||||
</div>
|
||||
<div id="collect-email">
|
||||
<div ng-if="!confirmation">
|
||||
<div class="row text-center">
|
||||
<p translate class="col col-75">Where would you like to receive email notifications about payments?</p>
|
||||
</div>
|
||||
<form name="emailForm" ng-submit="confirm(emailForm)" novalidate>
|
||||
<label class="item item-input col col-75">
|
||||
<i class="icon ion-arrow-right-c"></i>
|
||||
<input type="email" id="email" name="email" ng-model="email" placeholder="satoshi@example.com" required></input>
|
||||
</label>
|
||||
</form>
|
||||
<ion-list id="news-updates" class="row">
|
||||
<ion-checkbox ng-model="data.accept" class="col col-80"><span translate>Get news and updates from Bitpay</span></ion-checkbox>
|
||||
</ion-list>
|
||||
</div>
|
||||
<div ng-if="confirmation">
|
||||
<div class="row text-center">
|
||||
<p translate class="col col-75">Is this email address correct?</p>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p class="col col-75">{{email}}</p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col col-50">
|
||||
<button class="button button-block button-stable" ng-click="cancel()">
|
||||
{{'No' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
<div class="col col-50">
|
||||
<button class="button button-block button-stable" ng-click="save()">
|
||||
{{'Yes' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="overlay collect-overlay">
|
||||
<button class="button button-stable button-clear" ng-click="goNextView()">
|
||||
{{'Skip' | translate}}
|
||||
</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
31
www/views/onboarding/disclaimer.html
Normal file
31
www/views/onboarding/disclaimer.html
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<ion-view id="onboarding-disclaimer" class="onboarding" ng-controller="disclaimerController" ng-init=init()>
|
||||
<ion-nav-bar class="bar-stable" ng-if="backedUp == 'false'">
|
||||
<ion-nav-title></ion-nav-title>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button button-clear" ng-click="goBack()">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content scroll="false" ng-class="{'has-header': backedUp == 'false'}">
|
||||
<div class="row text-center">
|
||||
<h3 translate class="col-75 col">Almost done! Let's review</h3>
|
||||
</div>
|
||||
<div class="row text-center tag">
|
||||
<p translate class="col col-75">
|
||||
Bitcoin is different - it cannot be safely held with a bank or web service
|
||||
</p>
|
||||
</div>
|
||||
<ion-list>
|
||||
<ion-checkbox ng-model="accept1"><span translate>I understand my funds are held securely on this device, not by a company.</span></ion-checkbox>
|
||||
<ion-checkbox ng-model="accept2"><span translate>I understand if this app moved to another device or deleted, my bitcoin can only be recovered with the backup phrase</span></ion-checkbox>
|
||||
</ion-list>
|
||||
<div id="agree-to-terms" ng-if="accept1 && accept2" ng-class="{'header-present': backedUp == 'false'}">
|
||||
<div id="agree-to-terms-content" class="center-block">
|
||||
<ion-checkbox ng-model="terms.accept3"></ion-checkbox>
|
||||
<p translate>I have read, understood, and agree with the <a ng-click="openTermsModal()" translate>Terms of use</a>.</p>
|
||||
<button ng-disabled="!accept1 || !accept2 || !terms.accept3" class="button button-block button-positive" ng-click="confirm()" translate>Confirm & Finish</button>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
21
www/views/onboarding/notifications.html
Normal file
21
www/views/onboarding/notifications.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<ion-view class="onboarding" id="onboarding-push-notifications">
|
||||
<ion-content ng-controller="notificationsController">
|
||||
<div class="text-center row">
|
||||
<h2 translate class="col col-80">
|
||||
Push Notifications
|
||||
</h2>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p class="col col-75 tagline" translate>
|
||||
Would you like to receive push notifications about payments?
|
||||
</p>
|
||||
</div>
|
||||
<div id="cta">
|
||||
</div>
|
||||
<div class="cta-buttons">
|
||||
<button class="button button-block button-primary col col-75" ng-click="allowNotif()" translate>Allow notifications</button>
|
||||
<button class="button button-block button-translucent col col-75" href ui-sref="onboarding.backupRequest({walletId: walletId})" translate>Not now</button>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
89
www/views/onboarding/tour.html
Normal file
89
www/views/onboarding/tour.html
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
<ion-view ng-controller="tourController" ng-init="init()" class="onboarding" id="onboard-tour">
|
||||
<ion-nav-bar class="bar-stable">
|
||||
<ion-nav-title></ion-nav-title>
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button button-clear" ng-click="goBack()">
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="button back-button button-clear" ng-show="data.index == 0" ng-click="createDefaultWallet()">
|
||||
{{'Skip' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-slides class="slides" options="options" slider="data.slider">
|
||||
<ion-slide-page>
|
||||
<ion-content id="onboard-tour-secure" scroll="false">
|
||||
<div class="text-center row">
|
||||
<h2 class="col col-60" translate>Bitcoin is secure, digital money</h2>
|
||||
</div>
|
||||
<div class="text-center row">
|
||||
<p translate class="col col-75 tagline">
|
||||
You can spend bitcoin at millions of websites and stores worldwide
|
||||
</p>
|
||||
</div>
|
||||
<div id="cta">
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p translate class="col">
|
||||
Just scan the code to pay
|
||||
</p>
|
||||
</div>
|
||||
<div class="row cta-button">
|
||||
<button class="button button-positive col col-75 next-slide button-translucent" ng-click="slideNext()">
|
||||
Got it <i class="icon ion-ios-arrow-thin-right"></i>
|
||||
</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-slide-page>
|
||||
<ion-slide-page>
|
||||
<ion-content id="onboard-tour-currency" scroll="false">
|
||||
<div class="text-center row">
|
||||
<h2 class="col col-75" translate>Bitcoin is a currency</h2>
|
||||
</div>
|
||||
<div class="text-center row">
|
||||
<p translate class="col col-75 tagline">
|
||||
You can trade it for other currencies like US Dollars, Euros, or Pounds
|
||||
</p>
|
||||
</div>
|
||||
<div id="cta">
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p translate class="col">
|
||||
The exchange rate changes with the market
|
||||
</p>
|
||||
</div>
|
||||
<div class="row cta-button">
|
||||
<button class="button button-positive col col-75 next-slide button-translucent" ng-click="slideNext()">
|
||||
Makes sense <i class="icon ion-ios-arrow-thin-right"></i>
|
||||
</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-slide-page>
|
||||
<ion-slide-page>
|
||||
<ion-content id="onboard-tour-control" scroll="false">
|
||||
<div class="text-center row">
|
||||
<h2 translate class="col col-80">You control your bitcoin</h2>
|
||||
</div>
|
||||
<div class="text-center row">
|
||||
<p translate class="col col-75 tagline">
|
||||
The BitPay wallet stores your bitcoin with cutting-edge security
|
||||
</p>
|
||||
</div>
|
||||
<div id="cta">
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p translate class="col">
|
||||
Not even BitPay can access it
|
||||
</p>
|
||||
</div>
|
||||
<div class="row cta-button">
|
||||
<button class="button button-positive col col-75 get-started" ng-click="createDefaultWallet()">
|
||||
Create bitcoin wallet
|
||||
</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-slide-page>
|
||||
</ion-slides>
|
||||
</ion-view>
|
||||
23
www/views/onboarding/welcome.html
Normal file
23
www/views/onboarding/welcome.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<ion-view id="onboard-welcome" class="onboarding">
|
||||
<ion-content ng-controller="welcomeController" ng-init="createProfile()" scroll="false">
|
||||
<!-- <qr-scanner id="shopping-24" on-scan="goImport(data)"></qr-scanner> -->
|
||||
<article id="logo-tagline">
|
||||
<div class="row text-center">
|
||||
<img src='img/bitpay-logo.svg' class="logo col col-50" />
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<p translate class="text-center col col-60">
|
||||
Take control of your money, <br /> get started with bitcoin.
|
||||
</p>
|
||||
</div>
|
||||
</article>
|
||||
<article id="cta-buttons">
|
||||
<div class="row">
|
||||
<button class="button button-block get-started col col-75" href ui-sref="onboarding.tour" translate>Get started</button>
|
||||
</div>
|
||||
<div class="row">
|
||||
<button class="button button-block restore col col-75" translate href ui-sref="onboarding.import({'fromOnboarding':true})">Restore</button>
|
||||
</div>
|
||||
</article>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
99
www/views/paperWallet.html
Normal file
99
www/views/paperWallet.html
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Sweep paper wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
<div class="row" ng-show="needsBackup">
|
||||
<div class="columns">
|
||||
<h4></h4>
|
||||
<div class="size-14 text-warning m20b">
|
||||
<i class="fi-alert size-12"></i>
|
||||
<span class="text-warning" translate>Backup Needed</span>.
|
||||
<span translate>
|
||||
Before receiving funds, you must backup your wallet. If this device is lost, it is impossible to access your funds without a backup.
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-center m20t">
|
||||
<a class="button outline round dark-gray" href ui-sref="tabs.preferences.preferencesAdvanced">
|
||||
<span translate>Preferences</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="!needsBackup">
|
||||
<h4 ng-show="!error"></h4>
|
||||
<div class="box-notification m20b" ng-show="error">
|
||||
<span class="text-warning">{{error|translate}}</span>
|
||||
</div>
|
||||
|
||||
<form ng-show="!balance" ng-submit="scanFunds()" novalidate>
|
||||
<div class="list card">
|
||||
<div class="row">
|
||||
<div class="col col-90">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Paper Wallet Private Key</span>
|
||||
<input type="text" placeholder="{{'Paste your paper wallet private key here'|translate}}" ng-model="formData.inputData" id="inputData" ng-change="onData(formData.inputData)">
|
||||
</label>
|
||||
</div>
|
||||
<div class="col text-center">
|
||||
<qr-scanner class="qr-icon size-24" on-scan="onQrCodeScanned(data)"></qr-scanner>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" ng-show="isPkEncrypted">
|
||||
<div class="col">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="text" name="passphrase" placeholder="{{'Passphrase'|translate}}" ng-model="passphrase">
|
||||
</label>
|
||||
<p ng-show="isCordova" class="card size-12 text-gray" translate>
|
||||
Decrypting a paper wallet could take around 5 minutes on this device. please be patient and keep the app open.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit"
|
||||
ng-disabled="scanning || !scannedKey"
|
||||
class="button button-block button-positive"
|
||||
ng-style="{'background-color': wallet.color}"
|
||||
translate>Scan Wallet Funds
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<div class="row">
|
||||
<div class="col text-center">
|
||||
<div ng-show="scanned">
|
||||
<h4 class="text-bold" translate>Funds found</h4>
|
||||
<div class="size-24">{{balance}}</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
ng-show="balanceSat > 0"
|
||||
ng-disabled="sending"
|
||||
class="button button-block button-positive"
|
||||
ng-style="{'background-color': wallet.color}"
|
||||
ng-click="sweepWallet()"
|
||||
translate>Sweep Wallet
|
||||
</button>
|
||||
|
||||
<button
|
||||
ng-show="balanceSat <= 0 && scanned"
|
||||
class="button button-block button-positive"
|
||||
ng-style="{'background-color': wallet.color}"
|
||||
ng-click="init()"
|
||||
translate>Scan Again
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center size-12 text-gray">
|
||||
<span translate>Funds will be transferred to</span>:
|
||||
<b>{{walletAlias || walletName}}</b>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
48
www/views/paymentUri.html
Normal file
48
www/views/paymentUri.html
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<div
|
||||
class="topbar-container"
|
||||
ng-include="'views/includes/topbar.html'"
|
||||
ng-init="titleSection='Choose wallet'; closeToHome = true">
|
||||
</div>
|
||||
|
||||
<div class="content p20v row payment-uri" ng-controller="paymentUriController as payment">
|
||||
<div class="large-12 columns" ng-init="payment.init()">
|
||||
<div class="panel text-center" ng-if="!payment.uri">
|
||||
<h1 translate>Bitcoin URI is NOT valid!</h1>
|
||||
</div>
|
||||
<div ng-if="payment.uri" ng-init="payment.getWallets(payment.uri.network)">
|
||||
<h1 translate>Make a payment to</h1>
|
||||
<div class="panel size-14">
|
||||
<div class="ellipsis"><b translate>Address</b>: {{payment.uri.address.toString()}}</div>
|
||||
<div ng-show="payment.uri.amount"><b translate>Amount</b>: {{payment.uri.amount}}</div>
|
||||
<div ng-show="payment.uri.message"><b translate>Message</b>: {{payment.uri.message}}</div>
|
||||
<div ng-show="payment.uri.network == 'testnet'"><b translate>Network</b>: {{payment.uri.network}}</div>
|
||||
</div>
|
||||
<div ng-if="!wallets || !wallets.length">
|
||||
<div class="box-notification">
|
||||
<span class="text-warning">
|
||||
<b translate>There are no wallets to make this payment</b>
|
||||
<span ng-show="payment.uri.network == 'testnet'">[testnet]</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="wallets.length">
|
||||
<h2 translate>Select a wallet</h2>
|
||||
<ul class="no-bullet">
|
||||
<li class="panel" ng-repeat="w in wallets">
|
||||
<a ng-click="payment.selectWallet(w.id)">
|
||||
<div class="avatar-wallet"
|
||||
ng-style="{'background-color':w.color}">
|
||||
<i class="icon-wallet size-21"></i>
|
||||
</div>
|
||||
<div class="ellipsis">{{w.name || w.id}}</div>
|
||||
<div class="size-12">{{w.m}} of {{w.n}}
|
||||
<span ng-show="w.network=='testnet'">[Testnet]</span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
68
www/views/preferences.html
Normal file
68
www/views/preferences.html
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
<ion-view class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Wallet Preferences'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="list">
|
||||
<div class="item item-divider"></div>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesAlias">
|
||||
<span translate>Name</span>
|
||||
<span class="item-note">
|
||||
{{wallet.name}}
|
||||
</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item" ng-show="wallet.isPrivKeyExternal()">
|
||||
<span translate>Hardware Wallet</span>
|
||||
<span class="item-note">
|
||||
{{externalSource}}
|
||||
</span>
|
||||
</div>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesColor">
|
||||
<span translate>Color</span>
|
||||
<span class="item-note" ng-style="{'color': wallet.color}">
|
||||
█
|
||||
</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesEmail">
|
||||
<span translate>Email Notifications</span>
|
||||
<span class="item-note">
|
||||
<span ng-if="!wallet.email" translate>Disabled</span>
|
||||
<span ng-if="wallet.email">{{wallet.email}}</span>
|
||||
</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<div class="item item-divider" translate>
|
||||
Security
|
||||
</div>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.backupWarning({from: 'tabs.preferences'})" ng-hide="wallet.isPrivKeyExternal()">
|
||||
<span translate>Backup</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<div ng-show="wallet.canSign()">
|
||||
<ion-toggle ng-model="encryptEnabled.value" toggle-class="toggle-balanced" ng-change="encryptChange()">
|
||||
<span class="toggle-label" translate>Request Spending Password</span>
|
||||
</ion-toggle>
|
||||
</div>
|
||||
<div ng-show="wallet.canSign() && touchIdAvailable">
|
||||
<ion-toggle ng-model="touchIdEnabled.value" toggle-class="toggle-balanced" ng-change="touchIdChange()">
|
||||
<span class="toggle-label" translate>Request Fingerprint</span>
|
||||
</ion-toggle>
|
||||
</div>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.deleteWords" ng-show ="!deleted">
|
||||
<span translate>Delete recovery phrase</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<div class="item item-divider"></div>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesAdvanced">
|
||||
<span translate>Advanced</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
45
www/views/preferencesAbout.html
Normal file
45
www/views/preferencesAbout.html
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{title}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="list">
|
||||
<div class="item item-divider" translate>
|
||||
Release information
|
||||
</div>
|
||||
<div class="item item-icon-left">
|
||||
<i class="icon ion-ios-download-outline"></i>
|
||||
<span translate>Version</span>
|
||||
<span class="item-note">
|
||||
v{{version}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item item-icon-left" ng-click="openExternalLink('https://github.com/bitpay/'+name+'/tree/'+commitHash)">
|
||||
<i class="icon ion-social-github-outline"></i>
|
||||
<span translate>Commit hash</span>
|
||||
<span class="item-note">
|
||||
#{{commitHash}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item item-divider">
|
||||
</div>
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.about.termsOfUse">
|
||||
<i class="icon ion-ios-list-outline"></i>
|
||||
<span translate>Terms of Use</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.about.translators">
|
||||
<i class="icon ion-ios-people-outline"></i>
|
||||
<span translate>Translators</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-left item-icon-right" ui-sref="tabs.about.logs">
|
||||
<i class="icon ion-ios-copy-outline"></i>
|
||||
<span translate>Session log</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
37
www/views/preferencesAdvanced.html
Normal file
37
www/views/preferencesAdvanced.html
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<ion-view class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Advanced Preferences' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="list">
|
||||
<div class="item item-divider">
|
||||
</div>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.information">
|
||||
<span translate>Wallet Information</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ng-show="network == 'livenet'" ui-sref="tabs.preferences.paperWallet">
|
||||
<span translate>Sweep paper wallet</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.export">
|
||||
<span translate>Export Wallet</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesBwsUrl">
|
||||
<span translate>Wallet Service URL</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesHistory">
|
||||
<span translate>Transaction History</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
<a class="item item-icon-right" ui-sref="tabs.preferences.delete">
|
||||
<span translate>Delete Wallet</span>
|
||||
<i class="icon bp-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
25
www/views/preferencesAlias.html
Normal file
25
www/views/preferencesAlias.html
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Alias'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<form name="aliasForm" ng-submit="save(aliasForm)" novalidate>
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" transalate>Alias for {{walletName}}</span>
|
||||
<input type="text" id="alias" name="alias" ng-model="alias.value" placeholder="John" required>
|
||||
</label>
|
||||
</div>
|
||||
<button type="submit"
|
||||
class="button button-block button-positive"
|
||||
ng-disabled="aliasForm.$invalid" translate>
|
||||
Save
|
||||
</button>
|
||||
</form>
|
||||
<div class="text-center" translate>Changing wallet alias only affects the local wallet name.</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
19
www/views/preferencesAltCurrency.html
Normal file
19
www/views/preferencesAltCurrency.html
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<ion-view class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Alternative Currency'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<ion-radio ng-repeat="altCurrency in altCurrencyList" ng-value="altCurrency.isoCode" ng-model="currentCurrency"
|
||||
ng-click="save(altCurrency)">{{altCurrency.name}}
|
||||
</ion-radio>
|
||||
<ion-infinite-scroll
|
||||
ng-if="!listComplete"
|
||||
on-infinite="loadMore()"
|
||||
distance="1%">
|
||||
</ion-infinite-scroll>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
15
www/views/preferencesBitpayCard.html
Normal file
15
www/views/preferencesBitpayCard.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Preferences</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="preferencesBitpayCardController">
|
||||
<ul class="list">
|
||||
<li class="item assertive" ng-click="logout()">
|
||||
Log out
|
||||
</li>
|
||||
</ul>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
20
www/views/preferencesBwsUrl.html
Normal file
20
www/views/preferencesBwsUrl.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>Wallet Service URL</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label no-border">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" id="bwsurl" type="text" name="bwsurl" ng-model="bwsurl.value">
|
||||
<a class="postfix" on-tap="resetDefaultUrl()">
|
||||
<i class="icon ion-ios-reload"></i>
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
<button class="button button-block button-positive" ng-click="save()" translate>Save</button>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
60
www/views/preferencesCoinbase.html
Normal file
60
www/views/preferencesCoinbase.html
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
<div
|
||||
class="topbar-container"
|
||||
ng-include="'views/includes/topbar.html'"
|
||||
ng-init="titleSection='Preferences'; goBackToState = 'coinbase'; noColor = true">
|
||||
</div>
|
||||
|
||||
<div class="content coinbase-preferences" ng-controller="preferencesCoinbaseController as coinbase">
|
||||
|
||||
<ul ng-if="index.coinbaseAccount && !index.coinbaseError" class="no-bullet m0">
|
||||
<h4 class="title m0">Account</h4>
|
||||
<li>
|
||||
<span>ID</span>
|
||||
<span class="right text-gray enable_text_select">
|
||||
{{index.coinbaseAccount.id}}
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>Name</span>
|
||||
<span class="right text-gray">
|
||||
{{index.coinbaseAccount.name}}
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>Balance</span>
|
||||
<span class="right text-gray">
|
||||
{{index.coinbaseAccount.balance.amount}} {{index.coinbaseAccount.balance.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>Native Balance</span>
|
||||
<span class="right text-gray">
|
||||
{{index.coinbaseAccount.native_balance.amount}} {{index.coinbaseAccount.native_balance.currency}}
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<h4 class="title m0">User Information</h4>
|
||||
<li>
|
||||
<span>ID</span>
|
||||
<span class="right text-gray enable_text_select">
|
||||
{{index.coinbaseUser.id}}
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>Email</span>
|
||||
<span class="right text-gray">
|
||||
{{index.coinbaseUser.email}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="no-bullet m0">
|
||||
<h4></h4>
|
||||
<li ng-click="coinbase.revokeToken(index.coinbaseTestnet)">
|
||||
<i class="icon-arrow-right3 size-24 right text-gray"></i>
|
||||
<span class="text-warning">Log out</span>
|
||||
</li>
|
||||
</ul>
|
||||
<h4></h4>
|
||||
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
15
www/views/preferencesColor.html
Normal file
15
www/views/preferencesColor.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Color'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<ion-radio ng-repeat="c in colorList" ng-value="c" ng-model="currentColor" ng-click="save(c.color)">
|
||||
<span ng-style="{'color': c.color}">█</span>
|
||||
<span> {{c.name}}</span>
|
||||
</ion-radio>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
21
www/views/preferencesDeleteWallet.html
Normal file
21
www/views/preferencesDeleteWallet.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Delete Wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="padding">
|
||||
<h1 class="text-center assertive" translate>Warning!</h2>
|
||||
<div class="padding text-center">
|
||||
<p translate>
|
||||
Permanently delete this wallet.
|
||||
</p>
|
||||
<p translate>
|
||||
THIS ACTION CANNOT BE REVERSED
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<button class="button button-block button-assertive" ng-click="showDeletePopup()"translate>Delete <span ng-show="alias">{{alias}}</span>{{walletName}}</button>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
25
www/views/preferencesDeleteWords.html
Normal file
25
www/views/preferencesDeleteWords.html
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Delete recovery phrase'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div ng-show="!deleted">
|
||||
<div ng-show="error">
|
||||
{{error|translate}}
|
||||
</div>
|
||||
<div translate>Warning!</div>
|
||||
<div ng-show="!needsBackup" translate>Once you have copied your wallet recovery phrase down, it is recommended to delete it from this device.</div>
|
||||
<div ng-show="needsBackup" translate>Need to do backup</div>
|
||||
<div ng-show="!needsBackup">
|
||||
<button class="button button-block button-stable" ng-click="delete()" translate>Delete Recovery Phrase</button>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="deleted" translate>
|
||||
Wallet recovery phrase not available. You can still export it from Advanced > Export.
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
26
www/views/preferencesEmail.html
Normal file
26
www/views/preferencesEmail.html
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Email Notifications'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<form name="emailForm" ng-submit="save(emailForm)" novalidate>
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" transalate>Email for wallet notifications</span>
|
||||
<input type="email" id="email" name="email" ng-model="email.value" required></input>
|
||||
</label>
|
||||
</div>
|
||||
<button type="submit"
|
||||
class="button button-block button-positive"
|
||||
ng-disabled="emailForm.$invalid" translate>
|
||||
Save
|
||||
</button>
|
||||
</form>
|
||||
<div class="text-center" translate>Setting up email notifications could weaken your privacy, if the wallet service provider is compromised. Information available to an attacker would include your wallet addresses and its balance, but no more.
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
24
www/views/preferencesFee.html
Normal file
24
www/views/preferencesFee.html
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<ion-view class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Bitcoin Network Fee Policy'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
<ion-radio ng-repeat="fee in feeLevels.livenet" ng-value="fee.level" ng-model="currentFeeLevel" ng-click="save(fee)">
|
||||
{{feeOpts[fee.level]|translate}}
|
||||
</ion-radio>
|
||||
<div class="padding text-center positive" ng-repeat="fee in feeLevels.livenet" ng-if="fee.level == currentFeeLevel">
|
||||
<div ng-show="fee.nbBlocks">
|
||||
<span translate>Average confirmation time: {{fee.nbBlocks * 10}} minutes</span>.
|
||||
</div>
|
||||
<span translate>Current fee rate for this policy: {{fee.feePerKBUnit}}/kiB</span>
|
||||
</div>
|
||||
<div class="padding" translate>
|
||||
Bitcoin transactions may include a fee collected by miners on the network. The higher the fee, the greater the incentive a miner has to include that transaction in a block. Current fees are determined based on network load and the selected policy.
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
270
www/views/preferencesGlidera.html
Normal file
270
www/views/preferencesGlidera.html
Normal file
|
|
@ -0,0 +1,270 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Preferences</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<ul class="list">
|
||||
<div ng-if="token">
|
||||
<div class="item item-divider">
|
||||
Permissions
|
||||
</div>
|
||||
<li class="item">
|
||||
<span>Email</span>
|
||||
<span class="item-note">
|
||||
{{permissions.view_email_address}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Personal Information</span>
|
||||
<span class="item-note">
|
||||
{{permissions.personal_info}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Buy/Sell</span>
|
||||
<span class="item-note">
|
||||
{{permissions.transact}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Transaction History</span>
|
||||
<span class="item-note">
|
||||
{{permissions.transaction_history}}
|
||||
</span>
|
||||
</li>
|
||||
</div>
|
||||
|
||||
<div ng-if="permissions.view_email_address">
|
||||
<div class="item item-divider">
|
||||
Email
|
||||
</div>
|
||||
<li class="item">
|
||||
<span>Email</span>
|
||||
<span class="item-note">
|
||||
{{email.email}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Active</span>
|
||||
<span class="item-note">
|
||||
{{email.userEmailIsSetup}}
|
||||
</span>
|
||||
</li>
|
||||
</div>
|
||||
|
||||
<div ng-if="permissions.personal_info">
|
||||
<div class="item item-divider">
|
||||
Personal Information
|
||||
</div>
|
||||
|
||||
<li class="item">
|
||||
<span>First Name</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.firstName}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Middle Name</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.middleName}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Last Name</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.lastName}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Birth Date</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.birthDate}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Address 1</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.address1}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Address 2</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.address2}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>City</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.city}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>State</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.state}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>ZIP Code</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.zipCode}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Country</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.countryCode}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Occupation</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.occupation}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Basic Information State</span>
|
||||
<span class="item-note">
|
||||
{{personalInfo.basicInfoState}}
|
||||
</span>
|
||||
</li>
|
||||
</div>
|
||||
|
||||
<div ng-if="token">
|
||||
<div class="item item-divider">
|
||||
Status
|
||||
</div>
|
||||
|
||||
<li class="item">
|
||||
<span>Buy/Sell</span>
|
||||
<span class="item-note">
|
||||
{{status.userCanTransact}}
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<li class="item">
|
||||
<span>Buy</span>
|
||||
<span class="item-note">
|
||||
{{status.userCanBuy}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Sell</span>
|
||||
<span class="item-note">
|
||||
{{status.userCanSell}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Email Is Setup</span>
|
||||
<span class="item-note">
|
||||
{{status.userEmailIsSetup}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Phone Is Setup</span>
|
||||
<span class="item-note">
|
||||
{{status.userPhoneIsSetup}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Bank Account Is Setup</span>
|
||||
<span class="item-note">
|
||||
{{status.userBankAccountIsSetup}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Personal Information State</span>
|
||||
<span class="item-note">
|
||||
{{status.personalInfoState}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Bank Account State</span>
|
||||
<span class="item-note">
|
||||
{{status.bankAccountState}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Country</span>
|
||||
<span class="item-note">
|
||||
{{status.country}}
|
||||
</span>
|
||||
</li>
|
||||
</div>
|
||||
|
||||
<div ng-if="token">
|
||||
<div class="item item-divider">
|
||||
Limits
|
||||
</div>
|
||||
|
||||
<li class="item">
|
||||
<span>Daily Buy</span>
|
||||
<span class="item-note">
|
||||
{{limits.dailyBuy|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Daily Sell</span>
|
||||
<span class="item-note">
|
||||
{{limits.dailySell|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Monthly Buy</span>
|
||||
<span class="item-note">
|
||||
{{limits.monthlyBuy|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Monthly Sell</span>
|
||||
<span class="item-note">
|
||||
{{limits.monthlySell|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Daily Buy Remaining</span>
|
||||
<span class="item-note">
|
||||
{{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Daily Sell Remaining</span>
|
||||
<span class="item-note">
|
||||
{{limits.dailySellRemaining|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Monthly Buy Remaining</span>
|
||||
<span class="item-note">
|
||||
{{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Monthly Sell Remaining</span>
|
||||
<span class="item-note">
|
||||
{{limits.monthlySellRemaining|currency:'':2}} {{limits.currency}}
|
||||
</span>
|
||||
</li>
|
||||
<li class="item">
|
||||
<span>Buy/Sell Disabled (pending first transaction)</span>
|
||||
<span class="item-note">
|
||||
{{limits.transactDisabledPendingFirstTransaction}}
|
||||
</span>
|
||||
</li>
|
||||
</div>
|
||||
|
||||
<div class="item item-divider">
|
||||
Account
|
||||
</div>
|
||||
|
||||
<li class="item" ng-click="revokeToken()">
|
||||
<span class="assertive">Log out</span>
|
||||
</li>
|
||||
</ul>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
22
www/views/preferencesHistory.html
Normal file
22
www/views/preferencesHistory.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Transaction History' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="item item-divider"></div>
|
||||
<div class="item" ng-show="csvReady && !isCordova" ng-csv="csvContent" csv-header="csvHeader" filename="Copay-{{wallet.name}}.csv">
|
||||
<span translate>Export to file</span>
|
||||
</div>
|
||||
<div class="item" ng-show="!csvReady && !isCordova">
|
||||
<span translate>Export to file</span>
|
||||
<span class="item-note" translate>
|
||||
preparing...
|
||||
</span>
|
||||
</div>
|
||||
<div class="item assertive" ng-click="clearTransactionHistory()">
|
||||
<span translate>Clear cache</span>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
122
www/views/preferencesInformation.html
Normal file
122
www/views/preferencesInformation.html
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
<ion-view class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Wallet Information' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="list">
|
||||
<div class="item item-divider"></div>
|
||||
<div class="item" ng-click="saveBlack()">
|
||||
<span translate>Wallet Name (at creation)</span>
|
||||
<span class="item-note">
|
||||
{{walletName}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" copy-to-clipboard="walletId">
|
||||
<span translate>Wallet Id</span>
|
||||
<span class="item-note">
|
||||
{{walletId}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<span translate>Wallet Configuration (m-n)</span>
|
||||
<span class="item-note">
|
||||
{{M}}-{{N}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<span translate>Wallet Network</span>
|
||||
<span class="item-note">
|
||||
{{network}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<span translate>Address Type</span>
|
||||
<span class="item-note">
|
||||
{{addressType}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item">
|
||||
<span translate>Derivation Strategy</span>
|
||||
<span class="item-note">
|
||||
{{derivationStrategy}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" ng-show="wallet.isPrivKeyExternal()">
|
||||
<span translate>Hardware Wallet</span>
|
||||
<span class="item-note">
|
||||
{{wallet.getPrivKeyExternalSourceName()}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" ng-show="!wallet.isPrivKeyExternal() && !wallet.canSign()">
|
||||
<span translate></span>
|
||||
<span class="item-note">
|
||||
No private key
|
||||
</span>
|
||||
</div>
|
||||
<div class="item" ng-show="wallet.credentials.account">
|
||||
<span translate>Account</span>({{derivationStrategy}})
|
||||
<span class="item-note">
|
||||
#{{wallet.credentials.account}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="wallet.cachedStatus.wallet.copayers[0]" class="item item-divider">
|
||||
Copayers
|
||||
</div>
|
||||
|
||||
<div class="item item-icon-right" ng-repeat="copayer in wallet.cachedStatus.wallet.copayers">
|
||||
{{copayer.name}}
|
||||
<span ng-show="copayer.id == wallet.copayerId">
|
||||
({{'Me'|translate}})
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="item item-divider" translate>
|
||||
Extended Public Keys
|
||||
</div>
|
||||
|
||||
<div class="item" ng-repeat="pk in pubKeys" copy-to-clipboard="pk">
|
||||
<span translate>Copayer {{$index}}</span>
|
||||
<span class="item-note">
|
||||
<span>Copayer {{$index}}</span>
|
||||
<span>{{pk}}</span>
|
||||
<span ng-if="$index == 0">({{basePath}})</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="addrs">
|
||||
<div class="item item-divider" translate>
|
||||
Last Wallet Addresses
|
||||
</div>
|
||||
|
||||
<div class="item" ng-repeat="a in addrs" class="oh" copy-to-clipboard="a.address">
|
||||
<span>{{a.address}}</span>
|
||||
<span class="item-note">{{a.path}} · {{a.createdOn *1000 | amDateFormat:'MMMM Do YYYY, h:mm a' }}</span>
|
||||
</div>
|
||||
<div class="padding text-center" translate>
|
||||
Only Main (not change) addresses are shown. The addresses on this list were not verified locally at this time.
|
||||
</div>
|
||||
<button class="button button-block button-positive" ng-click="scan()" translate>
|
||||
Scan addresses for funds
|
||||
</button>
|
||||
<button class="button button-block button-positive" ng-show="isCordova" ng-click="sendAddrs()" translate>
|
||||
Send addresses by email
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div ng-show="wallet.balanceByAddress[0]">
|
||||
<div class="item item-divider" translate>
|
||||
Balance By Address
|
||||
</div>
|
||||
<div class="item" ng-repeat="a in wallet.balanceByAddress" copy-to-clipboard="a.address">
|
||||
<span>{{a.address}}</span>
|
||||
<span class="item-note">
|
||||
{{(a.amount/1e8).toFixed(8)}} BTC
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
23
www/views/preferencesLanguage.html
Normal file
23
www/views/preferencesLanguage.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<ion-view id="preferences-language" class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Language'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<div class="list">
|
||||
<ion-radio ng-repeat="lang in availableLanguages" ng-value="lang.isoCode" ng-model="currentLanguage"
|
||||
ng-click="save(lang.isoCode)">{{lang.name}}
|
||||
</ion-radio>
|
||||
</div>
|
||||
<div class="padding">
|
||||
<span translate>All contributions to Copay's translation are welcome. Sign up at crowdin.com and join the Copay project at</span>
|
||||
<a ng-click="openExternalLink('https://crowdin.com/project/copay', '_system')">https://crowdin.com/project/copay</a>.
|
||||
<span translate>
|
||||
Don't see your language on Crowdin? Contact the Owner on Crowdin! We'd love to support your language.
|
||||
</span>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
28
www/views/preferencesLogs.html
Normal file
28
www/views/preferencesLogs.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Session Log' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<button class="button button-block button-positive" copy-to-clipboard="prepare()">
|
||||
<i class="icon ion-clipboard"></i>
|
||||
<span translate>Copy to clipboard</span>
|
||||
</button>
|
||||
<button class="button button-block button-positive" ng-show="isCordova" ng-click="sendLogs()">
|
||||
<i class="icon ion-ios-email-outline"></i>
|
||||
<span translate>Send by email</span>
|
||||
</button>
|
||||
<div class="card">
|
||||
<div class="item item-text-wrap">
|
||||
<ul>
|
||||
<li ng-repeat="l in logs">
|
||||
<span ng-class="{'energized': l.level=='warn', 'dark': l.level=='debug', 'positive': l.level=='info', 'assertive': l.level=='error' }">
|
||||
{{l.msg}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
29
www/views/preferencesNotifications.html
Normal file
29
www/views/preferencesNotifications.html
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<ion-view id="tab-notifications" class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Notifications' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
<div class="list">
|
||||
<div ng-show="PNEnabledByUser">
|
||||
<div class="item item-divider" translate>Notifications</div>
|
||||
|
||||
<ion-toggle ng-model="pushNotifications.value" toggle-class="toggle-balanced" ng-change="pushNotificationsChange()">
|
||||
<span class="toggle-label" translate>Enable push notifications</span>
|
||||
</ion-toggle>
|
||||
</div>
|
||||
|
||||
<div ng-show="!PNEnabledByUser && isIOSApp">
|
||||
<div class="item item-divider" translate>Notifications</div>
|
||||
<div class="padding text-light" translate>
|
||||
Push notifications for Copay are currently disabled. Enable them in the Settings app.
|
||||
</div>
|
||||
<a class="item" ng-click="openSettings()">
|
||||
<span translate>Open Settings app</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
14
www/views/preferencesUnit.html
Normal file
14
www/views/preferencesUnit.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<ion-view class="settings">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Unit'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content>
|
||||
<ion-radio ng-repeat="unit in unitList" ng-value="unit.code" ng-model="currentUnit"
|
||||
ng-click="save(unit)">{{unit.shortName}}
|
||||
</ion-radio>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
31
www/views/proposals.html
Normal file
31
www/views/proposals.html
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>
|
||||
{{'Pending Proposals'|translate}}
|
||||
</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<ion-content class="padding">
|
||||
|
||||
<div ng-if="fetchingProposals" class="updatingHistory">
|
||||
<div class="text-center">
|
||||
<ion-spinner class="spinner-dark" icon="lines"></ion-spinner>
|
||||
<div translate>Updating pending proposals. Please stand by</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list card" ng-show="txps[0] && !fetchingProposals">
|
||||
<a ng-repeat="tx in txps" class="item" ng-click="openTxpModal(tx)">
|
||||
<span ng-include="'views/includes/txp.html'"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="list card" ng-show="!txps[0] && !fetchingProposals">
|
||||
<div class="item">
|
||||
<span translate>No pending proposals</span>
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
202
www/views/sellCoinbase.html
Normal file
202
www/views/sellCoinbase.html
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
<div
|
||||
class="topbar-container"
|
||||
ng-include="'views/includes/topbar.html'"
|
||||
ng-init="titleSection='Sell'; goBackToState = 'coinbase'; noColor = true">
|
||||
</div>
|
||||
|
||||
|
||||
<div class="content coinbase" ng-controller="sellCoinbaseController as sell">
|
||||
|
||||
<div class="row m20t" ng-show="sell.error || index.coinbaseError" ng-click="sell.error = null">
|
||||
<div class="columns">
|
||||
<div class="box-notification">
|
||||
<ul class="no-bullet m0 size-12 text-warning">
|
||||
<li ng-repeat="err in (sell.error.errors || index.coinbaseError.errors)" ng-bind-html="err.message"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m20ti"
|
||||
ng-show="index.coinbaseAccount && !sell.sellInfo && !sell.sendInfo">
|
||||
<div class="columns">
|
||||
<form
|
||||
name="sellCoinbaseForm"
|
||||
ng-submit="sell.depositFunds(index.coinbaseToken, index.coinbaseAccount)"
|
||||
novalidate>
|
||||
|
||||
|
||||
<div ng-show="!showPriceSensitivity">
|
||||
|
||||
<div
|
||||
ng-if="index.coinbaseToken"
|
||||
ng-init="sell.init(index.coinbaseTestnet)"
|
||||
ng-click="openWalletsModal(sell.allWallets)">
|
||||
<label>Copay Wallet</label>
|
||||
<div class="input">
|
||||
<input type="text" id="address" name="address" ng-disabled="sell.selectedWalletId"
|
||||
ng-attr-placeholder="{{'Choose your source wallet'}}"
|
||||
ng-model="sell.selectedWalletName" required>
|
||||
<a class="postfix size-12 m0 text-gray">
|
||||
<i class="icon-wallet size-18"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label>
|
||||
Amount
|
||||
<span
|
||||
ng-if="index.coinbaseToken"
|
||||
ng-init="sell.getPrice(index.coinbaseToken)"
|
||||
ng-show="sell.sellPrice"
|
||||
class="size-11 text-light right">
|
||||
1 BTC <i class="icon-arrow-right"></i> {{sell.sellPrice.amount}} {{sell.sellPrice.currency}}
|
||||
</span>
|
||||
</label>
|
||||
<div class="input">
|
||||
<input ng-show="!showAlternative" type="number" id="amount" ignore-mouse-wheel
|
||||
name="amount" ng-attr-placeholder="{{'Amount in ' + (showAlternative ? 'USD' : 'BTC')}}"
|
||||
ng-minlength="0.00000001" ng-maxlength="10000000000"
|
||||
ng-model="amount" autocomplete="off">
|
||||
|
||||
<input ng-show="showAlternative" type="number" id="fiat" ignore-mouse-wheel
|
||||
name="fiat" ng-attr-placeholder="{{'Amount in ' + (showAlternative ? 'USD' : 'BTC')}}"
|
||||
ng-model="fiat" autocomplete="off">
|
||||
|
||||
<a ng-show="!showAlternative" class="postfix button"
|
||||
ng-click="showAlternative = true; amount = null">BTC</a>
|
||||
<a ng-show="showAlternative" class="postfix button black"
|
||||
ng-click="showAlternative = false; fiat = null">USD</a>
|
||||
</div>
|
||||
|
||||
<div class="text-center text-gray size-12 m10b">
|
||||
<span ng-show="!(amount || fiat)">
|
||||
Enter the amount to get the exchange rate
|
||||
</span>
|
||||
<span ng-show="!sell.sellPrice && (amount || fiat)">
|
||||
Not available
|
||||
</span>
|
||||
<span ng-show="sell.sellPrice && amount && !fiat">
|
||||
~ {{sell.sellPrice.amount * amount | currency : 'USD ' : 2}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<i class="db fi-arrow-down size-24 m10v"></i>
|
||||
</div>
|
||||
|
||||
<div ng-if="index.coinbaseToken" ng-init="sell.getPaymentMethods(index.coinbaseToken)">
|
||||
<label>Deposit into</label>
|
||||
<select
|
||||
ng-model="selectedPaymentMethod.id"
|
||||
ng-options="item.id as item.name for item in sell.paymentMethods">
|
||||
</select>
|
||||
</div>
|
||||
<div class="input m20t">
|
||||
<a href class="button black expand round"
|
||||
ng-disabled=" (!amount && !fiat) || !sell.sellPrice.amount"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
ng-click="showPriceSensitivity = true">Continue</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="showPriceSensitivity">
|
||||
<h1>Price Sensitivity</h1>
|
||||
<p class="size-14 text-gray">
|
||||
Coinbase has not yet implemented an immediate method to sell bitcoin from a wallet. To make this sale, funds
|
||||
will be sent to your Coinbase account, and sold when Coinbase accepts the transaction (usually one
|
||||
hour).
|
||||
</p>
|
||||
<label>At what percentage lower price would you accept to sell?</label>
|
||||
<select
|
||||
ng-model="selectedPriceSensitivity"
|
||||
ng-options="item as item.name for item in priceSensitivity track by item.value">
|
||||
</select>
|
||||
<p class="size-12 text-gray">
|
||||
Estimated sale value: {{sell.sellPrice.amount * amount | currency : 'USD ' : 2}} <br>
|
||||
Still sell if price fall until:
|
||||
{{(sell.sellPrice.amount - (selectedPriceSensitivity.value / 100) * sell.sellPrice.amount) * amount | currency : 'USD ' : 2}}
|
||||
</p>
|
||||
|
||||
<div class="input m20t row">
|
||||
<div class="columns large-6 medium-6 small-6">
|
||||
<a href class="button outline dark-gray expand round" ng-click="showPriceSensitivity = false">Back</a>
|
||||
</div>
|
||||
<div class="columns large-6 medium-6 small-6">
|
||||
<input class="button black expand round"
|
||||
ng-disabled="(!amount && !fiat) || !sell.sellPrice.amount"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
type="submit" value="Confirm">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m20ti row" ng-show="sell.sendInfo && !sell.sellInfo && !sell.success">
|
||||
<div class="columns">
|
||||
<h1>Funds sent to Coinbase Account</h1>
|
||||
<p class="size-12 text-gray">
|
||||
The transaction is not yet confirmed, and will show as "Processing" in your Activity. The bitcoin sale will be completed automatically once it is confirmed by Coinbase.
|
||||
</p>
|
||||
<button class="m20t outline black round expand"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
ng-click="$root.go('coinbase')">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="sell.sellInfo && !sell.sendInfo && !sell.success">
|
||||
<h4 class="title">Confirm transaction</h4>
|
||||
|
||||
<ul class="no-bullet m10t size-12 white">
|
||||
<li class="line-b line-t p15">
|
||||
<span class="m10 text-normal text-bold">Amount</span>
|
||||
<span class="right text-gray">{{sell.sellInfo.amount.amount}} {{sell.sellInfo.amount.currency}}</span>
|
||||
</li>
|
||||
<li class="line-b oh p15">
|
||||
<span class="m10 text-normal text-bold">Fees</span>
|
||||
<span class="right text-gray">
|
||||
<div ng-repeat="fee in sell.sellInfo.fees">
|
||||
<b>{{fee.type}}</b> {{fee.amount.amount}} {{fee.amount.currency}}
|
||||
</div>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p15">
|
||||
<span class="m10 text-normal text-bold">Subtotal</span>
|
||||
<span class="right text-gray">{{sell.sellInfo.subtotal.amount}} {{sell.sellInfo.subtotal.currency}}</span>
|
||||
</li>
|
||||
<li class="line-b p15">
|
||||
<span class="m10 text-normal text-bold">Total</span>
|
||||
<span class="right text-gray">{{sell.sellInfo.total.amount}} {{sell.sellInfo.total.currency}}</span>
|
||||
</li>
|
||||
<li class="line-b p15">
|
||||
<span class="m10 text-normal text-bold">Payout at</span>
|
||||
<span class="right text-gray">{{sell.sellInfo.payout_at | amCalendar}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="row">
|
||||
<div class="columns">
|
||||
<button class="button black round expand"
|
||||
ng-style="{'background-color': '#2b71b1'}"
|
||||
ng-click="sell.confirmSell(index.coinbaseToken, index.coinbaseAccount, sell.sellInfo)"
|
||||
>
|
||||
Sell
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m20t row text-center" ng-show="sell.success">
|
||||
<div class="columns">
|
||||
<h1>Sale initiated</h1>
|
||||
<p class="text-gray">
|
||||
A transfer has been initiated to your bank account and should arrive at {{sell.success.payout_at | amCalendar}}.
|
||||
</p>
|
||||
|
||||
<button class="outline dark-gray round expand"
|
||||
ng-click="$root.go('coinbase')">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
124
www/views/sellGlidera.html
Normal file
124
www/views/sellGlidera.html
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
<ion-nav-title>Sell</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content>
|
||||
|
||||
<div class="box-notification warning" ng-show="network == 'testnet'">
|
||||
Testnet wallets only work with Glidera Sandbox Accounts
|
||||
</div>
|
||||
|
||||
<div class="box-notification notice" ng-show="limits && !sell.show2faCodeInput && !sell.success">
|
||||
<span class="text-light">Daily sell limit</span>:
|
||||
{{limits.dailySell|currency:'':2}} {{limits.currency}}
|
||||
(remaining {{limits.dailySellRemaining|currency:'':2}} {{limits.currency}})
|
||||
<br>
|
||||
<span class="text-light">Monthly sell limit</span>:
|
||||
{{limits.monthlySell|currency:'':2}} {{limits.currency}}
|
||||
(remaining {{limits.monthlySellRemaining|currency:'':2}} {{limits.currency}})
|
||||
</div>
|
||||
|
||||
<div class="box-notification m20b" ng-show="limits.transactDisabledPendingFirstTransaction">
|
||||
<span class="text-warning">
|
||||
This operation was disabled because you have a pending first transaction
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="!sell.show2faCodeInput && !sell.success">
|
||||
<form name="sellPriceForm" ng-if="token"
|
||||
ng-submit="sell.get2faCode(token)" novalidate>
|
||||
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label"><span>Amount in</span> {{showAlternative ? 'USD' : 'BTC'}}</span>
|
||||
<input ng-show="!showAlternative"
|
||||
type="number"
|
||||
id="qty" ignore-mouse-wheel
|
||||
name="qty"
|
||||
ng-attr-placeholder="{{'Amount'}}"
|
||||
ng-minlength="0.00000001"
|
||||
ng-maxlength="10000000000"
|
||||
ng-model="qty"
|
||||
autocomplete="off"
|
||||
ng-change="sell.getSellPrice(token, {'qty': qty})">
|
||||
|
||||
<input ng-show="showAlternative"
|
||||
type="number"
|
||||
id="fiat" ignore-mouse-wheel
|
||||
name="fiat"
|
||||
ng-attr-placeholder="{{'Amount'}}"
|
||||
ng-model="fiat"
|
||||
autocomplete="off"
|
||||
ng-change="sell.getSellPrice(token, {'fiat': fiat})">
|
||||
|
||||
<a ng-show="!showAlternative"
|
||||
class="postfix"
|
||||
on-tap="showAlternative = true; qty = null; sell.sellPrice = null">BTC</a>
|
||||
<a ng-show="showAlternative"
|
||||
class="postfix"
|
||||
on-tap="showAlternative = false; fiat = null; sell.sellPrice = null">USD</a>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
|
||||
<div class="text-center text-gray size-12 m20b" ng-show="!sell.gettingSellPrice && sell.sellPrice.qty">
|
||||
Sell
|
||||
<span ng-show="qty">{{sell.sellPrice.subtotal|currency:'':2}} {{sell.sellPrice.currency}} in Bitcoin</span>
|
||||
<span ng-show="fiat">{{sell.sellPrice.qty}} BTC</span>
|
||||
at {{sell.sellPrice.price|currency:'':2}} {{sell.sellPrice.currency}}/BTC
|
||||
|
||||
</div>
|
||||
<div class="text-center text-gray size-12 m20b" ng-show="!sell.gettingSellPrice && !sell.sellPrice.qty">
|
||||
(Enter the amount to get the exchange rate)
|
||||
</div>
|
||||
|
||||
<div class="text-center text-gray size-12 m20b" ng-show="sell.gettingSellPrice">
|
||||
...
|
||||
</div>
|
||||
|
||||
<button class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="limits.transactDisabledPendingFirstTransaction || !sell.sellPrice.qty">
|
||||
Continue
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div ng-show="sell.show2faCodeInput && !sell.success">
|
||||
<div class="m10t text-center">
|
||||
{{sell.sellPrice.qty}} BTC → {{sell.sellPrice.subtotal|currency:'':2}} {{sell.sellPrice.currency}}
|
||||
<p class="m20t">
|
||||
A SMS containing a confirmation code was sent to your phone. <br>
|
||||
Please, enter the code below
|
||||
</p>
|
||||
<form name="sellForm"
|
||||
ng-submit="sell.createTx(token, permissions, twoFaCode)" novalidate>
|
||||
<div class="card list">
|
||||
<label class="item item-input">
|
||||
<input type="number" ng-model="twoFaCode" placeholder="2FA Code" required ignore-mouse-wheel>
|
||||
</label>
|
||||
</div>
|
||||
<button class="button button-block button-positive"
|
||||
type="submit"
|
||||
ng-disabled="sellForm.$invalid ">
|
||||
Sell
|
||||
</button>
|
||||
</form>
|
||||
<p class="m10t size-12 text-gray">
|
||||
Bitcoins will be immediately sent from your wallet to Glidera. Fiat will be deposited in your bank account in 4-6 business days.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center" ng-show="sell.success">
|
||||
<h1>Sale initiated</h1>
|
||||
<p class="text-gray">
|
||||
A transfer has been initiated to your bank account and should arrive in 4-6 business days.
|
||||
</p>
|
||||
|
||||
<button class="button button-block button-positive" ui-sref="tabs.buyandsell.glidera">OK</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
99
www/views/tab-create-personal.html
Normal file
99
www/views/tab-create-personal.html
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Create Personal Wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="createController" ng-init="init(1);">
|
||||
<form name="setupForm" ng-submit="create(setupForm)" novalidate>
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Wallet name</span>
|
||||
<input type="text"
|
||||
placeholder="{{'Family vacation funds'|translate}}"
|
||||
ng-model="formData.walletName"
|
||||
ng-required="true"
|
||||
ng-focus="formFocus('wallet-name')"
|
||||
ng-blur="formFocus(false)">
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable" ng-change="showAdvChange()">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" ng-model="formData.bwsurl" placeholder="https://bws.bitpay.com/bws/api">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label" translate>
|
||||
Wallet Key
|
||||
</div>
|
||||
<select class="m10t" ng-model="seedSource" ng-options="seed as seed.label for seed in seedOptions"></select>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'trezor' || seedSource.id == 'ledger'">
|
||||
<span class="input-label" translate>Account Number</span>
|
||||
<input type="number" ng-model="formData.account" ignore-mouse-wheel>
|
||||
</label>
|
||||
|
||||
<div class="card" ng-show="seedSource.id == 'new' && createPassphrase">
|
||||
<div class="item item-text-wrap" translate>
|
||||
WARNING: The password cannot be recovered. <b>Be sure to write it down</b>. The wallet can not be restored without the password.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'new'">
|
||||
<span class="input-label" translate>Add a Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'Add an optional password to secure the recovery phrase'|translate}}"
|
||||
autocapitalize="off"
|
||||
ng-model="formData.createPassphrase">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'set'">
|
||||
<span class="input-label" translate>Wallet Recovery Phrase</span>
|
||||
<input placeholder="{{'Enter the recovery phrase (BIP39)'|translate}}"
|
||||
autocapitalize="off"
|
||||
type="text"
|
||||
ng-model="formData.privateKey">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'set'">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
|
||||
autocapitalize="off"
|
||||
ng-model="formData.passphrase">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'set'">
|
||||
<span class="input-label" translate>Derivation Path</span>
|
||||
<input type="text"
|
||||
placeholder="{{'BIP32 path for address derivation'|translate}}"
|
||||
ng-model="formData.derivationPath">
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-show="seedSource.id == 'new'" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
|
||||
<span translate>Testnet</span>
|
||||
</ion-toggle>
|
||||
|
||||
<ion-toggle ng-model="formData.singleAddressEnabled" toggle-class="toggle-positive">
|
||||
<span translate>Single Address Wallet</span>
|
||||
<small translate>For audit purposes</small>
|
||||
</ion-toggle>
|
||||
|
||||
</div> <!-- advanced -->
|
||||
</div> <!-- list -->
|
||||
|
||||
<button type="submit" class="button button-block button-positive" ng-disabled="setupForm.$invalid">
|
||||
<span translate>Create new wallet</span>
|
||||
</button>
|
||||
</form>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
||||
130
www/views/tab-create-shared.html
Normal file
130
www/views/tab-create-shared.html
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Create Shared Wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="createController" ng-init="init(3);">
|
||||
<form name="setupForm" ng-submit="create(setupForm)" novalidate>
|
||||
<div class="card list">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Wallet name</span>
|
||||
<input type="text"
|
||||
placeholder="{{'Family vacation funds'|translate}}"
|
||||
ng-model="formData.walletName"
|
||||
ng-required="true"
|
||||
ng-focus="formFocus('wallet-name')"
|
||||
ng-blur="formFocus(false)">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" translate>Your nickname</span>
|
||||
<input type="text"
|
||||
placeholder="{{'John'|translate}}"
|
||||
ng-model="formData.myName"
|
||||
ng-required="formData.totalCopayers != 1"
|
||||
ng-disabled="formData.totalCopayers == 1"
|
||||
ng-focus="formFocus('my-name')"
|
||||
ng-blur="formFocus(false)">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label" translate>
|
||||
Total number of copayers
|
||||
</div>
|
||||
<select class="m10t" ng-model="formData.totalCopayers" ng-options="totalCopayers as totalCopayers for totalCopayers in TCValues"
|
||||
ng-change="setTotalCopayers(formData.totalCopayers)">
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label" translate>
|
||||
Required number of signatures
|
||||
</div>
|
||||
<select class="m10t"
|
||||
ng-model="formData.requiredCopayers" ng-options="requiredCopayers as requiredCopayers for requiredCopayers in RCValues"
|
||||
ng-disabled="formData.totalCopayers == 1">
|
||||
</select>
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-model="showAdv" toggle-class="toggle-stable" ng-change="showAdvChange()">
|
||||
<span translate ng-show="!showAdv">Show advanced options</span>
|
||||
<span translate ng-show="showAdv">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<div ng-show="showAdv">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Wallet Service URL</span>
|
||||
<input type="text" ng-model="formData.bwsurl">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label" translate>
|
||||
Wallet Key
|
||||
</div>
|
||||
<select class="m10t" ng-model="seedSource" ng-options="seed as seed.label for seed in seedOptions"></select>
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'trezor' || seedSource.id == 'ledger'">
|
||||
<span class="input-label" translate>Account Number</span>
|
||||
<input type="number" ng-model="formData.account" ignore-mouse-wheel>
|
||||
</label>
|
||||
|
||||
<div class="card" ng-show="seedSource.id =='new' && formData.createPassphrase">
|
||||
<div class="item item-text-wrap" translate>
|
||||
WARNING: The password cannot be recovered. <b>Be sure to write it down</b>. The wallet can not be restored without the password.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'new'">
|
||||
<span class="input-label" translate>Add a Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'Add an optional password to secure the recovery phrase'|translate}}"
|
||||
autocapitalize="off"
|
||||
ng-model="formData.createPassphrase">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'set'">
|
||||
<span class="input-label" translate>Wallet Recovery Phrase</span>
|
||||
<input placeholder="{{'Enter the recovery phrase (BIP39)'|translate}}"
|
||||
autocapitalize="off"
|
||||
type="text"
|
||||
ng-model="formData.privateKey">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'set'">
|
||||
<span class="input-label" translate>Password</span>
|
||||
<input type="text"
|
||||
placeholder="{{'The recovery phrase could require a password to be imported'|translate}}"
|
||||
autocapitalize="off"
|
||||
ng-model="formData.passphrase">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label" ng-show="seedSource.id == 'set'">
|
||||
<span class="input-label" translate>Derivation Path</span>
|
||||
<input type="text"
|
||||
placeholder="{{'BIP32 path for address derivation'|translate}}"
|
||||
ng-model="formData.derivationPath">
|
||||
</label>
|
||||
|
||||
<ion-toggle ng-show="seedSource.id == 'new'" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
|
||||
Testnet
|
||||
</ion-toggle>
|
||||
|
||||
<ion-toggle ng-model="formData.singleAddressEnabled" toggle-class="toggle-positive">
|
||||
<span translate>Single Address Wallet</span>
|
||||
<small translate>For audit purposes</small>
|
||||
</ion-toggle>
|
||||
|
||||
</div> <!-- advanced -->
|
||||
</div> <!-- list -->
|
||||
|
||||
<button type="submit" class="button button-block button-positive" ng-disabled="setupForm.$invalid">
|
||||
<span translate>Create {{formData.requiredCopayers}}-of-{{formData.totalCopayers}} wallet</span>
|
||||
</button>
|
||||
</form>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
||||
|
||||
93
www/views/tab-export-file.html
Normal file
93
www/views/tab-export-file.html
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
<div ng-show="!backupWalletPlainText">
|
||||
<div class="size-14" ng-show="error">
|
||||
<i class="ion-alert-circled"></i>
|
||||
<span translate>Failed to export</span>
|
||||
</div>
|
||||
|
||||
<form name="exportForm" novalidate>
|
||||
<div class="card">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" transalate>Set up a password</span>
|
||||
<input type="password" placeholder="{{'Your password'|translate}}" ng-model="formData.password">
|
||||
</label>
|
||||
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label" transalate>Repeat the password</span>
|
||||
<input type="password" placeholder="{{'Repeat password'|translate}}" ng-model="formData.repeatpassword">
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<ion-toggle ng-show="canSign" ng-model="formData.showAdvanced" toggle-class="toggle-balanced">
|
||||
<span translate ng-show="!formData.showAdvanced">Show advanced options</span>
|
||||
<span translate ng-show="formData.showAdvanced">Hide advanced options</span>
|
||||
</ion-toggle>
|
||||
|
||||
<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>
|
||||
</ion-checkbox>
|
||||
</div>
|
||||
|
||||
<div class="box-notification error ng-hide" ng-show="!canSign">
|
||||
<span class="size-14">
|
||||
<i class="ion-alert-circled"></i>
|
||||
<span translate>
|
||||
WARNING: The private key of this wallet is not available. The export allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so <b>funds will not be accessible from the export</b>.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="box-notification error ng-hide" ng-show="formData.noSignEnabled">
|
||||
<span class="size-14">
|
||||
<i class="ion-alert-circled"></i>
|
||||
<span translate>
|
||||
WARNING: Not including the private key allows to check the wallet balance, transaction history, and create spend proposals from the export. However, does not allow to approve (sign) proposals, so <b>funds will not be accessible from the export</b>.
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<button
|
||||
ng-click="downloadWalletBackup()"
|
||||
class="button button-block button-positive"
|
||||
ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||
ng-style="{'background-color':wallet.color}"
|
||||
ng-show="!isSafari && !isCordova">
|
||||
<i class="fi-download"></i>
|
||||
<span translate>Download</span>
|
||||
</button>
|
||||
|
||||
<button
|
||||
ng-click="viewWalletBackup()"
|
||||
class="button button-block button-positive"
|
||||
ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||
ng-style="{'background-color':wallet.color}"
|
||||
ng-show="isSafari && !isCordova">
|
||||
<i class="fi-eye"></i>
|
||||
<span translate>View</span>
|
||||
</button>
|
||||
|
||||
<div ng-show="isCordova">
|
||||
<h4 translate>Export options</h4>
|
||||
<button class="button button-block button-positive"
|
||||
ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||
ng-style="{'background-color':wallet.color}"
|
||||
ng-click="copyWalletBackup()">
|
||||
<i class="fi-clipboard-pencil"></i>
|
||||
<span translate>Copy to clipboard</span></button>
|
||||
<button class="button button-block button-positive" ng-disabled="(!formData.password || formData.password != formData.repeatpassword)"
|
||||
ng-style="{'background-color':wallet.color}"
|
||||
ng-click="sendWalletBackup()"><i class="fi-mail"></i>
|
||||
<span translate>Send by email</span></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="backupWalletPlainText" class="text-center card">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<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>
|
||||
10
www/views/tab-export-qrCode.html
Normal file
10
www/views/tab-export-qrCode.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<div class="m20t text-gray" ng-show="formData.supported">
|
||||
<div class="text-center m20b">
|
||||
<qrcode size="220" version="8" error-correction-level="M" data="{{formData.exportWalletInfo}}"></qrcode>
|
||||
</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 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>
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue