This commit is contained in:
Kadir Sekha 2017-10-16 18:05:09 +09:00
commit a0261a6c9f
146 changed files with 16800 additions and 5578 deletions

View file

@ -7,6 +7,7 @@
<ion-content>
<div class="settings-list list">
<ion-toggle class="has-comment" ng-model="spendUnconfirmed.value" toggle-class="toggle-balanced" ng-change="spendUnconfirmedChange()">
<span class="toggle-label" translate>Use Unconfirmed Funds</span>
</ion-toggle>

View file

@ -1,7 +1,7 @@
<ion-view id="view-amount" hide-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-title>
{{'Enter Amount' | translate}}
{{'Enter amount' | translate}}
</ion-nav-title>
<ion-nav-back-button>
</ion-nav-back-button>
@ -48,16 +48,12 @@
<div class="amount">
<div class="amount__editable" ng-class="{'amount__editable--minimize': smallFont, 'amount__editable--standard': !smallFont, 'amount__editable--placeholder': !amount}">
<span class="amount__number">{{amount || "0.00" }}</span>
<a class="amount__currency-toggle" ng-click="toggleAlternative()" ng-show="showAlternativeAmount">{{alternativeIsoCode}}</a>
<a class="amount__currency-toggle" ng-click="toggleAlternative()" ng-show="!showAlternativeAmount">{{unitName}}</a>
<a class="amount__currency-toggle" ng-click="changeUnit()">{{unit}}</a>
</div>
<div ng-class="{'amount__results--minimize': smallFont, 'amount__results--standard': !smallFont, 'amount__results--placeholder': !amountResult}" ng-show="!showAlternativeAmount">
<div class="amount__result" ng-show="globalResult">{{globalResult}} {{unitName}}</div>
<div class="amount__result-equiv">&asymp; {{amountResult || '0.00'}} {{alternativeIsoCode}}</div>
</div>
<div ng-class="{'amount__results--minimize': smallFont, 'amount__results--standard': !smallFont, 'amount__results--placeholder': !amountResult}" ng-show="showAlternativeAmount">
<div class="amount__result" ng-show="globalResult">{{globalResult}} {{alternativeIsoCode}}</div>
<div class="amount__result-equiv">{{alternativeResult || '0.00'}} {{unitName}}</div>
<div ng-class="{'amount__results--minimize': smallFont, 'amount__results--standard': !smallFont, 'amount__results--placeholder': amountResult}" ng-click="changeAlternativeUnit()">
<div class="amount__result" ng-show="globalResult">{{globalResult}} {{unit}}</div>
<div class="amount__result-equiv" ng-show="alternativeAmount">&asymp; {{alternativeAmount || '0.00'}} {{alternativeUnit}}</div>
<div class="amount__result-equiv" ng-show="!alternativeAmount">&nbsp;</div>
</div>
</div>
</div>

View file

@ -7,9 +7,16 @@
</ion-nav-back-button>
</ion-nav-bar>
<ion-content>
<div class="ng-hide" ng-show="deleted">
<div class="phrase-unavailable" translate>Wallet recovery phrase not available.</div>
<div class="phrase-unavailable-instructions" translate>You can still export it from Advanced &gt; Export.</div>
<div class="ng-hide list card" ng-show="deleted">
<div class="item heading">
<span translate>Wallet recovery phrase not available</span>
</div>
<div class="item">
<span class="comment" translate>You can still export it from Advanced &gt; Export.</span>
</div>
</div>
<div class="item">
<span class="comment" ng-if="wallet.coin == 'bch'" translate>Note: if this BCH wallet was duplicated from a BTC wallet, they share the same recovery phrase.</span>
</div>
<!--
## STEP 1

View file

@ -29,7 +29,7 @@
<div class="label" translate>From</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
<img ng-src="img/{{wallet.network == 'testnet' ? 'icon-wallet-testnet' : 'icon-wallet'}}.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
</i>
{{wallet ? wallet.name : '...'}}
</div>
@ -40,19 +40,19 @@
Details
</div>
<div class="item">
<span translate>Gift card</span>
<span translate>Gift Card</span>
<span class="item-note">
{{amount | currency:'$ ':2}}<span ng-if="amount"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Invoice Fee</span>
<span translate>Network Cost</span>
<span class="item-note">
<span>{{invoiceFee | currency:'$ ':2}}<span ng-if="invoiceFee"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Network Fee</span>
<span translate>Miner Fee</span>
<span class="item-note">
<span>{{networkFee | currency:'$ ':2}}<span ng-if="networkFee"> {{currencyIsoCode}}</span>
</span>

View file

@ -38,7 +38,7 @@
<div class="label">Receive in</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
<img ng-src="img/{{wallet.network == 'testnet' ? 'icon-wallet-testnet' : 'icon-wallet'}}.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
</i>
{{wallet ? wallet.name : '...'}}
</div>

View file

@ -30,7 +30,7 @@
<div class="label">Receive in</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}" class="bg">
<img ng-src="img/{{wallet.network == 'testnet' ? 'icon-wallet-testnet' : 'icon-wallet'}}.svg" ng-style="{'background-color': wallet.color}" class="bg">
</i>
{{wallet ? wallet.name : '...'}}
</div>

View file

@ -0,0 +1,110 @@
<ion-view id="mercadolibre" hide-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-title>
{{'Buy'|translate}}
</ion-nav-title>
</ion-nav-bar>
<ion-content class="add-bottom-for-cta">
<!-- BUY -->
<div class="list">
<div class="item head">
<div class="sending-label">
<i class="icon big-icon-svg">
<div class="bg icon-amazon"></div>
</i>
<span>Vale-Presente do Mercado Livre Brasil</span>
</div>
<div class="amount-label">
<div class="amount">{{amountUnitStr}}</div>
</div>
</div>
<div class="info">
<div class="item item-icon-right" ng-click="showWalletSelector()">
<div class="label" translate>From</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img ng-src="img/{{wallet.network == 'testnet' ? 'icon-wallet-testnet' : 'icon-wallet'}}.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
</i>
{{wallet ? wallet.name : '...'}}
</div>
<i class="icon bp-arrow-right"></i>
</div>
<div ng-show="totalAmountStr">
<div class="item item-divider" translate>
Details
</div>
<div class="item">
<span translate>Gift Card</span>
<span class="item-note">
{{amount | currency:'$ ':2}}<span ng-if="amount"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Network Cost</span>
<span class="item-note">
<span>{{invoiceFee | currency:'$ ':2}}<span ng-if="invoiceFee"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Miner Fee</span>
<span class="item-note">
<span>{{networkFee | currency:'$ ':2}}<span ng-if="networkFee"> {{currencyIsoCode}}</span>
</span>
</div>
<div class="item">
<span translate>Total</span>
<span class="item-note">
<span ng-if="totalAmount">{{totalAmount | currency:'$ ':2}} {{currencyIsoCode}}</span>
<span ng-if="totalAmountStr">({{totalAmountStr}})</span>
</span>
</div>
</div>
</div>
</div>
</ion-content>
<click-to-accept
is-disabled="!wallet || !totalAmountStr"
ng-click="buyConfirm()"
ng-if="!isCordova"
click-send-status="sendStatus">
Confirmar a compra
</click-to-accept>
<slide-to-accept
ng-if="isCordova && wallet && totalAmountStr"
slide-on-confirm="buyConfirm()"
slide-send-status="sendStatus">
Deslize para comprar
</slide-to-accept>
<slide-to-accept-success
slide-success-show="sendStatus === 'success'"
slide-success-on-confirm="goBackHome()"
slide-success-hide-on-confirm="true">
<span ng-show="mlGiftCard.status == 'FAILURE'">
Sua compra não pôde ser concluída
</span>
<span ng-show="mlGiftCard.status == 'PENDING'">
Sua compra foi adicionada à lista de pendentes
</span>
<span ng-show="mlGiftCard.status == 'SUCCESS' || mlGiftCard.status == 'active'">
Comprou {{mlGiftCard.amount}} {{mlGiftCard.currency}}
</span>
<div class="m10 size-14" ng-show="mlGiftCard.status == 'SUCCESS' || mlGiftCard.cardStatus == 'active'">
Vale-Presente gerado e pronto para usar
</div>
</slide-to-accept-success>
<wallet-selector
wallet-selector-title="walletSelectorTitle"
wallet-selector-wallets="wallets"
wallet-selector-selected-wallet="wallet"
wallet-selector-show="showWallets"
wallet-selector-on-select="onWalletSelect">
</wallet-selector>
</ion-view>

