Merge branch 'ref/design' of https://github.com/bitpay/bitpay-wallet into feature/onboarding_last_steps

# Conflicts:
#	src/js/controllers/backup.js
This commit is contained in:
Jamal Jackson 2016-09-29 14:51:12 -04:00
commit 19a3e9afdc
85 changed files with 1579 additions and 1003 deletions

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="128px" height="128px" viewBox="0 0 128 128" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: sketchtool 40.1 (33804) - http://www.bohemiancoding.com/sketch -->
<title>CF22B02A-463B-4798-B448-F6A878730EDC</title>
<desc>Created with sketchtool.</desc>
<defs>
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-1">
<stop stop-color="#EFF2FF" offset="0%"></stop>
<stop stop-color="#F7F7F7" offset="100%"></stop>
</linearGradient>
</defs>
<g id="Settings" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="1.7.4---Address-book-(Empty)" transform="translate(-122.000000, -125.000000)">
<g id="Header/Jumbo-W-Text/Light" transform="translate(0.000000, 70.000000)">
<g id="users-24px-outline-2_a-add" transform="translate(64.000000, 41.000000)">
<g id="Group" transform="translate(58.000000, 14.000000)">
<circle id="Oval-2" fill="url(#linearGradient-1)" cx="64" cy="64" r="64"></circle>
<path d="M59.8058824,65.8235294 C51.3947922,65.8235294 43.9338216,67.7071485 39.0313235,69.3457199 C35.4125294,70.5591485 33,73.9396246 33,77.7275294 L33,89.442577 L62.7843137,89.442577" id="Shape" stroke="#647CE8" stroke-width="2"></path>
<path d="M65.8843137,68.4285714 L65.8843137,68.4285714 C57.6608647,68.4285714 50.9921569,58.8658095 50.9921569,50.7142857 L50.9921569,47.7619048 C50.9921569,39.610381 57.6608647,33 65.8843137,33 L65.8843137,33 C74.1077627,33 80.7764706,39.610381 80.7764706,47.7619048 L80.7764706,50.7142857 C80.7764706,58.8658095 74.1077627,68.4285714 65.8843137,68.4285714 L65.8843137,68.4285714 Z" id="Shape" stroke="#647CE8" stroke-width="2"></path>
<path d="M85.2745098,77.2857143 L85.2745098,95" id="Shape" stroke="#647CE8" stroke-width="2"></path>
<path d="M77.1294118,85.2745098 L95,85.2745098" id="Shape" stroke="#647CE8" stroke-width="2"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Before After
Before After

View file

@ -1,4 +1,4 @@
<ion-view>
<ion-view id="add-address">
<ion-nav-bar class="bar-royal">
<ion-nav-title>
<span translate>Add Contact</span>
@ -16,7 +16,7 @@
<form name="addressbookForm" no-validate>
<div class="card list">
<div class="list">
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Name</span>
<input type="text"
@ -29,11 +29,12 @@
<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>Address</span>
<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>

View file

@ -39,12 +39,22 @@
</ion-item>
</ion-list>
<div class="row text-center absolute-center" ng-show="isEmptyList">
<div class="text-center absolute-center" ng-show="isEmptyList">
<div id="add-contact" class="col col-80 center-block">
<img class="col" src="img/item-ico-contact.svg">
<a class="col col-40 center-block" ui-sref="tabs.addressbook.add">
Add Contact
</a>
<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 havent 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>

View 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>

View file

@ -12,10 +12,15 @@
<div>
<div class="item item-no-bottom-border" translate>Recipient</div>
<div class="item item-text-wrap item-icon-left bitcoin-address">
<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>
<gravatar ng-if="!isWallet" class="send-gravatar" name="{{toName}}" width="30" email="{{toEmail}}"></gravatar>
<span>{{toName || toAddress}}</span>
<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>

View file

@ -1,10 +1,10 @@
<ion-view id="wallet-backup-phrase" title="{{viewTitle}}">
<ion-view id="wallet-backup-phrase">
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button button-back button-clear" ng-click="backupGoBack()">
<i class="icon ion-ios-arrow-thin-left"></i>
</button>
</ion-nav-buttons>
<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">

View file

@ -1,7 +1,7 @@
<ion-view id="onboarding-backup-warning" class="onboarding" ng-controller="backupWarningController">
<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" href ui-sref="onboarding.backupRequest({walletId: walletId})">
<button class="button button-back button-clear" ng-click="goBack()">
<i class="icon ion-ios-arrow-thin-left"></i>
</button>
</ion-nav-buttons>
@ -18,7 +18,7 @@
</p>
</div>
<div class="row">
<img src="img/onboarding-backup-warning.svg" class="col col-60 warning-image">
<img src="img/backup-warning.svg" class="col col-60 warning-image">
</div>
<div class="row text-center">
<p class="col col-60">

View file

