Merge branch 'ref/design' of https://github.com/bitpay/bitpay-wallet into feature/onboarding_last_steps
This commit is contained in:
commit
4af098764d
23 changed files with 690 additions and 421 deletions
|
|
@ -10,8 +10,13 @@
|
|||
|
||||
<ion-content>
|
||||
<ion-list>
|
||||
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.create">
|
||||
<h2 translate>Create new wallet</h2>
|
||||
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.create-personal">
|
||||
<h2 translate>New Personal Wallet</h2>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
<a class="item item-remove-animate item-icon-right" type="item-text-wrap" ui-sref="tabs.create-shared">
|
||||
<h2 translate>Create Shared Wallet</h2>
|
||||
<i class="icon nav-item-arrow-right"></i>
|
||||
</a>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<ion-view>
|
||||
<ion-view id="view-amount">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-buttons side="primary">
|
||||
<button class="button back-button" ng-click="$ionicGoBack()">
|
||||
|
|
@ -7,24 +7,26 @@
|
|||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content class="calculator" scroll="false" class="amount" ng-controller="amountController" ng-init="init()">
|
||||
<ion-content scroll="false" class="amount" ng-controller="amountController" ng-init="init()">
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-divider" translate>Recipient</div>
|
||||
<div>
|
||||
<div class="item item-no-bottom-border" translate>Recipient</div>
|
||||
|
||||
<div class="item item-text-wrap item-icon-left">
|
||||
<div class="item item-text-wrap item-icon-left bitcoin-address">
|
||||
<i class="icon ion-ios-person-outline"></i>
|
||||
{{toName || toAddress}}
|
||||
<span>{{toName || toAddress}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="item item-divider" translate>Amount</div>
|
||||
<div class="amount-pane">
|
||||
|
||||
<div class="item item-text-wrap item-button-right">
|
||||
<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>
|
||||
|
|
@ -33,45 +35,42 @@
|
|||
{{globalResult}} <span class="label gray text-white radius">{{alternativeResult || '0.00'}} {{unitName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="button-calc">
|
||||
<div class="row m5b">
|
||||
<button class="col columns col-25 text-center m0 operator" ng-click="resetAmount()">
|
||||
AC
|
||||
</button>
|
||||
<button class="col columns text-center text-white m0"
|
||||
ng-style="{'background-color':recipientColor || '#4b6178'}"
|
||||
<div class="keypad">
|
||||
<div class="row">
|
||||
<div class="col col-25 col-offset-75 operator-send"
|
||||
ng-disabled="alternativeResult <= 0 && amountResult <= 0" ng-click="finish()">
|
||||
OK
|
||||
</button>
|
||||
<i class="icon ion-ios-arrow-thin-right"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-center">
|
||||
<div class="col columns" ng-click="pushDigit('7')">7</div>
|
||||
<div class="col columns" ng-click="pushDigit('8')">8</div>
|
||||
<div class="col columns" ng-click="pushDigit('9')">9</div>
|
||||
<div class="col columns operator" ng-click="pushOperator('/')">/</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 text-center">
|
||||
<div class="col columns" ng-click="pushDigit('4')">4</div>
|
||||
<div class="col columns" ng-click="pushDigit('5')">5</div>
|
||||
<div class="col columns" ng-click="pushDigit('6')">6</div>
|
||||
<div class="col columns operator" ng-click="pushOperator('x')">x</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 text-center">
|
||||
<div class="col columns" ng-click="pushDigit('1')">1</div>
|
||||
<div class="col columns" ng-click="pushDigit('2')">2</div>
|
||||
<div class="col columns" ng-click="pushDigit('3')">3</div>
|
||||
<div class="col columns operator" ng-click="pushOperator('+')">+</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 text-center">
|
||||
<div class="col columns operator" ng-click="pushDigit('.')">.</div>
|
||||
<div class="col columns" ng-click="pushDigit('0')">0</div>
|
||||
<div class="col columns operator icon ion-arrow-left-a" ng-click="removeDigit()"></div>
|
||||
<div class="col columns operator" ng-click="pushOperator('-')">-</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>
|
||||
|
|
|
|||
|
|
@ -1,22 +0,0 @@
|
|||
<ion-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Create new wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="createController" ng-init="personal = true; init()">
|
||||
<div class="row text-center">
|
||||
<div class="col" ng-click="personal = true; setTotalCopayers(1)" ng-style="personal && {'border-bottom': '2px solid'}">
|
||||
<span class="" translate>Personal Wallet</span>
|
||||
</div>
|
||||
<div class="col" ng-click="personal = false; setTotalCopayers(3)" ng-style="!personal && {'border-bottom': '2px solid'}">
|
||||
<span class="" translate>Shared Wallet</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-include="'views/tab-create-personal.html'" ng-if="personal"></div>
|
||||
<div ng-include="'views/tab-create-shared.html'" ng-if="!personal"></div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
@ -1,16 +1,18 @@
|
|||
<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="item item-icon-left item-icon-right">
|
||||
<i class="icon ion-briefcase size-21" ng-style="{'color':wallet.color}"></i>
|
||||
{{wallet.name || wallet.id}}
|
||||
<span class="item-note" 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 class="card">
|
||||
<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" 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>
|
||||
</ion-slides>
|
||||
|
|
|
|||
|
|
@ -1,21 +1,21 @@
|
|||
<ion-view id="terms-of-use">
|
||||
<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" href ui-sref="onboarding.disclaimer">
|
||||
<i class="icon ion-arrow-left-c"></i>
|
||||
<button class="button no-border" ng-click="termsModal.hide()">
|
||||
{{'Close' | translate}}
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
<ion-content ng-controller="termsController" ng-init="accept = false;">
|
||||
<ion-content class="has-header">
|
||||
<div ng-include="'views/includes/terms.html'"></div>
|
||||
<div class="padding-vertical" ng-show="lang != 'en'">
|
||||
<a ng-click="openExternalLink(disclaimerUrl)" translate>Official English Disclaimer</a>
|
||||
</div>
|
||||
<div id="agree-to-terms">
|
||||
<ion-checkbox ng-model="accept"></ion-checkbox>
|
||||
<ion-checkbox ng-model="terms.accept3"></ion-checkbox>
|
||||
<p translate>I have read, understood, and agree with the <a ui-sref="onboarding.terms">Terms of use</a>.</p>
|
||||
<button ng-disabled="!accept" class="button button-block button-positive" ng-click="confirm()" translate>Confirm & Finish</button>
|
||||
<button ng-disabled="!terms.accept3" class="button button-block button-positive" ng-click="termsModal.hide(); confirm()" translate>Confirm & Finish</button>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
</ion-modal-view>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<ion-view id="onboarding-disclaimer" class="onboarding">
|
||||
<ion-content ng-controller="disclaimerController" ng-init="accept1 = accept2 = accept3 = false">
|
||||
<ion-content ng-controller="disclaimerController" ng-init=init()>
|
||||
<div class="row text-center">
|
||||
<h3 translate class="col-75 col">Almost done! Let's review</h3>
|
||||
</div>
|
||||
|
|
@ -12,9 +12,10 @@
|
|||
<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 wallet is lost 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="accept3"></ion-checkbox><p translate>I have read, understood, and agree with the <a ui-sref="onboarding.terms" translate>Terms of use</a>.</p>
|
||||
<button ng-disabled="!accept1 || !accept2 || !accept3" class="button button-block button-positive" ng-click="confirm()" translate>Confirm & Finish</button>
|
||||
<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>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -1,88 +1,100 @@
|
|||
<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-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Create Personal Wallet' | translate}}</ion-nav-title>
|
||||
<ion-nav-back-button>
|
||||
<i class="icon ion-ios-arrow-thin-left"></i>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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-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>
|
||||
<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>
|
||||
|
||||
<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 == 'trezor' || seedSource.id == 'ledger'">
|
||||
<span class="input-label" translate>Account Number</span>
|
||||
<input type="number" ng-model="formData.account" ignore-mouse-wheel>
|
||||
</label>
|
||||
|
||||
<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>
|
||||
<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 == '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 == '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>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>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>Derivation Path</span>
|
||||
<input type="text"
|
||||
placeholder="{{'BIP32 path for address derivation'|translate}}"
|
||||
ng-model="formData.derivationPath">
|
||||
</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>
|
||||
|
||||
<ion-toggle ng-show="seedSource.id == 'new'" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
|
||||
<span translate>Testnet</span>
|
||||
</ion-toggle>
|
||||
<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-model="formData.singleAddressEnabled" toggle-class="toggle-positive">
|
||||
<span translate>Single Address Wallet</span>
|
||||
<small translate>For audit purposes</small>
|
||||
</ion-toggle>
|
||||
<ion-toggle ng-show="seedSource.id == 'new'" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
|
||||
<span translate>Testnet</span>
|
||||
</ion-toggle>
|
||||
|
||||
</div> <!-- advanced -->
|
||||
</div> <!-- list -->
|
||||
<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>
|
||||
|
||||
<button type="submit" class="button button-block button-positive" ng-disabled="setupForm.$invalid">
|
||||
<span translate>Create new wallet</span>
|
||||
</button>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -1,119 +1,131 @@
|
|||
<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-view>
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Create Shared 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>
|
||||
|
||||
<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>
|
||||
<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-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-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>
|
||||
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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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-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>
|
||||
<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>
|
||||
|
||||
<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 == 'trezor' || seedSource.id == 'ledger'">
|
||||
<span class="input-label" translate>Account Number</span>
|
||||
<input type="number" ng-model="formData.account" ignore-mouse-wheel>
|
||||
</label>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
|
||||
|
||||
<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>
|
||||
|
|
|
|||
|
|
@ -1,36 +1,68 @@
|
|||
<ion-view>
|
||||
<ion-view id="tab-receive">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Receive' | translate}}</ion-nav-title>
|
||||
<ion-nav-buttons side="secondary">
|
||||
<button class="no-border">
|
||||
<i class="ion-help-circled"></i>
|
||||
</button>
|
||||
</ion-nav-buttons>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="tabReceiveController" ng-init="init()">
|
||||
<div class="m30v text-center" copy-to-clipboard="addr">
|
||||
<qrcode size="220" data="bitcoin:{{addr}}"></qrcode>
|
||||
<div ng-if="wallet.needsBackup" class="assertive" translate>
|
||||
Before receiving funds, you must backup your wallet. If this device is lost, it is impossible to access your funds without a backup.
|
||||
<article id="address">
|
||||
<div class="row">
|
||||
<div class="m15t text-center col col-60 center-block" copy-to-clipboard="addr">
|
||||
<qrcode size="220" data="bitcoin:{{addr}}"></qrcode>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="list card padding text-center" ng-if="!wallets[0]">
|
||||
<span translate>No Wallet</span>
|
||||
</div>
|
||||
|
||||
<div class="list" ng-if="wallets[0]">
|
||||
<div class="item item-icon-left" ng-click="shareAddress(addr)" ng-show="isCordova && addr">
|
||||
<i class="icon ion-ios-upload-outline"></i>
|
||||
<span translate>Share address</span>
|
||||
<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(null, true)">
|
||||
<i class="icon ion-ios-loop"></i>
|
||||
<span translate>Next Address</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="item item-icon-left" ng-click="setAddress(null, true)">
|
||||
<i class="icon ion-ios-loop"></i>
|
||||
<span translate>Next Address</span>
|
||||
<div class="row border-top">
|
||||
<div class="col col-90 center-block bit-address">
|
||||
<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>
|
||||
<div class="item item-icon-left">
|
||||
<i class="icon ion-social-bitcoin-outline"></i>
|
||||
<span ng-if="generatingAddress">...</span>
|
||||
<span ng-if="!generatingAddress" copy-to-clipboard="addr">{{addr}}</span>
|
||||
</article>
|
||||
<article id="wallets">
|
||||
<div class="list card padding text-center" ng-if="!wallets[0]">
|
||||
<span translate>No Wallet</span>
|
||||
</div>
|
||||
|
||||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
</div>
|
||||
<div class="list" ng-if="wallets[0]">
|
||||
<!-- <div class="item item-icon-left" ng-click="setAddress(null, true)">
|
||||
<i class="icon ion-ios-loop"></i>
|
||||
<span translate>Next Address</span>
|
||||
</div> -->
|
||||
<wallets ng-if="wallets[0]" wallets="wallets"></wallets>
|
||||
</div>
|
||||
</article>
|
||||
</ion-content>
|
||||
<div id="first-time-tip" ng-if="firstTime">
|
||||
<i class="ion-close close"></i>
|
||||
<div class="row">
|
||||
<h3 class="col col-60 center-block">Receive bitcoin by sharing your address</h3>
|
||||
</div>
|
||||
<div class="row">
|
||||
<p class="col col-60 center-block">
|
||||
Other bitcoin users can scan this code to send you money
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</ion-view>
|
||||
|
|
|
|||
|
|
@ -1,26 +1,23 @@
|
|||
<ion-view>
|
||||
<ion-view id="tab-send">
|
||||
<ion-nav-bar class="bar-royal">
|
||||
<ion-nav-title>{{'Send' | translate}}</ion-nav-title>
|
||||
</ion-nav-bar>
|
||||
|
||||
<ion-content ng-controller="tabSendController" ng-init="init()">
|
||||
<div class="card">
|
||||
<div class="item item-divider" translate>Recipient</div>
|
||||
|
||||
<div class="list list-inset">
|
||||
<label class="item item-input">
|
||||
<i class="icon ion-search placeholder-icon"></i>
|
||||
<input type="text"
|
||||
placeholder="Search or enter bitcoin address"
|
||||
ng-model="search"
|
||||
ng-change="findContact(search)"
|
||||
ng-model-onblur>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
<div class="item item-heading" translate>Recipient</div>
|
||||
<label class="item item-input bitcoin-address">
|
||||
<i class="icon ion-search placeholder-icon"></i>
|
||||
<input type="text"
|
||||
placeholder="Search or enter bitcoin address"
|
||||
ng-model="search"
|
||||
ng-change="findContact(search)"
|
||||
ng-model-onblur>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="card" ng-if="list[0]">
|
||||
<div class="item item-divider item-icon-right">
|
||||
<div class="item item-heading item-icon-right">
|
||||
<span translate>Contacts & Wallets</span>
|
||||
<i class="icon ion-person-add" ng-click="openAddressbookModal()"></i>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -19,6 +19,11 @@
|
|||
<button class="outline white tiny round" translate>Tap to retry</button>
|
||||
</div>
|
||||
|
||||
<div class="m20t" ng-show="walletNotRegistered" ng-click='recreate()'>
|
||||
<span class="size-12 db m10b" translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
|
||||
<button class="outline white tiny round" translate>Recreate</button>
|
||||
</div>
|
||||
|
||||
<div ng-show="wallet.walletScanStatus == 'error'" ng-click='retryScan()'>
|
||||
<span translate>Scan status finished with error</span>
|
||||
<br><span translate>Tap to retry</span>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue