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'"
2016-06-16 15:28:37 -07:00
ng-init="showPreferences = true" ng-show="!index.noFocusedWallet">
2015-05-07 14:35:54 -07:00
< / div >
< div ng-controller = "walletHomeController as home" >
2016-06-16 15:28:37 -07:00
< div class = "row columns m30tp" ng-show = "index.noFocusedWallet" >
< div class = "text-center size-12 text-warning m20b" >
< i class = "fi-alert" > < / i > < span translate > You do not have any wallet< / span >
2015-04-23 19:51:21 -07:00
< / div >
2016-06-13 10:31:42 -07:00
< button class = "button black round expand" href ui-sref = "add" translate > Create< / button >
2015-04-23 19:51:21 -07:00
< / div >
2016-06-14 04:39:34 -07:00
< div class = "onGoingProcess" ng-show = "index.updating" >
< div class = "onGoingProcess-content" ng-style = "{'background-color':index.backgroundColor}" >
< 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 > Updating Wallet...< / span >
< / div >
< / div >
2016-06-16 15:28:37 -07:00
2016-06-14 04:39:34 -07:00
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
2016-06-06 08:07:00 -07:00
< ion-content id = "walletHome" class = "walletHome tab-view tab-in" scroll = "false" >
< ion-content overflow-scroll = "true" >
2016-05-17 07:10:16 -07:00
< ion-refresher
2016-06-06 08:07:00 -07:00
ng-if="index.isCordova"
2016-05-19 09:27:17 -07:00
pulling-icon="ion-ios-refresh"
2016-05-23 07:15:16 -07:00
spinner="ios-small"
2016-05-19 09:27:17 -07:00
on-refresh="index.updateAll({triggerTxUpdate: true})">
< / ion-refresher >
< div class = "oh pr" >
2016-05-23 12:30:36 -07:00
< div ng-style = "{'background-color':index.backgroundColor}" class = "amount" >
2016-06-14 04:39:34 -07:00
< div ng-if = "!index.notAuthorized && !index.updating" >
2016-05-23 12:30:36 -07:00
< div class = "m15t" ng-show = "index.updateError" ng-click = 'index.updateAll({triggerTxUpdate: true})' >
2016-05-19 09:27:17 -07:00
< span class = "size-12 db m10b" > {{index.updateError|translate}}< / span >
< button class = "outline white tiny round" translate > Tap to retry< / button >
< / div >
2015-04-23 20:34:52 -07:00
2016-05-23 12:30:36 -07:00
< div ng-show = "index.walletScanStatus == 'error'" ng-click = 'index.retryScan()' >
2016-05-19 09:27:17 -07:00
< span translate > Scan status finished with error< / span >
< br > < span translate > Tap to retry< / span >
< / div >
2015-03-06 07:00:10 -08:00
2016-05-19 09:27:17 -07:00
< div ng-click = 'index.updateAll({triggerTxUpdate: true})' ng-show = "!index.updateError && index.walletScanStatus != 'error' && !index.shouldHideBalance" on-hold = "index.onHold()" >
2016-05-23 12:30:36 -07:00
< strong class = "size-36" > {{index.totalBalanceStr}}< / strong >
< div class = "size-14" ng-if = "index.totalBalanceAlternative" > {{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}< / div >
2016-05-23 07:15:16 -07:00
< div class = "size-14" ng-if = "index.pendingAmount" >
2016-05-27 11:16:25 -07:00
< span translate > Pending Confirmation< / span > : {{index.pendingAmountStr}}
2016-05-19 09:27:17 -07:00
< / div >
2015-08-11 13:45:57 -07:00
< / div >
2015-09-08 21:08:21 -07:00
2016-05-19 09:27:17 -07:00
< div ng-show = "!index.updateError && index.walletScanStatus != 'error' && index.shouldHideBalance" on-hold = "index.onHold()" >
2016-05-13 11:05:43 -07:00
< strong class = "size-24" translate > [Balance Hidden]< / strong >
2016-06-07 13:16:41 -07:00
< div class = "size-14" translate >
2016-05-13 11:05:43 -07:00
Tap and hold to show
< / div >
2016-05-19 09:27:17 -07:00
< / div >
2016-05-13 11:05:43 -07:00
< / div >
2016-06-14 04:39:34 -07:00
< div ng-if = "index.updating" >
< div class = "size-36" >
< strong > ...< / strong >
< / div >
< / div >
2016-05-19 09:27:17 -07:00
< / div > <!-- amount -->
2016-05-23 12:30:36 -07:00
< div class = "wallet-info" >
2016-05-19 09:27:17 -07:00
< span ng-include = "'views/includes/walletInfo.html'" > < / span >
< / div >
2016-05-23 12:30:36 -07:00
< div class = "camera-icon" ng-show = "index.isComplete" >
2016-05-19 09:27:17 -07:00
< qr-scanner on-scan = "home.onQrCodeScanned(data)" > < / qr-scanner >
2015-05-06 12:10:16 -07:00
< / div >
2016-05-19 09:27:17 -07:00
< / div > <!-- oh -->
2016-05-17 07:10:16 -07:00
< div class = "m50b" >
< div class = "oh pr m20t" ng-show = "index.incorrectDerivation" >
< div class = "text-center text-warning" >
< i class = "fi-alert" > < / i >
< span translate >
WARNING: Key derivation is not working on this device/wallet. Actions cannot be performed on this wallet.
< / span >
< / div >
< / div >
2016-06-14 04:39:34 -07:00
< div class = "oh pr m20t" ng-show = "index.notAuthorized && !index.updating" >
2016-05-17 07:10:16 -07:00
< 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 " >
< span class = "button outline round dark-gray tiny"
ng-click="index.recreate()">
< span translate > Recreate< / span >
< / span >
< / div >
< / div >
2015-03-06 07:00:10 -08:00
2016-05-17 07:10:16 -07:00
< div class = "release size-12" ng-show = "newRelease" ng-click = "$root.openExternalLink('https://github.com/bitpay/copay/releases/latest')" >
< span > {{newRelease}}< / span > < i class = "icon-arrow-right3 right size-18" > < / i >
< / div >
2016-04-11 08:56:18 -07:00
2016-05-17 07:10:16 -07:00
< div class = "oh pr" ng-if = "index.txps[0]" >
< h4 ng-show = "index.requiresMultipleSignatures" class = "title m0" translate > Payment Proposals< / h4 >
< h4 ng-show = "!index.requiresMultipleSignatures" class = "title m0" translate > Unsent transactions< / h4 >
< div ng-repeat = "tx in index.txps" >
< div ng-include = "index.txTemplateUrl" >
< / div >
< / div >
2015-04-23 08:58:08 -07:00
2016-05-17 07:10:16 -07:00
< div class = "text-gray text-center size-12 p10t"
ng-show="index.lockedBalanceSat">
< span translate > Total Locked Balance< / span > :
< b > {{index.lockedBalanceStr}} < / b >
< span > {{index.lockedBalanceAlternative}}
{{index.alternativeIsoCode}} < / span >
< / div >
< / div >
2015-12-02 13:20:22 -08:00
2016-05-17 13:36:01 -07:00
<!-- Activity -->
2016-05-18 13:28:12 -07:00
2016-05-26 06:40:20 -07:00
< h4 class = "title" ng-click = "index.startSearch(); openSearchModal()" ng-show = "!index.notAuthorized" >
2016-05-17 07:10:16 -07:00
< span translate > Activity< / span >
< i class = "dib m5l size-16 pointer fi-magnifying-glass" > < / i >
< / h4 >
2016-05-17 13:36:01 -07:00
< div class = "oh pr m20t text-gray size-12 text-center"
ng-show="!index.loadingWallet & & !index.txHistory[0] & & !index.updatingTxHistory & & !index.txHistoryError & & !index.updateError & & !index.notAuthorized"
translate>No transactions yet
2016-05-17 07:10:16 -07:00
< / div >
2015-12-02 13:20:22 -08:00
2016-05-17 13:36:01 -07:00
< div class = "oh pr" ng-show = "(index.txHistory[0] || index.txProgress > 5) && !index.notAuthorized" >
2016-05-17 07:10:16 -07:00
< div ng-show = "index.updatingTxHistory && index.txProgress > 5" >
< div class = "row p20 text-center" >
< div class = "columns large-12 medium-12 small-12 m10b" >
2016-05-17 13:36:01 -07:00
< ion-spinner class = "spinner-dark" icon = "lines" > < / ion-spinner >
2016-05-17 07:10:16 -07:00
< / div >
< div class = "size-12 text-gray m20t" >
< div translate > {{index.txProgress}} transactions downloaded< / div >
< div translate > Updating transaction history. Please stand by.< / div >
< / div >
2016-02-18 12:16:07 -08:00
< / div >
< / div >
2016-01-29 07:36:49 -08:00
2016-05-17 07:10:16 -07:00
< div ng-if = "index.txHistory[0] && index.updatingTxHistory && index.newTx" class = "row collapse last-transactions-content animated fadeInDown" >
< div class = "large-6 medium-6 small-6 columns size-14" >
< div class = "m10r left" >
< img src = "img/icon-new.svg" width = "40" >
< / div >
< div class = "m10t" style = "background:#eee; width: 8em; margin-left: 52px; line-height:0.6em" >
< span > < / span >
< / div >
< div style = "margin-top:5px; background:#eee; width: 6em; margin-left: 52px; line-height:0.6em" >
< span > < / span >
< / div >
< / div >
2015-12-10 07:44:40 -08:00
< / div >
2016-01-29 07:36:49 -08:00
2016-05-17 07:10:16 -07:00
< div ng-repeat = "btx in index.txHistory track by btx.txid"
ng-click="home.openTxModal(btx)"
class="row collapse last-transactions-content">
< div class = "large-6 medium-6 small-6 columns size-14" >
< div class = "m10r left" >
< img src = "img/icon-receive-history.svg" alt = "sync" width = "40" ng-show = "btx.action == 'received'" >
< img src = "img/icon-sent-history.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" >
2016-06-03 11:36:45 -07:00
< span ng-show = "btx.action == 'received'" >
< span class = "ellipsis" >
< span ng-if = "btx.note.body" > {{btx.note.body}}< / span >
< span ng-if = "!btx.note.body" translate > Received< / span >
< / span >
< / span >
2016-05-17 07:10:16 -07:00
< span ng-show = "btx.action == 'sent'" >
2016-05-31 10:51:17 -07:00
< span class = "ellipsis" >
< span ng-if = "btx.message" > {{btx.message}}< / span >
< span ng-if = "!btx.message && btx.note.body" > {{btx.note.body}}< / span >
< span ng-if = "!btx.message && !btx.note.body && index.addressbook[btx.addressTo]" > {{index.addressbook[btx.addressTo]}}< / span >
< span ng-if = "!btx.message && !btx.note.body && !index.addressbook[btx.addressTo]" translate > Sent< / span >
2016-05-17 07:10:16 -07:00
< / span >
< / span >
2016-06-14 11:54:12 -07:00
< span ng-show = "btx.action == 'moved'" >
< span class = "ellipsis" >
< span ng-if = "btx.note.body" > {{btx.note.body}}< / span >
< span ng-if = "!btx.note.body" translate > Moved< / span >
< / span >
< / span >
2016-05-17 07:10:16 -07:00
< span class = "label tu warning radius" ng-show = "btx.action == 'invalid'" translate > Invalid< / span >
< / div >
< / div >
2016-05-17 07:09:22 -07:00
2016-05-17 07:10:16 -07:00
< div class = "large-5 medium-5 small-5 columns text-right" >
< span class = "size-16" ng-class = "{'text-bold': btx.recent}" >
< 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 >
2015-12-03 07:34:58 -08:00
< / span >
2016-05-17 07:10:16 -07:00
< div class = "size-12 text-gray" >
< 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 >
< div class = "large-1 medium-1 small-1 columns text-right m10t" >
< i class = "icon-arrow-right3 size-18" > < / i >
< / div >
2015-12-03 07:34:58 -08:00
< / div >
2015-12-02 13:20:22 -08:00
2016-05-17 07:10:16 -07:00
< div class = "row m20t text-center" ng-show = "index.historyRendering && !index.ching" >
< div class = "columns large-12 medium-12 small-12" >
2016-05-17 13:36:01 -07:00
< ion-spinner class = "spinner-stable" icon = "lines" > < / ion-spinner >
2016-05-17 07:10:16 -07:00
< / div >
2015-12-02 13:20:22 -08:00
< / div >
2016-06-03 09:26:49 -07:00
< div class = "text-gray text-center size-12 p10t" ng-if = "index.historyShowMore" >
2016-06-08 04:18:52 -07:00
< span class = "size-12" translate > {{index.completeHistory.length - index.txHistory.length}} more< / span >
< i class = "icon-arrow-down4" > < / i >
2016-06-03 09:26:49 -07:00
< / div >
2016-05-17 07:10:16 -07:00
< ion-infinite-scroll
ng-if="index.historyShowMore"
on-infinite="index.showMore()"
distance="1%">
< / ion-infinite-scroll >
2015-12-02 13:20:22 -08:00
< / div >
< / div >
2016-05-17 07:10:16 -07:00
< / ion-content >
2015-05-07 07:39:29 -07:00
< div class = "extra-margin-bottom" > < / div >
2016-05-17 07:10:16 -07:00
< / ion-content > <!-- 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-12-11 13:06:13 -08:00
< h5 translate > Backup Needed< / h5 >
2015-11-23 11:07:53 -08:00
< p class = "text-gray m20b columns" translate >
2016-01-29 07:36:49 -08:00
Before receiving funds, it is necessary backup your wallet. If you lose this device, it is impossible to access your funds without a backup.
2015-11-20 10:54:27 -08:00
< / p >
2016-06-13 10:31:42 -07:00
< button class = "m20t button black expand round" href ui-sref = "backup" ng-style = "{'background-color':index.backgroundColor}" >
2015-11-20 10:54:27 -08:00
< span translate > Backup now< / span >
2016-02-12 04:52:16 -08:00
< / button >
2015-04-23 08:27:43 -07:00
< / div >
2015-11-11 13:15:21 -08:00
< div ng-show = "!index.needsBackup" >
2015-12-03 08:43:59 -08:00
< div class = "box-notification m20t" ng-show = "home.addrError" >
< span class = "text-warning" >
{{home.addrError|translate}}
< / span >
< / div >
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 >
2016-02-18 12:16:07 -08:00
< div class = "text-center" ng-click = "home.copyToClipboard(home.addr)" ng-show = "home.addr || home.generatingAddress" >
< qrcode size = "220" data = "bitcoin:{{home.addr}}" > < / qrcode >
2016-01-20 04:59:41 -08:00
< div ng-show = "home.generatingAddress" style = "position:relative; top:-226px; height:0px" >
< div style = "height:220px; width:220px; margin:auto; background: white" >
2016-05-17 13:36:01 -07:00
< ion-spinner class = "spinner-stable" icon = "lines" style = "margin-top: 85px" > < / ion-spinner >
2015-05-06 12:10:16 -07:00
< / div >
2015-12-03 08:43:59 -08:00
< / div >
< div class = "m10t" >
< h4 ng-class = "{'enable_text_select': !index.isCordova}" class = "size-12" >
2016-02-18 12:16:07 -08:00
{{home.generatingAddress ? '...' : home.addr}}
2015-12-03 08:43:59 -08:00
< / h4 >
2015-05-06 12:10:16 -07:00
< / div >
< / div >
< / div >
< / div >
< div class = "row m20t" >
2016-02-18 12:16:07 -08:00
< div class = "small-12 columns" ng-show = "index.isCordova && home.addr" >
2016-02-12 04:52:16 -08:00
< button class = "button outline light-gray small round expand"
2016-02-18 12:16:07 -08:00
ng-click="home.shareAddress(home.addr)"
2016-02-11 11:19:51 -08:00
ng-disabled="home.generatingAddress">
2016-02-10 07:34:14 -08:00
< span translate > Share address< / span >
2016-02-12 04:52:16 -08:00
< / button >
2016-02-10 07:34:14 -08:00
< / div >
2016-02-18 12:16:07 -08:00
< div class = "small-12 columns" ng-show = "home.addr" >
< button class = "button expand small round m10b" ng-click = "home.openCustomizedAmountModal(home.addr)"
2016-02-11 11:19:51 -08:00
ng-style="{'background-color':index.backgroundColor}"
ng-disabled="home.generatingAddress">
2016-01-05 11:04:24 -08:00
< span translate > Request a specific amount< / span >
2016-02-12 04:52:16 -08:00
< / button >
2016-01-05 11:04:24 -08:00
< / div >
2016-02-10 07:34:14 -08:00
< / div >
2016-06-07 06:37:06 -07:00
< div class = "row m10t" ng-show = "home.addr" >
2016-02-10 07:34:14 -08:00
< div class = "large-12 columns" >
2016-06-07 06:37:06 -07:00
< div class = "line-t size-10 text-gray m10b p10t" ng-show = "!index.isSingleAddress" >
2016-02-10 10:35:08 -08:00
< span translate > Share this wallet address to receive payments. To protect your privacy, new addresses are generated automatically once you use them.< / span >
2016-06-13 07:44:58 -07:00
< a ng-show = "!home.generatingAddress" ng-click = "home.setAddress(true)" translate > Generate new address< / a >
2016-02-10 07:34:14 -08:00
< / div >
2016-06-07 06:37:06 -07:00
< div class = "line-t size-10 text-gray m10b p10t" ng-show = "index.isSingleAddress" >
< span translate > Share this wallet address to receive payments< / span > .
< / div >
2015-05-06 12:10:16 -07:00
< / div >
2015-06-24 13:55:08 -07:00
< / 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
-->
2016-06-09 11:03:14 -07:00
< div id = "send" class = "send tab-view" >
2015-12-02 11:51:56 -08:00
< div class = "pr p25b" >
2016-06-14 04:39:34 -07:00
< h4 class = "title m0" ng-show = "!index.updating" >
2016-05-13 11:05:43 -07:00
< available-balance ng-show = "!index.shouldHideBalance" > < / available-balance >
2016-02-22 12:33:41 -08:00
< span
2016-06-13 07:44:58 -07:00
ng-show="home.lockedCurrentFeePerKb || home.lockAmount"
2016-04-13 10:05:36 -07:00
class="text-gray" translate>Send Max< / span >
2016-02-18 12:16:07 -08:00
< a
2016-06-13 07:44:58 -07:00
ng-show="index.availableBalanceSat > 0 & & !home.lockedCurrentFeePerKb & & !home.lockAmount"
2016-04-13 10:05:36 -07:00
ng-click="home.sendMax(index.availableBalanceSat)"
translate>Send Max
2015-06-22 10:35:16 -07:00
< / a >
2016-02-19 08:29:41 -08:00
< div ng-show = "!home.paymentExpired && home._paypro" >
2016-02-10 07:59:31 -08:00
< span translate > Payment expires< / span >
2016-03-22 12:37:55 -07:00
< time > {{home.remainingTimeStr}}< / time >
2016-02-10 07:59:31 -08:00
< / div >
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" >
2016-01-29 07:36:49 -08:00
< qr-scanner on-scan = "home.onQrCodeScanned(data)" > < / qr-scanner >
2015-12-02 05:29:44 -08:00
< / div >
2015-05-06 12:10:16 -07:00
< / div >
2016-02-01 11:18:44 -08:00
< div class = "box-notification m20t" ng-show = "home.error" ng-click = "home.resetError()" >
2015-12-03 08:43:59 -08:00
< span class = "text-warning" >
{{home.error|translate}}
< / span >
< / div >
2015-05-06 12:10:16 -07:00
< div class = "row m20t" >
2016-01-29 07:36:49 -08:00
< div class = "large-12 large-centered columns" >
2016-06-14 04:39:34 -07:00
< form name = "sendForm" novalidate >
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 >
2016-06-09 11:03:14 -07:00
< span ng-hide = "sendForm.address.$pristine" >
< span class = "has-error right size-12" ng-show = "sendForm.address.$invalid && _address" >
2015-05-06 12:10:16 -07:00
< i class = "icon-close-circle size-14" > < / i >
< span class = "vm" translate > Not valid< / span >
< / span >
2016-06-09 11:03:14 -07:00
< small class = "right text-primary" ng-show = "!sendForm.address.$invalid" >
2015-05-06 12:10:16 -07:00
< 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" >
2016-06-13 07:44:58 -07:00
< input ng-show = "sendForm.address.$invalid" class = "m0" type = "text" id = "address" name = "address" ng-disabled = " home.lockAddress" ng-attr-placeholder = "{{'Bitcoin address'|translate}}" ng-model = "_address" valid-address required ng-focus = "home.formFocus('address')" ng-blur = "home.formFocus(false)" >
2016-06-09 11:03:14 -07:00
< div class = "addressbook-input" ng-show = "!sendForm.address.$invalid && _address" >
2015-10-30 14:34:34 -07:00
{{index.addressbook[_address] || _address}}
< / div >
2016-01-29 07:36:49 -08:00
< a class = "postfix size-12 m0 text-gray"
2015-12-08 06:50:28 -08:00
ng-style="{'color':index.backgroundColor}"
2016-05-26 11:02:00 -07:00
ng-click="home.openAddressbookModal(index.otherWallets, _address)">
2015-12-08 07:14:44 -08:00
< i class = "icon-wallet text-bold size-18" > < / 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" >
2016-06-09 11:03:14 -07:00
< div class = "right" ng-hide = "sendForm.amount.$pristine && !sendForm.amount.$modelValue " >
< span class = "has-error right size-12" ng-if = "sendForm.amount.$invalid" >
2015-05-06 12:10:16 -07:00
< i class = "icon-close-circle size-14" > < / i >
< span clas = "vm" translate > Not valid< / span >
< / span >
2016-06-09 11:03:14 -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 >
2016-06-15 10:46:59 -07:00
< div ng-show = "!home.canShowAlternative()" >
2015-05-06 12:10:16 -07:00
< label for = "amount" >
< span translate > Amount< / span >
< / label >
< div class = "input" >
2016-06-13 07:44:58 -07:00
< input type = "number" id = "amount" ng-disabled = " home.lockAmount" name = "amount" ng-attr-placeholder = "{{'Amount in'|translate}} {{home.unitName}}" 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)" >
2015-08-13 08:59:19 -07:00
< 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 >
2016-06-15 10:46:59 -07:00
< div ng-show = "home.canShowAlternative()" >
2015-12-04 10:43:03 -08:00
< label for = "alternative" > < span translate > Amount< / span > [{{ home.alternativeIsoCode }}]
2015-05-06 12:10:16 -07:00
< / label >
< div class = "input" >
2016-06-13 07:44:58 -07:00
< input type = "number" id = "alternative" ng-disabled = "!home.isRateAvailable || home.lockAmount" name = "alternative" ng-attr-placeholder = "{{'Amount in'|translate}} {{ home.alternativeName }}" ng-model = "_alternative" required autocomplete = "off" ng-focus = "home.formFocus('amount')" ng-blur = "home.formFocus(false)" >
2015-08-13 08:59:19 -07:00
< 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" >
2016-06-03 08:50:37 -07:00
< label for = "comment" > < span translate > Description< / span >
2016-06-09 11:03:14 -07:00
< 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" >
2016-06-13 07:44:58 -07:00
< textarea id = "comment" name = "comment"
2016-06-09 11:03:14 -07:00
ng-maxlength="500" ng-model="_comment" ng-focus="home.formFocus('msg')"
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
2016-06-13 07:44:58 -07:00
< div class = "row" >
< div class = "large-6 medium-6 small-6 columns" ng-show = "(home._paypro || home.lockAddress || home.lockAmount)" >
2016-06-09 11:03:14 -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)}" >
2016-06-14 04:39:34 -07:00
< button class = "button black round expand" ng-disabled = "sendForm.$invalid || home.paymentExpired || index.updating"
2016-04-28 06:40:06 -07:00
ng-style="{'background-color':index.backgroundColor}" ng-click="home.submitForm()" translate>
2015-05-06 12:10:16 -07:00
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 >
2016-06-09 11:03:14 -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 >
2016-06-09 11:03:14 -07:00
< div ng-include = "'views/includes/menu.html'" ng-show = "!index.noFocusedWallet && !$root.shouldHideMenuBar" > < / div >