send flow

This commit is contained in:
Javier 2016-08-12 12:44:16 -03:00
commit f3dd69b510
197 changed files with 205673 additions and 8 deletions

View file

@ -0,0 +1,9 @@
<div class="columns m20t">
<div class="m20t size-14 text-center">
<i class="fi-alert"></i>
{{msg|translate}}
</div>
<div class="text-center m20t" ng-click="close()">
<a class="button outline light-gray round tiny small-4">OK</a>
</div>
</div>

View file

@ -0,0 +1,10 @@
<div>
<span class="db text-bold">
<span translate>Available Balance</span>:
{{index.availableBalanceStr }}
</span>
<span class="text-gray" ng-show="index.lockedBalanceSat">
{{index.lockedBalanceStr}}
<span translate>locked by pending payments</span>
</span>
</div>

View file

@ -0,0 +1,39 @@
<div class="m20t">
<label class="size-14 text-center">
<span translate>Send bitcoin</span>
</label>
</div>
<div class="text-center">
<div class="size-36">{{tx.amountStr}}</div>
<div class="size-12 label gray radius" ng-show="tx.alternativeAmountStr">{{tx.alternativeAmountStr}}</div>
<i class="db fi-arrow-down size-24 m10v"></i>
<div class="payment-proposal-to" ng-click="copyToClipboard(tx.toAddress)">
<i class="fi-bitcoin left m10l"></i>
<contact ng-if="!tx.hasMultiplesOutputs" class="dib enable_text_select ellipsis m5t m5b m15l size-14" address="{{tx.toAddress}}"></contact>
<span ng-if="tx.hasMultiplesOutputs" translate>
Multiple recipients
</span>
</div>
<div class="m10t size-12" ng-init="processFee(tx.amount, tx.fee)">
<div ng-show="!showPercentage" ng-click="showPercentage = true">
<span translate>Fee</span> <span class="tl">({{feeLevel|translate}})</span>:
<span class="text-bold">{{tx.feeStr}}</span>
<span class="label gray radius">{{feeAlternativeStr}}</span>
</div>
<div ng-show="showPercentage" ng-click="showPercentage = false" translate>
{{feeRateStr}} of the transaction
</div>
</div>
<div class="row m20t dib">
<div class="half-row left">
<button ng-click="cancel()" class="round outline dark-gray expand">
<span class="size-12" translate>Cancel</span>
</button>
</div>
<div class="half-row left">
<button ng-click="accept()" class="round expand" ng-style="{'background-color':index.backgroundColor}" autofocus>
<span class="size-12" translate>Confirm</span>
</button>
</div>
</div>
</div>

View file

@ -0,0 +1,10 @@
<ul class="no-bullet m0">
<li class="" ng-repeat="copayer in index.copayers">
<span class="size-12" ng-show="copayer.id == index.copayerId">
<i class="fi-check m5r"></i> {{'Me'|translate}}
</span>
<span class="size-12 text-gray" ng-show="copayer.id != index.copayerId">
<i class="fi-check m5r"></i> {{copayer.name}}
</span>
</li>
</ul>

View file

@ -0,0 +1,14 @@
<a ng-click="index.setTab(item, false, 0, true)"
ng-style="{'color': index.tab == item.link ? index.backgroundColor : '#A5B2BF'}"
id="menu-{{item.link}}">
<i class="size-18 {{item.icon[index.tab == item.link]}} db"></i>
<span class="size-10 tu">
{{ item.title|translate }}
<span class="label round"
ng-style="{'background-color':index.backgroundColor}"
ng-if="item.link=='walletHome' && index.pendingTxProposalsCountForUs > 0">
{{ index.pendingTxProposalsCountForUs }}
</span>
</span>
<div ng-if="item.link == 'walletHome'" class="menu-wallet-home"></div>
</a>

View file

@ -0,0 +1,5 @@
<div class="medium-2 small-2 columns text-center bottombar-item">
<a ng-click="showPlugins ? showPlugins = false : showPlugins = true" class="menu-toggle">
<i class="size-24 db" ng-class="{ 'icon-arrow-left': showPlugins, 'icon-arrow-right' : !showPlugins }"> </i>
</a>
</div>

View file

@ -0,0 +1,10 @@
<div class="bottom-bar row collapse p0i" ng-show="!index.notAuthorized">
<div>
<div class="row collapse p0i">
<div class="medium-4 small-4 columns text-center bottombar-item"
ng-repeat="item in index.menu">
<span ng-include="'views/includes/menu-item.html'"></span>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,15 @@
<div class="columns m20t">
<label class="size-14 text-center">
<span ng-show="!comment" translate>Add comment</span>
<span ng-show="comment" translate>Edit comment</span>
</label>
<input type="text" ng-model="data.comment" autofocus>
</div>
<div class="row m20t dib">
<div class="half-row left">
<button class="round outline dark-gray expand" ng-click="commentPopupClose()" translate>Cancel</button>
</div>
<div class="half-row left">
<button ng-style="{'background-color': index.backgroundColor}" class="round outline expand" ng-click="commentPopupSave()" translate>Save</button>
</div>
</div>

View file

@ -0,0 +1,18 @@
<div class="dr-notification-wrapper" ng-repeat="noti in queue" ng-click="removeNotification(noti)">
<div class="dr-notification animated bounceInDown">
<div class="dr-notification-image" ng-switch on="noti.image">
<i class="{{noti.icon}}" ng-switch-when="false"></i>
<img ng-src="{{noti.image}}" ng-switch-default />
</div>
<div class="dr-notification-content">
<h3 class="dr-notification-title">{{noti.title|translate}}</h3>
<div class="dr-notification-text label radius" ng-show="noti.userData.color"
ng-style="{'background-color':noti.userData.color}">{{noti.content|translate}}
</div>
<div class="dr-notification-text" ng-show="!noti.userData.color"
>{{noti.content|translate}}
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,14 @@
<li class="p10 oh" ng-click="copyToClipboard(output.toAddress)">
<span class="text-gray" translate>To</span>:
<span class="right enable_text_select">{{output.toAddress || output.address}}</span>
</li>
<li class="p10" ng-click="copyToClipboard(output.amountStr)">
<span class="text-gray" translate>Amount</span>:
<span class="right enable_text_select">{{output.amountStr}}
<span ng-show="output.alternativeAmountStr" class="label gray radius">{{output.alternativeAmountStr}}</span>
</span>
</li>
<li class="p10 oh" ng-click="copyToClipboard(output.message)">
<span class="text-gray" translate>Note</span>:
<span class="right enable_text_select">{{output.message}}</span>
</li>

View file

@ -0,0 +1,42 @@
<div class="columns m20t">
<label class="size-14 text-center" for="password" ng-if="isSetup">
<span ng-show="!isVerification" translate>Set up a spending password</span>
<span ng-show="isVerification" translate>Repeat the spending password</span>
</label>
<label class="size-14 text-center" for="password" ng-if="!isSetup">
<span translate>Enter your spending password</span>
</label>
<div class="input m20t">
<input type="password" placeholder="{{'Your spending password'|translate}}"
id="passwordInput" name="password" ng-model="data.password" ng-keypress="keyPress($event)" autofocus>
</div>
</div>
<div class="row">
<div class="small-6 columns">
<button
class="round small-6 columns outline dark-gray expand"
ng-click="cancel()"
ng-disabled="loading">
<span class="size-12" translate>Cancel</span>
</button>
</div>
<div class="small-6 columns">
<button class="round expand"
ng-click="set()"
ng-disabled="!data.password || loading"
ng-style="{'background-color':index.backgroundColor}">
<span ng-if="isSetup" class="size-12" translate>SET</span>
<span ng-if="!isSetup" class="size-12">OK</span>
</button>
</div>
</div>
<p class="text-warning size-12 columns m20t text-center" ng-show="isSetup">
<i class="fi-alert"></i>
<span ng-show="!error" translate> Your wallet key will be encrypted. The Spending Password cannot be recovered. Be sure to write it down</span>
<span ng-show="error">{{error|translate}}</span>
</p>

View file

@ -0,0 +1,43 @@
<div class="sidebar" ng-controller="sidebarController as sidebar">
<header>
<logo ng-if="!sidebar.isWindowsPhoneApp" negative="true" width="80"></logo>
<img ng-if="sidebar.isWindowsPhoneApp" src="img/logo-negative.png" alt="Copay" width="80">
<div ng-include="'views/includes/version.html'"></div>
</header>
<ion-content>
<ul class="pr">
<li ng-show="sidebar.wallets[0]"
ng-repeat="item in sidebar.wallets track by $index" ng-class="{'selected': item.id == index.walletId}" class="nav-item"
menu-toggle href ui-sref="walletHome" on-tap="sidebar.switchWallet(item.id, index.walletId)">
<div class="avatar-wallet" ng-style="{'background-color':item.color}">
<i class="icon-wallet size-21"></i>
</div>
<div class="name-wallet" ng-class="{'m8t':item.n == 1}">{{item.name || item.id}}</div>
<div class="size-12" ng-show="item.n > 1" translate>{{item.m}}-of-{{item.n}}</div>
</li>
<li menu-toggle href ui-sref="add">
<i class="icon-arrow-right3 size-18 right m10t vm"></i>
<i class="fi-plus size-24 icon vm"></i>
<div class="tu text-bold">
<span class="size-12" translate>Add wallet</span>
</div>
<div translate>Create, join or import</div>
</li>
<li ng-show="!index.noFocusedWallet && !index.isWindowsPhoneApp && (index.glideraEnabled || index.coinbaseEnabled)" menu-toggle href ui-sref="buyandsell">
<i class="icon-arrow-right3 size-18 right m10t vm"></i>
<i class="icon-bank size-24 icon vm"></i>
<div class="tu text-bold m5t">
<span class="size-12" translate>Buy and Sell</span>
</div>
</li>
<li ng-show="!index.noFocusedWallet" menu-toggle href ui-sref="preferencesGlobal">
<i class="icon-arrow-right3 size-18 right m10t vm"></i>
<i class="fi-widget size-24 icon vm"></i>
<div class="tu text-bold">
<span class="size-12" translate>Settings</span>
</div>
<div translate>Global preferences</div>
</li>
</ul>
</ion-content>
</div>

