Merge pull request #2060 from matiu/bug/payment-intent

Bug/payment intent
This commit is contained in:
Gustavo Maximiliano Cortez 2014-12-09 19:32:18 -03:00
commit c2598b2646
39 changed files with 935 additions and 888 deletions

View file

@ -1,6 +1,4 @@
<div ng-controller="CopayersController">
<div ng-if='$root.wallet && $root.wallet.isComplete()' ng-init="goToWallet()"></div>
<div ng-controller="CopayersController" ng-init="init()">
<div class="row hide-for-large-up">
<div class="medium-12 small-12 columns">
<h1 translate>
@ -14,6 +12,13 @@
<div class="panel oh">
<h2 class="line-b">
Share this secret with your other copayers
<div class="right size-10">
<span ng-if="!$root.wallet.isShared()">Personal Wallet</span>
<span ng-if="$root.wallet.isShared()">
Multisignature wallet [{{$root.wallet.requiredCopayers}} of {{$root.wallet.totalCopayers}} ]
</span>
<span ng-if="$root.wallet.isTestnet()"> in TESTNET</span>
</div>
</h2>
<div class="text-center">
<qrcode size="250" data="{{secret}}"></qrcode>
@ -24,7 +29,7 @@
</div>
</div>
<div class="panel oh">
<div ng-include="'views/includes/copayer.html'"></div>
<div ng-include="'views/includes/copayers.html'"></div>
<div class="copay-box" ng-if="!$root.wallet.isComplete()">
<span ng-include="'views/includes/photo.html'"></span>
<p class="size-12 text-white text-light m0">

View file

@ -13,8 +13,8 @@
</div>
<div class="row" ng-if="blockchain_txs[0].txid">
<div class="large-12 columns">
<div class="panel" ng-repeat="btx in blockchain_txs | orderBy:'-ts'">
<div class="row size-14" ng-click="openTxModal(btx)">
<div class="panel" ng-repeat="btx in blockchain_txs | orderBy:'-ts'" ng-click="openTxModal(btx)">
<div class="row size-14">
<div class="large-2 medium-3 small-4 columns">
<div class="tx-date oh">

View file

@ -164,7 +164,7 @@
</button>
</form>
<div ng-if="usingLocalStorage" class="text-gray size-12">
<div ng-if="usingLocalStorage" class="text-gray size-12 m10v">
* Using this device storage. Change to cloud storage on 'settings'.
</div>

View file

@ -1,4 +1,4 @@
<div class="home-wallet" ng-controller="HomeWalletController" ng-init="init()">
<div class="home-wallet" ng-controller="HomeWalletController" ng-init="initHome()">
<div class="row hide-for-large-up">
<div class="medium-12 small-12 columns">
<h1 translate>Home</h1>
@ -63,7 +63,7 @@
<div class="large-12 columns">
<div class="panel oh">
<h2 class="line-b" translate>Copayers</h2>
<div ng-include="'views/includes/copayer.html'"></div>
<div ng-include="'views/includes/copayers.html'"></div>
</div>
</div>
</div>

View file

@ -1,5 +1,5 @@
<div ng-controller="CopayersController">
<div class="copay-box" ng-repeat="copayer in copayersList()">
<div>
<div class="copay-box" ng-repeat="copayer in copayers">
<div class="photo-container">
<img gravatar-src="'{{copayer.nick}}'" gravatar-size="35">
</div>

View file

@ -2,7 +2,7 @@
<h1>
{{$root.title}}
<small ng-if="$root.wallet">
<a class="text-gray" ng-click="refresh()" ng-if="!$root.updatingBalance">
<a class="text-gray" ng-click="refresh()" ng-if="$root.wallet.isComplete() && !$root.updatingBalance">
<i class="fi-refresh"></i>
</a>
<span ng-if="$root.updatingBalance">

View file

@ -1,5 +1,4 @@
<div class="last-transactions-header row collapse" ng-init="txIndex = $index">
<div class="last-transactions-header row collapse" ng-init="txIndex = $index" ng-click="openTxModal(tx)">
<div class="large-9 small-7 columns size-14">
<div ng-show="tx.comment">
<i class="fi-comment-quotes size-18 vm"></i>
@ -22,25 +21,21 @@
<div class="large-2 medium-2 small-1 columns text-center">
<i class="fi-arrow-right"></i>
</div>
<div class="large-5 medium-5 small-5 columns ellipsis size-12">
<contact address="{{out.address}}" tooltip-popup-delay="500" tooltip tooltip-placement="right" />
<div class="large-5 medium m0-5 small-5 columns ellipsis size-12">
<div ng-if="tx.merchant">
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{tx.merchant.domain}}</span>
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{tx.merchant.domain}}</span>
</span>
</div>
<contact address="{{out.address}}" tooltip-popup-delay="500" tooltip tooltip-placement="right" ng-hide="tx.merchant" />
</div>
</div>
<div class="m10t" ng-show="!!tx.merchant">
<div class="send-note">
<span><b>{{tx.merchant.pr.pd.memo}}</b></span> <br>
<span>Expires {{tx.merchant.pr.pd.expires * 1000 | amTimeAgo }} </span>
<span ng-show="tx.merchant.domain">[{{tx.merchant.domain}}]</span>
<span ng-show="!!tx.merchant.pr.ca"><i class="icon-locked size-14"></i> {{tx.merchant.pr.ca}}</span>
<span ng-show="!tx.merchant.pr.ca" style="color:red;weight:bold;"><i class="fi-unlock"></i> Untrusted</span>
</div>
</div>
<div class="line-b"></div>
</div>
<div class="last-transactions-footer">
<div class="row collapse">
<div class="large-6 medium-12 small-12 columns" ng-show="!tx.sentTs">
<div class="small-12 columns" ng-show="!tx.sentTs">
<div ng-show="tx.signedBy[myId]">
<button class="secondary left m10r tiny m0 radius" ng-disabled="true"> <i class="fi-check icon-sign check"></i>
<span translate>Signed by me</span>
@ -52,64 +47,45 @@
</button>
</div>
<div ng-show="!tx.signedBy[myId] && !tx.rejectedBy[myId]">
<div class="hide-for-small-only">
<button class="primary tiny m0 m15r" ng-click="sign(tx.ntxid)" ng-disabled="loading">
<i class="fi-check icon-sign check"></i> <span translate>Sign</span>
</button>
<button class="warning tiny m0" ng-click="reject(tx.ntxid)" ng-disabled="loading">
<i class="fi-x icon-sign x" ></i> <span translate>Reject</span>
</button>
</div>
<div class="show-for-small-only row">
<button class="primary tiny small-5 columns m10b" ng-click="sign(tx.ntxid)" ng-disabled="loading">
<i class="fi-check icon-sign check"></i> <span translate>Sign</span>
</button>
<button class="warning tiny small-5 columns m10b" ng-click="reject(tx.ntxid)" ng-disabled="loading">
<i class="fi-x icon-sign x" ></i> <span translate>Reject</span>
</button>
<div class="row">
<div class="large-6 medium-6 small-6 columns text-left">
<button class="button warning tiny m0" ng-click="reject(tx.ntxid)" ng-disabled="loading">
<i class="fi-x icon-sign x"></i> <span translate>Reject</span>
</button>
</div>
<div class="large-6 medium-6 small-6 columns text-right">
<button class="button primary tiny m0" ng-click="sign(tx.ntxid)" ng-disabled="loading">
<i class="fi-check icon-sign check"></i> <span translate>Sign</span>
</button>
</div>
</div>
</div>
<div ng-show="!tx.missingSignatures && !tx.sentTs">
<button class="primary tiny m0" ng-click="send(tx.ntxid)" ng-disabled="loading"> <i class="fi-upload-cloud"></i>
<button class="primary tiny m0" ng-click="send(tx.ntxid)" ng-disabled="loading"> <i class="fi-upload-cloud"></i>
<span translate>Broadcast Transaction</span>
</button>
</div>
</div>
<div class="large-6 columns small text-gray show-for-large-up text-right">
<div>
<strong translate>Fee</strong>: {{tx.fee}} {{$root.wallet.settings.unitName}}
</div>
</div>
</div>
</div>
<a class="missing-copayers" ng-click="tx.showDetails = !tx.showDetails">
<div class="row collapse">
<div class="small-12 small text-gray text-center">
<span ng-click="tx.showDetails = !tx.showDetails">
<span ng-show="!tx.finallyRejected && tx.missingSignatures==1">
<i class="fi-torso"></i>
One signature missing
</span>
<span ng-show="!tx.finallyRejected && tx.missingSignatures>1">
<span ng-show="!tx.finallyRejected && tx.missingSignatures>1">
<i class="icon-people"></i>
{{tx.missingSignatures}} signatures missing
</span>
<span ng-show="!tx.finallyRejected && tx.missingSignatures==0">
<span ng-show="!tx.finallyRejected && tx.missingSignatures==0">
Copayers
</span>
<i ng-class="{'icon-arrow-up2':tx.showDetails, 'icon-arrow-down2':!tx.showDetails}"></i>
</a>
<ul class="tx-copayers" ng-show="tx.showDetails">
<li ng-repeat="c in tx.actionList" ng-class="{'bottom-line-copayers':!$last}">
<span>
<i ng-if="c.actions.rejected" class="fi-x icon-sign x"></i>
<i ng-if="c.actions.sign" class="fi-check icon-sign check"></i>
<i ng-if="!c.actions.sign && !c.actions.rejected && tx.missingSignatures" class="m10r fi-loop icon-rotate"></i>
</span>
<span>
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active m10r"></i>
</span>
<span>{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}</span>
</li>
</ul>
</div>
</div>

30
views/modals/paypro.html Normal file
View file

@ -0,0 +1,30 @@
<a class="close-reveal-modal" ng-click="cancel()">&#215;</a>
<div class="size-14">
<h1 class="m30v">Payment Request</h1>
<p>
<b translate>Signature:</b> {{md.domain}}
<span ng-show="md.pr.ca"><i class="fi-lock color-greeni"></i> {{md.pr.ca}}</span>
<span ng-show="!md.pr.ca"><i class="fi-unlock color-yellowi"></i> Untrusted</span>
<p>
<b translate>Merchant Message:</b>
<br>
{{md.pr.pd.memo || address}}
</p>
<p>
<b translate>Amount:</b>
{{md.unitTotal}} {{$root.wallet.settings.unitName}}
<span class="text-gray" ng-if="isRateAvailable">
{{ alternative }} {{ alternativeIsoCode }}
</span>
<div ng-if="md.expirationDate" class="m10v">
<b>Expires</b>: {{md.expirationDate | amTimeAgo }}
</div>
</div>
</div>

View file

@ -31,11 +31,11 @@
</div>
<div class="line-b m10t"></div>
<h1 class="m30v">Transaction Details</h1>
<div class="ellipsis"> <b>ID:</b> <span class="text-gray"> {{btx.txid}} </span></div>
<div ng-if="btx.ts" class="m10v">
<time><b>{{btx.ts | amTimeAgo}}</b></time>
:
<time> <span class="text-gray">{{btx.ts | amCalendar}}</span></time>
<div class="ellipsis" ng-if="btx.txid"> <b>ID:</b> <span class="text-gray"> {{btx.txid}} </span></div>
<div ng-if="btx.ts || btx.createdTs " class="m10v">
<time> <span>{{ (btx.ts || btx.createdTs ) | amCalendar}}</span></time>
[<time>{{ (btx.ts || btx.createdTs ) | amTimeAgo}}</time>]
</div>
<div class="m10v">
@ -51,15 +51,19 @@
<div ng-if="btx.addressTo" class="m10v">
<span class="ellipsis">
<b>To:</b>
<span class="text-gray"> {{btx.labelTo || btx.addressTo}}</span>
<span ng-if="btx.merchant">
<span ng-show="btx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{btx.merchant.domain}}</span>
<span ng-show="!btx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{btx.merchant.domain}}</span>
</span>
<span ng-if="!btx.merchant">
<span class="text-gray"> {{btx.labelTo || btx.addressTo}}</span>
</span>
</span>
</div>
<div ng-if="!!btx.merchant" class="m10v">
Payment Protocol Information:
<br>{{btx.merchant.pr.pd.memo}}</b>
<br>{{btx.paymentAckMemo}}
<span ng-show="tx.merchant.domain">[{{btx.merchant.domain}}]</span>
<div ng-if="btx.merchant" class="m10v">
{{btx.merchant.pr.pd.memo}}
</div>
<div ng-if="btx.actionList[0]" class="m10v">
@ -79,12 +83,11 @@
</ul>
</div>
<div class="m10t oh">
<div class="m10t oh" ng-if="btx.txid">
<a class="right button-setup"
ng-click="openExternalLink('http://' + getShortNetworkName() + '.insight.is/tx/' + btx.txid)">
See it on the blockchain <i class="icon-arrow-right2 vm"></i>
</a>
</p>
</div>
</div>

View file

@ -0,0 +1,19 @@
<div class="size-14">
<div class="text-center size-72 m10v">
<div class="text-primary">
<i class="fi-check"></i>
</div>
</div>
<div class="text-center m10v">
{{statusStr}}
</div>
<div class="text-center m10v">
<a class="button primary" ng-click="cancel()">OKAY</a>
</div>
</div>

View file

@ -0,0 +1,76 @@
<a class="close-reveal-modal" ng-click="cancel()">&#215;</a>
<h1 class="m30v">Transaction Proposal Details</h1>
<div class="row" ng-repeat="out in tx.outs">
<div class="large-5 medium-5 small-6 columns size-14">
<b>{{out.value}} {{$root.wallet.settings.unitName}}</b>
<span ng-show="out.alternativeAmount" class="alt-currency gray">
{{out.alternativeAmount}} {{out.alternativeIsoCode}}
</span>
</div>
<div class="large-2 medium-2 small-1 columns text-center">
<i class="fi-arrow-right"></i>
</div>
<div class="large-5 medium m0-5 small-5 columns ellipsis size-12">
<div ng-if="tx.merchant">
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{tx.merchant.domain}}</span>
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{tx.merchant.domain}}</span>
</span>
</div>
<contact address="{{out.address}}" tooltip-popup-delay="500" tooltip tooltip-placement="right" ng-hide="tx.merchant" />
</div>
<div class="text-light size-14">{{tx.comment}}</div>
<div class="line-b m10t"></div>
<div ng-if="tx.createdTs " class="m10v size-14">
<time> <span>{{ tx.createdTs | amCalendar}}</span></time>
[<time>{{ tx.createdTs | amTimeAgo}}</time>]
</div>
<div ng-if="tx.addressTo" class="m10v">
<span class="ellipsis">
<b>To:</b>
<span ng-if="tx.merchant">
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{tx.merchant.domain}}</span>
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{tx.merchant.domain}}</span>
</span>
<span ng-if="!tx.merchant">
<span class="text-gray"> {{tx.labelTo || tx.addressTo}}</span>
</span>
</span>
</div>
<div ng-if="tx.merchant" class="size-12 m10v">
{{tx.merchant.pr.pd.memo}}
<div ng-if="tx.merchant.expirationDate" class="m10v">
<b>Expires</b>: {{tx.merchant.expirationDate | amTimeAgo }}
</div>
</div>
<div ng-if="tx.actionList[0]" class="m10v">
<b>Copayers Signatures</b>
<ul class="tx-copayers m10t" ng-if="tx.actionList[0]">
<li ng-repeat="c in tx.actionList" ng-class="{'bottom-line-copayers':!$last}">
<span>
<i ng-if="c.actions.rejected" class="fi-x icon-sign x"></i>
<i ng-if="c.actions.sign" class="fi-check icon-sign check"></i>
<i ng-if="!c.actions.sign && !c.actions.rejected && tx.missingSignatures" class="m10r fi-loop icon-rotate"></i>
</span>
<span>
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active m10r"></i>
</span>
<span>{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}</span>
</li>
</ul>
</div>
</div>

View file

@ -0,0 +1,29 @@
<a class="close-reveal-modal" ng-click="cancel()">&#215;</a>
<h3 ng-init="setWallets()">Select a wallet to make the payment</h3>
<span ng-show="!wallets[0]">Loading...</span>
<ul class="w-popup-menu" ng-show="wallets[0]" ng-class="{'large':wallets.length > 4, 'medium':wallets.length > 2 && wallets.length < 5}">
<li data-ng-repeat="item in wallets track by $index" class="nav-item" ng-click="ok(item)" ng-show="+item.balanceInfo.totalBalanceBTC > 0">
<div class="w-popup-icon">
<div class="avatar-wallet">{{(item.name || item.id) | limitTo: 1}}</div>
</div>
<div class="w-popup-content">
<div class="">
<a class="size-12 wallet-item">
<div class="">
<div class="w-popup-main">[ {{item.requiredCopayers}} of {{item.totalCopayers}} ]</div>
<div class="w-popup-sub size-18">{{item.name || item.id}}</div>
</div>
<div class="w-popup-sub">
<span ng-if="item.balanceInfo.updatingBalance"><i class="fi-bitcoin-circle icon-rotate spinner"></i></span>
<div ng-if="!item.balanceInfo.updatingBalance" data-options="disable_for_touch:true">
<b class="m5r size-12">{{item.balanceInfo.totalBalance || 0}} {{item.settings.unitName}}</b>
<span class="alt-currency size-10">{{item.balanceInfo.totalBalanceAlternative}} {{item.balanceInfo.alternativeIsoCode}}</span>
</div>
</div>
</a>
</div>
</div>
</li>
</ul>

View file

@ -1,32 +0,0 @@
<div ng-controller="PaymentIntentController" ng-init="open()">
<script type="text/ng-template" id="myModalContent.html">
<h3>Select a wallet to make the payment</h3>
<span ng-show="loading">Loading...</span>
<ul class="w-popup-menu" ng-show="wallets[0]"
ng-class="{'large':wallets.length > 4, 'medium':wallets.length > 2 && wallets.length < 5}">
<li data-ng-repeat="item in wallets track by $index" class="nav-item" ng-click="ok(item)">
<div class="w-popup-icon">
<div class="avatar-wallet">{{(item.name || item.id) | limitTo: 1}}</div>
</div>
<div class="w-popup-content">
<div class="">
<a class="size-12 wallet-item">
<div class="">
<div class="w-popup-main">[ {{item.requiredCopayers}} of {{item.totalCopayers}} ]</div>
<div class="w-popup-sub size-18">{{item.name || item.id}}</div>
</div>
<div class="w-popup-sub">
<span ng-if="item.balanceInfo.updatingBalance"><i class="fi-bitcoin-circle icon-rotate spinner"></i></span>
<div ng-if="!item.balanceInfo.updatingBalance" data-options="disable_for_touch:true">
<b class="m5r size-12">{{item.balanceInfo.totalBalance || 0}} {{item.settings.unitName}}</b>
<span class="alt-currency size-10">{{item.balanceInfo.totalBalanceAlternative}} {{item.balanceInfo.alternativeIsoCode}}</span>
</div>
</div>
</a>
</div>
</div>
</li>
</ul>
<a class="close-reveal-modal" ng-click="cancel()">&#215;</a>
</script>
</div>

View file

@ -1,55 +1,54 @@
<div class="send" ng-controller="SendController" ng-init="init()">
<div class="send" ng-controller="SendController" ng-init="init()">
<div class="row">
<div class="large-12 medium-12 small-12 columns">
<h1 class="hide-for-large-up">{{$root.title}}</h1>
</div>
<div class="row">
<div class="large-12 medium-12 small-12 columns">
<h1 class="hide-for-large-up">{{$root.title}}</h1>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<form name="sendForm" ng-submit="submitForm(sendForm)" novalidate>
<div class="panel">
<div class="box-notification" ng-show="error">
<div class="box-icon error">
<i class="fi-x size-24"></i>
</div>
<span class="text-warning size-14">
{{error|translate}}
</span>
</div>
<div class="box-notification" ng-show="success">
<div class="box-icon success">
<i class="fi-check size-24"></i>
</div>
<span class="text-success size-14">
{{success|translate}}
</span>
</div>
<div class="row">
<div class="large-12 columns">
<form name="sendForm" ng-submit="submitForm(sendForm)" novalidate>
<div class="panel">
<div class="box-notification" ng-show="error">
<div class="box-icon error">
<i class="fi-x size-24"></i>
</div>
<span class="text-warning size-14">
{{error|translate}}
</span>
</div>
<div class="box-notification" ng-show="success">
<div class="box-icon success">
<i class="fi-check size-24"></i>
</div>
<span class="text-success size-14">
{{success|translate}}
</span>
</div>
<div ng-if="!_merchantData">
<div class="row collapse">
<label for="address" class="left">
<span translate>To</span>
<i class="fi-info size-12" href="#"
data-options="disable_for_touch:true"
tooltip-popup-delay='500'
tooltip="{{'Enter a valid Bitcoin address. Payment Protocol URLs are also supported'|translate}}"
tooltip-trigger="mouseenter"
tooltip-placement="right"></i>
<small translate ng-hide="!sendForm.address.$pristine && address">required</small>
<span translate>To (*)</span>
</label>
<span translate class="has-error right size-12" ng-show="sendForm.address.$invalid && address">
<span class="icon-input"><i class="fi-x"></i></span>
Not valid
<span ng-hide="sendForm.address.$pristine">
<span translate class="has-error right size-12" ng-show="sendForm.address.$invalid">
<span class="icon-input">
<i class="fi-x"></i>
</span>
Not valid
</span>
<small class="icon-input right" ng-show="!sendForm.address.$invalid">
<i class="fi-check"></i>
</small>
</span>
<small class="icon-input right" ng-show="!sendForm.address.$invalid && address"><i class="fi-check"></i></small>
</div>
<div class="input">
<input type="text" id="address" name="address" ng-disabled="loading || !!$root.merchant || isPayUri"
placeholder="{{'Bitcoin address'|translate}}" ng-model="address" valid-address required>
<input type="text" id="address" name="address" ng-disabled="loading || lockAddress" placeholder="{{'Bitcoin address'|translate}}" ng-model="_address" valid-address required>
<i class="fi-address-book"></i>
<div ng-hide="showScanner || disableScanner">
<a class="postfix button black" ng-click="openScanner()"><i class="fi-camera size-24"></i></a>
@ -58,151 +57,116 @@
<a translate class="postfix button warning" ng-click="cancelScanner()"><i class="fi-x size-18"></i></a>
</div>
</div>
<div id="scanner"
class="row"
ng-if="showScanner"
ng-include="'views/includes/scanner.html'">
<div id="scanner" class="row" ng-if="showScanner" ng-include="'views/includes/scanner.html'">
</div>
</div>
<div ng-show="_merchantData">
<div class="row collapse" ng-click="openPPModal(_merchantData)">
<label for="domain">
<span translate>Payment to</span>
</label>
<div class="row" ng-init="showAlternative = false">
<div class="large-12 medium-12 columns">
<div class="m5b right">
<span translate class="has-error right size-12" ng-show="sendForm.amount.$invalid &&
!sendForm.amount.$pristine && (notValidAmount || amount)">
<span class="icon-input"><i class="fi-x"></i></span>
Not valid
</span>
<small class="icon-input right" ng-show="!sendForm.amount.$invalid &&
!sendForm.amount.$pristine"><i class="fi-check"></i></small>
</div>
<div ng-show="!showAlternative">
<div class="row collapse">
<div class="input">
<input type="text" id="domain" name="domain" ng-model="_domain" ng-disabled="1">
<i class="fi-lock color-greeni"></i>
</div>
</div>
</div>
<label for="amount"><span translate>Amount in</span> {{$root.wallet.settings.unitName}}
<small translate ng-hide="!sendForm.amount.$pristine && amount">required</small>
</label>
<div class="row" ng-init="showAlternative = false">
<div class="large-12 medium-12 columns">
<div class="m5b right" ng-hide="sendForm.amount.$pristine">
<span translate class="has-error right size-12" ng-show="sendForm.amount.$invalid">
<span class="icon-input"><i class="fi-x"></i></span>
Not valid
</span>
<small class="icon-input right" ng-show="!sendForm.amount.$invalid">
<i class="fi-check"></i>
</small>
</div>
<div ng-show="!showAlternative">
<div class="row collapse">
<div class="small-9 columns">
<div class="input">
<input type="number" id="amount"
ng-disabled="loading || ($root.merchant && +$root.merchant.total > 0) || isPayUri"
name="amount" placeholder="{{'Amount'|translate}}" ng-model="amount"
ng-minlength="0.00000001" ng-maxlength="10000000000" valid-amount required
autocomplete="off">
<i class="icon-bitcoin"></i>
</div>
<a class="small input-note" title="{{'Send all funds'|translate}}"
ng-show="topAmount && (!$root.merchant || +$root.merchant.total === 0)"
ng-click="setTopAmount(sendForm)">
<span translate>Use all funds</span> {{$root.wallet.settings.unitName}}
</a>
</div>
<div class="small-3 columns pointer" ng-click="showAlternative = true">
<span class="postfix">{{$root.wallet.settings.unitName}}</span>
<label for="amount">
<span translate>Amount (*)</span>
</label>
<div class="small-9 columns">
<div class="input">
<input type="number" id="amount" ng-disabled="loading || lockAmount" name="amount" placeholder="{{'Amount'|translate}}" ng-minlength="0.00000001" ng-maxlength="10000000000" ng-model="_amount" valid-amount required autocomplete="off">
<i class="icon-bitcoin"></i>
</div>
</div>
</div>
<div ng-show="showAlternative">
<div class="row collapse">
<label for="alternative"><span translate>Amount in</span> {{ alternativeName }}
<small translate ng-hide="!sendForm.amount.$pristine && amount">required</small>
</label>
<div class="small-9 columns">
<div class="input">
<input type="number" id="alternative"
ng-disabled="loading || !isRateAvailable || ($root.merchant && +$root.merchant.total > 0) ||
isPayUri"
name="alternative" placeholder="{{'Amount'|translate}}" ng-model="alternative" requiredautocomplete="off">
<i class="icon-usd"></i>
</div>
</div>
<div class="small-3 columns pointer" ng-click="showAlternative = false">
<span class="postfix">{{alternativeIsoCode}}</span>
</div>
<div class="small-3 columns pointer" ng-click="showAlternative = true">
<span class="postfix">{{$root.wallet.settings.unitName}}</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="large-12 columns" ng-show="fetchingURL">
<h3>
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
Fetching payment
</h3>
<p> From {{fetchingURL}}
</div>
<div class="large-12 columns" ng-show="!!$root.merchant || isPayUri">
<h3 ng-show="!isPayUri">This is a payment protocol transaction</h3>
<div class="send-note">
<p>
<span ng-show="isPayUri">Payment to: </span>
<b>{{$root.merchant.pr.pd.memo || address}}</b>
</p>
<p>
<i>{{amount}} {{$root.wallet.settings.unitName}}</i>
<span class="text-gray" ng-if="isRateAvailable">
{{ alternative }} {{ alternativeIsoCode }}
</span>
<span class="text-gray" >
(<span translate>Including fee of</span>
{{defaultFee}}
{{$root.wallet.settings.unitName}})
</span>
<p ng-show="!!$root.merchant">
Expires {{$root.merchant.expiration | amTimeAgo }}
[{{$root.merchant.domain}}]
<span ng-show="!!$root.merchant.pr.ca"><i class="fi-lock"></i> {{$root.merchant.pr.ca}}</span>
<span ng-show="!$root.merchant.pr.ca" style="color:red;weight:bold;"><i class="fi-unlock"></i> Untrusted</span>
</p>
<div ng-show="showAlternative">
<div class="row collapse">
<label for="alternative"><span translate>Amount in</span> {{ alternativeName }} (*)
</label>
<div class="small-9 columns">
<div class="input">
<input type="number" id="alternative" ng-disabled="loading || !isRateAvailable || lockAmount" name="alternative" placeholder="{{'Amount'|translate}}" ng-model="_alternative" requiredautocomplete="off">
<i class="icon-usd"></i>
</div>
</div>
<div class="small-3 columns pointer" ng-click="showAlternative = false">
<span class="postfix">{{alternativeIsoCode}}</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label for="comment"><span translate>Note</span>
<small translate ng-hide="!sendForm.comment.$pristine">optional</small>
<small translate class="has-error" ng-show="sendForm.comment.$invalid && !sendForm.comment.$pristine">too long!</small>
</label>
<div class="input">
<textarea id="comment" ng-disabled="loading"
name="comment" placeholder="{{($root.wallet.isShared() ? 'Leave a private message to your copayers' : 'Add a private comment to identify the transaction')}}" ng-model="commentText" ng-maxlength="100"></textarea>
<i class="icon-compose"></i>
</div>
</div>
</div>
<div class="row">
<div class="large-6 medium-6 small-6 columns text-left">
<a class="button tiny secondary m0" title="Address book" ng-hide="!!$root.merchant || isPayUri" ng-click="openAddressBook()">
<i class="fi-address-book"></i> Address book
</a>
<a ng-click="cancelSend(sendForm)" class="button warning m0" ng-show="!!$root.merchant || isPayUri">
Cancel
</a>
</div>
<div class="large-6 medium-6 small-6 columns text-right">
<button type="submit" class="button primary m0" ng-disabled="sendForm.$invalid || loading">
<i class="fi-bitcoin-circle icon-rotate spinner" ng-show="loading"></i>
Send
</button>
</div>
</div>
</div>
</form>
</div>
</div><!-- end of row -->
<div class="row m20b" ng-show="$root.wallet.balanceInfo.alternativeConversionRate > 0">
<div class="large-12 columns size-12">
<i class="fi-bitcoin-circle"></i>
1 BTC = {{$root.wallet.balanceInfo.alternativeConversionRate}} {{alternativeIsoCode}}
</div>
</div>
<div class="row" ng-show="fetchingURL">
<div class="large-12 columns">
<p>>>
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
Fetching payment request
</div>
</div>
<div class="row">
<div class="large-12 columns">
<label for="comment"><span translate>Note</span>
<small translate ng-hide="!sendForm.comment.$pristine">optional</small>
<small translate class="has-error" ng-show="sendForm.comment.$invalid && !sendForm.comment.$pristine">too long!</small>
</label>
<div class="input">
<textarea id="comment" ng-disabled="loading" name="comment" placeholder="{{($root.wallet.isShared() ? 'Leave a private message to your copayers' : 'Add a private comment to identify the transaction')}}" ng-maxlength="100" ng-model="_comment"></textarea>
<i class="icon-compose"></i>
</div>
</div>
</div>
<div class="row">
<div class="large-6 medium-6 small-6 columns text-left">
<a class="button tiny secondary m0" title="Address book" ng-hide="_merchantData || lockAddress" ng-click="openAddressBook()">
<i class="fi-address-book"></i> Address book
</a>
<a ng-click="resetForm()" class="button warning m0" ng-show="_merchantData || lockAddress" ng-disabled="loading">
Cancel
</a>
</div>
<div class="large-6 medium-6 small-6 columns text-right">
<button type="submit" class="button primary m0" ng-disabled="sendForm.$invalid || loading">
<i class="fi-bitcoin-circle icon-rotate spinner" ng-show="loading"></i> Send
</button>
</div>
</div>
</div>
</form>
</div>
</div>
<!-- end of row -->
<div class="row m20b" ng-show="$root.wallet.balanceInfo.alternativeConversionRate > 0">
<div class="large-12 columns size-12">
<i class="fi-bitcoin-circle"></i> 1 BTC = {{$root.wallet.balanceInfo.alternativeConversionRate}} {{alternativeIsoCode}}
</div>
</div>
</div>

View file

@ -1,16 +0,0 @@
<div data-ng-init="" data-ng-controller="UriPaymentController">
<div class="loading-screen" data-alert>
<div class="spinner">
<div class="contener_general">
<div class="contener_mixte"><div class="ballcolor ball_1">&nbsp;</div></div>
<div class="contener_mixte"><div class="ballcolor ball_2">&nbsp;</div></div>
<div class="contener_mixte"><div class="ballcolor ball_3">&nbsp;</div></div>
<div class="contener_mixte"><div class="ballcolor ball_4">&nbsp;</div></div>
</div>
<span class="text-gray size-12" translate>Preparing payment...</span>
</div>
</div>
</div>