62
www/views/cashScan.html Normal file
View file

@ -0,0 +1,62 @@
<ion-view id="cash-scan" hide-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-title>
<span translate>Bitcoin Cash (BCH) Balances</span>
</ion-nav-title>
<ion-nav-back-button>
</ion-nav-back-button>
</ion-nav-bar>
<ion-content>
<div class="list card">
<div ng-if="!availableWallets[0]">
<div class="item">
<span class="assertive" translate>No wallets eligible for Bitcoin Cash support</span>
</div>
</div>
<div class="item" ng-if="error">
<span class="assertive">{{error}}</span>
</div>
<div ng-if="availableWallets[0]">
<div class="item heading">
<span translate>BTC wallets</span>
</div>
<div ng-repeat="wallet in availableWallets track by $index" class="item wallet supported">
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<div class="wallet-content">
<div>{{wallet.name || wallet.id}}</div>
<div class="balanced">{{wallet.bchBalance || ('Checking...' | translate)}} </div>
<div class="tab-home__wallet__multisig-number" ng-if="wallet.n > 1" translate>{{wallet.m}}-of-{{wallet.n}}</div>
</div>
<div class="duplicate-button">
<button ng-click="duplicate(wallet)" class="button button-small button-outline button-primary" translate>Duplicate for BCH</button>
</div>
</div>
</div>
<div ng-if="nonEligibleWallets[0]">
<div class="item item-divider"></div>
<div class="item heading">
<span translate>Non eligible BTC wallets</span>
</div>
<div ng-repeat="wallet in nonEligibleWallets track by $index" class="item item-sub item-icon-left item-big-icon-left item-button-right wallet">
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<div class="text-disabled">{{wallet.name || wallet.id}}</div>
<div class="text-disabled">{{wallet.excludeReason}}</div>
</div>
<div class="item">
<span class="comment" translate>Some of your wallets are not eligible for Bitcoin Cash support. You can try to access BCH funds from these wallets using the</span>
<a ng-click="openRecoveryToolLink()" translate>recovery tool.</a>
</div>
</div>
</div>
</ion-content>

View file

@ -9,7 +9,7 @@
<ion-content class="add-bottom-for-cta">
<div class="list">
<div class="item head">
<div class="item head" ng-hide="criticalError">
<div class="sending-label">
<img src="img/icon-tx-sent-outline.svg">
<span translate ng-if="!tx.sendMax">Sending</span>
@ -27,13 +27,13 @@
<span class="item-note" ng-if="paymentExpired" ng-style="{'color': 'red'}" translate>Expired</span>
</div>
<div class="item">
<div class="item" ng-hide="criticalError">
<span class="label" translate>To</span>
<span class="payment-proposal-to" ng-if="!recipientType">
<i class="icon icon-svg abs-v-center icon-bitcoinlogoplain"></i>
<div copy-to-clipboard="tx.toAddress" ng-if="!tx.paypro" class="ellipsis">
<contact ng-if="!tx.toName" address="{{tx.toAddress}}"></contact>
<contact ng-if="tx.toAddress && !tx.toName" address="{{tx.toAddress}}"></contact>
<span class="m15l size-14" ng-if="tx.toName">{{tx.toName}}</span>
</div>
@ -51,7 +51,7 @@
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !toColor}" ng-style="{'background-color': toColor}" class="bg"/>
</i>
<div copy-to-clipboard="tx.toAddress" class="ellipsis">
<contact ng-if="!tx.toName" address="{{tx.toAddress}}"></contact>
<contact ng-if="tx.toAddress && !tx.toName" address="{{tx.toAddress}}"></contact>
<span ng-if="tx.toName" class="wallet-name">{{tx.toName}}</span>
</div>
</div>
@ -64,9 +64,7 @@
<a class="item item-icon-right" ng-hide="!wallet" ng-click="showWalletSelector()">
<span class="label" translate>From</span>
<div class="wallet" ng-if="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg"/>
</i>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<div>{{wallet.name}}</div>
</div>
<div class="wallet" ng-if="!wallet">
@ -79,18 +77,18 @@
</a>
<div class="item item-icon-right" ng-if="wallet" ng-click="chooseFeeLevel(tx, wallet)">
<span class="label">{{'Fee:' | translate}} {{tx.feeLevelName | translate}}</span>
<span class="m10l">{{tx.txp[wallet.id].feeStr || '...'}}</span>
<span class="item-note m10l">
<span>{{tx.txp[wallet.id].alternativeFeeStr || '...'}}&nbsp;
<span class="fee-rate" ng-if="tx.txp[wallet.id].feeRatePerStr"> &middot;
<i class="ion-alert-circled warn" ng-show="tx.txp[wallet.id].feeToHigh"></i> &nbsp;
<span class="fee-rate" ng-class="{'warn':tx.txp[wallet.id].feeToHigh}" translate> {{tx.txp[wallet.id].feeRatePerStr}} of the sending amount </span>
<span class="m10l">{{tx.txp[wallet.id].feeStr || '...'}}</span>
<span class="item-note m10l">
<span>{{tx.txp[wallet.id].alternativeFeeStr || '...'}}&nbsp;
<span class="fee-rate" ng-if="tx.txp[wallet.id].feeRatePerStr"> &middot;
<i class="ion-alert-circled warn" ng-show="tx.txp[wallet.id].feeToHigh"></i> &nbsp;
<span class="fee-rate" ng-class="{'warn':tx.txp[wallet.id].feeToHigh}" translate> {{tx.txp[wallet.id].feeRatePerStr}} of the sending amount </span>
</span>
</span>
</span>
</span>
</span>
<i class="icon bp-arrow-right"></i>
<i ng-if="wallet.coin == 'btc'" class="icon bp-arrow-right"></i>
</div>
<a class="item item-icon-right" ng-if="wallet" ng-click="showDescriptionPopup(tx)">
<span class="label" translate>Add Memo</span>

View file

@ -21,7 +21,7 @@
<ion-content scroll="false">
<div class="address" ng-if="address && amountBtc">
<div class="qr-code" copy-to-clipboard="copyToClipboard()">
<qrcode size="220" data="bitcoin:{{address + '?amount=' + amountBtc}}" color="#334"></qrcode>
<qrcode size="220" data="{{ protocolHandler }}:{{address + '?amount=' + amountBtc}}" color="#334"></qrcode>
</div>
<div class="info">
<div class="item single-line" copy-to-clipboard="address">
@ -38,9 +38,7 @@
</div>
<div class="item single-line">
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
</i>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
{{wallet.name}}
</div>
<div class="label" translate>Receive in</div>

View file

@ -0,0 +1,9 @@
<label class="item item-input item-select">
<div class="input-label" translate>
Coin
</div>
<select ng-model="formData.coin" ng-change="switchTestnetOff()">
<option value="btc">BTC</option>
<option value="bch">BCH</option>
</select>
</label>

