Merge pull request #4370 from JDonadio/ref/root-go

Replace $root.go - Use scope on preferences
This commit is contained in:
Javier Donadío 2016-06-14 17:01:08 -03:00 committed by GitHub
commit bcd3833445
35 changed files with 348 additions and 398 deletions

View File

@ -1,17 +1,17 @@
<div class="backup" ng-controller="backupController as wordsC">
<div class="backup" ng-controller="backupController" ng-init="init()">
<nav class="tab-bar">
<section class="left-small" ng-show="(wordsC.step != 1 && wordsC.step != 4)">
<a ng-click="wordsC.goToStep(1);">
<section class="left-small" ng-show="(step != 1 && step != 4)">
<a ng-click="goToStep(1);">
<i class="icon-arrow-left3 icon-back"></i>
</a>
</section>
<section class="middle tab-bar-section" ng-style="{'color':index.backgroundColor}">
<span>{{wordsC.walletName}}</span>
<span>{{walletName}}</span>
</section>
<section class="right-small">
<a class="p10" ng-click="$root.go(index.prevState);">
<a class="p10" ng-click="backTo(index.prevState)">
<span class="text-close">
<i class="fi-x size-24"></i>
</span>
@ -19,9 +19,9 @@
</section>
</nav>
<div class="box-notification" ng-show="wordsC.error">
<div class="box-notification" ng-show="error">
<span class="text-warning">
{{wordsC.error|translate}}
{{error|translate}}
</span>
</div>
@ -30,8 +30,8 @@
-->
<div class="content preferences text-center">
<div ng-show="wordsC.step == 1">
<div ng-show="wordsC.mnemonicWords || (wordsC.credentialsEncrypted && !wordsC.deleted)" class="row">
<div ng-show="step == 1">
<div ng-show="mnemonicWords || (credentialsEncrypted && !deleted)" class="row">
<h5 class="text-center" translate>Write your wallet recovery phrase</h5>
<div class="size-14 text-gray columns" ng-show="(index.n>1 && index.m != index.n )">
<span translate>
@ -56,37 +56,37 @@
</div>
</div>
<div class="row m20t" ng-show="wordsC.deleted">
<div class="row m20t" ng-show="deleted">
<div class="columns size-14 text-gray text-center" translate>
Wallet recovery phrase not available. You can still export it from Advanced &gt; Export.
</div>
</div>
<div ng-show="wordsC.mnemonicWords || (wordsC.credentialsEncrypted && !wordsC.deleted)">
<p class="text-center columns text-gray" ng-show="index.n==1 && wordsC.step == 1">
<div ng-show="mnemonicWords || (credentialsEncrypted && !deleted)">
<p class="text-center columns text-gray" ng-show="index.n==1 && step == 1">
<span translate>
You need the wallet recovery phrase to restore this personal wallet. Write it down and keep them somewhere safe.
</span>
</p>
<div class="row" ng-show="wordsC.credentialsEncrypted">
<div class="row" ng-show="credentialsEncrypted">
<div class="m10t columns">
<a class="button outline light-gray expand tiny" ng-click="wordsC.toggle()">
<a class="button outline light-gray expand tiny" ng-click="toggle()">
<i class="fi-widget m3r"></i>
<span translate ng-hide="wordsC.show">Show Wallet Recovery Phrase</span>
<span translate ng-hide="show">Show Wallet Recovery Phrase</span>
</a>
</div>
</div>
<div class="row" ng-show="!wordsC.credentialsEncrypted">
<div class="row" ng-show="!credentialsEncrypted">
<div class="columns">
<div class="panel" ng-class="{'enable_text_select': index.network == 'testnet'}">
<span ng-repeat="word in wordsC.mnemonicWords track by $index"><span style="white-space:nowrap">{{word}}</span><span ng-show="wordsC.useIdeograms">&#x3000;</span> </span>
<span ng-repeat="word in mnemonicWords track by $index"><span style="white-space:nowrap">{{word}}</span><span ng-show="useIdeograms">&#x3000;</span> </span>
</div>
</div>
</div>
</div>
<div class="columns extra-padding-bottom" ng-show="!wordsC.credentialsEncrypted">
<div class="line-t p10 size-10 text-gray text-center" ng-show="wordsC.mnemonicHasPassphrase">
<div class="columns extra-padding-bottom" ng-show="!credentialsEncrypted">
<div class="line-t p10 size-10 text-gray text-center" ng-show="mnemonicHasPassphrase">
<i class="fi-alert"></i>
<span translate>
This recovery phrase was created with a password. To recover this wallet both the recovery phrase and password are needed.
@ -96,11 +96,11 @@
<div class="button-box">
<button
ng-show="!wordsC.deleted"
ng-disabled="wordsC.credentialsEncrypted || wordsC.error"
ng-show="!deleted"
ng-disabled="credentialsEncrypted || error"
class="round expand m0"
ng-style="{'background-color':index.backgroundColor}"
ng-click="wordsC.goToStep(2);"
ng-click="goToStep(2);"
translate>Continue
</button>
</div>
@ -110,19 +110,19 @@
## STEP 2
-->
<div ng-show="wordsC.step == 2">
<div ng-show="step == 2">
<div class="columns text-center extra-padding-bottom">
<h5 translate>Confirm your wallet recovery phrase</h5>
<p class="text-gray m0" translate>
Please tap the words in order to confirm your backup phrase is correctly written.
</p>
<div class="panel words text-left">
<span ng-repeat="cword in wordsC.customWords track by $index" ng-show="wordsC.customWords[$index]">
<span ng-repeat="cword in customWords track by $index" ng-show="customWords[$index]">
<button class="button radius tiny words" ng-click="removeButton($index, cword)">{{cword.word}}</button>
</span>
</div>
<div class="text-left">
<span ng-repeat="shuffledWord in wordsC.shuffledMnemonicWords track by $index">
<span ng-repeat="shuffledWord in shuffledMnemonicWords track by $index">
<button class="button radius tiny words" ng-click="addButton($index, shuffledWord)"
ng-disabled="shuffledWord.selected">{{shuffledWord.word}}
</button>
@ -132,10 +132,10 @@
<div class="button-box">
<button
ng-disabled="!wordsC.selectComplete"
ng-disabled="!selectComplete"
class="round expand m0"
ng-style="{'background-color':index.backgroundColor}"
ng-click="wordsC.goToStep(3);"
ng-click="goToStep(3);"
translate>Continue
</button>
</div>
@ -145,7 +145,7 @@
## STEP 3
-->
<div ng-show="wordsC.step == 3">
<div ng-show="step == 3">
<div class="columns text-center">
<h5 translate>Enter your password</h5>
<p class="text-gray m0" translate>
@ -161,7 +161,7 @@
ng-disabled="!passphrase"
ng-style="{'background-color':index.backgroundColor}"
class="button round expand m0"
ng-click="wordsC.goToStep(4);"
ng-click="goToStep(4);"
translate>Continue
</button>
</div>
@ -171,8 +171,8 @@
## STEP 4
-->
<div ng-show="wordsC.step == 4">
<div class="row m10t m10b text-center" ng-show="!wordsC.backupError">
<div ng-show="step == 4">
<div class="row m10t m10b text-center" ng-show="!backupError">
<div class="circle-icon">
<i class="fi-like size-48"></i>
</div>
@ -185,7 +185,7 @@
<button
ng-style="{'background-color':index.backgroundColor}"
class="button round expand"
ng-click="$root.go('walletHome');"
href ui-sref="walletHome"
translate>Finish
</button>
<!-- hide this in multisig just to show less text -->
@ -201,7 +201,7 @@
</div>
</div>
</div>
<div class="row m10t m10b text-center" ng-show="wordsC.backupError">
<div class="row m10t m10b text-center" ng-show="backupError">
<div class="circle-icon">
<i class="fi-dislike size-48"></i>
</div>
@ -222,7 +222,7 @@
<button
ng-style="{'background-color':index.backgroundColor}"
class="button round expand m0"
ng-click="wordsC.goToStep(1);"
ng-click="goToStep(1);"
translate>Try again
</button>
</div>

View File

