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

# Conflicts:
#	public/views/includes/confirmBackupPopup.html
#	src/js/controllers/backup.js
This commit is contained in:
Jamal Jackson 2016-09-13 14:26:25 -04:00
commit d39f69531d
49 changed files with 1108 additions and 636 deletions

View file

@ -0,0 +1,63 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button button-clear" ui-sref="tabs.addressbook">
<i class="icon ion-ios-arrow-thin-left"></i>
</button>
</ion-nav-buttons>
<ion-nav-title>
<span translate>Add entry</span>
</ion-nav-title>
</ion-nav-bar>
<ion-content>
<form name="addressbookForm" no-validate>
<div class="card 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"
name="email"
ng-model="addressbookEntry.email">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>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>

View file

@ -0,0 +1,52 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button button-clear" ui-sref="tabs.settings">
<i class="icon ion-ios-arrow-thin-left"></i>
</button>
</ion-nav-buttons>
<ion-nav-title>
<span translate>Addressbook</span>
</ion-nav-title>
<ion-nav-buttons side="secondary">
<button class="button button-clear" ui-sref="tabs.addressbook.add">
<i class="icon ion-ios-plus-empty"></i>
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-content ng-init="initAddressbook()">
<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-left item-icon-right"
ui-sref="tabs.addressbook.view({address:addrEntry.address})">
<i class="icon ion-ios-person-outline"></i>
{{addrEntry.name}}
<i class="icon nav-item-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="list" ng-show="isEmptyList">
<a class="item item-icon-left" ui-sref="tabs.addressbook.add">
<i class="icon ion-person-add"></i>
<span translate>Add a new entry</span>
</a>
</div>
</ion-content>
</ion-view>

View file

@ -0,0 +1,36 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-buttons side="primary">
<button class="button button-clear" ui-sref="tabs.addressbook">
<i class="icon ion-ios-arrow-thin-left"></i>
</button>
</ion-nav-buttons>
<ion-nav-title>
<span translate>Addressbook</span>
</ion-nav-title>
</ion-nav-bar>
<ion-content>
<div class="card">
<div class="item item-text-wrap">
<h3 translate>Name</h3>
<strong>{{addressbookEntry.name}}</strong>
</div>
<div class="item item-text-wrap">
<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>

View file

@ -1,28 +0,0 @@
<nav ng-controller="topbarController as topbar"
class="tab-bar" ng-style="{'background-color': noColor ? '#4B6178' : index.backgroundColor}">
<section class="left-small">
<a id="hamburger" class="p10" ng-show="!goBackToState && !closeToHome && !index.noFocusedWallet && index.physicalScreenWidth < 768"
on-tap="index.toggleLeftMenu()"><i class="fi-list size-24"></i>
</a>
<a ng-show="goBackToState" ng-click="$root.go(goBackToState); goBackToState = null"><i class="icon-arrow-left3 icon-back"></i>
<span class="text-back" translate>Back</span>
</a>
<a ng-show="closeToHome" class="p10 "
ng-click="topbar.goHome(); index.setCompactTxHistory(); closeToHome = null">
<span class="text-close" translate>Close</span>
</a>
</section>
<section class="right-small" ng-show="showPreferences && !index.noFocusedWallet">
<a class="p10" ng-click="topbar.goPreferences(); index.setCompactTxHistory()">
<i class="fi-widget size-24"></i>
</a>
</section>
<section class="middle tab-bar-section">
<h1 class="title ellipsis">
{{(titleSection|translate) || (index.alias || index.walletName)}}
</h1>
</section>
</nav>

View file

@ -1,96 +0,0 @@
<ion-modal-view ng-controller="addressbookModalController" ng-init="initAddressbook()">
<ion-header-bar align-title="center" class="bar-royal">
<button class="button button-clear" ng-click="closeAddressbookModal()">
Close
</button>
<div class="h1 title">
<span ng-show="!addAddressbookEntry" translate>Addressbook</span>
<span ng-show="addAddressbookEntry" translate>Add entry</span>
</div>
<button class="button button-clear"
ng-click="toggleAddAddressbookEntry()">
<i ng-show="!addAddressbookEntry" class="icon ion-ios-plus-empty"></i>
<span ng-show="addAddressbookEntry" translate>Cancel</span>
</button>
</ion-header-bar>
<ion-content>
<div class="bar bar-header item-input-inset" ng-show="!addAddressbookEntry && !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>
<div ng-show="!addAddressbookEntry">
<ion-list>
<ion-item ng-repeat="addrEntry in addressbook"
class="item-icon-left"
ng-show="!addrEntry.isWallet"
ng-click="sendTo(addrEntry)">
<i class="icon ion-ios-person-outline"></i>
<h2>{{addrEntry.label}}</h2>
<p>{{addrEntry.address}}</p>
<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="list" ng-show="isEmptyList">
<a class="item item-icon-left" ng-click="toggleAddAddressbookEntry()">
<i class="icon ion-person-add"></i>
<span translate>Add a new entry</span>
</a>
</div>
</div>
<form name="addressbookForm" ng-show="addAddressbookEntry" no-validate>
<div class="list">
<label class="item item-input item-stacked-label">
<span class="input-label" translate>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>
<label class="item item-input item-stacked-label">
<span class="input-label" translate>Label</span>
<input type="text"
id="label"
name="label"
ng-model="addressbookEntry.label"
required>
</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-modal-view>

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

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

View file

@ -16,12 +16,14 @@
<div class="row text-center">
<i class="ion-ios-arrow-thin-down light-blue col col-60" id="arrow-down"></i>
</div>
<div class="row">
<button class="button button-block button-positive col-75 col" href
ui-sref="onboarding.backupWarning({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 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>
</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>

View file

@ -8,7 +8,7 @@
</ion-nav-bar>
<ion-content>
<div class="row text-center">
<h3 translate class="col col-75">
<h3 translate class="col col-80">
Are you being watched?
</h3>
</div>
@ -18,14 +18,14 @@
</p>
</div>
<div class="row">
<img src="img/onboarding-backup-warning.svg" class="col col-60">
<img src="img/onboarding-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="row">
<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>

View file

@ -1,11 +1,4 @@
<ion-view ng-controller="collectEmailController" id="onboarding-collect-email" class="onboarding">
<ion-nav-bar class="bar-overlay">
<ion-nav-buttons side="right">
<button class="button button-block button-positive button-clear" ng-click="onboardingMailSkip()">
{{'Skip' | translate}}
</button>
</ion-nav-buttons>
</ion-nav-bar>
<ion-content>
<div class="row">
<img src="img/onboarding-success.svg" class="col col-75" id="success-image" />
@ -14,16 +7,42 @@
<h3 translate class="col">Wallet Created</h3>
</div>
<div id="collect-email">
<div class="row text-center">
<p translate class="col col-75 center-block">Where would you like to receive email notifications about payments? </p>
<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" laceholder="satoshi@example.com" required></input>
</label>
</form>
</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="onboardingMailSkip()">
{{'Skip' | translate}}
</button>
</div>
<form name="emailForm" ng-submit="save(emailForm)" novalidate>
<label class="item item-input col col-75 center-block">
<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>
</div>
<div class="overlay collect-overlay"></div>
</ion-content>
</ion-view>

View file

@ -30,7 +30,7 @@
Just scan the code to pay
</p>
</div>
<div class="row">
<div class="row cta-button">
<button class="button button-positive col col-75 next-slide" ng-click="slideNext()">
Got it <i class="icon ion-ios-arrow-thin-right"></i>
</button>
@ -54,9 +54,9 @@
The exchange rate changes with the market
</p>
</div>
<div class="row">
<div class="row cta-button">
<button class="button button-positive col col-75 next-slide" ng-click="slideNext()">
Makes sense <i class="icon ion-arrow-right-c"></i>
Makes sense <i class="icon ion-ios-arrow-thin-right"></i>
</button>
</div>
</ion-content>
@ -78,7 +78,7 @@
Not even BitPay can access it
</p>
</div>
<div class="row">
<div class="row cta-button">
<button class="button button-positive col col-75 get-started" ng-click="createDefaultWallet()">
Create bitcoin wallet
</button>

View file

@ -1,84 +1,100 @@
<div
class="topbar-container"
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Sweep paper wallet'; goBackToState = 'preferencesAdvanced';">
</div>
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-title>{{'Sweep paper wallet' | translate}}</ion-nav-title>
<ion-nav-back-button>
<i class="icon ion-ios-arrow-thin-left"></i>
</ion-nav-back-button>
</ion-nav-bar>
<div class="content preferences" ng-controller="paperWalletController">
<div class="row" ng-show="index.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>
<ion-content ng-controller="paperWalletController" ng-init="init()">
<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 class="text-center m20t">
<a class="button outline round dark-gray" href ui-sref="preferences" >
<span translate>Preferences</span>
</a>
</div>
</div>
</div>
<div ng-show="!index.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" class="oh">
<div class="row">
<div class="large-12 medium-12 columns">
<div class="input">
<label for="inputData" translate>Paper Wallet Private Key</label>
<input type="text" placeholder="{{'Paste your paper wallet private key here'|translate}}" ng-model="inputData" id="inputData" ng-change="onData(inputData)">
<div class="qr-scanner-input">
<qr-scanner on-scan="onQrCodeScanned(data)"></qr-scanner>
</div>
<div ng-show="isPkEncrypted">
<label for="passphrase">
<span translate>Password</span>
<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>
<input id="passphrase" type="password" name="passphrase" placeholder="{{'Passphrase'|translate}}" ng-model="passphrase">
<p ng-show="index.isCordova" translate class="size-12 text-gray">
</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>
<button
ng-disabled="scanning || !scannedKey"
ng-style="{'background-color':index.backgroundColor}"
class="button black round expand"
ng-click="scanFunds()"
translate>Scan Wallet Funds
</button>
</div>
</div>
</div>
</form>
<div ng-show="balance" class="row">
<div class="large-12 medium-12 columns">
<div class="text-center m20b">
<h4 class="text-bold" translate>Funds found</h4>
<div class="size-24">
{{balance}}
</div>
</div>
<button
ng-disabled="sending || balanceSat <= 0"
ng-style="{'background-color':index.backgroundColor}"
class="button black round expand"
ng-click="sweepWallet()"
translate>Sweep Wallet
<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>
<div class="text-center size-12 text-gray">
<span translate>Funds will be transferred to</span>:
<b>{{index.alias || index.walletName}}</b>
</div>
</div>
</div>
<div class="extra-margin-bottom"></div>
</ion-content>
</ion-view>

View file

@ -5,7 +5,7 @@
<i class="icon ion-ios-arrow-thin-left"></i>
</ion-nav-back-button>
</ion-nav-bar>
<ion-content>
<ion-content ng-controller="preferencesAdvancedController">
<div class="list">
<div class="item item-divider">
</div>
@ -13,7 +13,7 @@
<span translate>Wallet Information</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<a class="item item-icon-right" ng-show="index.network == 'livenet'" ui-sref="tabs.preferences.paperWallet">
<a class="item item-icon-right" ng-show="network == 'livenet'" ui-sref="tabs.preferences.paperWallet">
<span translate>Sweep paper wallet</span>
<i class="icon nav-item-arrow-right"></i>
</a>

View file