View file

@ -0,0 +1,2 @@
<img ng-if="wallet.network == 'testnet'" src="img/icon-wallet-testnet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg"/>
<img ng-if="wallet.network != 'testnet'" src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg"/>

View file

@ -1,9 +1,15 @@
<ion-spinner class="spinner-dark recent right" icon="crescent" ng-show="updatingStatus || (updatingTxHistory && updatingTxHistoryProgress<=5)" ></ion-spinner>
<div class="actions" ng-show="(walletNotRegistered || updateStatusError)">
<a ng-show="walletNotRegistered" ng-click="recreate()" translate>Tap to recreate</a>
<a ng-show="updateStatusError" ng-click="updateAll(true)" translate>Tap to retry</a>
</div>
<ion-spinner class="spinner-dark recent right" icon="crescent" ng-show="(updatingStatus || updatingTxHistory) &&
!walletNotRegistered && !updateStatusError && !updateTxHistoryError"></ion-spinner>
<div>
<span ng-show="wallet.status.wallet.singleAddress" class="size-12"><span translate>Auditable</span></span>
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.network != 'livenet'" src="img/icon-testnet-white.svg">
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.network != 'livenet'" src="img/icon-text-testnet-white.svg">
<img style="height:0.6em; margin-right: 1px;" ng-show="!wallet.canSign() && !wallet.isPrivKeyExternal()" src="img/icon-read-only-white.svg">
<img style="height:0.6em; margin-right: 1px;" ng-show="wallet.getPrivKeyExternalSourceName() == 'trezor'" src="img/icon-trezor-white.svg">

View file

@ -1,7 +1,5 @@
<div class="wallet-item">
<i class="icon big-icon-svg circle">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg"/>
</i>
<i class="icon big-icon-svg circle" ng-include="'views/includes/walletIcon.html'"></i>
<div class="name">
{{wallet.name || wallet.id}}
<span class="size-12 text-light" ng-show="wallet.n > 1">
@ -12,4 +10,3 @@
</span>
</div>
</div>

View file

