2015-04-23 19:51:21 -07:00
2015-05-16 20:34:26 -07:00
< div class = "topbar-container"
2015-05-07 14:35:54 -07:00
ng-include="'views/includes/topbar.html'"
2015-12-01 12:16:39 -08:00
ng-init="showPreferences = true">
2015-05-07 14:35:54 -07:00
< / div >
< div ng-controller = "walletHomeController as home" >
2015-04-23 19:51:21 -07:00
< div class = "row columns m20tp" ng-show = "index.noFocusedWallet" >
< div class = "text-center text-warning m20b" >
2015-05-14 10:01:31 -07:00
< i class = "fi-alert" > < / i > < span translate > You do not have a wallet< / span >
2015-04-23 19:51:21 -07:00
< / div >
2015-06-11 07:59:48 -07:00
< button class = "button black round expand" ng-click = "$root.go('add')" translate > Create< / button >
2015-05-13 08:41:05 -07:00
2015-11-13 11:12:32 -08:00
< div class = "text-center text-gray p20v" ng-click = "$root.go('preferencesGlobal')" >
2015-11-09 10:20:15 -08:00
< button class = " outline round dark-gray tiny" translate > Settings< / button >
2015-05-13 08:41:05 -07:00
< / div >
2015-04-23 19:51:21 -07:00
< / div >
2015-04-24 11:02:14 -07:00
< div class = "onGoingProcess" ng-show = "index.isOffline" >
< div class = "onGoingProcess-content" ng-style = "{'background-color':'#222'}" >
2015-05-06 12:10:16 -07:00
< div class = "spinner" >
< div class = "rect1" > < / div >
< div class = "rect2" > < / div >
< div class = "rect3" > < / div >
< div class = "rect4" > < / div >
< div class = "rect5" > < / div >
< / div >
< span translate > Reconnecting to Wallet Service...< / span >
2015-04-24 11:02:14 -07:00
< / div >
2015-04-23 19:51:21 -07:00
< / div >
2015-04-24 11:02:14 -07:00
< div class = "onGoingProcess" ng-show = "index.anyOnGoingProcess && !index.isOffline" >
< div class = "onGoingProcess-content" ng-style = "{'background-color':index.backgroundColor}" >
2015-05-06 12:10:16 -07:00
< div class = "spinner" >
< div class = "rect1" > < / div >
< div class = "rect2" > < / div >
< div class = "rect3" > < / div >
< div class = "rect4" > < / div >
< div class = "rect5" > < / div >
< / div >
< span translate ng-show = "
index.onGoingProcessName == 'openingWallet'
|| index.onGoingProcessName == 'updatingStatus'
|| index.onGoingProcessName == 'updatingBalance'
2015-05-07 07:49:59 -07:00
|| index.onGoingProcessName == 'updatingPendingTxps'
2015-05-06 12:10:16 -07:00
"> Updating Wallet... < / span >
< span translate ng-show = "index.onGoingProcessName == 'scanning'" > Scanning Wallet funds...< / span >
< span translate ng-show = "index.onGoingProcessName == 'recreating'" > Recreating Wallet...< / span >
2015-07-14 07:16:54 -07:00
< span translate ng-show = "index.onGoingProcessName == 'generatingCSV'" > Generating .csv file...< / span >
2015-04-24 11:02:14 -07:00
< / div >
2015-04-23 19:51:21 -07:00
< / div >
2015-04-27 05:59:20 -07:00
< div class = "onGoingProcess" ng-show = "home.onGoingProcess && !index.anyOnGoingProces && !index.isOffline" >
2015-04-24 11:02:14 -07:00
< div class = "onGoingProcess-content" ng-style = "{'background-color':index.backgroundColor}" >
2015-05-06 12:10:16 -07:00
< div class = "spinner" >
< div class = "rect1" > < / div >
< div class = "rect2" > < / div >
< div class = "rect3" > < / div >
< div class = "rect4" > < / div >
< div class = "rect5" > < / div >
< / div >
{{home.onGoingProcess|translate}}...
2015-04-24 11:02:14 -07:00
< / div >
2015-04-23 22:42:10 -07:00
< / div >
2015-04-23 19:51:21 -07:00
< div class = "oh" ng-show = "!index.noFocusedWallet" >
2015-05-06 12:10:16 -07:00
<!--
2015-04-23 10:37:36 -07:00
2015-05-06 12:10:16 -07:00
WalletHome
2015-04-22 09:53:57 -07:00
2015-05-06 12:10:16 -07:00
-->
2015-04-22 08:31:30 -07:00
2015-05-06 12:10:16 -07:00
< div id = "walletHome" class = "walletHome tab-view tab-in" >
2015-12-02 11:01:25 -08:00
< div class = "oh pr" >
2015-05-06 12:10:16 -07:00
< div class = "amount" ng-style = "{'background-color':index.backgroundColor}" >
< div ng-if = "!index.anyOnGoingProcess && !index.notAuthorized" >
2015-06-26 07:56:32 -07:00
< div ng-show = "index.updateError" ng-click = 'index.openWallet(); index.updateTxHistory()' >
2015-08-12 09:04:39 -07:00
< span class = "size-12 db m10b" > {{index.updateError|translate}}< / span >
2015-06-28 12:56:23 -07:00
< button class = "outline white tiny round" translate > Tap to retry< / button >
2015-05-06 12:10:16 -07:00
< / div >
2015-04-23 20:34:52 -07:00
2015-05-06 12:10:16 -07:00
< div ng-show = "index.walletScanStatus == 'error'" ng-click = 'index.retryScan()' >
< span translate > Scan status finished with error< / span >
< br > < span translate > Tap to retry< / span >
< / div >
2015-03-06 07:00:10 -08:00
2015-06-26 07:56:32 -07:00
< div ng-click = 'index.updateAll(); index.updateTxHistory()' ng-show = "!index.updateError && index.walletScanStatus != 'error'" >
2015-05-06 12:10:16 -07:00
< strong class = "size-36" > {{index.totalBalanceStr}}< / strong >
< div class = "size-14"
ng-if="index.totalBalanceAlternative">
{{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}
< / div >
2015-08-11 13:45:57 -07:00
< div class = "size-14"
ng-if="index.pendingAmount">
< span translate > Pending Confirmation< / span > :
{{index.pendingAmountStr}}
< / div >
2015-09-08 21:08:21 -07:00
2015-05-06 12:10:16 -07:00
< / div >
< / div >
2015-03-06 07:00:10 -08:00
2015-05-06 12:10:16 -07:00
< div ng-if = "index.anyOnGoingProcess" >
< div class = "size-36" >
< strong > ...< / strong >
< / div >
< / div >
< / div > <!-- amount -->
2015-03-06 07:00:10 -08:00
2015-12-02 11:51:56 -08:00
< div class = "avatar-name columns line-b" >
2015-05-06 12:10:16 -07:00
< div class = "avatar-wallet left"
2015-05-29 18:29:23 -07:00
ng-style="{'background-color':index.backgroundColor}">{{ (index.alias || index.walletName) | limitTo: 1}}
2015-12-02 11:01:25 -08:00
< / div >
2015-05-13 06:56:08 -07:00
< div class = "wallet-info" >
2015-11-06 10:32:10 -08:00
< div ng-show = "index.isShared" >
2015-05-13 06:56:08 -07:00
< p class = "m0" >
2015-05-19 14:18:19 -07:00
{{(index.alias || index.walletName)}}
2015-05-13 06:56:08 -07:00
< / p >
< div class = "size-12 text-gray" >
2015-09-04 06:17:59 -07:00
< span ng-include = "'views/includes/walletInfo.html'" > < / span >
2015-05-13 06:56:08 -07:00
< / div >
< / div >
< div ng-show = "!index.isShared" >
< p class = "m0" >
2015-05-19 14:18:19 -07:00
{{(index.alias || index.walletName)}}
2015-05-13 06:56:08 -07:00
< / p >
2015-08-31 11:01:48 -07:00
< div class = "size-12 text-gray" >
2015-09-04 06:17:59 -07:00
< span ng-include = "'views/includes/walletInfo.html'" > < / span >
2015-05-13 06:56:08 -07:00
< / div >
2015-05-06 12:10:16 -07:00
< / div >
< / div >
< / div >
2015-12-02 11:01:25 -08:00
< div class = "camera-icon" ng-show = "index.isComplete" >
< qr-scanner on-scan = "home.onQrCodeScanned(data)" before-scan = "home.openSendScreen()" > < / qr-scanner >
< / div >
2015-05-06 12:10:16 -07:00
< / div > <!-- oh -->
2015-03-06 07:00:10 -08:00
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
< div class = "m20t" ng-show = "index.notAuthorized && ! index.anyOnGoingProcess" >
< div class = "text-center text-warning" >
< i class = "fi-alert" > < / i >
< span translate >
WARNING: Wallet not registered
< / span >
< / div >
< div class = "text-center text-gray m15r m15l" translate >
This wallet is not registered at the given Bitcore Wallet Service (BWS). You can recreate it from the local information.
< / div >
< div class = "text-center m10t " >
2015-05-16 20:34:26 -07:00
< span class = "button outline round dark-gray tiny"
2015-05-06 12:10:16 -07:00
ng-click="index.recreate()">
< span translate > Recreate< / span >
< / span >
< / div >
2015-04-28 07:53:25 -07:00
< / div >
2015-04-23 20:34:52 -07:00
2015-05-06 12:10:16 -07:00
< div ng-if = "index.txps[0]" >
2015-09-07 13:43:55 -07:00
< h4 ng-show = "index.requiresMultipleSignatures" class = "title m0" translate > Payment Proposals< / h4 >
< h4 ng-show = "!index.requiresMultipleSignatures" class = "title m0" translate > Unsent transactions< / h4 >
2015-11-20 06:39:59 -08:00
< div class = "last-transactions pr" ng-repeat = "tx in index.txps" >
< div ng-include = "index.txTemplateUrl" > < / div >
2015-05-06 12:10:16 -07:00
< / div >
2015-04-23 08:58:08 -07:00
2015-09-07 13:43:55 -07:00
< div class = "text-gray text-center size-12 p10t"
ng-show="index.lockedBalanceSat & & !index.updatingStatus">
< span translate > Total Locked Balance< / span > :
< b > {{index.lockedBalanceStr}} < / b >
< span > {{index.lockedBalanceAlternative}}
{{index.alternativeIsoCode}} < / span >
2015-05-06 12:10:16 -07:00
< / div >
< / div >
2015-12-02 13:20:22 -08:00
<!-- Activity -->
< h4 class = "title m0" translate > Activity< / h4 >
< div class = "row m20t" ng-show = "!index.updatingTxHistory[index.walletId] && !index.txHistory[0]" >
< div class = "large-12 columns" >
< div class = "oh text-center" >
< span ng-show = "index.txHistoryError && !index.notAuthorized" ng-click = 'index.updateTxHistory()' >
< p class = "size-12 m10b db text-gray" translate > Could not fetch transaction history< / p >
< button class = "outline round light-gray tiny" translate > Tap to retry< / button >
< / span >
< span ng-if = "!index.txHistoryError" translate >
No transactions yet
< / span >
< / div >
< / div >
< / div >
< div ng-show = "index.updatingTxHistory[index.walletId]" >
< div ng-show = "index.txProgress > 6" class = "row m20t text-center" >
< div class = "circle-icon" >
< img src = "img/icon-sync.svg" alt = "sync" width = "70" >
< / div >
< div translate class = "size-12 text-gray m20t small-10 small-centered columns" >
Initial transaction history synchronization can take some minutes for wallets with many transactions.
< b > Please stand by.< / b >
< / div >
< div class = "small-8 small-centered columns line-b p10 m20b" > < / div >
< div class = "columns large-12 medium-12 small-12 m10b" >
< div class = "spinner" >
< div class = "rect1" > < / div >
< div class = "rect2" > < / div >
< div class = "rect3" > < / div >
< div class = "rect4" > < / div >
< div class = "rect5" > < / div >
< / div >
< / div >
< div class = "size-14 text-gray m20t" >
< b > {{index.txProgress}}< / b > < br >
< span translate > Transactions Downloaded< / span >
< / div >
< / div >
< / div >
< div ng-show = "index.txHistory[0]" >
< div ng-repeat = "btx in index.txHistory"
ng-click="home.openTxModal(btx)"
class="row collapse last-transactions-content">
2015-12-03 07:34:58 -08:00
< div class = "large-6 medium-6 small-6 columns size-14" >
< div class = "m10r left" >
< img src = "img/icon-receive.svg" alt = "sync" width = "40" ng-show = "btx.action == 'received'" >
< img src = "img/icon-sent.svg" alt = "sync" width = "40" ng-show = "btx.action == 'sent'" >
< img src = "img/icon-moved.svg" alt = "sync" width = "40" ng-show = "btx.action == 'moved'" >
< / div >
< div class = "m10t" >
< span ng-show = "btx.action == 'received'" translate > Received< / span >
< span ng-show = "btx.action == 'sent'" >
{{index.addressbook[btx.addressTo]}}
< span ng-show = "!index.addressbook[btx.addressTo] && btx.message" >
< span class = "ellipsis" > {{btx.message}}< / span >
< / span >
< span ng-show = "!index.addressbook[btx.addressTo] && !btx.message" >
< span translate > Sent< / span >
< / span >
< / span >
< span ng-show = "btx.action == 'moved'" translate > Moved< / span >
< span class = "label tu warning radius" ng-show = "btx.action == 'invalid'" translate > Invalid< / span >
< / div >
2015-12-02 13:20:22 -08:00
< / div >
2015-12-03 07:34:58 -08:00
< div class = "large-5 medium-5 small-5 columns text-right" >
2015-12-02 13:20:22 -08:00
< span class = "size-16" >
< span ng-if = "btx.action == 'received'" > +< / span >
< span ng-if = "btx.action == 'sent'" > -< / span >
< span class = "size-12" ng-if = "btx.action == 'invalid'" translate >
(possible double spend)
< / span >
< span ng-if = "btx.action != 'invalid'" >
{{btx.amountStr}}
< / span >
< / span >
2015-12-03 07:34:58 -08:00
< div class = "size-12 text-gray" >
2015-12-02 13:20:22 -08:00
< time ng-if = "btx.time" > {{btx.time * 1000 | amTimeAgo}}< / time >
< span translate class = "text-warning"
ng-show="!btx.time & & (!btx.confirmations || btx.confirmations == 0)">
Unconfirmed
< / span >
< / div >
< / div >
2015-12-03 07:34:58 -08:00
< div class = "large-1 medium-1 small-1 columns text-right m10t" >
2015-12-02 13:20:22 -08:00
< i class = "icon-arrow-right3 size-18" > < / i >
< / div >
< / div >
< div class = "row m20t text-center" ng-show = "index.historyRendering" >
< div class = "columns large-12 medium-12 small-12" >
< div class = "spinner" >
< div class = "rect1" > < / div >
< div class = "rect2" > < / div >
< div class = "rect3" > < / div >
< div class = "rect4" > < / div >
< div class = "rect5" > < / div >
< / div >
< / div >
< / div >
< div class = "row m20t" >
< button type = "submit" class = "outline round small expand m0" ng-show = "index.historyShowShowAll" ng-click = "index.showAllHistory()" ng-style = "{'background-color':index.backgroundColor}" translate >
< i class = "icon-arrow-down4 ng-scope" > < / i >
Show all
< / button >
< / div >
< / div >
2015-05-07 07:39:29 -07:00
< div class = "extra-margin-bottom" > < / div >
2015-05-06 12:10:16 -07:00
< / div > <!-- END WalletHome -->
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
<!--
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
receive
2015-04-26 23:33:57 -07:00
2015-05-06 12:10:16 -07:00
-->
2015-09-29 04:08:06 -07:00
< div id = "receive" class = "receive tab-view" >
2015-05-06 12:10:16 -07:00
2015-11-20 10:54:27 -08:00
< div ng-show = "index.needsBackup" class = "p60t columns text-center" >
< div class = "circle-icon" >
< i class = "fi-alert size-48" > < / i >
2015-04-23 08:27:43 -07:00
< / div >
2015-11-20 10:54:27 -08:00
< h5 > Backup Needed< / h5 >
2015-11-23 11:07:53 -08:00
< p class = "text-gray m20b columns" translate >
2015-11-20 10:54:27 -08:00
Before receiving funds, it is highly recommended you backup your wallet. If you lose this device, it is impossible to access your funds without a backup.
< / p >
< button class = "m20t button black expand round"
ng-click="$root.go('backup')" ng-style="{'background-color':index.backgroundColor}" >
< span translate > Backup now< / span >
< / button >
2015-04-23 08:27:43 -07:00
< / div >
2015-11-11 13:15:21 -08:00
< div ng-show = "!index.needsBackup" >
2015-05-06 12:10:16 -07:00
< div class = "row" >
<!-- Address -->
< div class = "large-12 columns" >
< h2 class = "text-center m10t" translate > My Bitcoin address< / h2 >
2015-09-02 11:56:00 -07:00
< div >
< div class = "box-notification" ng-show = "home.addrError" >
< span class = "text-warning" >
{{home.addrError|translate}}
< / span >
< / div >
2015-05-29 07:46:33 -07:00
2015-09-02 11:56:00 -07:00
< div class = "text-center" ng-click = "home.copyAddress(home.addr[index.walletId])" ng-show = "home.addr[index.walletId] || home.generatingAddress" >
2015-05-30 19:15:43 -07:00
< qrcode size = "220" data = "bitcoin:{{home.addr[index.walletId]}}" > < / qrcode >
2015-05-06 12:10:16 -07:00
< div ng-show = "home.generatingAddress" style = "position:relative; top:-226px; height:0px" >
< div style = "height:220px; width:220px; margin:auto; background: url(img/qr.png) white" >
< div class = "spinner" style = "margin-top:80px" >
< div class = "rect1" > < / div >
< div class = "rect2" > < / div >
< div class = "rect3" > < / div >
< div class = "rect4" > < / div >
< div class = "rect5" > < / div >
< / div >
< / div >
< / div >
< div class = "m10t" >
< h4 ng-class = "{'enable_text_select': !index.isCordova}" class = "size-12" >
2015-05-30 19:15:43 -07:00
{{home.generatingAddress ? '...' : home.addr[index.walletId]}}
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
< / h4 >
< / div >
< / div >
< / div >
2015-04-23 08:27:43 -07:00
2015-09-02 11:56:00 -07:00
< div ng-show = "home.addr[index.walletId]" >
< div class = "m10t text-center" ng-show = "index.isCordova" >
< span class = "button outline dark-gray tiny round"
ng-click="home.shareAddress(home.addr[index.walletId])">
< i class = "fi-share" > < / i >
< span translate > Share address< / span >
< / span >
< / div >
< div class = "line-t size-12" translate >
Share this wallet address to receive payments. To protect your privacy, new addresses are generated automatically once you use them.
< / div >
2015-05-06 12:10:16 -07:00
< / div >
< / div >
< / div >
< div class = "row m20t" >
< div class = "large-12 columns" >
2015-07-13 13:27:53 -07:00
< button class = "button black expand round m0" ng-click = "home.setAddress(true)"
2015-05-06 12:10:16 -07:00
ng-style="{'background-color':index.backgroundColor}" ng-disabled="home.blockUx || index.isOffline ||home.generatingAddress" translate>
Generate new address
< / button >
< / div >
< / div >
2015-07-13 13:27:53 -07:00
< div class = "m20t text-center" ng-show = "!home.generatingAddress && home.addr[index.walletId]" >
< a class = "size-12 text-gray" ng-click = "home.openCustomizedAmountModal(home.addr[index.walletId])" >
2015-09-08 21:08:21 -07:00
< i class = "fi-bitcoin" > < / i >
2015-07-13 13:27:53 -07:00
< span translate > Request a specific amount< / span >
2015-06-24 13:55:08 -07:00
< / a >
< / div >
2015-05-06 12:10:16 -07:00
< / div >
2015-05-07 07:39:29 -07:00
< div class = "extra-margin-bottom" > < / div >
2015-05-06 12:10:16 -07:00
< / div > <!-- END Receive -->
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
<!--
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
send
-->
2015-09-29 04:08:06 -07:00
< div id = "send" class = "send tab-view" >
2015-12-02 11:51:56 -08:00
< div class = "pr p25b" >
2015-05-06 12:10:16 -07:00
< h4 class = "title m0" >
2015-12-02 05:29:44 -08:00
< available-balance > < / available-balance >
2015-12-02 11:01:25 -08:00
< a
2015-08-11 13:45:57 -07:00
ng-if="index.feeToSendMaxStr & & index.availableBalanceSat > 0 & & !home.blockUx & & !home.lockAmount"
2015-12-02 07:21:26 -08:00
ng-click="home.sendAll(index.availableMaxBalance, index.feeToSendMaxStr)"
2015-06-19 11:09:15 -07:00
translate> Send All
2015-06-22 10:35:16 -07:00
< / a >
2015-05-06 12:10:16 -07:00
< / h4 >
2015-12-02 05:29:44 -08:00
< div class = "camera-icon" ng-show = "index.isComplete" >
< qr-scanner on-scan = "home.onQrCodeScanned(data)" before-scan = "home.openSendScreen()" > < / qr-scanner >
< / div >
2015-05-06 12:10:16 -07:00
< / div >
< div class = "row m20t" >
2015-12-02 05:29:44 -08:00
< div class = "large-12 large-centered columns m20t" >
2015-12-02 06:57:13 -08:00
< form name = "sendForm" ng-submit = "home.submitForm(index.feeRateToSendMax)" ng-disabled = "home.blockUx || home.onGoingProcess" novalidate >
2015-05-06 12:10:16 -07:00
< div class = "box-notification" ng-show = "home.error" ng-click = "home.resetError()" >
< span class = "text-warning" >
{{home.error|translate}}
< / span >
< / div >
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
< div ng-hide = "home._paypro || home.hideAddress" >
< div class = "row collapse" >
< label for = "address" class = "left" >
< span translate > To< / span >
< / label >
< span ng-hide = "sendForm.address.$pristine" >
< span class = "has-error right size-12" ng-show = "sendForm.address.$invalid && _address" >
< i class = "icon-close-circle size-14" > < / i >
< span class = "vm" translate > Not valid< / span >
< / span >
< small class = "right text-primary" ng-show = "!sendForm.address.$invalid" >
< i class = "icon-checkmark-circle size-14" > < / i >
< / small >
2015-04-23 08:27:43 -07:00
< / span >
2015-05-06 12:10:16 -07:00
< / div >
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
< div class = "input" >
2015-10-22 14:43:32 -07:00
< input ng-show = "sendForm.address.$invalid" class = "m0" type = "text" id = "address" name = "address" ng-disabled = "home.blockUx || home.lockAddress" ng-attr-placeholder = "{{'Bitcoin address'|translate}}" ng-model = "_address" valid-address required ng-focus = "home.formFocus('address')" ng-blur = "home.formFocus(false)" >
2015-10-30 14:34:34 -07:00
< div class = "addressbook-input" ng-show = "!sendForm.address.$invalid && _address" >
{{index.addressbook[_address] || _address}}
< / div >
2015-12-01 11:54:44 -08:00
< a class = "postfix button"
ng-style="{'background-color':index.backgroundColor}"
2015-12-02 07:21:26 -08:00
ng-click="home.openDestinationAddressModal(index.otherWallets, _address)">
2015-12-01 11:54:44 -08:00
< i class = "fi-plus size-14 lh" > < / i >
2015-06-29 08:54:07 -07:00
< / a >
2015-05-06 12:10:16 -07:00
< / div >
2015-04-23 08:27:43 -07:00
< / div >
2015-05-06 12:10:16 -07:00
< div ng-show = "home._paypro && !home.hideAddress" >
< div class = "row collapse" ng-click = "home.openPPModal(home._paypro)" >
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
< label for = "domain" >
< span translate > Payment to< / span >
< / label >
2015-04-23 08:27:43 -07:00
2015-05-06 12:10:16 -07:00
< div class = "input block" >
< input class = "p45li" type = "text" id = "domain" name = "domain" ng-model = "home._paypro.domain" ng-disabled = "1" >
2015-09-18 08:07:51 -07:00
< i ng-show = "home._paypro.verified && home._paypro.caTrusted" class = "fi-lock color-greeni" > < / i >
< i ng-show = "!home._paypro.caTrusted" class = "fi-unlock color-yellowi" > < / i >
2015-05-06 12:10:16 -07:00
< / div >
2015-04-23 08:27:43 -07:00
< / div >
< / div >
2015-05-06 12:10:16 -07:00
< div class = "row" ng-init = "home.hideAlternative()" ng-hide = "home.hideAmount" >
< div class = "large-12 medium-12 columns" >
< div class = "right" ng-hide = "sendForm.amount.$pristine && !sendForm.amount.$modelValue " >
< span class = "has-error right size-12" ng-if = "sendForm.amount.$invalid" >
< i class = "icon-close-circle size-14" > < / i >
< span clas = "vm" translate > Not valid< / span >
< / span >
2015-08-07 13:21:22 -07:00
< small class = "text-primary right" ng-if = "!sendForm.amount.$invalid && !sendForm.alternative.$invalid" >
2015-05-06 12:10:16 -07:00
< i class = "icon-checkmark-circle size-14" > < / i >
< / small >
< / div >
< div ng-if = "!home.canShowAlternative()" >
< label for = "amount" >
< span translate > Amount< / span >
< / label >
< div class = "input" >
2015-08-13 08:59:19 -07:00
< input type = "number" id = "amount" ng-disabled = "home.blockUx || home.lockAmount" name = "amount" ng-attr-placeholder = "{{'Amount'|translate}}" ng-minlength = "0.00000001" ng-maxlength = "10000000000" ng-model = "_amount" valid-amount required autocomplete = "off" ng-focus = "home.formFocus('amount')" ng-blur = "home.formFocus(false)" >
< input type = "number" id = "alternative" name = "alternative" ng-model = "_alternative" style = "display:none" >
2015-12-01 11:54:44 -08:00
< a class = "postfix button" ng-style = "{'background-color':index.backgroundColor}" ng-click = "home.showAlternative()" > {{home.unitName}}< / a >
2015-05-06 12:10:16 -07:00
< / div >
< / div >
< div ng-if = "home.canShowAlternative()" >
< label for = "alternative" > < span translate > Amount in< / span > {{ home.alternativeName }}
< / label >
< div class = "input" >
2015-08-13 08:59:19 -07:00
< input type = "number" id = "alternative" ng-disabled = "home.blockUx || !home.isRateAvailable || home.lockAmount" name = "alternative" ng-attr-placeholder = "{{'Amount'|translate}}" ng-model = "_alternative" required autocomplete = "off" ng-focus = "home.formFocus('amount')" ng-blur = "home.formFocus(false)" >
< input type = "number" id = "amount" name = "amount" ng-model = "_amount" style = "display:none" >
2015-12-01 11:54:44 -08:00
< a class = "postfix button black" ng-click = "home.hideAlternative()" > {{ home.alternativeIsoCode }}< / a >
2015-05-06 12:10:16 -07:00
< / div >
2015-04-23 08:27:43 -07:00
< / div >
< / div >
2015-05-06 12:10:16 -07:00
< / div >
2015-09-14 08:19:52 -07:00
< div class = "row" ng-hide = "home.hideNote" >
2015-05-06 12:10:16 -07:00
< 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 >
2015-04-23 08:27:43 -07:00
< / label >
< div class = "input" >
2015-05-06 12:10:16 -07:00
< textarea id = "comment" ng-disabled = "home.blockUx" name = "comment"
2015-05-07 10:01:16 -07:00
ng-maxlength="500" ng-model="_comment" ng-focus="home.formFocus('msg')"
2015-05-06 12:10:16 -07:00
ng-blur="home.formFocus(false)">< / textarea >
2015-04-23 08:27:43 -07:00
< / div >
< / div >
< / div >
2015-05-06 12:10:16 -07:00
< div class = "row" ng-show = "!home.onGoingProcess" >
2015-06-19 11:00:27 -07:00
< div class = "large-6 medium-6 small-6 columns" ng-show = "!home.blockUx && (home._paypro || home.lockAddress || home.lockAmount)" >
2015-05-16 20:34:26 -07:00
< a ng-click = "home.resetForm(sendForm)" class = "button expand outline dark-gray round" translate > Cancel< / a >
2015-05-06 12:10:16 -07:00
< / div >
2015-06-19 11:00:27 -07:00
< div class = "columns" ng-class = "{'small-6 medium-6 large-6':(home._paypro || home.lockAddress || home.lockAmount)}" >
2015-05-16 20:34:26 -07:00
< button type = "submit" class = "button black round expand" ng-disabled = "sendForm.$invalid || home.blockUx || index.isOffline"
2015-05-06 12:10:16 -07:00
ng-style="{'background-color':index.backgroundColor}" translate>
Send
< / button >
2015-04-23 08:27:43 -07:00
< / div >
< / div >
2015-05-06 12:10:16 -07:00
< / form >
< / div >
< / div >
2015-05-07 07:39:29 -07:00
< div class = "extra-margin-bottom" > < / div >
2015-05-06 12:10:16 -07:00
< / div > <!-- END Send -->
2015-04-23 12:54:19 -07:00
Addon support
Addons are simple Angular modules with views, controllers, services etc. Addons can register
themselves in Copay using pluginManagerProvider. It allows them to add extra items to the bottom
menu and as well as extra tab-views:
````
addonManagerProvider.registerAddon({
menuItem: {
'title': 'Assets',
'icon': 'icon-pricetag',
'link': 'assets'
},
view: {
id: 'assets',
'class': 'assets',
template: 'colored-coins/views/assets.html'
}
});
````
Addons can consume core Copay services and listen for events to react on changes. For this very
first addon system inplementation Copay emits additional BalanceUpdated event so that interested
addons can react on new transactions (see plugin reference implementation below).
As bottom menu can accomodate only 6 items without sacrificing usability, so it was reworked to
have second layer of items. Now If menu has more than 6 items, toggle button will be added to
the menu allowing to reveal extra items in a sliding panel. Bottom menu in this case will show
only 5 items, the rest will be rendered on sliding panel.
This changes addresses issue #2949 and reference implementation of addon could be found here:
https://github.com/troggy/copay-colored-coins-plugin
2015-07-04 03:02:46 -07:00
< div id = "{{view.id}}" class = "{{view.class}} tab-view" ng-repeat = "view in index.addonViews" ng-include = "view.template" >
< / div >
2015-05-06 12:10:16 -07:00
< / div >
2015-03-06 07:00:10 -08:00
< / div >
2015-05-07 14:35:54 -07:00
< div class = "extra-margin-bottom" > < / div >
2015-05-13 08:41:05 -07:00
< div ng-include = "'views/includes/menu.html'" ng-show = "!index.noFocusedWallet" > < / div >