@ -1,21 +1,18 @@
<ion-view>
<ion-view id="bitpayCard">
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button button-clear" ui-sref="tabs.home">
Close
</button>
</ion-nav-buttons>
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-title>BitPay Card</ion-nav-title>
<ion-nav-buttons side="secondary">
<button class="button button-clear" ui-sref="bitpayCard.preferences">
<i class="icon ion-gear-b"></i>
<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 ng-controller="bitpayCardController as bitpayCard" ng-init="bitpayCard.init()">
<ion-content>
<div class="box-notification warning" ng-show="network == 'testnet'">
<div class="box-notification warning m0" ng-show="network == 'testnet'">
Sandbox version. Only for testing purpose
</div>
@ -35,7 +32,7 @@
<form
ng-show="!bitpayCard.bitpayCardTwoFactorPending"
name="authenticateForm"
ng-submit="bitpayCard.authenticate()"
ng-submit="bitpayCard.authenticate(email, password)"
novalidate>
<div class="card list">
@ -71,7 +68,7 @@
<form
ng-show="bitpayCard.bitpayCardTwoFactorPending"
name="authenticate2FAForm"
ng-submit="bitpayCard.authenticate2FA()"
ng-submit="bitpayCard.authenticate2FA(twoFactorCode)"
novalidate>
<div class="list">
@ -92,47 +89,43 @@
</form>
</div>
<div ng-show="bitpayCard.bitpayCardAuthenticated && !bitpayCard.visaCardActivated && !addFunds">
<div id="bitpayCard" class="oh pr">
<div ng-show="bitpayCard.bitpayCardAuthenticated">
<div class="oh pr">
<div class="amount">
<div ng-show="!loadingHistory && bitpayCard.bitpayCardCurrentBalance" ng-click="bitpayCard.update()">
<strong class="size-36">${{bitpayCard.bitpayCardCurrentBalance}}</strong>
<div class="size-12">Available balance</div>
<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-show="loadingHistory">
<div ng-if="loadingHistory" class="m10t">
<strong class="size-36">...</strong>
</div>
</div>
<div class="camera-icon" ng-show="bitpayCard.bitpayCardCurrentBalance">
<a ng-click="addFunds = true">
<i class="icon ion-plus size-21"></i>
</a>
</div>
</div>
<select class="m10" 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
class="oh pr m20t text-gray size-12 text-center"
class="m10t text-center padding"
ng-show="!bitpayCard.bitpayCardTransactionHistory[0] &&
!bitpayCard.bitpayCardInvoiceHistory[0] && !loadingHistory">
No transactions yet
!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 ng-show="loadingHistory" class="oh pr m20t text-gray text-center">
<i class="icon ion-android-sync"></i>
</div>
<div class="card list" ng-show="!loadingHistory">
<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" ng-init="icon = bitpayCard.getIconName(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>
@ -146,7 +139,7 @@
</div>
<div
ng-init="desc = bitpayCard.processDescription(tx)"
class="col">
class="col size-12">
{{desc}}
</div>
<div class="col">
@ -165,55 +158,5 @@
</div>
</div>
</div>
<div ng-show="bitpayCard.bitpayCardAuthenticated && !bitpayCard.visaCardActivated && addFunds">
<form
name="createInvoiceForm"
ng-submit="bitpayCard.sendFunds()"
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="2000"
ng-model="fiat"
autocomplete="off"
required>
<a class="postfix">USD</a>
</label>
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
</div>
<p class="size-12 text-warning" ng-show="bitpayCard.isMultisigWallet">
You selected a multisignature wallet. Please note that the transaction will only appear on your card's
Activity when the payment is fully signed.
</p>
<div class="row">
<div class="col">
<button class="button button-block button-light"
type="button"
ng-click="addFunds = false; fiat = null">
Cancel
</button>
</div>
<div class="col">
<button class="button button-block button-positive"
ng-disabled="!fiat"
type="submit">
Send
</button>
</div>
</div>
</form>
</div>
</ion-content>
</ion-view>

View file

@ -26,14 +26,21 @@
<div class="item item-icon-left">
<i ng-if="isWallet" class="icon ion-briefcase size-21"></i>
<gravatar ng-if="!isWallet" class="send-gravatar" name="{{toName}}" width="30" email="{{toEmail}}"></gravatar>
<span translate>To</span>: {{toAddress}}
<p ng-show="toName">{{toName}}</p>
<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 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>

View 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>

View file

@ -1,5 +1,5 @@
<div id="screenshot-warning-modal" class="popup-modal">
<div class="popup-modal-header">
<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}">

View file

@ -8,10 +8,6 @@
<span class="item-note m10l" ng-show="wallet.n > 1 && wallet.isComplete()">
{{wallet.m}}-of-{{wallet.n}}
</span>
<span class="badge badge-assertive" ng-show="!wallet.isComplete()" translate>
Incomplete
</span>
<!-- <i ng-show="wallet.needsBackup" class="icon ion-android-warning assertive"></i> -->
</div>
</div>
</ion-slide-page>