@ -106,7 +106,7 @@
</p>
<button class="m20t outline black round expand"
ng-style="{'background-color': '#2b71b1'}"
ng-click="$root.go('coinbase')">OK</button>
href ui-sref="coinbase">OK</button>
</div>
</div>
@ -161,8 +161,7 @@
Bitcoin purchase completed. Coinbase has queued the transfer to your selected Copay wallet.
</p>
<button class="outline dark-gray round expand"
ng-click="$root.go('coinbase')">OK</button>
<button class="outline dark-gray round expand" href ui-sref="coinbase">OK</button>
</div>
</div>

View File

@ -115,10 +115,7 @@
A transfer has been initiated from your bank account. Your bitcoins should arrive to your wallet in 2-4 business days.
</p>
<button class="outline dark-gray round expand"
ng-click="$root.go('glidera')">
OK
</button>
<button class="outline dark-gray round expand" href ui-sref="glidera">OK</button>
</div>
</div>
</div>

View File

@ -11,7 +11,7 @@
</section>
<section class="right-small" ng-show="index.coinbaseAccount">
<a class="p10" ng-click="$root.go('preferencesCoinbase')">
<a class="p10" href ui-sref="preferencesCoinbase">
<i class="fi-widget size-24"></i>
</a>
</section>
@ -43,7 +43,7 @@
Reconnect
</button>
<div class="m20t size-12">
Or go to <a class="text-gray" ng-click="$root.go('preferencesCoinbase')">Preferences</a> and log out manually.
Or go to <a class="text-gray" href ui-sref="preferencesCoinbase">Preferences</a> and log out manually.
</div>
</div>
</div>
@ -102,7 +102,7 @@
<ul ng-show="index.coinbaseAccount" class="no-bullet m0 size-12">
<li class="line-b line-t p15 pointer"
ng-click="$root.go('buyCoinbase')">
href ui-sref="buyCoinbase">
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="30">
<span class="m10 text-normal text-bold">Buy Bitcoin</span>
<span class="right text-gray">
@ -110,7 +110,7 @@
</span>
</li>
<li class="line-b p15 pointer"
ng-click="$root.go('sellCoinbase')">
href ui-sref="sellCoinbase">
<img src="img/sell-bitcoin.svg" alt="sell bitcoin" width="30">
<span class="m10 text-normal text-bold">Sell Bitcoin</span>
<span class="right text-gray">

View File

@ -4,17 +4,17 @@
ng-init="titleSection='Export Wallet'; goBackToState = 'preferencesAdvanced'">
</div>
<div class="content preferences" ng-controller="exportController as exportC">
<div class="content preferences" ng-controller="exportController">
<h4></h4>
<div ng-show="!exportC.backupWalletPlainText">
<div class="text-warning size-14 m20b" ng-show="exportC.error">
<div ng-show="!backupWalletPlainText">
<div class="text-warning size-14 m20b" ng-show="error">
<i class="fi-alert size-12"></i>
<span translate> Failed to export </span>
</div>
<div class="row">
<div class="columns">
<div class="text-warning size-14 m20b" ng-show="exportC.isEncrypted">
<div class="text-warning size-14 m20b" ng-show="isEncrypted">
<i class="fi-alert size-12"></i>
<span translate> A spending password is set for this wallet. Exporting keeps the spending password in the export archive.</span>
</div>
@ -26,12 +26,12 @@
<div class="columns">
<label for="password" translate>Set up a password </label>
<div class="input">
<input type="password" class="form-control" placeholder="{{'Your password'|translate}}" name="password" ng-model="exportC.password">
<input type="password" class="form-control" placeholder="{{'Your password'|translate}}" name="password" ng-model="password">
</div>
<label for="password" translate>Repeat the password</label>
<div class="input">
<input type="password" class="form-control" placeholder="{{'Repeat password'|translate}}" name="password" ng-model="exportC.repeatpassword">
<input type="password" class="form-control" placeholder="{{'Repeat password'|translate}}" name="password" ng-model="repeatpassword">
</div>
</div>
</div>
@ -68,25 +68,25 @@
<div class="row">
<div class="columns">
<button class="black round expand m20t" ng-click="exportC.downloadWalletBackup()"
ng-disabled="(!exportC.password || exportC.password != exportC.repeatpassword)"
<button class="black round expand m20t" ng-click="downloadWalletBackup()"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':index.backgroundColor}"
ng-show="!index.isSafari && !index.isCordova"><i class="fi-download"></i>
<span translate>Download</span></button>
<button class="black round expand m20t" ng-click="exportC.viewWalletBackup()"
ng-disabled="(!exportC.password || exportC.password != exportC.repeatpassword)"
<button class="black round expand m20t" ng-click="viewWalletBackup()"
ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':index.backgroundColor}"
ng-show="index.isSafari && !index.isCordova"><i class="fi-eye"></i>
<span translate>View</span></button>
<div ng-show="index.isCordova">
<h4 translate>Export options</h4>
<button class="black round expand" ng-disabled="(!exportC.password || exportC.password != exportC.repeatpassword)"
<button class="black round expand" ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':index.backgroundColor}"
ng-click="exportC.copyWalletBackup()"><i class="fi-clipboard-pencil"></i>
ng-click="copyWalletBackup()"><i class="fi-clipboard-pencil"></i>
<span translate>Copy to clipboard</span></button>
<button class="black round expand" ng-disabled="(!exportC.password || exportC.password != exportC.repeatpassword)"
<button class="black round expand" ng-disabled="(!password || password != repeatpassword)"
ng-style="{'background-color':index.backgroundColor}"
ng-click="exportC.sendWalletBackup()"><i class="fi-mail"></i>
ng-click="sendWalletBackup()"><i class="fi-mail"></i>
<span translate>Send by email</span></button>
</div>
</div>
@ -94,11 +94,11 @@
</div>
<div class="row" ng-show="exportC.backupWalletPlainText">
<div class="row" ng-show="backupWalletPlainText">
<div class="large-12 columns">
<h3 translate>Wallet Export</h3>
<div class="input">
<textarea rows="12">{{exportC.backupWalletPlainText}}</textarea>
<textarea rows="12">{{backupWalletPlainText}}</textarea>
</div>
<div class="size-12 text-gray text-right">
<i class="icon-compose"></i>

View File

@ -28,7 +28,7 @@
Retry
</button>
<div class="m20t size-12">
<a class="text-gray" ng-click="$root.go('preferencesGlidera')">Preferences</a>
<a class="text-gray" href ui-sref="preferencesGlidera">Preferences</a>
</div>
</div>
</div>
@ -94,7 +94,7 @@
<div class="p20v text-center white">
<img src="img/glidera-logo.png" ng-click="index.updateGlidera(index.glideraToken, index.glideraPermissions)" width="100">
</div>
<div class="sub-header" ng-click="$root.go('preferencesGlidera')">
<div class="sub-header" href ui-sref="preferencesGlidera">
<div class="left">
<div ng-show="!index.glideraPersonalInfo && !index.glideraEmail">
Preferences
@ -136,7 +136,7 @@
ng-show="index.glideraStatus && index.glideraStatus.userCanTransact">
<li ng-show="index.glideraStatus.userCanBuy"
class="line-b line-t p20 pointer"
ng-click="$root.go('buyGlidera')">
href ui-sref="buyGlidera">
<img src="img/buy-bitcoin.svg" alt="buy bitcoin" width="40">
<span class="m10 text-normal text-bold">Buy Bitcoin</span>
<span class="right text-gray">
@ -145,7 +145,7 @@
</li>
<li class="line-b p20 pointer"
ng-show="index.glideraStatus.userCanSell"
ng-click="$root.go('sellGlidera')">
href ui-sref="sellGlidera">
<img src="img/sell-bitcoin.svg" alt="buy bitcoin" width="40">
<span class="m10 text-normal text-bold">Sell Bitcoin</span>
<span class="right text-gray">

View File

@ -7,18 +7,15 @@
<ion-content overflow-scroll="true">
<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 on-touch="$root.go('walletHome'); sidebar.switchWallet(item.id, index.walletId)" >
<div class="avatar-wallet"
ng-style="{'background-color':item.color}">
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-touch="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">
<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">

View File

@ -4,14 +4,13 @@
<a id="hamburger" class="p10" ng-show="!goBackToState && !closeToHome && !index.noFocusedWallet"
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">{{'Back'|translate}}</span>
<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">{{'Close'|translate}}</span>
<span class="text-close" translate>Close</span>
</a>
</section>

View File

@ -7,7 +7,7 @@
<div class="content preferences" ng-controller="paperWalletController as paperWallet">
<h4 ng-show="!paperWallet.error"></h4>
<div class="box-notification m20b" ng-show="paperWallet.error">
<span classs="text-warning">{{paperWallet.error|translate}}</span>
<span class="text-warning">{{paperWallet.error|translate}}</span>
</div>
<form ng-show="!paperWallet.balance" class="oh">
<div class="row">

View File

@ -6,13 +6,13 @@
</div>
<div class="content preferences" ng-controller="preferencesController as preferences" ng-init="preferences.init()">
<div class="content preferences" ng-controller="preferencesController" ng-init="init()">
<h4></h4>
<ul class="no-bullet m0" ng-show="!index.noFocusedWallet">
<li ng-click="$root.go('preferencesAlias')">
<li href ui-sref="preferencesAlias">
<div class="right text-gray">
{{index.alias||index.walletName}}
<i class="icon-arrow-right3 size-24"></i>
@ -20,7 +20,7 @@
<div translate>Alias</div>
</li>
<li ng-click="$root.go('preferencesEmail')">
<li href ui-sref="preferencesEmail">
<div class="right text-gray">
<span ng-if="!index.preferences.email" translate>Disabled</span>
<span ng-if="index.preferences.email">{{index.preferences.email}}</span>
@ -29,7 +29,7 @@
<div translate>Email Notifications</div>
</li>
<li ng-click="$root.go('preferencesColor')">
<li href ui-sref="preferencesColor">
<div class="right text-gray">
<span ng-style="{'color':index.backgroundColor}">&block;</span>
<i class="icon-arrow-right3 size-24"></i>
@ -39,13 +39,13 @@
<li ng-show="index.isPrivKeyExternal">
<div class="right text-gray">
{{preferences.externalSource}}
{{externalSource}}
<!-- (Accont {{preferences.externalAccount}}) -->
</div>
<div translate>Hardware wallet</div>
</li>
<li ng-click="$root.go('backup')" ng-hide="index.isPrivKeyExternal">
<li href ui-sref="backup" ng-hide="index.isPrivKeyExternal">
<div class="right text-gray">
<span class="text-warning" ng-show="index.needsBackup">
<i class="fi-alert"></i> <span translate>Not completed</span>
@ -55,7 +55,7 @@
<div translate>Backup</div>
</li>
<li ng-click="$root.go('preferencesAdvanced')">
<li href ui-sref="preferencesAdvanced">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>Advanced</div>
</li>
@ -71,14 +71,14 @@
<span class="toggle-label" translate>Request Spending Password</span>
</ion-toggle>
<ion-toggle ng-model="touchidEnabled" toggle-class="toggle-balanced" ng-change="touchidChange()" ng-show="preferences.touchidAvailable">
<ion-toggle ng-model="touchidEnabled" toggle-class="toggle-balanced" ng-change="touchidChange()" ng-show="touchidAvailable">
<span class="toggle-label" translate>Scan Fingerprint</span>
</ion-toggle>
</div>
<div ng-show ="!deleted">
<ul class="no-bullet m0">
<li ng-click="$root.go('deleteWords')">
<li href ui-sref="deleteWords">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>Delete recovery phrase</div>
</li>

View File

@ -1,5 +1,5 @@
<div
class="topbar-container"
<div
class="topbar-container"
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='About Copay'; goBackToState = 'preferencesGlobal'; noColor = true">
</div>
@ -11,30 +11,30 @@
<li ng-conf>
<span translate>Version</span>
<span class="right text-gray">
v{{v.version}}
</span>
v{{v.version}}
</span>
</li>
<li ng-conf ng-click="$root.openExternalLink('https://github.com/bitpay/copay/tree/'+v.commitHash)">
<span translate>Commit hash</span>
<span class="right text-gray">
#{{v.commitHash}}
</span>
</span>
</li>
</ul>
</div>
<h4></h4>
<ul class="no-bullet m0">
<li ng-click="$root.go('termOfUse')">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<li href ui-sref="termOfUse">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<span translate>Terms of Use</span>
</li>
<li ng-click="$root.go('translators')">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<li href ui-sref="translators">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<span translate>Translators</span>
</li>
<li ng-conf ng-click="$root.go('logs')">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<li ng-conf href ui-sref="logs">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<span translate>Session log</span>
</li>
</ul>

View File

@ -1,41 +1,41 @@
<div
class="topbar-container"
<div
class="topbar-container"
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Advanced'; goBackToState = 'preferences'">
</div>
<div class="content preferences" ng-controller="preferencesAdvancedController as preferences">
<div class="content preferences">
<h4></h4>
<ul class="no-bullet m0">
<li ng-click="$root.go('information')">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<li href ui-sref="information">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>Wallet Information</div>
</li>
<li ng-show="index.network == 'livenet'" ng-click="$root.go('paperWallet')">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<li ng-show="index.network == 'livenet'" href ui-sref="paperWallet">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>Sweep paper wallet</div>
</li>
<li ng-click="$root.go('export')">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<li href ui-sref="export">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>Export Wallet</div>
</li>
<li ng-click="$root.go('preferencesBwsUrl')">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<li href ui-sref="preferencesBwsUrl">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div>Wallet Service URL</div>
</li>
<li ng-click="$root.go('preferencesHistory')">
<li href ui-sref="preferencesHistory">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>Transaction History</div>
</li>
<li ng-click="$root.go('delete')">
<li href ui-sref="delete">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>Delete Wallet</div>
</li>

View File

@ -4,13 +4,12 @@
ng-init="titleSection='Alias'; goBackToState = 'preferences'">
</div>
<div class="content preferences" ng-controller="preferencesAliasController as prefAlias">
<div class="content preferences" ng-controller="preferencesAliasController">
<h4></h4>
<form name="settingsAliasForm" ng-submit="prefAlias.save()" class="columns">
<form name="settingsAliasForm" ng-submit="save()" class="columns">
<label><span translate>Alias for <i>{{index.walletName}}</i></span></label>
<input type="text" id="alias2" type="text" name="alias2" ng-model="prefAlias.alias">
<input type="text" id="alias2" type="text" name="alias2" ng-model="alias">
<input type="submit" class="button expand black round" value="{{'Save'|translate}}"
ng-style="{'background-color':index.backgroundColor}">
</form>

View File

@ -4,14 +4,12 @@
ng-init="titleSection='Wallet Service URL'; goBackToState = 'preferencesAdvanced';">
</div>
<div class="content preferences" ng-controller="preferencesBwsUrlController as prefBwsUrl">
<div class="content preferences" ng-controller="preferencesBwsUrlController">
<h4></h4>
<form name="settingsBwsUrlForm" ng-submit="prefBwsUrl.save()" class="columns">
<form name="settingsBwsUrlForm" ng-submit="save()" class="columns">
<label class="left">Wallet Service URL</label>
<a class="right size-12" ng-click="prefBwsUrl.resetDefaultUrl()" translate> Set default url</a>
<input type="text" id="bwsurl" type="text" name="bwsurl" ng-model="prefBwsUrl.bwsurl">
<a class="right size-12" ng-click="resetDefaultUrl()" translate> Set default url</a>
<input type="text" id="bwsurl" type="text" name="bwsurl" ng-model="bwsurl">
<input type="submit" class="button expand black round" value="{{'Save'|translate}}"
ng-style="{'background-color':index.backgroundColor}">
</form>

View File

@ -4,15 +4,15 @@
ng-init="titleSection='Delete Wallet'; goBackToState = 'preferencesAdvanced'">
</div>
<div class="content preferences" ng-controller="preferencesDeleteWalletController as preferences">
<div class="content preferences" ng-controller="preferencesDeleteWalletController">
<div class="text-center text-gray m20t size-12">
<div class="text-warning size-18 m10b" translate>Warning!</div>
<div class="m20b" translate>Permanently delete this wallet. THIS ACTION CANNOT BE REVERSED</div>
</div>
<ul class="no-bullet m0">
<li ng-click="preferences.deleteWallet()">
<div class="right" ng-style="{'color':index.backgroundColor}">
<li ng-click="deleteWallet()">
<div class="right" ng-style="{'color':index.backgroundColor}" ng-show="!isDeletingWallet">
{{index.walletName}} <span ng-show="index.alias">({{index.alias}})</span>
</div>
<div translate>Delete wallet</div>

View File

@ -5,19 +5,19 @@
</div>
<div class="content preferences" ng-controller="preferencesDeleteWordsController as preferences">
<div class="content preferences" ng-controller="preferencesDeleteWordsController">
<div ng-show="!preferences.deleted">
<div ng-show="!deleted">
<div class="text-center text-gray m20t size-12">
<div class="box-notification text-warning" ng-show="preferences.error" >
{{preferences.error|translate}}
<div class="box-notification text-warning" ng-show="error" >
{{error|translate}}
</div>
<div class="text-warning size-18 m10b" translate>Warning!</div>
<div class="m15" ng-show="!index.needsBackup" translate>Once you have copied your wallet recovery phrase down, it is recommended to delete it from this device.</div>
<div class="m15" ng-show="index.needsBackup" translate>Need to do backup</div>
</div>
<ul class="no-bullet m0" ng-show="!index.needsBackup">
<li ng-click="preferences.delete()">
<li ng-click="delete()">
<div class="right" ng-style="{'color':index.backgroundColor}">
{{index.walletName}} <span ng-show="index.alias">({{index.alias}})</span>
</div>
@ -26,7 +26,7 @@
</ul>
</div>
<div class="row m20t" ng-show="preferences.deleted">
<div class="row m20t" ng-show="deleted">
<div class="columns size-14 text-gray text-center" translate>
Wallet recovery phrase not available. You can still export it from Advanced &gt; Export.
</div>

View File

@ -4,25 +4,22 @@
ng-init="titleSection='Email Notifications'; goBackToState = 'preferences'">
</div>
<div class="content preferences" ng-controller="preferencesEmailController as prefEmail">
<div class="content preferences" ng-controller="preferencesEmailController">
<h4></h4>
<form name="emailForm" ng-submit="prefEmail.save(emailForm)" class="columns" novalidate ng-init="prefEmail.email = index.preferences.email">
<div class="box-notification" ng-show="prefEmail.error">
<form name="emailForm" ng-submit="save(emailForm)" class="columns" novalidate ng-init="email = index.preferences.email">
<div class="box-notification" ng-show="error">
<span class="text-warning size-14">
{{prefEmail.error|translate}}
{{error|translate}}
</span>
</div>
<label translate>Email for wallet notifications</label>
<input type="email" id="email" name="email" ng-model="prefEmail.email" required>
<input type="email" id="email" name="email" ng-model="email" required>
<input type="submit" class="button expand black round" value="{{'Save'|translate}}"
ng-style="{'background-color':index.backgroundColor}" ng-disabled="emailForm.$invalid && !index.preferences.email">
</form>
<div class="text-gray size-12 text-center" translate>Setting up email notifications could weaken your privacy, if the wallet service provider is compromised. Information available to an attacker would include your wallet addresses and its balance, but no more.
<div class="text-gray size-12 text-center" translate>Setting up email notifications could weaken your privacy, if the wallet service provider is compromised. Information available to an attacker would include your wallet addresses and its balance, but no more.
</div>
</div>
<div class="extra-margin-bottom"></div>

View File

@ -3,12 +3,12 @@
ng-init="titleSection='Global preferences'; closeToHome = true; noColor = true">
</div>
<div class="content preferences" ng-controller="preferencesGlobalController as prefGlobal" ng-init="prefGlobal.init()">
<div class="content preferences" ng-controller="preferencesGlobalController" ng-init="init()">
<h4></h4>
<ul class="no-bullet m0">
<li ng-click="$root.go('preferencesLanguage')">
<li href ui-sref="preferencesLanguage">
<div class="right text-gray">
{{prefGlobal.currentLanguageName|translate}}
{{currentLanguageName|translate}}
<i class="icon-arrow-right3 size-24"></i>
</div>
<div translate>Language</div>
@ -17,17 +17,17 @@
<h4></h4>
<ul class="no-bullet m0">
<li ng-click="$root.go('preferencesUnit')">
<li href ui-sref="preferencesUnit">
<div class="right text-gray">
{{prefGlobal.unitName}}
{{unitName}}
<i class="icon-arrow-right3 size-24"></i>
</div>
<div translate>Unit</div>
</li>
<li ng-click="$root.go('preferencesAltCurrency')">
<li href ui-sref="preferencesAltCurrency">
<div class="right text-gray">
{{prefGlobal.selectedAlternative.name}}
{{selectedAlternative.name}}
<i class="icon-arrow-right3 size-24"></i>
</div>
<div translate>Alternative Currency</div>
@ -36,9 +36,9 @@
<h4></h4>
<ul class="no-bullet m0">
<li ng-click="$root.go('preferencesFee')">
<li href ui-sref="preferencesFee">
<div class="right text-gray">
{{prefGlobal.feeOpts[prefGlobal.currentFeeLevel]|translate}}
{{feeOpts[currentFeeLevel]|translate}}
<i class="icon-arrow-right3 size-24"></i>
</div>
<div translate>Bitcoin Network Fee Policy</div>
@ -49,7 +49,7 @@
<span class="toggle-label" translate>Use Unconfirmed Funds</span>
</ion-toggle>
<div ng-show="prefGlobal.usePushNotifications && PNEnabledByUser">
<div ng-show="usePushNotifications && PNEnabledByUser">
<h4></h4>
<ion-toggle ng-model="pushNotifications" toggle-class="toggle-balanced" ng-change="pushNotificationsChange()">
<span class="toggle-label" translate>Enable push notifications</span>
@ -68,15 +68,15 @@
<h4></h4>
<ul class="no-bullet m0">
<li ng-click="$root.go('about')">
<li href ui-sref="about">
<i class="icon-arrow-right3 size-24 right text-gray"></i>
<div translate>About Copay</div>
</li>
</ul>
<div ng-show="prefGlobal.usePushNotifications && !PNEnabledByUser && isIOSApp">
<div ng-show="usePushNotifications && !PNEnabledByUser && isIOSApp">
<div class="text-centered text-gray size-12 m10" translate>Push notifications for Copay are currently disabled. Enable them in the Settings app.</div>
<ul class="no-bullet m0" ng-click="prefGlobal.openSettings()">
<ul class="no-bullet m0" ng-click="openSettings()">
<li ng-style="{'color':index.backgroundColor}" translate>Open Settings app</li>
</ul>
</div>

View File

@ -3,25 +3,20 @@
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Transaction History'; goBackToState = 'preferencesAdvanced'">
</div>
<div class="content preferences" ng-controller="preferencesHistory as history">
<div class="content preferences" ng-controller="preferencesHistory">
<h4></h4>
<ul class="no-bullet m0">
<li ng-if="!index.isCordova" ng-init="history.csvHistory()">
<a style="color:#444"
ng-csv="history.csvContent"
csv-header="history.csvHeader"
ng-show="history.csvReady"
filename="Copay-{{index.alias || index.walletName}}.csv" translate>
Export to file
</a>
<a style="color:#777"
ng-show="!history.csvReady"
translate>
Export to file [preparing...]
</a>
<ul class="no-bullet m0">
<li ng-if="csvReady && !index.isCordova" ng-init="index.updatingTxHistory ? null : csvHistory()"
ng-csv="csvContent" csv-header="csvHeader" filename="Copay-{{index.alias || index.walletName}}.csv">
<span ng-style="{'color':index.backgroundColor}" translate>
Export to file
</span>
</li>
<li ng-click="history.clearTransactionHistory();" translate>
<li ng-if="!csvReady && !index.isCordova">
<span translate>Export to file [preparing...]</span>
</li>
<li ng-click="clearTransactionHistory()" ng-style="{'color':index.backgroundColor}" translate>
Clear cache
</li>
</ul>

View File

@ -1,10 +1,10 @@
<div
class="topbar-container"
<div
class="topbar-container"
ng-include="'views/includes/topbar.html'"
ng-init="titleSection='Wallet Information'; goBackToState = 'preferencesAdvanced'">
</div>
<div class="content preferences" ng-controller="preferencesInformation as info" ng-init="info.init()">
<div class="content preferences" ng-controller="preferencesInformation" ng-init="init()">
<h4 class="title m0" translate>Wallet Information</h4>
<ul class="no-bullet m0 size-14">
@ -15,8 +15,6 @@
</span>
</li>
<li class="line-b p20 oh">
<span translate>Wallet Name (at creation)</span>
<span class="right text-gray">
@ -24,7 +22,6 @@
</span>
</li>
<li class="line-b p20 oh">
<span translate>Wallet Id</span>
<span class="right text-gray enable_text_select">
@ -39,8 +36,6 @@
</span>
</li>
<li class="line-b p20 oh">
<span translate>Wallet Network</span>
<span class="right text-gray">
@ -48,7 +43,6 @@
</span>
</li>
<li class="line-b p20 oh">
<span translate>Address Type</span>
<span class="right text-gray">
@ -56,7 +50,6 @@
</span>
</li>
<li class="line-b p20 oh">
<span translate>Derivation Strategy</span>
<span class="right text-gray">
@ -77,7 +70,7 @@
No private key
</span>
</li>
<li class="line-b p20 oh" ng-show="index.account">
<span translate>Account</span> ({{derivationStrategy}})
<span class="right text-gray">
@ -85,9 +78,7 @@
</span>
</li>
<h4 class="title m0" translate>Copayers</h4>
<h4 class="title m0" translate>Copayers</h4>
<li ng-repeat="copayer in index.copayers">
<span class="size-12" ng-show="copayer.id == index.copayerId">
<i class="icon-contact size-24 m10r"></i> {{copayer.name}} ({{'Me'|translate}}) <i class="fi-check m5 right"></i>
@ -97,7 +88,7 @@
</span>
</li>
<h4 class="title m0" translate>Extended Public Keys</h4>
<h4 class="title m0" translate>Extended Public Keys</h4>
<li ng-repeat="pk in pubKeys">
<div class="row collapse">
<div class="small-4 columns">Copayer {{$index}}</div>
@ -110,13 +101,13 @@
</div>
</li>
</ul>
<div ng-show="addrs">
<h4 class="title m0" translate>Last Wallet Addresses</h4>
<ul class="no-bullet m0">
<li ng-repeat="a in addrs" class="oh">
<div class="enable_text_select ellipsis">
{{a.address}}
{{a.address}}
</div>
<div class="text-gray size-12 right enable_text_select">
{{a.path}} &middot; {{a.createdOn *1000 | amDateFormat:'MMMM Do YYYY, h:mm a' }}
@ -128,10 +119,10 @@
</div>
<ul class="no-bullet m0">
<li ng-style="{'color':index.backgroundColor}" ng-click="index.retryScan(); $root.go('walletHome')" translate>
<li ng-style="{'color':index.backgroundColor}" href ui-sref="walletHome" ng-click="index.retryScan()" translate>
Scan addresses for funds
</li>
<li ng-style="{'color':index.backgroundColor}" ng-show="index.isCordova" ng-click="info.sendAddrs()" translate>
<li ng-style="{'color':index.backgroundColor}" ng-show="index.isCordova" ng-click="sendAddrs()" translate>
Send addresses by email
</li>
</ul>
@ -142,17 +133,15 @@
<h4 class="title m0" translate>Balance By Address</h4>
<li class="line-b p20 oh" ng-repeat="a in index.balanceByAddress">
<div class="enable_text_select ellipsis">
{{a.address}}
{{a.address}}
</div>
<div class="text-gray text-right">
{{(a.amount/1e8).toFixed(8)}} BTC
{{(a.amount/1e8).toFixed(8)}} BTC
</div>
</li>
</div>
</ul>
<h4></h4>
<div class="extra-margin-bottom"></div>
</div>

View File

@ -9,9 +9,9 @@
<div class="text-center text-warning m20b">
<i class="fi-alert"></i> <span translate>You do not have a wallet</span>
</div>
<button class="button black round expand" ng-click="$root.go('add')" translate>Create</button>
<button class="button black round expand" href ui-sref="add" translate>Create</button>
<div class="text-center text-gray p20v" ng-click="$root.go('preferencesGlobal')">
<div class="text-center text-gray p20v" href ui-sref="preferencesGlobal">
<button class=" outline round dark-gray tiny" translate>Settings</button>
</div>
</div>
@ -269,8 +269,7 @@
<p class="text-gray m20b columns" translate>
Before receiving funds, it is necessary 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}" >
<button class="m20t button black expand round" href ui-sref="backup" ng-style="{'background-color':index.backgroundColor}" >
<span translate>Backup now</span>
</button>
</div>

View File

@ -1,12 +1,11 @@
'use strict';
angular.module('copayApp.controllers').controller('backupController',
function($rootScope, $scope, $timeout, $log, lodash, profileService, gettext, bwcService, bwsError, walletService, ongoingProcess) {
function($rootScope, $scope, $timeout, $log, go, lodash, profileService, gettext, bwcService, bwsError, walletService, ongoingProcess) {
var self = this;
var fc = profileService.focusedClient;
self.customWords = [];
self.walletName = fc.credentials.walletName;
$scope.customWords = [];
$scope.walletName = fc.credentials.walletName;
var handleEncryptedWallet = function(client, cb) {
if (!walletService.isEncrypted(client)) return cb();
@ -17,24 +16,22 @@ angular.module('copayApp.controllers').controller('backupController',
};
if (fc.isPrivKeyEncrypted() && !isDeletedSeed()) {
self.credentialsEncrypted = true;
$scope.credentialsEncrypted = true;
passwordRequest();
} else {
if (!isDeletedSeed())
initWords();
}
init();
function init() {
$scope.init = function() {
$scope.passphrase = '';
self.shuffledMnemonicWords = shuffledWords(self.mnemonicWords);
self.customWords = [];
self.step = 1;
self.deleted = isDeletedSeed();
self.credentialsEncrypted = false;
self.selectComplete = false;
self.backupError = false;
$scope.shuffledMnemonicWords = shuffledWords($scope.mnemonicWords);
$scope.customWords = [];
$scope.step = 1;
$scope.deleted = isDeletedSeed();
$scope.credentialsEncrypted = false;
$scope.selectComplete = false;
$scope.backupError = false;
};
function isDeletedSeed() {
@ -43,16 +40,23 @@ angular.module('copayApp.controllers').controller('backupController',
return false;
};
self.goToStep = function(n) {
$scope.backTo = function(state) {
if (state == 'walletHome')
go.walletHome();
else
go.preferences();
};
$scope.goToStep = function(n) {
if (n == 1)
init();
$scope.init();
if (n == 2)
self.step = 2;
$scope.step = 2;
if (n == 3) {
if (!self.mnemonicHasPassphrase)
if (!$scope.mnemonicHasPassphrase)
finalStep();
else
self.step = 3;
$scope.step = 3;
}
if (n == 4)
finalStep();
@ -65,7 +69,7 @@ angular.module('copayApp.controllers').controller('backupController',
backupError(err);
}
$timeout(function() {
self.step = 4;
$scope.step = 4;
return;
}, 1);
});
@ -74,12 +78,12 @@ angular.module('copayApp.controllers').controller('backupController',
function initWords() {
var words = fc.getMnemonic();
self.xPrivKey = fc.credentials.xPrivKey;
$scope.xPrivKey = fc.credentials.xPrivKey;
walletService.lock(fc);
self.mnemonicWords = words.split(/[\u3000\s]+/);
self.shuffledMnemonicWords = shuffledWords(self.mnemonicWords);
self.mnemonicHasPassphrase = fc.mnemonicHasPassphrase();
self.useIdeograms = words.indexOf("\u3000") >= 0;
$scope.mnemonicWords = words.split(/[\u3000\s]+/);
$scope.shuffledMnemonicWords = shuffledWords($scope.mnemonicWords);
$scope.mnemonicHasPassphrase = fc.mnemonicHasPassphrase();
$scope.useIdeograms = words.indexOf("\u3000") >= 0;
};
function shuffledWords(words) {
@ -93,10 +97,10 @@ angular.module('copayApp.controllers').controller('backupController',
});
};
self.toggle = function() {
self.error = "";
$scope.toggle = function() {
$scope.error = "";
if (self.credentialsEncrypted)
if ($scope.credentialsEncrypted)
passwordRequest();
$timeout(function() {
@ -116,12 +120,12 @@ angular.module('copayApp.controllers').controller('backupController',
handleEncryptedWallet(fc, function(err) {
if (err) {
self.error = bwsError.msg(err, gettext('Could not decrypt'));
$log.warn('Error decrypting credentials:', self.error); //TODO
$scope.error = bwsError.msg(err, gettext('Could not decrypt'));
$log.warn('Error decrypting credentials:', $scope.error); //TODO
return;
}
self.credentialsEncrypted = false;
$scope.credentialsEncrypted = false;
initWords();
$timeout(function() {
@ -137,37 +141,38 @@ angular.module('copayApp.controllers').controller('backupController',
word: item.word,
prevIndex: index
};
self.customWords.push(newWord);
self.shuffledMnemonicWords[index].selected = true;
self.shouldContinue();
$scope.customWords.push(newWord);
$scope.shuffledMnemonicWords[index].selected = true;
$scope.shouldContinue();
};
$scope.removeButton = function(index, item) {
self.customWords.splice(index, 1);
self.shuffledMnemonicWords[item.prevIndex].selected = false;
self.shouldContinue();
if ($scope.loading) return;
$scope.customWords.splice(index, 1);
$scope.shuffledMnemonicWords[item.prevIndex].selected = false;
$scope.shouldContinue();
};
self.shouldContinue = function() {
if (self.customWords.length == 12)
self.selectComplete = true;
$scope.shouldContinue = function() {
if ($scope.customWords.length == 12)
$scope.selectComplete = true;
else
self.selectComplete = false;
$scope.selectComplete = false;
};
function confirm(cb) {
self.backupError = false;
$scope.backupError = false;
var customWordList = lodash.pluck(self.customWords, 'word');
var customWordList = lodash.pluck($scope.customWords, 'word');
if (!lodash.isEqual(self.mnemonicWords, customWordList)) {
if (!lodash.isEqual($scope.mnemonicWords, customWordList)) {
return cb('Mnemonic string mismatch');
}
$timeout(function() {
if (self.mnemonicHasPassphrase) {
if ($scope.mnemonicHasPassphrase) {
var walletClient = bwcService.getClient();
var separator = self.useIdeograms ? '\u3000' : ' ';
var separator = $scope.useIdeograms ? '\u3000' : ' ';
var customSentence = customWordList.join(separator);
var passphrase = $scope.passphrase || '';
@ -181,7 +186,7 @@ angular.module('copayApp.controllers').controller('backupController',
return cb(err);
}
if (walletClient.credentials.xPrivKey != self.xPrivKey) {
if (walletClient.credentials.xPrivKey != $scope.xPrivKey) {
return cb('Private key mismatch');
}
}
@ -194,7 +199,7 @@ angular.module('copayApp.controllers').controller('backupController',
function backupError(err) {
ongoingProcess.set('validatingWords', false);
$log.debug('Failed to verify backup: ', err);
self.backupError = true;
$scope.backupError = true;
$timeout(function() {
$scope.$apply();

View File

@ -2,20 +2,19 @@
angular.module('copayApp.controllers').controller('exportController',
function($rootScope, $scope, $timeout, $log, backupService, storageService, profileService, platformInfo, notification, go, gettext, gettextCatalog) {
var self = this;
var isWP = platformInfo.isWP;
var isAndroid = platformInfo.isAndroid;
self.error = null;
self.success = null;
$scope.error = null;
$scope.success = null;
$scope.metaDataEnabled = true;
var fc = profileService.focusedClient;
self.isEncrypted = fc.isPrivKeyEncrypted();
$scope.isEncrypted = fc.isPrivKeyEncrypted();
self.downloadWalletBackup = function() {
self.getMetaData($scope.metaDataEnabled, function(err, txsFromLocal, localAddressBook) {
$scope.downloadWalletBackup = function() {
$scope.getMetaData($scope.metaDataEnabled, function(err, txsFromLocal, localAddressBook) {
if (err) {
self.error = true;
$scope.error = true;
return;
}
var opts = {
@ -24,9 +23,9 @@ angular.module('copayApp.controllers').controller('exportController',
addressBook: localAddressBook
};
backupService.walletDownload(self.password, opts, function(err) {
backupService.walletDownload($scope.password, opts, function(err) {
if (err) {
self.error = true;
$scope.error = true;
return;
}
$rootScope.$emit('Local/BackupDone');
@ -36,12 +35,12 @@ angular.module('copayApp.controllers').controller('exportController',
});
};
self.getMetaData = function(metaData, cb) {
$scope.getMetaData = function(metaData, cb) {
if (metaData == false) return cb();
self.getHistoryCache(function(err, txsFromLocal) {
$scope.getHistoryCache(function(err, txsFromLocal) {
if (err) return cb(err);
self.getAddressbook(function(err, localAddressBook) {
$scope.getAddressbook(function(err, localAddressBook) {
if (err) return cb(err);
return cb(null, txsFromLocal, localAddressBook)
@ -49,7 +48,7 @@ angular.module('copayApp.controllers').controller('exportController',
});
}
self.getHistoryCache = function(cb) {
$scope.getHistoryCache = function(cb) {
storageService.getTxHistory(fc.credentials.walletId, function(err, txs) {
if (err) return cb(err);
@ -66,7 +65,7 @@ angular.module('copayApp.controllers').controller('exportController',
});
}
self.getAddressbook = function(cb) {
$scope.getAddressbook = function(cb) {
storageService.getAddressbook(fc.credentials.network, function(err, addressBook) {
if (err) return cb(err);
@ -81,10 +80,10 @@ angular.module('copayApp.controllers').controller('exportController',
});
}
self.getBackup = function(cb) {
self.getMetaData($scope.metaDataEnabled, function(err, txsFromLocal, localAddressBook) {
$scope.getBackup = function(cb) {
$scope.getMetaData($scope.metaDataEnabled, function(err, txsFromLocal, localAddressBook) {
if (err) {
self.error = true;
$scope.error = true;
return cb(null);
}
var opts = {
@ -93,30 +92,29 @@ angular.module('copayApp.controllers').controller('exportController',
addressBook: localAddressBook
};
var ew = backupService.walletExport(self.password, opts);
var ew = backupService.walletExport($scope.password, opts);
if (!ew) {
self.error = true;
$scope.error = true;
} else {
self.error = false;
$scope.error = false;
$rootScope.$emit('Local/BackupDone');
}
return cb(ew);
});
}
self.viewWalletBackup = function() {
var self = this;
$scope.viewWalletBackup = function() {
$timeout(function() {
self.getBackup(function(backup) {
$scope.getBackup(function(backup) {
var ew = backup;
if (!ew) return;
self.backupWalletPlainText = ew;
$scope.backupWalletPlainText = ew;
});
}, 100);
};
self.copyWalletBackup = function() {
self.getBackup(function(backup) {
$scope.copyWalletBackup = function() {
$scope.getBackup(function(backup) {
var ew = backup;
if (!ew) return;
window.cordova.plugins.clipboard.copy(ew);
@ -124,14 +122,14 @@ angular.module('copayApp.controllers').controller('exportController',
});
};
self.sendWalletBackup = function() {
$scope.sendWalletBackup = function() {
var fc = profileService.focusedClient;
window.plugins.toast.showShortCenter(gettextCatalog.getString('Preparing backup...'));
var name = (fc.credentials.walletName || fc.credentials.walletId);
if (fc.alias) {
name = fc.alias + ' [' + name + ']';
}
self.getBackup(function(backup) {
$scope.getBackup(function(backup) {
var ew = backup;
if (!ew) return;

View File

@ -3,28 +3,27 @@
angular.module('copayApp.controllers').controller('preferencesController',
function($scope, $rootScope, $timeout, $log, configService, profileService, fingerprintService, walletService) {
var self = this;
var fc;
var config = configService.getSync();
var disableFocusListener = $rootScope.$on('Local/NewFocusedWalletReady', function() {
self.init();
$scope.init();
});
$scope.$on('$destroy', function() {
disableFocusListener();
});
this.init = function() {
$scope.init = function() {
fc = profileService.focusedClient;
if (fc) {
$scope.encryptEnabled = walletService.isEncrypted(fc);
this.externalSource = fc.getPrivKeyExternalSourceName() == 'ledger' ? "Ledger" : null;
$scope.externalSource = fc.getPrivKeyExternalSourceName() == 'ledger' ? "Ledger" : null;
// TODO externalAccount
//this.externalIndex = fc.getExternalIndex();
}
this.touchidAvailable = fingerprintService.isAvailable();
$scope.touchidAvailable = fingerprintService.isAvailable();
$scope.touchidEnabled = config.touchIdFor ? config.touchIdFor[fc.credentials.walletId] : null;
$scope.deleted = false;
@ -41,7 +40,6 @@ angular.module('copayApp.controllers').controller('preferencesController',
};
$scope.encryptChange = function() {
var self = this;
if (!fc) return;
var val = $scope.encryptEnabled;

View File

@ -1,6 +0,0 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesAdvancedController',
function($scope) {
});

View File

@ -2,20 +2,18 @@
angular.module('copayApp.controllers').controller('preferencesAliasController',
function($scope, $timeout, configService, profileService, go) {
var config = configService.getSync();
var fc = profileService.focusedClient;
var walletId = fc.credentials.walletId;
var config = configService.getSync();
config.aliasFor = config.aliasFor || {};
this.alias = config.aliasFor[walletId] || fc.credentials.walletName;
this.save = function() {
var self = this;
config.aliasFor = config.aliasFor || {};
$scope.alias = config.aliasFor[walletId] || fc.credentials.walletName;
$scope.save = function() {
var opts = {
aliasFor: {}
};
opts.aliasFor[walletId] = self.alias;
opts.aliasFor[walletId] = $scope.alias;
configService.set(opts, function(err) {
if (err) {
@ -23,10 +21,9 @@ angular.module('copayApp.controllers').controller('preferencesAliasController',
return;
}
$scope.$emit('Local/AliasUpdated');
$timeout(function(){
$timeout(function() {
go.path('preferences');
}, 50);
});
};
});

View File

@ -1,25 +1,25 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesBwsUrlController',
function($scope, $log, configService, go, applicationService, profileService, storageService) {
this.error = null;
this.success = null;
function($scope, $log, configService, applicationService, profileService, storageService) {
$scope.error = null;
$scope.success = null;
var fc = profileService.focusedClient;
var walletId = fc.credentials.walletId;
var defaults = configService.getDefaults();
var config = configService.getSync();
this.bwsurl = (config.bwsFor && config.bwsFor[walletId]) || defaults.bws.url;
$scope.bwsurl = (config.bwsFor && config.bwsFor[walletId]) || defaults.bws.url;
this.resetDefaultUrl = function() {
this.bwsurl = defaults.bws.url;
$scope.resetDefaultUrl = function() {
$scope.bwsurl = defaults.bws.url;
};
this.save = function() {
$scope.save = function() {
var bws;
switch (this.bwsurl) {
switch ($scope.bwsurl) {
case 'prod':
case 'production':
bws = 'https://bws.bitpay.com/bws/api'
@ -35,16 +35,16 @@ angular.module('copayApp.controllers').controller('preferencesBwsUrlController',
};
if (bws) {
$log.info('Using BWS URL Alias to ' + bws);
this.bwsurl = bws;
$scope.bwsurl = bws;
}
var opts = {
bwsFor: {}
};
opts.bwsFor[walletId] = this.bwsurl;
opts.bwsFor[walletId] = $scope.bwsurl;
configService.set(opts, function(err) {
if (err) console.log(err);
if (err) $log.debug(err);
storageService.setCleanAndScanAddresses(walletId, function() {
applicationService.restart();
});

View File

@ -3,8 +3,8 @@
angular.module('copayApp.controllers').controller('preferencesDeleteWalletController',
function($scope, $rootScope, $filter, $timeout, $modal, $log, $ionicModal, storageService, notification, profileService, platformInfo, go, gettext, gettextCatalog, applicationService, ongoingProcess) {
var isCordova = platformInfo.isCordova;
this.isCordova = isCordova;
this.error = null;
$scope.isCordova = isCordova;
$scope.error = null;
var delete_msg = gettextCatalog.getString('Are you sure you want to delete this wallet?');
var accept_msg = gettextCatalog.getString('Accept');
@ -20,8 +20,7 @@ angular.module('copayApp.controllers').controller('preferencesDeleteWalletContro
$scope.loading = false;
$ionicModal.fromTemplateUrl('views/modals/confirmation.html', {
scope: $scope,
animation: 'slide-in-up'
scope: $scope
}).then(function(modal) {
$scope.confirmationModal = modal;
$scope.confirmationModal.show();
@ -33,12 +32,11 @@ angular.module('copayApp.controllers').controller('preferencesDeleteWalletContro
var fc = profileService.focusedClient;
var name = fc.credentials.walletName;
var walletName = (fc.alias || '') + ' [' + name + ']';
var self = this;
profileService.deleteWalletClient(fc, function(err) {
ongoingProcess.set('deletingWallet', false);
if (err) {
self.error = err.message || err;
$scope.error = err.message || err;
} else {
notification.success(gettextCatalog.getString('Success'), gettextCatalog.getString('The wallet "{{walletName}}" was deleted', {
walletName: walletName
@ -48,7 +46,7 @@ angular.module('copayApp.controllers').controller('preferencesDeleteWalletContro
});
};
this.deleteWallet = function() {
$scope.deleteWallet = function() {
if (isCordova) {
navigator.notification.confirm(
delete_msg,

View File

@ -1,15 +1,14 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesDeleteWordsController', function(confirmDialog, lodash, notification, profileService, go, gettext) {
var self = this;
angular.module('copayApp.controllers').controller('preferencesDeleteWordsController', function($scope, confirmDialog, lodash, notification, profileService, go, gettext) {
var fc = profileService.focusedClient;
var msg = gettext('Are you sure you want to delete the recovery phrase?');
var successMsg = gettext('Recovery phrase deleted');
if (lodash.isEmpty(fc.credentials.mnemonic) && lodash.isEmpty(fc.credentials.mnemonicEncrypted))
self.deleted = true;
$scope.deleted = true;
self.delete = function() {
$scope.delete = function() {
confirmDialog.show(msg, function(ok) {
if (ok) {
fc.clearMnemonic();

View File

@ -1,21 +1,19 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesEmailController',
function($rootScope, go, profileService, gettext, $log, walletService) {
this.save = function(form) {
var self = this;
this.error = null;
angular.module('copayApp.controllers').controller('preferencesEmailController', function($rootScope, $scope, go, profileService, walletService) {
$scope.save = function(form) {
$scope.error = null;
$scope.saving = true;
var fc = profileService.focusedClient;
var email = $scope.email || '';
var fc = profileService.focusedClient;
var email = self.email || '';
walletService.updateRemotePreferences(fc, {
email: email,
}, function(err) {
if (!err)
$rootScope.$emit('Local/EmailUpdated', email);
go.path('preferences');
});
};
});
walletService.updateRemotePreferences(fc, {
email: email,
}, function(err) {
$scope.saving = false;
if (!err)
$rootScope.$emit('Local/EmailUpdated', email);
go.path('preferences');
});
};
});

View File

@ -4,17 +4,18 @@ angular.module('copayApp.controllers').controller('preferencesGlobalController',
function($scope, $rootScope, $log, configService, uxLanguage, platformInfo, pushNotificationsService, profileService, feeService) {
var isCordova = platformInfo.isCordova;
this.init = function() {
$scope.init = function() {
var config = configService.getSync();
this.unitName = config.wallet.settings.unitName;
this.currentLanguageName = uxLanguage.getCurrentLanguageName();
this.selectedAlternative = {
$scope.unitName = config.wallet.settings.unitName;
$scope.currentLanguageName = uxLanguage.getCurrentLanguageName();
$scope.selectedAlternative = {
name: config.wallet.settings.alternativeName,
isoCode: config.wallet.settings.alternativeIsoCode
};
this.feeOpts = feeService.feeOpts;
this.currentFeeLevel = feeService.getCurrentFeeLevel();
this.usePushNotifications = isCordova && !platformInfo.isWP;
$scope.feeOpts = feeService.feeOpts;
$scope.currentFeeLevel = feeService.getCurrentFeeLevel();
$scope.usePushNotifications = isCordova && !platformInfo.isWP;
$scope.PNEnabledByUser = true;
$scope.isIOSApp = platformInfo.isIOS && isCordova;
if ($scope.isIOSApp) {
@ -28,7 +29,7 @@ angular.module('copayApp.controllers').controller('preferencesGlobalController',
$scope.pushNotifications = config.pushNotifications.enabled;
};
this.openSettings = function() {
$scope.openSettings = function() {
cordova.plugins.diagnostic.switchToSettings(function() {
$log.debug('switched to settings');
}, function(err) {

View File

@ -4,26 +4,11 @@ angular.module('copayApp.controllers').controller('preferencesHistory',
function($scope, $log, $timeout, storageService, go, profileService, lodash) {
var fc = profileService.focusedClient;
var c = fc.credentials;
this.csvReady = false;
$scope.csvReady = false;
$scope.csvHistory = function(cb) {
var allTxs = [];
this.csvHistory = function(cb) {
function formatDate(date) {
var dateObj = new Date(date);
if (!dateObj) {
$log.debug('Error formating a date');
return 'DateError'
}
if (!dateObj.toJSON()) {
return '';
}
return dateObj.toJSON();
}
var step = 6;
var unique = {};
function getHistory(cb) {
storageService.getTxHistory(c.walletId, function(err, txs) {
if (err) return cb(err);
@ -38,16 +23,7 @@ angular.module('copayApp.controllers').controller('preferencesHistory',
allTxs.push(txsFromLocal);
return cb(null, lodash.flatten(allTxs));
});
}
var fc = profileService.focusedClient;
var c = fc.credentials;
if (!fc.isComplete())
return;
var self = this;
var allTxs = [];
};
$log.debug('Generating CSV from History');
getHistory(function(err, txs) {
@ -59,12 +35,12 @@ angular.module('copayApp.controllers').controller('preferencesHistory',
$log.debug('Wallet Transaction History Length:', txs.length);
self.satToUnit = 1 / self.unitToSatoshi;
$scope.satToUnit = 1 / $scope.unitToSatoshi;
var data = txs;
var satToBtc = 1 / 100000000;
self.csvContent = [];
self.csvFilename = 'Copay-' + (self.alias || self.walletName) + '.csv';
self.csvHeader = ['Date', 'Destination', 'Description', 'Amount', 'Currency', 'Txid', 'Creator', 'Copayers', 'Comment'];
$scope.csvContent = [];
$scope.csvFilename = 'Copay-' + ($scope.alias || $scope.walletName) + '.csv';
$scope.csvHeader = ['Date', 'Destination', 'Description', 'Amount', 'Currency', 'Txid', 'Creator', 'Copayers', 'Comment'];
var _amount, _note, _copayers, _creator, _comment;
data.forEach(function(it, index) {
@ -89,7 +65,7 @@ angular.module('copayApp.controllers').controller('preferencesHistory',
if (it.action == 'moved')
_note += ' Moved:' + (it.amount * satToBtc).toFixed(8)
self.csvContent.push({
$scope.csvContent.push({
'Date': formatDate(it.time * 1000),
'Destination': it.addressTo || '',
'Description': _note,
@ -103,7 +79,7 @@ angular.module('copayApp.controllers').controller('preferencesHistory',
if (it.fees && (it.action == 'moved' || it.action == 'sent')) {
var _fee = (it.fees * satToBtc).toFixed(8)
self.csvContent.push({
$scope.csvContent.push({
'Date': formatDate(it.time * 1000),
'Destination': 'Bitcoin Network Fees',
'Description': '',
@ -116,16 +92,31 @@ angular.module('copayApp.controllers').controller('preferencesHistory',
}
});
self.csvReady = true;
$scope.csvReady = true;
$timeout(function() {
$scope.$apply();
}, 100);
if (cb)
return cb();
return;
});
function formatDate(date) {
var dateObj = new Date(date);
if (!dateObj) {
$log.debug('Error formating a date');
return 'DateError'
}
if (!dateObj.toJSON()) {
return '';
}
return dateObj.toJSON();
};
};
this.clearTransactionHistory = function() {
$scope.clearTransactionHistory = function() {
storageService.removeTxHistory(c.walletId, function(err) {
if (err) {
$log.error(err);
@ -137,5 +128,5 @@ angular.module('copayApp.controllers').controller('preferencesHistory',
go.walletHome();
}, 100);
});
}
};
});

View File

@ -6,7 +6,7 @@ angular.module('copayApp.controllers').controller('preferencesInformation',
var fc = profileService.focusedClient;
var c = fc.credentials;
this.init = function() {
$scope.init = function() {
var basePath = c.getBaseAddressDerivationPath();
$scope.walletName = c.walletName;
@ -43,11 +43,7 @@ angular.module('copayApp.controllers').controller('preferencesInformation',
});
};
this.sendAddrs = function() {
var self = this;
self.loading = true;
$scope.sendAddrs = function() {
function formatDate(ts) {
var dateObj = new Date(ts * 1000);
if (!dateObj) {
@ -64,7 +60,6 @@ angular.module('copayApp.controllers').controller('preferencesInformation',
fc.getMainAddresses({
doNotVerify: true
}, function(err, addrs) {
self.loading = false;
if (err) {
$log.warn(err);
return;

View File

@ -16,9 +16,10 @@ describe('Backup Controller', function() {
it('should be defined', function() {
should.exist(ctrl);
});
it('should set the mnemonic incomplete wallets', function(done) {
should.exist(ctrl);
ctrl.mnemonicWords.should.deep.equal('dizzy cycle skirt decrease exotic fork sure mixture hair vapor copper hero'.split(' '));
should.exist(scope.mnemonicWords);
scope.mnemonicWords.should.deep.equal('dizzy cycle skirt decrease exotic fork sure mixture hair vapor copper hero'.split(' '));
done();
});
});
@ -35,11 +36,11 @@ describe('Backup Controller', function() {
});
it('should not set the mnemonic for complete wallets', function() {
ctrl.mnemonicWords.should.deep.equal('cheese where alarm job conduct donkey license pave congress pepper fence current'.split(' '));
scope.mnemonicWords.should.deep.equal('cheese where alarm job conduct donkey license pave congress pepper fence current'.split(' '));
});
it('should set main wallet info', function(done) {
ctrl.walletName.should.equal('kk');
scope.walletName.should.equal('kk');
done();
});
});

View File

@ -18,11 +18,17 @@ describe('Preferences History Controller', function() {
mocks.clear({}, done);
});
it('should be defined', function() {
should.exist(ctrl);
});
it('should export csv', function(done) {
ctrl.csvHistory(function(err) {
scope.csvHistory(function(err) {
should.not.exist(err);
ctrl.csvReady.should.equal(true);
JSON.stringify(ctrl.csvContent).should.equal('[{"Date":"2016-06-03T15:54:51.000Z","Destination":"","Description":"","Amount":"0.00120000","Currency":"BTC","Txid":"bf31ecaa8e10ce57f9a889fc4c893b40ff57b016dd763957d942e21ed55fc62c","Creator":"","Copayers":"","Comment":"just a comment"}]');
should.exist(scope.csvReady);
scope.csvReady.should.equal(true);
should.exist(scope.csvContent);
JSON.stringify(scope.csvContent).should.equal('[{"Date":"2016-06-03T15:54:51.000Z","Destination":"","Description":"","Amount":"0.00120000","Currency":"BTC","Txid":"bf31ecaa8e10ce57f9a889fc4c893b40ff57b016dd763957d942e21ed55fc62c","Creator":"","Copayers":"","Comment":"just a comment"}]');
done();
});
});