@ -1,86 +0,0 @@
<div class="topbar-container" ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Global preferences'; closeToHome = true; noColor = true">
</div>
<div class="content preferences" ng-controller="preferencesGlobalController" ng-init="init()">
<h4></h4>
<ul>
<li href ui-sref="preferencesLanguage">
<div class="right text-gray">
{{currentLanguageName|translate}}
<i class="icon-arrow-right3 size-24 right"></i>
</div>
<div translate>Language</div>
</li>
</ul>
<h4></h4>
<ul class="no-bullet m0">
<li href ui-sref="preferencesUnit">
<div class="right text-gray">
{{unitName}}
<i class="icon-arrow-right3 size-24 right"></i>
</div>
<div translate>Unit</div>
</li>
<li href ui-sref="preferencesAltCurrency">
<div class="right text-gray">
{{selectedAlternative.name}}
<i class="icon-arrow-right3 size-24 right"></i>
</div>
<div translate>Alternative Currency</div>
</li>
</ul>
<h4></h4>
<ul class="no-bullet m0">
<li href ui-sref="preferencesFee">
<div class="right text-gray">
{{feeOpts[currentFeeLevel]|translate}}
<i class="icon-arrow-right3 size-24 right"></i>
</div>
<div translate>Bitcoin Network Fee Policy</div>
</li>
</ul>
<ion-toggle ng-model="spendUnconfirmed" toggle-class="toggle-balanced" ng-change="spendUnconfirmedChange()">
<span class="toggle-label" translate>Use Unconfirmed Funds</span>
</ion-toggle>
<div ng-show="usePushNotifications && PNEnabledByUser">
<h4></h4>
<ion-toggle ng-model="pushNotifications" toggle-class="toggle-balanced" ng-change="pushNotificationsChange()">
<span class="toggle-label" translate>Enable push notifications</span>
</ion-toggle>
</div>
<div class="m20t" ng-show="usePushNotifications && !PNEnabledByUser && isIOSApp">
<div class="text-left text-gray size-12 m10" translate>Push notifications for Copay are currently disabled. Enable them in the Settings app.</div>
<ul class="no-bullet m0" ng-click="openSettings()">
<li ng-style="{'color':index.backgroundColor}" translate>Open Settings app</li>
</ul>
</div>
<h4></h4>
<ion-toggle ng-show="!index.isWindowsPhoneApp" ng-model="glideraEnabled" toggle-class="toggle-balanced" ng-change="glideraChange()">
<span class="toggle-label" translate>Enable Glidera Service</span>
</ion-toggle>
<h4></h4>
<ion-toggle ng-show="!index.isWindowsPhoneApp" ng-model="coinbaseEnabled" toggle-class="toggle-balanced" ng-change="coinbaseChange()">
<span class="toggle-label" translate>Enable Coinbase Service</span>
</ion-toggle>
<h4></h4>
<ul class="no-bullet m0">
<li href ui-sref="about">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>About Copay</div>
</li>
</ul>
<h4></h4>
</div>
<div class="extra-margin-bottom"></div>

View file

@ -4,12 +4,12 @@
<i class="icon ion-ios-arrow-thin-left"></i>
</ion-nav-back-button>
</ion-nav-bar>
<ion-content ng-controller="preferencesHistory" ng-init="index.updatingTxHistory ? null : csvHistory()">
<ion-content ng-controller="preferencesHistory" ng-init="csvHistory()">
<div class="item item-divider"></div>
<div class="item" ng-show="csvReady && !index.isCordova" ng-csv="csvContent" csv-header="csvHeader" filename="Copay-{{wallet.name}}.csv">
<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 && !index.isCordova">
<div class="item" ng-show="!csvReady && !isCordova">
<span translate>Export to file</span>
<span class="item-note" translate>
preparing...

View file

@ -17,15 +17,15 @@
</div>
<div class="card" ng-if="list[0]">
<div class="item item-heading item-icon-right">
<div class="item item-heading item-icon-right" ui-sref="tabs.addressbook">
<span translate>Contacts & Wallets</span>
<i class="icon ion-person-add" ng-click="openAddressbookModal()"></i>
<i class="icon nav-item-arrow-right"></i>
</div>
<div class="item text-center" ng-show="!list[0]" translate>No Wallet - Contact</div>
<a class="item item-icon-left" ng-repeat="item in list" ng-click="goToAmount(item)">
<i ng-show="item.isWallet" class="icon ion-briefcase size-21" ng-style="{'color':item.color}"></i>
<i ng-show="!item.isWallet" class="icon ion-ios-person-outline"></i>
{{item.label}}
{{item.name}}
</a>
</div>
</ion-content>

View file

@ -6,9 +6,10 @@
<ion-content ng-controller="tabSettingsController" ng-init="init()">
<div class="list">
<div class="item item-divider"></div>
<a class="item item-icon-left" ng-click="openAddressbookModal()">
<a class="item item-icon-left item-icon-right" ui-sref="tabs.addressbook">
<i class="icon ion-ios-book-outline"></i>
<span translate>Address Book</span>
<i class="icon nav-item-arrow-right"></i>
</a>
<div class="item item-divider" translate>Preferences</div>