View file

@ -0,0 +1,14 @@
<ul>
<li translate>The software you are about to use functions as a free, open source, and multi-signature digital wallet.</li>
<li translate>The software does not constitute an account where BitPay or other third parties serve as financial intermediaries or custodians of your bitcoin.</li>
<li translate>While the software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, we cannot guarantee that there will be no bugs in the software.</li>
<li translate>You acknowledge that your use of this software is at your own discretion and in compliance with all applicable laws.</li>
<li translate>You are responsible for safekeeping your passwords, private key pairs, PINs and any other codes you use to access the software.</li>
<li translate><b>IF YOU LOSE ACCESS TO YOUR COPAY WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT COPAY WALLET WILL BECOME INACCESSIBLE.</b></li>
<li translate>All transaction requests are irreversible.</li>
<li translate>The authors of the software, employees and affiliates of Bitpay, copyright holders, and BitPay, Inc. cannot retrieve your private keys or passwords if you lose or forget them and cannot guarantee transaction confirmation as they do not have control over the Bitcoin network.</li>
<li translate>To the fullest extent permitted by law, this software is provided “as is” and no representations or warranties can be made of any kind, express or implied, including but not limited to the warranties of merchantability, fitness or a particular purpose and noninfringement.</li>
<li translate>You assume any and all risks associated with the use of the software.</li>
<li translate>In no event shall the authors of the software, employees and affiliates of Bitpay, copyright holders, or BitPay, Inc. be held liable for any claim, damages or other liability, whether in an action of contract, tort, or otherwise, arising from, out of or in connection with the software.</li>
<li translate>We reserve the right to modify this disclaimer from time to time.</li>
</ul>

View file

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

View file

@ -0,0 +1,38 @@
<div class="row collapse last-transactions-content line-b"
ng-class="{'text-gray':!tx.pendingForUs}"
ng-click="home.openTxpModal(tx, index.copayers, !!index.glideraStatus)">
<div class="large-6 medium-6 small-6 columns size-14">
<div class="m10r left pr">
<i class="icon-circle-active size-10" ng-show="tx.pendingForUs" ng-style="{'color':index.backgroundColor}"></i>
<img src="img/icon-proposal.svg" alt="sync" width="40">
</div>
<div class="m10t">
<div ng-show="!tx.merchant">
<span ng-show="index.addressbook[tx.toAddress] && !tx.message">
{{index.addressbook[tx.toAddress]}}
</span>
<span class="ellipsis" ng-show="!index.addressbook[tx.toAddress] && tx.message">
{{tx.message}}
</span>
<span ng-show="!index.addressbook[tx.toAddress] && !tx.message" translate>
Sending
</span>
</div>
<div ng-show="tx.merchant">
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock"></i> {{tx.merchant.domain}}</span>
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock"></i> {{tx.merchant.domain}}</span>
</div>
</div>
</div>
<div class="large-5 medium-5 small-5 columns text-right">
<span class="size-16">
- {{tx.amountStr}}
</span>
<div class="size-12 text-gray">
<time>{{ (tx.ts || tx.createdOn ) * 1000 | amTimeAgo}}</time>
</div>
</div>
<div class="large-1 medium-1 small-1 columns text-right m10t">
<i class="icon-arrow-right3 size-18"></i>
</div>
</div>

View file

@ -0,0 +1,4 @@
<span ng-controller="versionController as v">
<small>v{{v.version}}</small>
</span>

View file

@ -0,0 +1,20 @@
<span ng-show="index.isShared" class="size-12"><span translate>{{index.m}}-of-{{index.n}}</span></span>
<span ng-show="index.isSingleAddress" class="size-12"><span translate>Auditable</span></span>
<img style="height:0.6em; margin-right: 1px;" ng-show="index.network != 'livenet'" src="img/icon-testnet-white.svg">
<img style="height:0.6em; margin-right: 1px;" ng-show="!index.canSign && !index.isPrivKeyExternal"
src="img/icon-read-only-white.svg">
<img style="height:0.6em; margin-right: 1px;" ng-show="index.externalSource == 'trezor'"
src="img/icon-trezor-white.svg">
<img style="height:0.6em; margin-right: 1px;" ng-show="index.externalSource == 'ledger'"
src="img/icon-ledger-white.svg">
<span class="size-12 dib" style="height:0.6em; margin-right: 1px;" ng-show="index.account">#{{index.account || 0}} </span>
<img style="height:0.6em; margin-right: 1px;" ng-show="index.isPrivKeyEncrypted" src="img/icon-lock-white.svg">
<!-- <img style="height:1em" ng&#45;show="index.preferences.email" src="img/icon&#45;email.svg"> -->
<img style="height:0.6em; margin-right: 1px;" ng-show="index.usingCustomBWS" src="img/icon-bws-white.svg">
<img style="height:0.6em" class="animated flash infinite" ng-show="index.loadingWallet ||
index.updatingTxHistory" src="img/icon-sync-white.svg">