@ -0,0 +1,22 @@
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<span>
{{wallet.name || wallet.id}}
</span>
<p>
<span ng-if="!wallet.isComplete()" class="assertive" translate>
Incomplete
</span>
<span ng-if="wallet.isComplete()">
<span ng-if="!wallet.balanceHidden && !wallet.scanning"> {{wallet.status.totalBalanceStr ? wallet.status.totalBalanceStr : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' ) }} </span>
<span ng-if="wallet.scanning" translate> Scanning funds... </span>
<span ng-if="wallet.balanceHidden && !wallet.scanning" translate>[Balance Hidden]</span>
<span class="tab-home__wallet__multisig-number" ng-if="wallet.n > 1">
{{wallet.m}}-of-{{wallet.n}}
</span>
<i ng-if="!wallet.balanceHidden && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)" class="tab-home__wallet__status-icon ion-ios-timer-outline"></i>
<span class="assertive" ng-if="wallet.error">{{wallet.error}}</span>
</span>
&nbsp;
</p>
<i class="icon bp-arrow-right"></i>

View file

@ -0,0 +1,14 @@
<i class="icon big-icon-svg circle" ng-include="'views/includes/walletIcon.html'"></i>
<span>
{{wallet.name || wallet.id}}
<span class="size-12 text-light" ng-show="wallet.n > 1">
{{wallet.m}}-of-{{wallet.n}}
</span>
</span>
<span class="right text-light assertive" ng-show="!wallet.isComplete()">
{{'Incomplete' | translate}}
</span>
<span class="right text-light assertive" ng-show="wallet.isComplete() && wallet.needsBackup">
{{'Backup needed' | translate}}
</span>
<i class="icon bp-arrow-right"></i>

View file

@ -1,32 +1,70 @@
<action-sheet action-sheet-show="show" class="wallet-selector">
<action-sheet action-sheet-show="show" class="wallet-selector" ng-init="walletsBtc = []; walletsBch = []">
<img class="back-arrow" src="img/icon-back-arrow.svg" ng-click="hide()">
<div class="header">{{title}}</div>
<span ng-repeat="wallet in wallets track by $index"
ng-init="wallet.coin == 'btc' ? walletsBtc.push(wallet) : walletsBch.push(wallet)"></span>
<div class="header" ng-show="!walletsBtc[0] || !walletsBch[0]">{{title}}</div>
<div class="subheader" ng-if="walletsBtc[0] && walletsBch[0]" translate>
<img class="wallet-coin-logo" src="img/icon-bitcoin.svg" width="18">
<span translate>Bitcoin Wallets</span>
</div>
<a
ng-repeat="w in wallets track by $index"
ng-repeat="wallet in walletsBtc track by $index"
class="item item-icon-left item-big-icon-left item-icon-right wallet"
ng-click="selectWallet(w)"
ng-click="selectWallet(wallet)"
>
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !w.color}" ng-style="{'background-color': w.color}" class="bg">
</i>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<div class="wallet-inner">
<div class="wallet-details">
<div class="wallet-name">
{{w.name}}
{{wallet.name}}
</div>
<p class="wallet-balance">
<span ng-if="!w.isComplete()" class="assertive" translate>
<span ng-if="!wallet.isComplete()" class="assertive" translate>
Incomplete
</span>
<span ng-if="w.isComplete()">
<span ng-if="!w.balanceHidden">{{w.status.availableBalanceStr}}</span>
<span ng-if="w.balanceHidden" translate>[Balance Hidden]</span>
<span ng-if="wallet.isComplete()">
<span ng-if="!wallet.balanceHidden">{{wallet.status.availableBalanceStr}}</span>
<span ng-if="wallet.balanceHidden" translate>[Balance Hidden]</span>
</span>
</span>
&nbsp;
</p>
</div>
<img class="check" src="img/icon-check-selected.svg" ng-show="selectedWallet === w">
<img class="check" src="img/icon-check-selected.svg" ng-show="selectedWallet === wallet">
</div>
</a>
<div class="subheader" ng-if="walletsBch[0] && walletsBtc[0]">
<img class="wallet-coin-logo" src="img/bitcoin-cash-logo.svg" width="22">
<span translate>Bitcoin Cash Wallets</span>
</div>
<a
ng-repeat="wallet in walletsBch track by $index"
class="item item-icon-left item-big-icon-left item-icon-right wallet"
ng-click="selectWallet(wallet)"
>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<div class="wallet-inner">
<div class="wallet-details">
<div class="wallet-name">
{{wallet.name}}
</div>
<p class="wallet-balance">
<span ng-if="!wallet.isComplete()" class="assertive" translate>
Incomplete
</span>
<span ng-if="wallet.isComplete()">
<span ng-if="!wallet.balanceHidden">{{wallet.status.availableBalanceStr}}</span>
<span ng-if="wallet.balanceHidden" translate>[Balance Hidden]</span>
</span>
</span>
&nbsp;
</p>
</div>
<img class="check" src="img/icon-check-selected.svg" ng-show="selectedWallet === wallet">
</div>
</a>
</action-sheet>

View file

@ -39,6 +39,9 @@
<qr-scanner class="qr-icon size-24" on-scan="onQrCodeScannedJoin(data)"></qr-scanner>
</div>
</div>
<div ng-include="'views/includes/cash.html'" ng-if="enableCash"></div>
<div class="item item-divider"></div>
<a class="item" ng-click="showAdvChange()">

View file

@ -0,0 +1,63 @@
<ion-view>
<ion-nav-bar class="bar-royal">
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-title>
{{'Mercado Livre Brazil Gift Cards'|translate}}
</ion-nav-title>
</ion-nav-bar>
<ion-content scroll="false" class="ng-hide" ng-show="!giftCards">
<div class="box-notification warning" ng-show="network == 'testnet'">
Sandbox version. Only for testing purpose.
</div>
<div class="integration-onboarding">
<div class="integration-onboarding-logo">
<img src="img/mercado-libre/mlbr.svg" alt="Mercado Libre" width="250">
</div>
<div class="integration-onboarding-description" translate>
<b>Only</b> redeemable on Mercado Livre (Brazil)
</div>
<div class="integration-onboarding-cta" ng-show="!showOauthForm">
<button class="button button-standard button-primary" ui-sref="tabs.giftcards.mercadoLibre.amount" no-low-fee
translate>
Buy a Gift Card
</button>
<button class="button button-standard button-secondary"
ng-click="openExternalLink('https://www.mercadolivre.com.br')" translate>
Visit mercadolivre.com.br &rarr;
</button>
</div>
</div>
</ion-content>
<ion-content class="ng-hide" ng-show="giftCards">
<div class="box-notification warning" ng-show="network == 'testnet'">
Sandbox version. Only for testing purpose.
</div>
<div class="m20t text-center">
<img src="img/mercado-libre/mlbr.svg" alt="Mercado Libre" width="250">
<div class="size-12 m10t" translate>
<b>Only</b> redeemable on Mercado Livre (Brazil)
</div>
</div>
<div class="m20t" ng-if="giftCards">
<div class="list card">
<a class="item item-icon-left item-icon-right" href
ui-sref="tabs.giftcards.mercadoLibre.amount" no-low-fee>
<i class="icon ion-ios-pricetags-outline"></i>
<span translate>Buy a Gift Card</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item item-icon-right item-icon-left"
ui-sref="tabs.giftcards.mercadoLibre.cards">
<i class="icon ion-ios-folder-outline"></i>
<span translate>Your Gift Cards</span>
<i class="icon bp-arrow-right"></i>
</a>
</div>
</div>
</ion-content>
</ion-view>

View file

@ -0,0 +1,34 @@
<ion-view id="meli-list-cards">
<ion-nav-bar class="bar-royal">
<ion-nav-back-button>
</ion-nav-back-button>
<ion-nav-title>
{{'Your Gift Cards'|translate}}
</ion-nav-title>
</ion-nav-bar>
<ion-content>
<div class="list card">
<div ng-repeat="(id, item) in giftCards | orderObjectBy:'date':true track by $index"
ng-click="openCardModal(item)"
class="item item-avatar"
ng-hide="hideCards">
<img class="item-logo" src="img/mercado-libre/meli-card-24px.png" alt="{{id}}">
<span class="item-note">
<span class="assertive" ng-if="item.status == 'FAILURE'" translate>Error</span>
<span class="dark" ng-if="item.status == 'expired'" translate>Invoice expired</span>
<span class="calm" ng-if="item.status == 'invalid'" translate>Still pending</span>
<span class="positive" ng-if="item.status == 'PENDING'" translate>Pending</span>
<span class="assertive" ng-if="item.cardStatus == 'inactive'" translate>Inactive</span>
<span class="assertive" ng-if="item.cardStatus == 'expired'" translate>Expired</span>
</span>
<h2 ng-if="item.amount">
{{item.amount | currency : '' : 2}} {{item.currency}}
</h2>
<p class="dark">{{item.date | amTimeAgo}}</p>
</div>
</div>
</ion-content>
</ion-view>

View file

@ -75,7 +75,7 @@
<div class="input-label" translate>
Fee level
</div>
<select ng-options="fee as level for (fee,level) in feeOpts" ng-model="selectedFee.value">
<select ng-options="fee as level | translate for (fee,level) in feeOpts" ng-model="selectedFee.value">
</select>
</label>
</div>

View file

@ -0,0 +1,75 @@
<ion-modal-view id="meli-card" ng-controller="mercadoLibreCardDetailsController">
<ion-header-bar align-title="center" class="bar-royal">
<button class="button button-back button-clear" ng-click="close()" translate>
Close
</button>
<h1 class="title" translate>Details</h1>
</ion-header-bar>
<ion-content>
<div class="card-head">
<img src="img/mercado-libre/giftcard-pt.svg" alt="Mercado Livre Brazil Gift Card" width="230">
<div class="amount">
{{card.amount | currency : '' : 2}} {{card.currency}}
</div>
</div>
<div class="card-status">
<div ng-show="card.cardStatus == 'active'">
<div class="redeem-pin" copy-to-clipboard="card.pin">{{card.pin}}</div>
<button class="button-redeem"
ng-click="openExternalLink('https://www.mercadolivre.com.br')" translate>
Redeem now
</button>
</div>
<div ng-show="card.cardStatus == 'inactive'">
<span class="assertive" translate>Inactive</span>
<div class="card-status-desc" translate>Gift Card is not available to use anymore</div>
</div>
<div ng-show="card.cardStatus == 'expired'">
<span class="assertive" translate>Expired</span>
<div class="card-status-desc" translate>Gift Card is not available to use anymore</div>
</div>
<div ng-show="card.status">
<span class="positive" ng-show="card.status == 'PENDING'" translate>
Pending
</span>
<span class="calm" ng-show="card.status=='invalid'" translate>
Still pending
</span>
<span class="assertive" ng-show="card.status == 'FAILURE'" translate>
Error
</span>
<span class="dark" ng-show="card.status == 'expired'" translate>
Invoice expired
</span>
</div>
</div>
<div class="list">
<div class="item">
<span translate>Date</span>
<span class="item-note">
{{card.date | amTimeAgo}}
</span>
</div>
<div class="item item-icon-right" ng-click="openExternalLink(card.invoiceUrl)">
<i class="icon bp-arrow-right"></i>
<span translate>See invoice</span>
</div>
</div>
<div class="card-remove" ng-show="card.status == 'FAILURE' || card.cardStatus == 'inactive' || card.cardStatus == 'expired' || card.status == 'expired'">
<button class="button-remove" ng-click="remove()" translate>
Remove
</button>
</div>
</ion-content>
</ion-modal-view>

View file

@ -73,9 +73,7 @@
<div class="item">
<span class="label" translate>From</span>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg"/>
</i>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<div>{{wallet.name}}</div>
</div>
</div>

View file

@ -5,7 +5,7 @@
<p id="lead" translate>Take control of your money,<br />get started with bitcoin.</p>
</div>
<div id="cta-buttons">
<button class="button button-standard button-primary" id="get-started" href ui-sref="onboarding.tour" translate>Get started</button>
<button class="button button-standard button-primary" id="get-started" href ui-sref="onboarding.tour" translate-context="button" translate>Get started</button>
<button class="button button-standard button-secondary button-clear" id="restore" translate href ui-sref="onboarding.import({'fromOnboarding':true})">Restore from backup</button>
</div>
</ion-content>

View file

@ -23,9 +23,7 @@
</div>
<div class="list card" ng-click="showWalletSelector()" ng-if="wallets[0]">
<a ng-if="wallet" class="item item-sub item-icon-left item-big-icon-left item-icon-right">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg wallet"/>
</i>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<span>
{{wallet.name || wallet.id}}
</span>

View file

@ -13,7 +13,7 @@
<a class="item item-icon-right" ui-sref="tabs.preferences.preferencesAlias">
<span translate>Name</span>
<span class="item-note">
<span class="item-note ellipsis">
{{wallet.name}}
</span>
<i class="icon bp-arrow-right"></i>
@ -45,9 +45,10 @@
<span translate>
If enabled, all sensitive information (private key and recovery phrase) and actions (spending and exporting) associated with this wallet will be protected.
</span>
<span class="text-light assertive" ng-show="wallet.needsBackup" translate>
<a ng-click="openWikiSpendingPassword()" translate>Learn more</a>
<div class="text-light assertive" ng-show="wallet.needsBackup" translate>
Complete the backup process to use this option
</span>
</div>
</div>
</div>
<div ng-show="wallet.canSign() && touchIdAvailable">

View file

@ -15,14 +15,14 @@
</label>
</div>
<div class="list" ng-if="lastUsedAltCurrencyList[0]">
<ion-radio ng-repeat="lastUsedAltCurrency in lastUsedAltCurrencyList" ng-value="lastUsedAltCurrency.isoCode" ng-model="currentCurrency"
ng-click="save(lastUsedAltCurrency)">{{lastUsedAltCurrency.name}}
<ion-radio class="alt-currency-radio" ng-repeat="lastUsedAltCurrency in lastUsedAltCurrencyList" ng-value="lastUsedAltCurrency.isoCode" ng-model="currentCurrency"
ng-click="save(lastUsedAltCurrency)">{{lastUsedAltCurrency.name}} <span class="item-note">{{lastUsedAltCurrency.isoCode}}</span>
</ion-radio>
</div>
<div class="list">
<ion-radio ng-repeat="altCurrency in altCurrencyList" ng-value="altCurrency.isoCode" ng-model="currentCurrency"
ng-click="save(altCurrency)">{{altCurrency.name}}
</ion-radio>
<div class="item" ng-repeat="altCurrency in altCurrencyList" ng-value="altCurrency.isoCode" ng-model="currentCurrency"
ng-click="save(altCurrency)">{{altCurrency.name}} <span class="item-note">{{altCurrency.isoCode}}</span>
</div>
</div>
<ion-infinite-scroll
ng-if="!listComplete"

View file

@ -0,0 +1,27 @@
<ion-view id="tab-notifications" class="settings" show-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-title>{{'Bitcoin Cash Support' | translate}}</ion-nav-title>
<ion-nav-back-button>
</ion-nav-back-button>
</ion-nav-bar>
<ion-content>
<div class="list">
<ion-toggle class="has-comment" ng-model="cashSupport.value" toggle-class="toggle-balanced" ng-change="cashSupportChange()">
<span class="toggle-label" translate>Support Bitcoin Cash</span>
</ion-toggle>
</div>
<div class="settings-explanation">
<div class="settings-description" ng-show="!cashSupport.value">
<span translate>Enable Bitcoin Cash wallet creation and operation within the App.</span>
<a ng-click="openBitcoinCashWeb()" translate>Learn more</a>
</div>
</div>
<div class="list" ng-if="cashSupport.value">
<div class="item scan-label" ui-sref="tabs.preferencesCash.scan">
<span translate>Scan your wallets for Bitcoin Cash</span>
</div>
</div>
</ion-content>
</ion-view>

View file

@ -18,7 +18,7 @@
</p>
</div>
<button class="button button-standard button-assertive" ng-click="showDeletePopup()">
{{'Delete'|translate}} <span ng-show="alias">{{alias}}</span>{{walletName}}
{{'Delete'|translate}} {{walletName}}
</button>
</div>
</ion-content>

View file

@ -13,6 +13,12 @@
{{walletName}}
</span>
</div>
<div class="item" copy-to-clipboard="walletId">
<span translate>Coin</span>
<span class="item-note">
{{wallet.coin}}
</span>
</div>
<div class="item" copy-to-clipboard="walletId">
<span translate>Wallet Id</span>
<span class="item-note">

View file

@ -12,7 +12,10 @@
<ion-content class="log-bg">
<div class="list">
<div class="item item-text-wrap enable_text_select log-entry">
<div class="centered" ng-show="filteredLogs.length == 0" translate>No entries for this log level <a ng-click="showOptionsMenu()">filter setting</a>.</div>
<div class="centered" ng-show="filteredLogs.length == 0">
<span translate>No entries for this log level</span>.
<a ng-click="showOptionsMenu()" translate>Filter setting</a>.
</div>
<ul ng-show="filteredLogs.length > 0">
<li ng-repeat="l in filteredLogs">
<span ng-class="{'energized': l.level=='warn', 'dark': l.level=='debug', 'positive': l.level=='info', 'assertive': l.level=='error'}">

View file

@ -1,14 +0,0 @@
<ion-view class="settings" show-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-title>
{{'Unit'|translate}}
</ion-nav-title>
<ion-nav-back-button>
</ion-nav-back-button>
</ion-nav-bar>
<ion-content>
<ion-radio ng-repeat="unit in unitList" ng-value="unit.code" ng-model="currentUnit"
ng-click="save(unit)">{{unit.shortName}}
</ion-radio>
</ion-content>
</ion-view>

View file

@ -29,7 +29,7 @@
<div class="label">From</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
<img ng-src="img/{{wallet.network == 'testnet' ? 'icon-wallet-testnet' : 'icon-wallet'}}.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
</i>
{{wallet ? wallet.name : '...'}}
</div>

View file

@ -30,7 +30,7 @@
<div class="label">From</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-style="{'background-color': wallet.color}" class="bg">
<img ng-src="img/{{wallet.network == 'testnet' ? 'icon-wallet-testnet' : 'icon-wallet'}}.svg" ng-style="{'background-color': wallet.color}" class="bg">
</i>
{{wallet ? wallet.name : '...'}}
</div>

View file

@ -19,6 +19,8 @@
required>
</label>
<div ng-include="'views/includes/cash.html'" ng-if="enableCash"></div>
<div class="item item-divider"></div>
<a class="item" ng-click="showAdvChange()">
@ -112,7 +114,7 @@
ng-model="formData.derivationPath">
</label>
<ion-toggle ng-show="formData.seedSource.supportsTestnet" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
<ion-toggle ng-show="formData.seedSource.supportsTestnet && formData.coin == 'btc'" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
<span translate>Testnet</span>
</ion-toggle>

View file

@ -29,6 +29,8 @@
ng-blur="formFocus(false)">
</label>
<div ng-include="'views/includes/cash.html'" ng-if="enableCash"></div>
<label class="item item-input item-select">
<div class="input-label" translate>
Total number of copayers
@ -141,7 +143,7 @@
ng-model="formData.derivationPath">
</label>
<ion-toggle ng-show="formData.seedSource.supportsTestnet" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
<ion-toggle ng-show="formData.seedSource.supportsTestnet && formData.coin == 'btc'" ng-model="formData.testnetEnabled" toggle-class="toggle-positive">
Testnet
</ion-toggle>

View file

@ -64,50 +64,51 @@
</a>
</div>
<div class="list card">
<div class="list card" ng-if="!walletsBtc[0] && !walletsBch[0]">
<div class="item item-icon-right item-heading">
<span translate>Wallets</span>
<a ui-sref="tabs.add" ng-if="wallets[0]"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
</div>
<a ui-sref="tabs.add" class="item item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" class="bg wallet icon-create-wallet"/>
</i>
<span translate>Create bitcoin wallet</span>
<i class="icon bp-arrow-right"></i>
</a>
</div>
<div class="list card" ng-if="walletsBtc[0]">
<div class="item item-icon-right item-heading">
<img class="wallet-coin-logo" src="img/icon-bitcoin.svg" width="18">
<span translate>Bitcoin Wallets</span>
<a ui-sref="tabs.add"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
</div>
<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">
<img src="img/icon-wallet.svg" class="bg wallet icon-create-wallet"/>
</i>
<span translate>Create bitcoin wallet</span>
<i class="icon bp-arrow-right"></i>
</a>
<a ng-repeat="wallet in wallets track by $index"
<a ng-repeat="wallet in walletsBtc track by $index"
class="item item-sub item-icon-left item-big-icon-left item-icon-right wallet"
ng-click="openWallet(wallet)">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg wallet"/>
</i>
<span>
{{wallet.name || wallet.id}}
</span>
<p>
<span ng-if="!wallet.isComplete()" class="assertive" translate>
Incomplete
</span>
<span ng-if="wallet.isComplete()">
<span ng-if="!wallet.balanceHidden"> {{wallet.status.totalBalanceStr ? wallet.status.totalBalanceStr : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' ) }} </span>
<span ng-if="wallet.balanceHidden" translate>[Balance Hidden]</span>
<span class="tab-home__wallet__multisig-number" ng-if="wallet.n > 1">
{{wallet.m}}-of-{{wallet.n}}
</span>
<i ng-if="!wallet.balanceHidden && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)" class="tab-home__wallet__status-icon ion-ios-timer-outline"></i>
<span class="assertive" ng-if="wallet.error">{{wallet.error}}</span>
</span>
&nbsp;
</p>
<i class="icon bp-arrow-right"></i>
<span ng-include="'views/includes/walletList.html'"></span>
</a>
</div>
</div>
<div class="ng-hide list card" ng-show="wallets[0] && bitpayCardItems.length>0" ng-include="'views/includes/bitpayCardsCard.html'"></div>
<div class="ng-hide list card" ng-show="wallets[0] && buyAndSellItems.length>0" ng-include="'views/includes/buyAndSellCard.html'"></div>
<div class="list card" ng-if="walletsBch[0]">
<div class="item item-icon-right item-heading">
<img class="wallet-coin-logo" src="img/bitcoin-cash-logo.svg" width="22">
<span translate>Bitcoin Cash Wallets</span>
<a ui-sref="tabs.add({coin:'bch'})"><i class="icon ion-ios-plus-empty list-add-button"></i></a>
</div>
<div>
<a ng-repeat="wallet in walletsBch track by $index"
class="item item-sub item-icon-left item-big-icon-left item-icon-right wallet"
ng-click="openWallet(wallet)">
<span ng-include="'views/includes/walletList.html'"></span>
</a>
</div>
</div>
<div class="ng-hide list card" ng-show="walletsBtc[0] && bitpayCardItems.length>0" ng-include="'views/includes/bitpayCardsCard.html'"></div>
<div class="ng-hide list card" ng-show="walletsBtc[0] && buyAndSellItems.length>0" ng-include="'views/includes/buyAndSellCard.html'"></div>
<div class="ng-hide list card" ng-show="homeIntegrations.length>0" ng-include="'views/includes/homeIntegrations.html'"></div>
<div class="ng-hide list card" ng-show="nextStepsItems.length>0 && !isWindowsPhoneApp" ng-include="'views/includes/nextSteps.html'"></div>
</ion-content>

View file

@ -21,6 +21,8 @@
ng-model="formData.password">
</label>
<div ng-include="'views/includes/cash.html'" ng-if="enableCash"></div>
<div class="item item-divider"></div>
<a class="item" ng-click="showAdvChange()">

View file

@ -26,6 +26,9 @@
<qr-scanner class="qr-icon size-24" on-scan="processWalletInfo(data)"></qr-scanner>
</div>
</div>
<div ng-include="'views/includes/cash.html'" ng-if="enableCash"></div>
<div class="item item-divider"></div>
<a class="item" ng-click="showAdvChange()">
@ -61,7 +64,7 @@
<select class="m10t" ng-model="formData.seedSourceAll" ng-options="seed as seed.label for seed in seedOptionsAll"></select>
</label>
<ion-toggle ng-model="formData.testnetEnabled" ng-change="setDerivationPath()" toggle-class="toggle-positive">
<ion-toggle ng-model="formData.testnetEnabled" ng-change="setDerivationPath()" toggle-class="toggle-positive" ng-if="formData.coin == 'btc'">
<span translate>Testnet</span>
</ion-toggle>

View file

@ -34,7 +34,7 @@
<span translate>Show address</span>
</button>
</span>
<qrcode ng-if="addr" size="220" data="bitcoin:{{addr}}" color="#334"></qrcode>
<qrcode ng-if="addr" size="220" data="{{ protocolHandler }}:{{addr}}" color="#334"></qrcode>
<div class="address-label">
<span class="ellipsis">{{addr}}</span>
<ion-spinner ng-show="!addr" class="spinner-dark" icon="crescent"></ion-spinner>
@ -62,9 +62,7 @@
<div class="wallet-selector" ng-click="showWalletSelector()" ng-if="wallets[0] && wallet">
<a ng-if="wallet" class="item item-sub item-icon-left item-big-icon-left item-icon-right">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg wallet"/>
</i>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<span>
{{wallet.name || wallet.id}}
</span>

View file

@ -68,9 +68,7 @@
</div>
<div class="list">
<a class="item item-icon-left item-icon-right" ng-repeat="item in list" ng-if="hasWallets && item.recipientType == 'wallet'" ng-click="goToAmount(item)">
<i class="icon big-icon-svg" ng-if="item.recipientType == 'wallet'">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !item.color}" ng-style="{'background-color': item.color}" class="bg"/>
</i>
<i class="icon big-icon-svg" ng-if="item.recipientType == 'wallet'" ng-init="wallet = item" ng-include="'views/includes/walletIcon.html'"></i>
{{item.name}}
<i class="icon bp-arrow-right"></i>
</a>

View file

@ -39,6 +39,21 @@
<div class="item item-divider">{{'Preferences' | translate}}</div>
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.preferencesCash">
<i class="icon big-icon-svg">
<img src="img/icon-bch.svg" class="bg bch" ng-class="{'bch-enabled': cashSupport.value}"/>
</i>
<span class="setting-title">{{'Bitcoin Cash Support' | translate}}</span>
<span class="setting-value">
<span translate ng-if="cashSupport.value">Enabled</span>
<span translate ng-if="!cashSupport.value">Disabled</span>
</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item item-icon-left item-icon-right" ui-sref="tabs.notifications">
<i class="icon big-icon-svg">
<img src="img/icon-notifications.svg" class="bg"/>
@ -56,16 +71,6 @@
</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.unit">
<i class="icon big-icon-svg">
<img src="img/icon-unit.svg" class="bg"/>
</i>
<span class="setting-title">{{'Bitcoin Unit' | translate}}</span>
<span class="setting-value">
{{unitName}}
</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.altCurrency">
<i class="icon big-icon-svg">
@ -99,29 +104,24 @@
<i class="icon bp-arrow-right"></i>
</a>
<div class="item item-divider" ng-show="wallets[0]">{{'Wallets & Integrations' | translate}}</div>
<div class="item item-divider" ng-show="walletsBtc[0]">{{'Bitcoin Wallets' | translate}}</div>
<a class="item item-icon-left item-icon-right" href
ui-sref="tabs.preferences({'walletId': item.id})"
ng-repeat="item in wallets track by $index">
<i class="icon big-icon-svg circle">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !item.color}" ng-style="{'background-color': item.color}" class="bg"/>
</i>
<span>
{{item.name || item.id}}
<span class="size-12 text-light" ng-show="item.n > 1">
{{item.m}}-of-{{item.n}}
</span>
</span>
<span class="right text-light assertive" ng-show="!item.isComplete()">
{{'Incomplete' | translate}}
</span>
<span class="right text-light assertive" ng-show="item.isComplete() && item.needsBackup">
{{'Backup needed' | translate}}
</span>
<i class="icon bp-arrow-right"></i>
ui-sref="tabs.preferences({'walletId': wallet.id})"
ng-repeat="wallet in walletsBtc track by $index">
<span ng-include="'views/includes/walletListSettings.html'"></span>
</a>
<div class="item item-divider" ng-show="walletsBch[0]">{{'Bitcoin Cash Wallets' | translate}}</div>
<a class="item item-icon-left item-icon-right" href
ui-sref="tabs.preferences({'walletId': wallet.id})"
ng-repeat="wallet in walletsBch track by $index">
<span ng-include="'views/includes/walletListSettings.html'"></span>
</a>
<div class="item item-divider" ng-show="bitpayAccounts || buyAndSellServices[0]">{{'Integrations' | translate}}</div>
<a class=" item item-icon-left item-icon-right"
ng-if="bitpayAccounts || bitpayCards"
ui-sref="tabs.preferences.bitpayServices">

View file

@ -34,7 +34,7 @@
<div class="label" translate>From</div>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
<img ng-src="img/{{wallet.network == 'testnet' ? 'icon-wallet-testnet' : 'icon-wallet'}}.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg">
</i>
{{wallet ? wallet.name : '...'}}
</div>
@ -53,14 +53,14 @@
</span>
</div>
<div class="item">
<span translate>Invoice Fee</span>
<span translate>Network Cost</span>
<span class="item-note">
<span ng-if="invoiceFee">{{invoiceFee | currency:currencySymbol:2}} {{currencyIsoCode}}</span>
<span ng-if="!invoiceFee">...</span>
</span>
</div>
<div class="item">
<span translate>Network Fee</span>
<span translate>Miner Fee</span>
<span class="item-note">
<span ng-if="networkFee">{{networkFee | currency:currencySymbol:2}} {{currencyIsoCode}}</span>
<span ng-if="!networkFee">...</span>

View file

@ -52,9 +52,7 @@
<span class="label" ng-if="btx.action === 'sent'" translate>From</span>
<span class="label" ng-if="btx.action !== 'sent'" translate>To</span>
<div class="wallet">
<i class="icon big-icon-svg">
<img src="img/icon-wallet.svg" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color': wallet.color}" class="bg"/>
</i>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>
<div>{{wallet.name}}</div>
</div>
</div>
@ -91,9 +89,11 @@
<div class="item low-fees" ng-if="btx.lowAmount">
<i class="icon"><img src="img/icon-warning.png" width="20px"></i>
<span translate>
This transaction amount is too small compared to current Bitcoin network fees. Spending these funds will need a Bitcoin network fee cost comparable to the funds itself. </span>
This transaction amount is too small compared to current Bitcoin network fees. Spending these funds will need a Bitcoin network fee cost comparable to the funds itself.
</span>
<a ng-click="readMore()" translate>Learn more</a>
</div>
<div class="item single-line">
<span class="label" translate>Confirmations</span>
<span class="item-note">

View file

@ -14,73 +14,70 @@
<div class="bp-content" ng-class="{'status-bar': isCordova}">
<div class="amount-wrapper" ng-show="wallet && wallet.isComplete() && amountIsCollapsible" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color':wallet.color}">
<div
class="amount-bg"
ng-style="{'background-color':wallet.color}"
ng-class="{collapsible: amountIsCollapsible, 'wallet-background-color-default': !wallet.color}"
></div>
<div
ng-style="{'background-color':wallet.color, 'height': amountHeight}"
class="amount"
ng-class="{collapsible: amountIsCollapsible, 'wallet-background-color-default': !wallet.color}"
ng-class="{collapsible: amountIsCollapsible, 'wallet-background-color-default': !wallet.color, 'no-alternative': wallet.network != 'livenet'}"
>
<div ng-if="!notAuthorized && !updatingStatus">
<div ng-show="updateStatusError">
<span class="size-12 db m10">{{updateStatusError}}</span>
<a class="button button-outline button-light button-small" ng-click='updateAll(true)' translate>Tap to retry</a>
</div>
<div class="amount__error" ng-style="{opacity: altAmountOpacity}" ng-show="updateStatusError">
<span>{{updateStatusError}}</span>
</div>
<div ng-show="walletNotRegistered">
<span class="size-12 db m10" translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
<a class="button button-outline button-light button-small" ng-click='recreate()' translate>Recreate</a>
</div>
<div class="amount__error" ng-style="{opacity: altAmountOpacity}" ng-show="walletNotRegistered">
<span translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
</div>
<div
ng-click='updateAll(true)'
ng-show="!updateStatusError && !wallet.balanceHidden && !wallet.scanning"
on-hold="hideToggle()"
ng-style="{'transform': amountScale}"
ng-class="{amount__balance: amountIsCollapsible}">
<strong class="size-36">{{status.totalBalanceStr}}</strong>
<div
ng-click='updateAll(true)'
ng-show="!updateStatusError && !wallet.balanceHidden"
on-hold="hideToggle()"
ng-style="{'transform': amountScale}"
ng-class="{amount__balance: amountIsCollapsible}">
<strong class="size-36">{{status.totalBalanceStr}}</strong>
<div
class="size-14 amount-alternative"
ng-if="status.totalBalanceAlternative"
ng-style="{opacity: altAmountOpacity}"
>
{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}
</div>
</div>
<div ng-style="{'transform': amountScale}"
class="amount__balance"
ng-show="!updateStatusError && wallet.balanceHidden"
on-hold="hideToggle()">
<strong class="size-24" translate>[Balance Hidden]</strong>
<div ng-style="{opacity: altAmountOpacity}" class="size-14 amount-alternative" translate>
Tap and hold to show
</div>
</div>
<div ng-if="!wallet.balanceHidden && showBalanceButton" ng-style="{'opacity': altAmountOpacity, 'transform': amountScale}">
<button class="button button-standard button-primary amount__button-balance size-14" ng-click="openBalanceModal()">
<i class="icon ion-ios-checkmark-outline"></i>
<strong>
{{status.spendableBalanceStr}}
</strong>
&nbsp;
<span>
{{status.spendableBalanceAlternative}} {{status.alternativeIsoCode}}
</span>
</button>
</div>
</div>
<div ng-if="updatingStatus" class="amount__updating">
<div class="size-36">
<strong>...</strong>
class="size-14 amount-alternative"
ng-if="status.totalBalanceAlternative && wallet.network == 'livenet'"
ng-style="{opacity: altAmountOpacity}">
{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}
</div>
</div>
<div ng-style="{'transform': amountScale}"
class="amount__balance"
ng-show="!updateStatusError && wallet.balanceHidden && !wallet.scanning"
on-hold="hideToggle()">
<strong class="size-24" translate>[Balance Hidden]</strong>
<div ng-style="{opacity: altAmountOpacity}" class="size-14 amount-alternative" translate>
Tap and hold to show
</div>
</div>
<div ng-style="{'transform': amountScale}"
class="amount__balance"
ng-show="!updateStatusError && wallet.scanning">
<strong class="size-24" translate>[Scanning Funds]</strong>
<div ng-style="{opacity: altAmountOpacity}" class="size-14 amount-alternative" translate>
Please wait
</div>
</div>
<div ng-if="!wallet.balanceHidden && !wallet.scanning && showBalanceButton" ng-style="{'opacity': altAmountOpacity, 'transform': amountScale}">
<button class="button button-standard button-primary amount__button-balance size-14" ng-click="openBalanceModal()">
<i class="icon ion-ios-checkmark-outline"></i>
<strong>
{{status.spendableBalanceStr}}
</strong>
&nbsp;
<span>
{{status.spendableBalanceAlternative}} {{status.alternativeIsoCode}}
</span>
</button>
</div>
</div>
<div class="wallet-details-wallet-info" ng-style="{opacity: altAmountOpacity}">
<span ng-include="'views/includes/walletInfo.html'"></span>
@ -95,77 +92,91 @@
on-refresh="onRefresh()">
</ion-refresher>
<div class="amount-wrapper" ng-if="wallet && wallet.isComplete() && !amountIsCollapsible">
<div
class="amount-bg"
ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color':wallet.color}"
></div>
<div
ng-style="{'background-color':wallet.color}"
class="amount"
ng-class="{'collapsible': amountIsCollapsible, 'wallet-background-color-default': !wallet.color}"
>
<div ng-if="!updatingStatus">
<!-- Start Balance view duplicate (for Android compatibility) -->
<div class="amount-wrapper" ng-show="wallet && wallet.isComplete() && !amountIsCollapsible" ng-class="{'wallet-background-color-default': !wallet.color}" ng-style="{'background-color':wallet.color}">
<div ng-show="updateStatusError">
<span class="size-12 db m10">{{updateStatusError}}</span>
<a class="button button-outline button-light button-small" ng-click='updateAll()' translate>Tap to retry</a>
</div>
<div
ng-style="{'background-color':wallet.color, 'height': amountHeight}"
class="amount"
ng-class="{collapsible: amountIsCollapsible, 'wallet-background-color-default': !wallet.color, 'no-alternative': wallet.network != 'livenet'}"
>
<div ng-show="walletNotRegistered">
<span class="size-12 db m10" translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
<a class="button button-outline button-light button-small" ng-click='recreate()' translate>Recreate</a>
</div>
<div ng-click='updateAll(true)' ng-show="!updateStatusError && !wallet.balanceHidden" on-hold="hideToggle()" ng-style="{'transform': amountScale}">
<strong class="size-36">{{status.totalBalanceStr}}</strong>
<div class="size-14 amount-alternative" ng-if="status.totalBalanceAlternative">{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}</div>
</div>
<div ng-if="!wallet.balanceHidden && showBalanceButton" ng-style="{'opacity': altAmountOpacity, 'transform': amountScale}">
<button class="button button-standard button-primary amount__button-balance size-14" ng-click="openBalanceModal()">
<i class="icon ion-ios-checkmark-outline"></i>
<strong>
{{status.spendableBalanceStr}}
</strong>
&nbsp;
<span>
{{status.spendableBalanceAlternative}} {{status.alternativeIsoCode}}
</span>
</button>
</div>
<div ng-show="!updateStatusError && wallet.balanceHidden" ng-style="{'transform': amountScale}" on-hold="hideToggle()">
<strong class="size-24" translate>[Balance Hidden]</strong>
<div class="size-14" translate>
Tap and hold to show
</div>
</div>
</div>
<div ng-if="updatingStatus">
<div class="size-36">
<strong>...</strong>
</div>
</div>
</div> <!-- amount -->
<div class="wallet-details-wallet-info">
<span ng-include="'views/includes/walletInfo.html'"></span>
<div class="amount__error" ng-style="{opacity: altAmountOpacity}" ng-show="updateStatusError">
<span>{{updateStatusError}}</span>
</div>
</div> <!-- oh -->
<div class="amount__error" ng-style="{opacity: altAmountOpacity}" ng-show="walletNotRegistered">
<span translate>This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.</span>
</div>
<div
ng-click='updateAll(true)'
ng-show="!updateStatusError && !wallet.balanceHidden && !wallet.scanning"
on-hold="hideToggle()"
ng-style="{'transform': amountScale}"
ng-class="{amount__balance: amountIsCollapsible}">
<strong class="size-36">{{status.totalBalanceStr}}</strong>
<div
class="size-14 amount-alternative"
ng-if="status.totalBalanceAlternative && wallet.network == 'livenet'"
ng-style="{opacity: altAmountOpacity}">
{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}
</div>
</div>
<div ng-style="{'transform': amountScale}"
class="amount__balance"
ng-show="!updateStatusError && wallet.balanceHidden && !wallet.scanning"
on-hold="hideToggle()">
<strong class="size-24" translate>[Balance Hidden]</strong>
<div ng-style="{opacity: altAmountOpacity}" class="size-14 amount-alternative" translate>
Tap and hold to show
</div>
</div>
<div ng-style="{'transform': amountScale}"
class="amount__balance"
ng-show="!updateStatusError && wallet.scanning">
<strong class="size-24" translate>[Scanning Funds]</strong>
<div ng-style="{opacity: altAmountOpacity}" class="size-14 amount-alternative" translate>
Please wait
</div>
</div>
<div ng-if="!wallet.balanceHidden && !wallet.scanning && showBalanceButton" ng-style="{'opacity': altAmountOpacity, 'transform': amountScale}">
<button class="button button-standard button-primary amount__button-balance size-14" ng-click="openBalanceModal()">
<i class="icon ion-ios-checkmark-outline"></i>
<strong>
{{status.spendableBalanceStr}}
</strong>
&nbsp;
<span>
{{status.spendableBalanceAlternative}} {{status.alternativeIsoCode}}
</span>
</button>
</div>
</div>
<div class="wallet-details-wallet-info" ng-style="{opacity: altAmountOpacity}">
<span ng-include="'views/includes/walletInfo.html'"></span>
</div>
</div>
<!-- End Balance view duplicate (for Android compatibility) -->
<a class="wallet-not-backed-up-warning" ng-if="wallet.needsBackup" ui-sref="tabs.wallet.backupWarning({from: 'tabs.wallet'})" translate>
Wallet not backed up
</a>
<a class="wallet-not-backed-up-warning" ng-if="lowUtxosWarning" ui-sref="tabs.wallet.addresses({walletId:wallet.id,from: 'tabs.wallet'})" translate>
Spending this balance will need significant Bitcoin network fees
</a>
<div class="p60b" ng-if="wallet && wallet.isComplete() && !walletNotRegistered">
<div class="oh pr m20t" ng-show="wallet.incorrectDerivation">
<div ng-if="wallet && wallet.isComplete() && !walletNotRegistered">
<div class="wallet-details__incorrect-derivation" ng-show="wallet.incorrectDerivation">
<div class="text-center text-warning">
<i class="fi-alert"></i>
<span translate>
@ -190,37 +201,30 @@
<!-- Transactions -->
<div class="oh pr m20t text-gray size-12 text-center"
<div class="wallet-details__no-transaction"
ng-show="!txHistory[0] && !updatingTxHistory && !updateTxHistoryError && !updateStatusError" translate>
No transactions yet
</div>
<div class="oh pr m20t text-gray size-12 text-center"
<div class="wallet-details__no-update-history"
ng-show="!txHistory[0] && !updatingTxHistory && updateTxHistoryError" translate>
Could not update transaction history
</div>
<div ng-show="updatingTxHistory && updatingTxHistoryProgress>5" class="updating">
<div class="row" >
<ion-spinner class="spinner-dark" icon="crescent"></ion-spinner>
</div>
<div class="row" >
<div class="col">
<span translate>Updating transaction history. Please stand by.</span><br>
<span translate>{{updatingTxHistoryProgress}} transactions downloaded</span>
</div>
</div>
<div ng-show="updatingTxHistory && updatingTxHistoryProgress>5" class="wallet-details__updating-history">
<span translate>Updating transaction history. Please stand by.</span><br>
<span translate>{{updatingTxHistoryProgress}} transactions downloaded</span>
</div>
<div class="wallet-details__list" ng-show="txHistory[0]">
<div class="wallet-details__list" ng-show="txHistory[0] && !updatingTxHistory">
<div ng-repeat="btx in txHistory track by $index" ng-click="openTxModal(btx)">
<span ng-include="'views/includes/walletHistory.html'"></span>
</div>
</div>
<ion-infinite-scroll
ng-if="txHistoryShowMore"
ng-if="txHistory[0] && !updatingTxHistory && txHistoryShowMore"
on-infinite="showMore()"
distance="1%">
</ion-infinite-scroll>