View file

@ -1,60 +1,57 @@
<ion-modal-view ng-controller="payproController">
<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>
<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>
<h1 class="title ellipsis" translate>Payment request</h1>
</ion-header-bar>
<ion-content ng-style="{'background-color': '#F6F7F9'}">
<div class="modal-content">
<div class="header-modal text-center p50t">
<div class="size-42">
{{amountStr}}
</div>
</div>
<ion-content>
<div class="header-modal text-center size-42">
{{amountStr}}
</div>
<h4 class="title m10l" translate>Details</h4>
<ul class="no-bullet size-14 m10t">
<li class="line-b p10 oh">
<span class="text-gray" translate>Pay To</span>
<span class="right enable_text_select">{{_paypro.domain}}</span>
</li>
<li class="line-b p10 oh" ng-if="_paypro.toAddress">
<span class="text-gray" translate>Address</span>
<span class="right enable_text_select">{{_paypro.toAddress}}</span>
</li>
<li class="line-b p10 oh">
<span class="text-gray" translate>Certified by</span>
<span class="right text-right">
<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="fi-lock color-greeni"></i>
<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="fi-unlock color-yellowi"></i> <span translate>Self-signed Certificate</span>
<i class="ion-unlocked" style="color:red"></i> <span translate>Self-signed Certificate</span>
</span>
<span ng-show="!_paypro.selfSigned">
<i class="fi-unlock color-yellowi"></i>{{_paypro.caName}}<br>
<i class="ion-locked" style="color:yellow"></i>{{_paypro.caName}}<br>
<span translate>WARNING: UNTRUSTED CERTIFICATE</span>
</span>
</span>
</span>
</li>
<li class="line-b p10 oh" ng-if="_paypro.memo">
<span class="text-gray" translate>Memo</span>
<span class="right">{{_paypro.memo}}</span>
</li>
<li class="line-b p10 oh" ng-if="_paypro.expires">
<span class="text-gray" translate>Expires</span>
<span class="right">{{_paypro.expires * 1000 | amTimeAgo }}</span>
</li>
</ul>
</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>
<div class="extra-margin-bottom"></div>
</ion-content>
</ion-modal-view>

View file

@ -3,7 +3,7 @@
<button class="button button-clear" ng-click="cancel()">
{{'Close' | translate}}
</button>
<div class="title" translate>
<div class="title">
{{title}}
</div>
</ion-header-bar>
@ -16,25 +16,26 @@
<img src="img/icon-wallet.svg" ng-style="{'background-color': color}" class="bg"/>
</i>
<div class="size-36" copy-to-clipboard="btx.amountStr">
<span class="enable_text_select">{{btx.amountStr}}</span>
<div class="size-36 m20t" copy-to-clipboard="btx.amountStr">
{{btx.amountStr}}
</div>
<div class="alternative-amount" ng-click="showRate =! showRate">
<span class="label gray radius" ng-show="!showRate && alternativeAmountStr">
<div class="m10t" style="height:20px;" ng-click="showRate =! showRate">
<span ng-show="!showRate && alternativeAmountStr">
{{alternativeAmountStr}}
</span>
<span class="size-12" ng-show="showRate && alternativeAmountStr">
<span ng-show="showRate && alternativeAmountStr">
{{rateStr}} ({{rateDate | amDateFormat:'MM/DD/YYYY HH:mm a'}})
</span>
</div>
</div>
<div ng-show="btx.action == 'sent'">
<span translate>Sent from</span> {{wallet.credentials.walletName}}
<div class="padding-vertical">
<i class="icon ion-ios-arrow-thin-down size-24"></i>
<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'">
@ -63,27 +64,26 @@
</span>
<span ng-if="!btx.merchant">
<span ng-show="btx.labelTo">{{btx.labelTo}}</span>
<contact ng-show="!btx.labelTo" class="enable_text_select" address="{{btx.addressTo}}"></contact>
<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)">
<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' || 'moved'">
<span translate>Date</span>
<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'">
<div translate>Created by</div>
<span>{{btx.creatorName}}</span>
{{'Created by'|translate}} <strong>{{btx.creatorName}}</strong>
<span class="item-note">
<time>{{ btx.createdOn * 1000 | amDateFormat:'MM/DD/YYYY HH:mm a'}}</time>
</span>
@ -91,9 +91,8 @@
</div>
<div class="item" ng-if="btx.action != 'received' && btx.feeLevel" copy-to-clipboard="btx.feeStr">
<div translate>Fee</div>
<span class="enable_text_select">{{btx.feeLevel}} ({{btx.feeStr}})</span>
<span class="right">
{{'Fee'|translate}}: {{btx.feeStr}}
<span class="item-note">
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
Unconfirmed
</span>
@ -108,20 +107,23 @@
</div>
<div class="item" ng-if="btx.message && btx.action != 'received'" copy-to-clipboard="btx.message">
<div translate>Description</div>
<span class="enable_text_select">{{btx.message}}</span>
{{'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">
<div translate>Merchant message</div>
<span class="enable_text_select">
{{'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">
<div translate>Recipients</div>
<span class="right">{{btx.recipientCount}}
{{'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>
@ -138,21 +140,22 @@
</span>
</div>
<div class="item item-icon-right" ng-click="showCommentPopup()">
<span class="text-gray" translate ng-if="!btx.note">Add Memo</i></span>
<span class="text-gray" translate ng-if="btx.note">Memo</span>
<div ng-if="btx.note && btx.note.body">
<span class="enable_text_select">{{btx.note.body}}</span><br>
<span class="text-italic item-note size-12">
<span translate>Edited by</span> <span>{{btx.note.editedByName}}</span>,
<time>{{btx.note.editedOn * 1000 | amTimeAgo}}</time></span>
</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">

View file

@ -4,13 +4,14 @@
<div ng-show="tx.amountStr" class="m20t size-36">
{{tx.amountStr}}
</div>
<div class="size-16 text-gray m10v">
<span translate>Sent</span>
<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">
<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">
<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>
@ -40,7 +41,7 @@
<div ng-if="type == 'created'" class="popup-txsigned text-center m30tp">
<i class="icon ion-checkmark-round"></i>
<div class="text-center size-18 tu text-bold m20t">
<div class="text-center size-24 tu text-bold m20v">
<span translate>Payment Proposal Created</span>
</div>
<div class="text-center">
@ -52,7 +53,7 @@
<div ng-if="type == 'accepted'" class="popup-txsigned text-center m30tp">
<i class="icon ion-checkmark-round"></i>
<div class="text-center size-18 tu text-bold m20t">
<div class="text-center size-24 tu text-bold m20v">
<span translate>Payment Accepted</span>
</div>
<div class="text-center">
@ -62,7 +63,7 @@
<div ng-if="type=='rejected'" class="popup-txrejected text-center m30tp">
<i class="icon ion-close-round"></i>
<div class="text-center size-18 tu text-bold m20t">
<div class="text-center size-24 tu text-bold m20v">
<span translate>Payment Rejected</span>
</div>
<div class="text-center">

View file

@ -22,32 +22,30 @@
<div class="amount">{{tx.amountStr}}</div>
<div class="alternative" ng-show="tx.alternativeAmountStr">{{tx.alternativeAmountStr}}</div>
</div>
</div>
<div class="row" ng-if="tx.removed">
<div class="column m20t text-center text-warning size-12" translate>
<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 ng-show="tx.status != 'pending'">
<div ng-show="tx.status=='accepted' && !tx.isGlidera">
<div class="m10b" translate>Payment accepted, but not yet broadcasted</div>
<button class="button button-balanced button-block" ng-style="{'background-color':color}" ng-click="broadcast(tx)" ng-disabled="loading">
<i class="fi-upload-cloud"></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 class="item" ng-show="!currentSpendUnconfirmed && tx.hasUnconfirmedInputs">
<span class="text-warning" translate>Warning: this transaction has unconfirmed inputs</span>
<div class="item assertive text-center" ng-show="!currentSpendUnconfirmed && tx.hasUnconfirmedInputs" translate>
Warning: this transaction has unconfirmed inputs
</div>
<div class="info">
@ -55,7 +53,7 @@
<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="enable_text_select ellipsis" address="{{tx.toAddress}}"></contact>
<contact ng-if="!tx.hasMultiplesOutputs" class="ellipsis" address="{{tx.toAddress}}"></contact>
<span ng-if="tx.hasMultiplesOutputs" translate>Multiple recipients</span>
</span>
</div>
@ -73,61 +71,61 @@
</div>
<div class="item">
<span translate>From</span>
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}" class="bg"/>
</i>
<span>
{{wallet.name}}
{{'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">
<span translate>Created by</span>
<span>
{{'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">
<span translate>Memo</span>
<span>
{{'Memo'|translate}}
<span class="item-note">
{{tx.message}}
</span>
</div>
<div class="item">
<span translate>Fee</span>
<span>
{{'Fee'|translate}}
<span class="item-note">
{{tx.feeStr}}
</span>
</div>
<div ng-if="tx.paypro">
<div class="item item-divider" translate>Payment details</div>
<li class="item">
<span class="text-gray" translate>To</span>
<span class="right">
<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>
</li>
<li class="item" ng-if="paymentExpired">
<span class="text-gray" translate>Expired</span>
<span class="right text-alert">
</div>
<div class="item" ng-if="paymentExpired">
{{'Expired'|translate}}
<span class="item-note">
<time>{{tx.paypro.expires * 1000 | amTimeAgo }}</time>
</span>
</li>
<li class="item" ng-if="!paymentExpired">
<span class="text-gray" translate>Expires</span>
<span class="right">
</div>
<div class="item" ng-if="!paymentExpired">
{{'Expires'|translate}}
<span class="item-note">
<time>{{expires}}</time>
</span>
</li>
<li class="item">
<span class="text-gray" translate>Merchant Message</span>
<span class="db">{{tx.paypro.pr.pd.memo}}</span>
</li>
</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>
@ -151,16 +149,20 @@
</div>
</div>
</div>
<div class="m20t" ng-if="tx.canBeRemoved || (tx.status == 'accepted' && !tx.broadcastedOn)">
<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-block" ng-click="remove()" ng-disabled="loading">
<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>
<button class="button button-block button-positive" ng-click="approve()" ng-if="tx.pendingForUs && canSign && !loading && !paymentExpired && !isCordova" translate>Click to pay</button>
</ion-content>
<accept class="accept-slide" ng-if="tx.pendingForUs && canSign && !loading && !paymentExpired && isCordova"></accept>
</ion-modal-view>

View file

@ -19,7 +19,7 @@
<div class="cta-buttons">
<div class="row">
<button class="button button-block button-positive col-75 col" href
ui-sref="onboarding.backupWarning({walletId: walletId})" translate>Backup wallet</button>
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>

View file

@ -21,9 +21,11 @@
<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">
<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 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>

View file

@ -40,7 +40,7 @@
<div class="item item-divider" translate>
Security
</div>
<a class="item item-icon-right" ui-sref="tabs.preferences.backup" ng-hide="wallet.isPrivKeyExternal()">
<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 nav-item-arrow-right"></i>
</a>

View file

@ -1,5 +1,6 @@
<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>

View file

@ -5,13 +5,17 @@
</ion-nav-back-button>
</ion-nav-bar>
<ion-content>
<div class="card">
<h1 class="text-center" translate>Warning!</h2>
<div class="assertive padding" translate>Permanently delete this wallet. THIS ACTION CANNOT BE REVERSED</div>
<div class="text-center padding">
<span ng-show="alias">{{alias}}</span>{{walletName}}
<div class="white-bg padding">
<h1 class="text-center assertive" translate>Warning!</h2>
<div class="padding text-center">
<p translate>
Permanently delete this wallet.
</p>
<p translate class="bold-text">
THIS ACTION CANNOT BE REVERSED
</p>
</div>
</div>
<button class="button button-block button-assertive" ng-click="showDeletePopup()"translate>Delete</button>
<button class="button button-block button-assertive" ng-click="showDeletePopup()"translate>Delete <span ng-show="alias">{{alias}}</span>{{walletName}}</button>
</ion-content>
</ion-view>

View 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>

View file

@ -4,7 +4,7 @@
</ion-nav-bar>
<ion-content class="padding">
<div class="list card homeTip" ng-show="homeTip">
<div class="list card homeTip" ng-if="homeTip">
<div class="item item-icon-right item-heading">
<a ng-click="hideHomeTip()"><i class="icon ion-ios-close-empty close-home-tip"></i></a>
</div>
@ -22,11 +22,10 @@
</div>
<div class="list card" ng-hide="!txps[0]">
<a class="item item-icon-right item-heading" ui-sref="tabs.proposals" translate>
Payment Proposals
<a class="item item-icon-right item-heading" ui-sref="tabs.proposals">
{{'Payment Proposals'|translate}}
<i class="icon nav-item-arrow-right"></i>
<span class="badge badge-assertive" ng-show="txpsN>3" translate> {{txpsN}}</span>
<span class="badge badge-assertive m5t m10r" ng-show="txpsN>3"> {{txpsN}}</span>
</a>
<a ng-repeat="tx in txps" class="item" ng-click="openTxpModal(tx)">
@ -34,9 +33,9 @@
</a>
</div>
<div class="list card" ng-if="notifications[0]">
<div class="list card" ng-if="notifications[0] && recentTransactionsEnabled">
<a class="item item-icon-right item-heading" ui-sref="tabs.activity">
<span translate>Recent Activity</span>
<span translate>Recent Transactions</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<span ng-if="fetchingNotifications" class="item text-center">
@ -61,50 +60,51 @@
</i>
<h2>
{{wallet.name || wallet.id}}
<span class="size-12 text-light" ng-show="wallet.n > 1">
<span class="size-12 text-light" ng-if="wallet.n > 1">
{{wallet.m}}-of-{{wallet.n}}
</span>
</h2>
<p>
<span ng-show="!wallet.isComplete()" class="assertive" translate>
<span ng-if="!wallet.isComplete()" class="assertive" translate>
Incomplete
</span>
<div ng-show="wallet.isComplete()">
<span ng-show="!wallet.balanceHidden">{{wallet.status.availableBalanceStr}}</span>
<span ng-show="wallet.balanceHidden" translate>[Balance Hidden]</span>
<div ng-if="wallet.isComplete()">
<span ng-if="!wallet.balanceHidden">{{wallet.status.availableBalanceStr}}</span>
<span ng-if="wallet.balanceHidden" translate>[Balance Hidden]</span>
</div>
</p>
<i class="icon nav-item-arrow-right"></i>
</a>
<a ui-sref="bitpayCard.main"
ng-show="externalServices.BitpayCard"
<a ui-sref="tabs.bitpayCard"
ng-if="externalServices.BitpayCard"
class="item item-icon-left item-big-icon-left item-icon-right">
<i class="icon big-icon-svg">
<div class="bg icon-bitpay-card"></div>
</i>
<h2>BitPay Card</h2>
<p translate>Add funds to get started</p>
<p ng-if="!bitpayCard" translate>Add funds to get started</p>
<span ng-if="bitpayCard">${{bitpayCard.balance}}</span>
<i class="icon nav-item-arrow-right"></i>
</a>
</div>
<div class="list card" ng-show="externalServices.BuyAndSell && (glideraEnabled || coinbaseEnabled)">
<div class="list card" ng-if="externalServices.BuyAndSell && (glideraEnabled || coinbaseEnabled)">
<div class="item item-icon-right item-heading" translate>
Buy &amp; Sell Bitcoin
<a ui-sref="tabs.buyandsell"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
</div>
<a ng-show="glideraEnabled" ui-sref="tabs.buyandsell.glidera" class="item item-icon-right">
<a ng-if="glideraEnabled" ui-sref="tabs.buyandsell.glidera" class="item item-icon-right">
<img src="img/glidera-logo.png" width="90"/>
<i class="icon nav-item-arrow-right"></i>
</a>
<!-- disable coinbase for this release -->
<!-- <a ng-show="coinbaseEnabled" ui-sref="exchange.coinbase" class="item">
<!-- <a ng-if="coinbaseEnabled" ui-sref="exchange.coinbase" class="item">
<img src="img/coinbase-logo.png" width="90"> TODO
</a> -->
</div>
<div class="list card" ng-show="externalServices.AmazonGiftCards">
<div class="list card" ng-if="externalServices.AmazonGiftCards">
<a class="item item-icon-left item-icon-right item-big-icon-left" ui-sref="tabs.giftcards.amazon">
<i class="icon big-icon-svg">
<div class="bg icon-gift"></div>
@ -115,38 +115,42 @@
</div>
<div class="list card"
ng-show="!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell || !wallets[0]">
<div class="item item-heading" translate>
ng-if="(!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell || !wallets[0]) && nextStepEnabled">
<div class="item item-icon-right item-heading" ng-click="shouldHideNextSteps()" translate>
Next steps
<i class="icon nav-item-arrow-down" ng-if="!hideNextSteps"></i>
<i class="icon nav-item-arrow-up" ng-if="hideNextSteps"></i>
</div>
<div ng-if="!hideNextSteps">
<a ng-if="!wallets[0]" ui-sref="tabs.add" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-create-wallet"></div>
</i>
<span translate>Create a bitcoin wallet</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a ui-sref="bitpayCard.main" ng-if="!externalServices.BitpayCard && bitpayCardEnabled" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-bitpay-card"></div>
</i>
<span translate>Add BitPay Card</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a ng-if="!externalServices.BuyAndSell && (coinbaseEnabled || glideraEnabled)" ui-sref="tabs.buyandsell" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-buy-bitcoin"></div>
</i>
<span translate>Buy or Sell Bitcoin</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a ui-sref="tabs.giftcards.amazon" ng-if="!externalServices.AmazonGiftCards && amazonEnabled" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-gift"></div>
</i>
<span translate>Buy Amazon.com Gift Card</span>
<i class="icon nav-item-arrow-right"></i>
</a>
</div>
<a ng-if="!wallets[0]" ui-sref="tabs.add" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-create-wallet"></div>
</i>
<span translate>Create a bitcoin wallet</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a ui-sref="bitpayCard.main" ng-if="!externalServices.BitpayCard" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-bitpay-card"></div>
</i>
<span translate>Add BitPay Card</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a ng-if="!externalServices.BuyAndSell" ui-sref="tabs.buyandsell" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-buy-bitcoin"></div>
</i>
<span translate>Buy or Sell Bitcoin</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a ui-sref="tabs.giftcards.amazon" ng-if="!externalServices.AmazonGiftCards" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<div class="bg icon-gift"></div>
</i>
<span translate>Buy Amazon.com Gift Card</span>
<i class="icon nav-item-arrow-right"></i>
</a>
</div>
<p class="padding" style="text-align:center; color:#999">

View file

@ -8,42 +8,67 @@
</ion-nav-buttons>
</ion-nav-bar>
<ion-content>
<article id="address">
<div class="row">
<div class="m15t text-center col center-block" copy-to-clipboard="addr">
<qrcode ng-if="addr" size="220" data="bitcoin:{{addr}}"></qrcode>
<div ng-if="!addr" style="height:220px; width:220px; margin:auto; background: white; padding-top: 20%;">
...
<div id="address">
<article class="text-center" ng-if="!wallet.isComplete()">
<div class="incomplete">
<div class="title">
<span translate>Incomplete wallet</span>
</div>
<div ng-if="wallet.needsBackup" class="assertive m10t" translate>
Before receiving funds, you must backup your wallet. If this device is lost, it is impossible to access your funds without a backup.
<div class="subtitle">
<span translate>All signing devices must be added to this multisig wallet before bitcoin addresses can be created.</span>
</div>
<div>
<button class="button button-block button-positive" ng-click="goCopayers()" translate>Open wallet</button>
</div>
</div>
</div>
<div class="row">
<div class="col" ng-show="isCordova && addr">
<div class="item item-icon-left" ng-click="shareAddress(addr)">
<i class="icon ion-ios-upload-outline"></i>
<span translate>Share</span>
<div class="row border-top">
<div class="col col-90 center-block bit-address text-center">
<div class="item item-icon-left">
<i class="icon ion-social-bitcoin-outline"></i>
<span class="bit-address-gen-address" ng-if="!generatingAddress" translate>address not yet available</span>
</div>
</div>
</div>
<div class="col" ng-class="{'center-block col-50': !isCordova || !addr}">
<div class="item item-icon-left" ng-click="setAddress(true)">
<i class="icon ion-ios-loop"></i>
<span translate>Next Address</span>
</article>
<article ng-if="wallet.isComplete()">
<div class="row backup" ng-show="!wallet.showBackupNeededModal && wallet.needsBackup" ng-click="goToBackupFlow()">
<div class="m15t text-center col center-block">
<i class="icon ion-alert"></i><span translate>Wallet not backed up</span><i class="icon ion-ios-arrow-thin-right"></i>
</div>
</div>
</div>
<div class="row border-top">
<div class="col col-90 center-block bit-address text-center">
<div class="item item-icon-left">
<i class="icon ion-social-bitcoin-outline"></i>
<span ng-if="generatingAddress">...</span>
<span class="bit-address-gen-address" ng-if="!generatingAddress" copy-to-clipboard="addr">{{addr}}</span>
<div class="row qr">
<div class="m15t text-center col center-block" copy-to-clipboard="addr">
<qrcode ng-if="addr" size="220" data="bitcoin:{{addr}}"></qrcode>
<div ng-if="!addr" style="height:220px; width:220px; margin:auto; background: white; padding-top: 20%;">
...
</div>
</div>
</div>
</div>
</article>
<div class="row">
<div class="col" ng-show="isCordova && addr">
<div class="item item-icon-left" ng-click="shareAddress(addr)">
<i class="icon ion-ios-upload-outline"></i>
<span translate>Share</span>
</div>
</div>
<div class="col" ng-class="{'center-block col-50': !isCordova || !addr}">
<div class="item item-icon-left" ng-click="setAddress(true)">
<i class="icon ion-ios-loop"></i>
<span translate>Next Address</span>
</div>
</div>
</div>
<div class="row border-top">
<div class="col col-90 center-block bit-address text-center">
<div class="item item-icon-left">
<i class="icon ion-social-bitcoin-outline"></i>
<span ng-if="generatingAddress">...</span>
<span class="bit-address-gen-address" ng-if="!generatingAddress" copy-to-clipboard="addr">{{addr}}</span>
</div>
</div>
</div>
</article>
</div>
<article id="wallets">
<div class="list card padding text-center" ng-if="!wallets[0]">
<span translate>No Wallet</span>

View file

@ -4,42 +4,47 @@
</ion-nav-bar>
<ion-content>
<div>
<div class="item item-heading" translate>Recipient</div>
<label class="item item-input bitcoin-address">
<i class="icon ion-search placeholder-icon"></i>
<div class="item item-heading" translate>Recipient</div>
<label class="item item-input bitcoin-address">
<i class="icon ion-social-bitcoin placeholder-icon"></i>
<div class="qr-scan-icon" ng-style="{'width': '100%'}">
<qr-scanner class="qr-icon size-24" ng-style="{'top': '3px'}" on-scan="onQrCodeScanned(data)"></qr-scanner>
<input type="text"
placeholder="Search or enter bitcoin address"
placeholder="{{'Search or enter bitcoin address' | translate}}"
ng-model="formData.search"
ng-change="findContact(formData.search)"
ng-model-onblur>
</label>
</div>
</div>
</label>
<div class="card">
<div class="item item-icon-right item-heading">
<span translate>Contacts</span>
<a ui-sref="tabs.send.addressbook"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
<a ng-show="hasContacts" ui-sref="tabs.send.addressbook"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
</div>
<a class="item item-icon-left ng-hide" ng-show="!hasContacts" ui-sref="tabs.send.addressbook">
<a class="item item-icon-left item-icon-right ng-hide" ng-show="!hasContacts" ui-sref="tabs.send.addressbook">
<gravatar class="send-gravatar" name="" width="30" email=""></gravatar>
<span translate>Add a Contact</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a class="item item-icon-left ng-hide" ng-repeat="item in list" ng-show="hasContacts && !item.isWallet" ng-click="goToAmount(item)">
<a class="item item-icon-left item-icon-right ng-hide" ng-repeat="item in list" ng-show="hasContacts && !item.isWallet" ng-click="goToAmount(item)">
<gravatar class="send-gravatar" name="{{item.name}}" width="30" email="{{item.email}}"></gravatar>
{{item.name}}
<i class="icon nav-item-arrow-right"></i>
</a>
<div class="show-more" ng-show="contactsShowMore" ng-click="showMore()" translate>
Show more
</div>
</div>
<div class="card">
<div class="card" ng-show="hasWallets && !oneWallet">
<div class="item item-heading">
<span translate>Transfer to Wallet</span>
</div>
<div class="item text-center ng-hide" ng-show="!hasWallets" translate>No Wallet</div>
<a class="item item-icon-left ng-hide" ng-repeat="item in list" ng-show="hasWallets && item.isWallet" ng-click="goToAmount(item)">
<a class="item item-icon-left item-icon-right ng-hide" ng-repeat="item in list" ng-show="hasWallets && item.isWallet" ng-click="goToAmount(item)">
<i ng-show="item.isWallet" class="icon ion-briefcase size-21" ng-style="{'color':item.color}"></i>
<gravatar class="send-gravatar" ng-show="!item.isWallet" name="{{item.name}}" width="30" email="{{item.email}}"></gravatar>
{{item.name}}
<i class="icon nav-item-arrow-right"></i>
</a>
</div>
</ion-content>

View file

@ -14,6 +14,12 @@
<div class="item item-divider" translate>Preferences</div>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.notifications" ng-show="usePushNotifications">
<i class="icon ion-ios-bell-outline"></i>
<span translate>Notifications</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.language">
<i class="icon ion-ios-chatbubble-outline"></i>
<span translate>Language</span>
@ -50,43 +56,6 @@
<i class="icon nav-item-arrow-right"></i>
</a>
<div class="item item-divider" translate>Exchanges</div>
<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>Others</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 ng-show="usePushNotifications && 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="usePushNotifications && !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 class="item item-divider" translate>Wallets Preferences</div>
<a class="item item-icon-left item-icon-right" href
ui-sref="tabs.preferences({'walletId': item.id})"
@ -102,6 +71,12 @@
<i class="icon nav-item-arrow-right"></i>
</a>
<div class="item item-divider"></div>
<a class="item item-icon-right" href ui-sref="tabs.advanced">
<span translate>Advanced</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<div class="item item-divider"></div>
<a class="item item-icon-left item-icon-right" href ui-sref="tabs.about">
<i class="icon ion-ios-information-outline"></i>

View file

@ -3,13 +3,13 @@ Create tabs with an icon and label, using the tabs-positive style.
Each tab's child <ion-nav-view> directive will have its own
navigation history that also transitions its views in and out.
-->
<ion-tabs class="tabs-icon-top tabs-color-active-positive" ng-controller="tabsController">
<ion-tabs class="tabs-icon-top tabs-color-active-positive" ng-class="{'tabs-item-hide': hideTabs}">
<ion-tab title="Home" icon-off="ico-home" icon-on="ico-home-selected" href="#/tabs/home">
<ion-tab title="Home" icon-off="ico-home" icon-on="ico-home-selected" ui-sref="tabs.home">
<ion-nav-view name="tab-home"></ion-nav-view>
</ion-tab>
<ion-tab title="Receive" icon-off="ico-receive" icon-on="ico-receive-selected" href="#/tabs/receive">
<ion-tab title="Receive" icon-off="ico-receive" icon-on="ico-receive-selected" ui-sref="tabs.receive">
<ion-nav-view name="tab-receive"></ion-nav-view>
</ion-tab>
@ -21,7 +21,7 @@ navigation history that also transitions its views in and out.
<ion-tab title="Scan" icon-off="ico-scan" ng-click="scan()" >
</ion-tab>
<ion-tab title="Send" icon-off="ico-send" icon-on="ico-send-selected" href="#/tabs/send">
<ion-tab title="Send" icon-off="ico-send" icon-on="ico-send-selected" ui-sref="tabs.send">
<ion-nav-view name="tab-send"></ion-nav-view>
</ion-tab>

View file

@ -112,7 +112,7 @@
translate>No transactions yet {{status.totalBalanceStr}}
</div>
<div ng-show="updatingTxHistory" class="updatingHistory">
<div ng-show="updatingTxHistory && updatingTxHistoryProgress>5" class="updatingHistory">
<div class="row" >
<ion-spinner class="spinner-dark" icon="lines"></ion-spinner>
</div>