bwc
This commit is contained in:
parent
04fb7ba032
commit
320de62f13
348 changed files with 7745 additions and 30874 deletions
32
public/views/add.html
Normal file
32
public/views/add.html
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<ul class="no-bullet manage size-12">
|
||||
<li>
|
||||
<a title="Create new wallet" ng-click="$root.go('create')">
|
||||
<i class="fi-plus circle plus-fixed"></i>
|
||||
<i class="icon-arrow-right3 size-18 right m20t"></i>
|
||||
<span translate>Create new wallet</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a title="Join shared wallet" ng-click="$root.go('join')">
|
||||
<i class="icon-people circle"></i>
|
||||
<i class="icon-arrow-right3 size-18 right m20t"></i>
|
||||
<span translate>Join shared wallet</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a title="Import wallet" ng-click="$root.go('import')">
|
||||
<i class="icon-download circle"></i>
|
||||
<i class="icon-arrow-right3 size-18 right m20t"></i>
|
||||
<span translate>Import wallet </span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a title="Import wallet" ng-click="$root.go('importLegacy')">
|
||||
<i class="fi-archive plus-fixed circle"></i>
|
||||
<i class="icon-arrow-right3 size-18 right m20t"></i>
|
||||
<span translate>Import from Copay Beta 0.9</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
62
public/views/backup.html
Normal file
62
public/views/backup.html
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
|
||||
<div class="backup" ng-controller="backupController as backup">
|
||||
<div class="columns m20t" ng-show="!backup.backupWalletPlainText && !backup.error">
|
||||
|
||||
<div class="text-warning size-14 m10v" ng-show="backup.isEncrypted">
|
||||
<i class="fi-alert size-12"></i>
|
||||
<span translate> This wallet have its private key encrypted. Exporting a backup will keep the private key encrypted on the backup.</span>
|
||||
|
||||
</div>
|
||||
|
||||
<label for="password"><span translate>Set up a Password for your backup</span>
|
||||
</label>
|
||||
<div class="input">
|
||||
<input type="password" class="form-control" placeholder="{{'Your backup password'|translate}}"
|
||||
name="password" ng-model="backup.password">
|
||||
</div>
|
||||
|
||||
<label for="password"><span translate>Repeat Password</span>
|
||||
</label>
|
||||
<div class="input">
|
||||
<input type="password" class="form-control" placeholder="{{'Repeat password'|translate}}"
|
||||
name="password" ng-model="backup.repeatpassword">
|
||||
</div>
|
||||
|
||||
<button class="black radius expand" ng-click="backup.downloadWalletBackup()" ng-disabled="backup.loading || (!backup.password || backup.password != backup.repeatpassword)" style="background-color:{{index.backgroundColor}}"
|
||||
ng-show="!backup.isSafari && !backup.isCordova"><i class="fi-download"></i>
|
||||
<span translate>Download backup</span></button>
|
||||
<button class="black radius expand" ng-click="backup.viewWalletBackup()" ng-disabled="backup.loading" style="background-color:{{index.backgroundColor}}"
|
||||
ng-show="backup.isSafari && !backup.isCordova"><i class="fi-eye"></i>
|
||||
<span translate>View backup</span></button>
|
||||
<div ng-show="backup.isCordova">
|
||||
<h4 translate>Backup options</h4>
|
||||
<button class="black radius expand" ng-disabled="backup.loading || (!backup.password || backup.password != backup.repeatpassword)" style="background-color:{{index.backgroundColor}}"
|
||||
ng-click="backup.copyWalletBackup()"><i class="fi-clipboard-pencil"></i>
|
||||
<span translate>Copy to clipboard</span></button>
|
||||
<button class="black radius expand" ng-disabled="backup.loading || (!backup.password || backup.password != backup.repeatpassword)" style="background-color:{{index.backgroundColor}}"
|
||||
ng-click="backup.sendWalletBackup()"><i class="fi-mail"></i>
|
||||
<span translate>Send by email</span></button>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row m20b" ng-show="backup.backupWalletPlainText">
|
||||
<div class="large-12 columns">
|
||||
<h3 translate>Copy backup in a safe place</h3>
|
||||
<div class="input">
|
||||
<textarea class="show-for-large-up" readonly rows="7">{{backup.backupWalletPlainText}}</textarea>
|
||||
<textarea class="hide-for-large-up" rows="12">{{backup.backupWalletPlainText}}</textarea>
|
||||
</div>
|
||||
<div class="size-12 text-gray text-right">
|
||||
<i class="icon-compose"></i>
|
||||
<span translate>Copy this text as it is in a safe place (notepad or email)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m10 size-14 text-gray">
|
||||
* You can safely install your backup on other device and
|
||||
use your wallet from many devices at the same time.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
57
public/views/copayers.html
Normal file
57
public/views/copayers.html
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<div ng-controller="copayersController as copayers" ng-init="copayers.init()"
|
||||
ng-if="!index.isOffLine && !index.clientError">
|
||||
|
||||
<div ng-show="!index.notAuthorized">
|
||||
<div class="row m10t text-center">
|
||||
<div class="large-12 columns">
|
||||
<h1 translate>Share this secret with your copayers</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-click="copayers.copySecret(index.walletSecret)" ng-class="{'enable_text_select': !index.isCordoba}">
|
||||
<div class="text-center">
|
||||
<qrcode size="220" error-correction-level="L" data="{{index.walletSecret}}"></qrcode>
|
||||
<div class="secret columns m10t m20b">
|
||||
{{index.walletSecret || ('Loading...'|translate)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center m10t" ng-if="index.isCordova">
|
||||
<span class="button outline dark-gray tiny"
|
||||
ng-click="copayers.shareSecret(index.walletSecret)">
|
||||
<i class="fi-share"></i>
|
||||
<span translate>Share secret</span>
|
||||
</span>
|
||||
</div>
|
||||
<h4 class="title oh m0">
|
||||
<span translate>Waiting for copayers</span>
|
||||
<span class="text-gray right">
|
||||
[ {{index.m}} <span translate>of</span> {{index.n}} ]
|
||||
</span>
|
||||
</h4>
|
||||
<div class="p10 line-b" ng-include="'views/includes/copayers.html'"></div>
|
||||
<div ng-if="!index.isComplete" class="p10 line-b m20b">
|
||||
<p class="size-12 m0">
|
||||
<i class="fi-loop"></i>
|
||||
<span translate>Waiting...</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="m20tp text-center" ng-show="index.notAuthorized">
|
||||
<h1 translate>Wallet incomplete and broken</h1>
|
||||
<h4>Delete it and create a new one</h4>
|
||||
</div>
|
||||
<button class="small warning expand" ng-click="copayers.deleteWallet()">
|
||||
<i class="fi-trash"></i> <span translate>Cancel</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
|
||||
80
public/views/create.html
Normal file
80
public/views/create.html
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
<div class="create m20t" ng-controller="createController as create">
|
||||
<div ng-show="create.loading" class="text-center text-gray animated infinite flash" translate>Creating wallet...</div>
|
||||
<form name="setupForm" ng-submit="create.create(setupForm)" ng-show="!create.loading" novalidate>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="box-notification" ng-show="create.error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{create.error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<label><span translate>Wallet name</span>
|
||||
<div class="input">
|
||||
<input type="text" placeholder="{{'Family vacation funds'|translate}}" class="form-control" name="walletName" ng-model="walletName" ng-required="true">
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="large-12 columns" ng-show="totalCopayers != 1" >
|
||||
<label><span translate>Your nickname</span>
|
||||
<div class="input">
|
||||
<input type="text" placeholder="{{'John'|translate}}" class="form-control" name="myName" ng-model="myName" ng-required="totalCopayers != 1" ng-disabled="totalCopayers == 1">
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-6 medium-6 columns">
|
||||
<label><span translate>Select total number of copayers</span>
|
||||
<select class="m10t" ng-model="totalCopayers" ng-options="totalCopayers as totalCopayers for totalCopayers in create.TCValues">
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div class="large-6 medium-6 columns">
|
||||
<label><span translate>Select required signatures</span>
|
||||
<select class="m10t" ng-model="requiredCopayers" ng-options="requiredCopayers as requiredCopayers for requiredCopayers in create.RCValues" ng-disabled="totalCopayers == 1">
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="m10t oh" ng-init="hideAdv=true">
|
||||
<a class="button outline light-gray expand tiny" ng-click="hideAdv=!hideAdv">
|
||||
<i class="fi-widget m3r"></i>
|
||||
<span translate ng-hide="!hideAdv">Show</span>
|
||||
<span translate ng-hide="hideAdv">Hide</span>
|
||||
<span translate>advanced options</span>
|
||||
<i ng-if="hideAdv" class="icon-arrow-down4"></i>
|
||||
<i ng-if="!hideAdv" class="icon-arrow-up4"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div ng-hide="hideAdv" class="row">
|
||||
<div class="large-12 columns">
|
||||
<label for="network-name" class="line-b oh">
|
||||
<span translate>Use test network</span>
|
||||
<switch id="network-name" name="isTestnet" ng-model="isTestnet" class="green right m5t m10b"></switch>
|
||||
</label>
|
||||
<label for="ext-master" class="m10t">
|
||||
<span translate>Master extended private key</span>
|
||||
<input id="ext-master"
|
||||
type="text"
|
||||
placeholder="{{'BIP32 master extended private key'|translate}}"
|
||||
name="privateKey" ng-model="privateKey">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<button type="submit" class="button black expand radius m0" ng-disabled="setupForm.$invalid">
|
||||
<span translate>Create</span>
|
||||
{{requiredCopayers}}-<span translate>of</span>-{{totalCopayers}} <span translate>wallet</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
22
public/views/createProfile.html
Normal file
22
public/views/createProfile.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<div
|
||||
ng-controller="createProfileController as cp">
|
||||
|
||||
<div class="text-center logo-setup p20">
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="100">
|
||||
<div ng-include="'views/includes/version.html'"></div>
|
||||
</div>
|
||||
<div ng-if="index.isOffLine" class="row">
|
||||
<div class="large-12 columns">
|
||||
<h1 class="text-center text-warning" translate>Warning</h1>
|
||||
<div class="panel">
|
||||
<p translate>You don’t have an internet connection active. Copay needs connection to create a wallet</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div ng-if="!index.isOffLine && !cp.creatingProfile" ng-include="'views/includes/pin.html'" ng-init="confirmPin=true"></div> -->
|
||||
<div class="m20tp text-white text-center animated infinite flash" ng-if="!index.isOffLine && cp.creatingProfile">
|
||||
<span translate>Creating wallet...</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
|
||||
2
public/views/devLogin.html
Normal file
2
public/views/devLogin.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<div class="settings" ng-controller="DevLoginController">
|
||||
</div>
|
||||
62
public/views/dummy-translations.html
Normal file
62
public/views/dummy-translations.html
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
{{'Receive'|translate}}
|
||||
{{'History'|translate}}
|
||||
{{'Wrong password'|translate}}
|
||||
{{'Copied to clipboard'|translate}}
|
||||
{{'Please enter the required fields'|translate}}
|
||||
{{'Import a backup'|translate}}
|
||||
{{'Importing wallet - Reading backup...'|translate}}
|
||||
{{'Importing wallet - Setting things up...'|translate}}
|
||||
{{'Importing wallet - We are almost there...'|translate}}
|
||||
{{'Error updating indexes:'|translate}}
|
||||
{{'Please, select your backup file'|translate}}
|
||||
{{'Please enter the required fields'|translate}}
|
||||
{{'Fatal error connecting to Insight server'|translate}}
|
||||
{{'The wallet is full'|translate}}
|
||||
{{'Wallet network configuration missmatch'|translate}}
|
||||
{{'The secret string you entered is invalid'|translate}}
|
||||
{{'Transactions Proposals Purged'|translate}}
|
||||
{{'transaction proposal purged'|translate}}
|
||||
{{'Updating balance'|translate}}
|
||||
{{'Scaning for transactions'|translate}}
|
||||
{{'Using derived addresses from your wallet'|translate}}
|
||||
{{'Finished'|translate}}
|
||||
{{'The balance is updated using the derived addresses'|translate}}
|
||||
{{'Login Required'|translate}}
|
||||
{{'Please open wallet to complete payment'|translate}}
|
||||
{{'Send'|translate}}
|
||||
{{'Unable to send transaction proposal'|translate}}
|
||||
{{'The transaction proposal has been created'|translate}}
|
||||
{{'Form Error'|translate}}
|
||||
{{'Please complete required fields'|translate}}
|
||||
{{'Success'|translate}}
|
||||
{{'New entry has been created'|translate}}
|
||||
{{'There was an error sending the transaction'|translate}}
|
||||
{{'Transaction rejected'|translate}}
|
||||
{{'You rejected the transaction successfully'|translate}}
|
||||
{{'There was an error signing the transaction'|translate}}
|
||||
{{'Session will be closed'|translate}}
|
||||
{{'Your session is about to expire due to inactivity in'|translate}}
|
||||
{{'seconds'|translate}}
|
||||
{{'Session closed'|translate}}
|
||||
{{'Session closed because a long time of inactivity'|translate}}
|
||||
{{'available.'|translate}}
|
||||
{{'It\'s important that you update your wallet at https://copay.io'|translate}}
|
||||
{{'Please update your wallet at https://copay.io'|translate}}
|
||||
{{'Backup created'|translate}}
|
||||
{{'Encrypted backup file saved'|translate}}
|
||||
{{'Networking Error'|translate}}
|
||||
{{'Could not connect to the Insight server. Check your settings and network configuration'|translate}}
|
||||
{{'Received corrupt message from '|translate}}
|
||||
{{'Transaction Update'|translate}}
|
||||
{{'A transaction was signed by'|translate}}
|
||||
{{'A transaction was rejected by'|translate}}
|
||||
{{'Transaction Error'|translate}}
|
||||
{{'Received corrupt transaction from'|translate}}
|
||||
{{'New Transaction'|translate}}
|
||||
{{'You have a pending transaction proposal'|translate}}
|
||||
{{'You have'|translate}}
|
||||
{{'pending transaction proposals'|translate}}
|
||||
{{'Funds received!'|translate}}
|
||||
{{'Transaction broadcasted'|translate}}
|
||||
{{'Accessing your profile'|translate}}
|
||||
{{'Signing out'|translate}}
|
||||
56
public/views/history.html
Normal file
56
public/views/history.html
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<div class="history" ng-controller="historyController as history">
|
||||
<div class="row m20t" ng-show="!index.txHistory[0]">
|
||||
<div class="large-12 columns">
|
||||
<div class="oh text-center">
|
||||
<span ng-if="index.updatingTxHistory" class="text-gray" translate>Getting transactions...</span>
|
||||
<span ng-if="!index.updatingTxHistory">No transactions yet</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="index.txHistory[0]" class="scroll">
|
||||
<div ng-repeat="btx in index.txHistory"
|
||||
ng-click="history.openTxModal(btx)"
|
||||
class="row last-transactions-content">
|
||||
<div class="large-3 medium-3 small-3 columns">
|
||||
<span class="label tu" ng-show="btx.action == 'received'" style="background-color:{{index.backgroundColor}}">Received</span>
|
||||
<span class="label tu gray" ng-show="btx.action == 'sent'">Sent</span>
|
||||
<span class="label tu gray" ng-show="btx.action == 'moved'">Moved</span>
|
||||
</div>
|
||||
|
||||
<div class="large-5 medium-5 small-5 columns">
|
||||
<span class="size-18">
|
||||
<span ng-if="btx.action == 'received'">+</span>
|
||||
<span ng-if="btx.action == 'sent'">-</span>
|
||||
{{history.formatAmount(btx.amount)}}
|
||||
{{history.getUnitName()}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="large-4 medium-4 small-4 columns text-right">
|
||||
<div class="m5t 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="size-14 text-gray columns m5t" ng-if="btx.message || btx.addressTo">
|
||||
{{btx.message || btx.addressTo}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="m20t row">
|
||||
<div class="columns">
|
||||
<button class="outline light-gray small expand" ng-disabled="index.updatingTxHistory"
|
||||
ng-click="index.updateTxHistory(index.skipHistory)" ng-show="index.txHistoryPaging">
|
||||
<span ng-show="!index.updatingTxHistory">
|
||||
<span translate>More</span> <i class="icon-arrow-down4 ng-scope"></i>
|
||||
</span>
|
||||
<span ng-show="index.updatingTxHistory" translate>
|
||||
Getting transactions...
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
45
public/views/import.html
Normal file
45
public/views/import.html
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<div class="import m20t" ng-controller="importController as import">
|
||||
<div ng-show="import.loading" class="text-center text-gray animated infinite flash" translate>Importing wallet...</div>
|
||||
<div class="row" ng-show="!import.loading">
|
||||
<div class="large-12 columns">
|
||||
<form name="importForm" ng-submit="import.import(importForm)" novalidate>
|
||||
<div class="box-notification" ng-show="import.error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{import.error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="!import.isSafari && !import.isCordova" class="line-b m10b">
|
||||
<label for="backupFile">
|
||||
<span translate>Choose backup file from your computer</span> <i class="fi-laptop"></i>
|
||||
</label>
|
||||
<input type="file" class="form-control" placeholder="{{'Select a backup file'|translate}}"
|
||||
name="backupFile" ng-model="import.backupFile" ng-file-select>
|
||||
</div>
|
||||
|
||||
<div ng-show="import.isSafari || import.isCordova">
|
||||
<label for="backupText">
|
||||
<span translate>Paste backup plain text code</span> <i class="fi-clipboard"></i>
|
||||
</label>
|
||||
<textarea class="form-control" name="backupText" ng-model="import.backupText" rows="5"></textarea>
|
||||
</div>
|
||||
|
||||
<label for="password"><span translate>Password</span> <small translate>Required</small>
|
||||
</label>
|
||||
<div class="input">
|
||||
<input type="password" class="form-control" placeholder="{{'Your backup password'|translate}}"
|
||||
name="password" ng-model="import.password">
|
||||
</div>
|
||||
<button translate type="submit" class="button radius expand black m0"
|
||||
ng-disabled="importForm.$invalid || !import.password">
|
||||
Import backup
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
75
public/views/importLegacy.html
Normal file
75
public/views/importLegacy.html
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
<div class="import-profile" ng-controller="importLegacyController as importLegacy">
|
||||
<div class="row m20t">
|
||||
<div class="large-5 large-centered medium-7 medium-centered columns">
|
||||
<div class="logo-setup show-for-large-up">
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="100">
|
||||
<div ng-include="'views/includes/version.html'"></div>
|
||||
</div>
|
||||
<div>
|
||||
<div ng-show="importLegacy.importing">
|
||||
<h1 class="m20b animated infinite flash"> Importing...</h1>
|
||||
<ul>
|
||||
<li ng-repeat="m in importLegacy.messages">
|
||||
<span style="opacity: {{m.opacity}}"> {{m.message}} </span>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="box-notification" ng-show="importLegacy.error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{importLegacy.error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="!importLegacy.importing">
|
||||
<form name="importForm" ng-submit="importLegacy.import(importForm)" novalidate>
|
||||
|
||||
<label for="fromCloud" class="line-b oh m20b">
|
||||
<span translate>Import from the Cloud?</span>
|
||||
<switch id="fromCloud" name="fromCloud" ng-model="importLegacy.fromCloud" class="green right m5t m10b"></switch>
|
||||
</label>
|
||||
|
||||
<label for="username">
|
||||
<span translate>{{importLegacy.fromCloud ? 'Email': 'Username'}}</span>
|
||||
<input type="text" class="form-control" placeholder="{{importLegacy.fromCloud ? 'Email': 'Username'}}"
|
||||
name="username" ng-model="importLegacy.username" required>
|
||||
</label>
|
||||
|
||||
<label for="password">
|
||||
<span translate>Password</span>
|
||||
<input type="password" class="form-control" placeholder="{{'Your profile password'|translate}}"
|
||||
name="password" ng-model="importLegacy.password" required>
|
||||
</label>
|
||||
|
||||
<label for="server" ng-show="importLegacy.fromCloud">
|
||||
<span translate>Server</span>
|
||||
<input type="text" class="form-control" placeholder="{{'Server URL'}}"
|
||||
name="server" ng-model="importLegacy.server" required>
|
||||
</label>
|
||||
|
||||
<button translate type="submit"
|
||||
class="button black radius expand m0"
|
||||
ng-disabled="deviceForm.$invalid">
|
||||
Import
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<form name="importLegacyForm" ng-submit="importLegacy.import(importLegacyForm)" novalidate>
|
||||
<div class="box-notification" ng-show="error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
67
public/views/importProfile.html
Normal file
67
public/views/importProfile.html
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
|
||||
<div class="import-profile" ng-controller="importProfileController as importProfile">
|
||||
<div ng-show="$root.starting">
|
||||
<div ng-include="'views/includes/loading.html'" ng-init="title = importStatus"></div>
|
||||
</div>
|
||||
|
||||
<div class="row" ng-show="!$root.starting">
|
||||
<div class="large-5 large-centered medium-7 medium-centered columns">
|
||||
<div class="logo-setup show-for-large-up">
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="100">
|
||||
<div ng-include="'views/includes/version.html'"></div>
|
||||
</div>
|
||||
<div>
|
||||
<h2 translate>Import a profile</h2>
|
||||
<form name="importProfileForm" ng-submit="importProfile.import(importProfileForm)" novalidate>
|
||||
<div class="box-notification" ng-show="error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-show="!isSafari && !isCordova">
|
||||
<div class="input">
|
||||
<input type="file" class="db form-control"
|
||||
placeholder="{{'Select a backup file'|translate}}" name="backupFile" ng-model="importProfile.backupFile" ng-file-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="importProfile.isSafari || importProfile.isCordova">
|
||||
<div class="input">
|
||||
<textarea
|
||||
placeholder="{{'Paste backup plain text code'|translate}}"
|
||||
class="form-control"
|
||||
name="backupText"
|
||||
ng-model="importProfile.backupText"
|
||||
rows="5"></textarea>
|
||||
<i class="icon-compose"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input">
|
||||
<input type="password" class="form-control" placeholder="{{'Your profile password'|translate}}"
|
||||
name="password" ng-model="importProfile.password" required>
|
||||
<i class="icon-locked"></i>
|
||||
</div>
|
||||
|
||||
<button translate type="submit"
|
||||
class="button primary radius expand m0"
|
||||
ng-disabled="importProfileForm.$invalid">
|
||||
Import backup
|
||||
</button>
|
||||
</form>
|
||||
<div class="box-setup-footer">
|
||||
<div class="left">
|
||||
<a class="button outline dark-gray tiny" ng-click="$root.go('signin')">
|
||||
<i class="icon-arrow-left4 size-10"></i>
|
||||
<span translate>Back</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
11
public/views/includes/clientError.html
Normal file
11
public/views/includes/clientError.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<div class="client-error dr-notification-wrapper">
|
||||
<div class="dr-notification">
|
||||
<div class="dr-notification-image">
|
||||
<i class="fi-alert"></i>
|
||||
</div>
|
||||
<div class="dr-notification-content">
|
||||
<h3 class="dr-notification-title">Connection error</h3>
|
||||
<div class="dr-notification-text ellipsis">{{index.clientError.message || index.clientError}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
10
public/views/includes/copayers.html
Normal file
10
public/views/includes/copayers.html
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<ul class="no-bullet m0">
|
||||
<li class="" ng-repeat="copayer in index.copayers">
|
||||
<span class="size-12" ng-show="copayer.id == index.copayerId">
|
||||
<i class="fi-check m5r"></i> {{'Me'|translate}}
|
||||
</span>
|
||||
<span class="size-12 text-gray" ng-show="copayer.id != index.copayerId">
|
||||
<i class="fi-check m5r"></i> {{copayer.name}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
6
public/views/includes/loading.html
Normal file
6
public/views/includes/loading.html
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<div class="loading-screen">
|
||||
<div class="loading-screen-content">
|
||||
<img src="img/ajax-loader.gif" alt="Loading...">
|
||||
<div class="text-gray size-12" ng-show="title">{{title|translate}}...</div>
|
||||
</div>
|
||||
</div>
|
||||
19
public/views/includes/menu.html
Normal file
19
public/views/includes/menu.html
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<div
|
||||
ng-show="!index.noFocusedWallet"
|
||||
class="bottom-bar row collapse"
|
||||
ng-controller="menuController as menu">
|
||||
<div class="medium-3 small-3 columns text-center bottombar-item" ng-repeat="item in menu.menu">
|
||||
<a ng-click="menu.go(item.link)" ng-class="{'active': activeMenu == item.link}"
|
||||
style="border-top-color:{{activeMenu==item.link ? index.backgroundColor : ''}}">
|
||||
<i class="size-36 {{item.icon}} db"></i>
|
||||
<div class="size-10 tu">
|
||||
{{item.title|translate}}
|
||||
<span
|
||||
class="label alert round"
|
||||
ng-if="item.link=='walletHome' && index.pendingTxProposalsCountForUs > 0">{{index.pendingTxProposalsCountForUs}}</span>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
13
public/views/includes/notifications.html
Normal file
13
public/views/includes/notifications.html
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<div class="dr-notification-wrapper" ng-repeat="noti in queue" ng-click="removeNotification(noti)">
|
||||
<div class="dr-notification animated bounceInDown">
|
||||
<div class="dr-notification-image" ng-switch on="noti.image">
|
||||
<i class="{{noti.icon}}" ng-switch-when="false"></i>
|
||||
<img ng-src="{{noti.image}}" ng-switch-default />
|
||||
</div>
|
||||
<div class="dr-notification-content">
|
||||
<h3 class="dr-notification-title">{{noti.title|translate}}</h3>
|
||||
<div class="dr-notification-text label" style="background-color:{{noti.userData.color}}">{{noti.content|translate}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
11
public/views/includes/offline.html
Normal file
11
public/views/includes/offline.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<div class="offline dr-notification-wrapper">
|
||||
<div class="dr-notification">
|
||||
<div class="dr-notification-image">
|
||||
<i class="fi-alert"></i>
|
||||
</div>
|
||||
<div class="dr-notification-content">
|
||||
<h3 class="dr-notification-title">{{'No internet connection'|translate}}</h3>
|
||||
<div class="dr-notification-text ellipsis">{{'Copay needs connection to run basic functions'|translate}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
43
public/views/includes/password.html
Normal file
43
public/views/includes/password.html
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
|
||||
<div class="passModalMask">
|
||||
</div>
|
||||
|
||||
<div ng-controller="passwordController as pass" class="passModal"
|
||||
ng-class="{'animated bounceInDown':index.askPassword}"
|
||||
>
|
||||
<div class="columns m20t">
|
||||
<label class="size-14 text-center" for="password" ng-if="index.askPassword.isSetup">
|
||||
<span ng-show="!pass.isVerification" translate>Set up a Password</span>
|
||||
<span ng-show="pass.isVerification" translate>Repeat Password</span>
|
||||
</label>
|
||||
<label class="size-14 text-center" for="password" ng-if="!index.askPassword.isSetup">
|
||||
<span translate>Enter your password</span>
|
||||
</label>
|
||||
|
||||
<div class="input m20t">
|
||||
<input type="password" placeholder="{{'Your password'|translate}}"
|
||||
name="password" ng-model="pass.password">
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="small-6 columns">
|
||||
<button class="radius small-6 columns outline dark-gray expand" ng-click="pass.close(index.askPassword.callback)" translate>
|
||||
CANCEL
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="small-6 columns">
|
||||
<button class="radius expand" ng-click="pass.set(index.askPassword.isSetup, index.askPassword.callback)" ng-disabled="!pass.password" style="background-color:{{index.backgroundColor}}" >
|
||||
<span translate ng-if="index.askPassword.isSetup" translate>SET</span>
|
||||
<span translate ng-if="!index.askPassword.isSetup" translate>ENTER</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-warning size-12 columns m20t" ng-show="index.askPassword.isSetup">
|
||||
<i class="fi-alert"></i>
|
||||
<span translate ng-show="!pass.error"> Password cannot be recovered. Be sure to write it down</span>
|
||||
|
||||
<span ng-show="pass.error">{{pass.error|translate}}</span>
|
||||
</div>
|
||||
</div>
|
||||
1
public/views/includes/photo.html
Normal file
1
public/views/includes/photo.html
Normal file
|
|
@ -0,0 +1 @@
|
|||
<span class="photo-container"><i class="fi-torso size-42"></i></span>
|
||||
54
public/views/includes/pin.html
Normal file
54
public/views/includes/pin.html
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
<div ng-controller="pinController as pin" ng-init="pin.init(confirmPin, testPin)">
|
||||
<h3 class="text-center text-white">
|
||||
<span ng-show="pin.askForPin == 1">Setup a PIN</span>
|
||||
<span ng-show="pin.askForPin == 2">Repeat PIN</span>
|
||||
</h3>
|
||||
<div class="text-center size-12 text-warning" ng-show="pin.error || cp.error">
|
||||
{{(pin.error || cp.error)|translate}}
|
||||
</div>
|
||||
<div class="pin" ng-show="!pin.error && !cp.error">
|
||||
<div class="pin-box">
|
||||
<i class="icon-circle" ng-show="!pin.defined[0]"></i>
|
||||
<i class="icon-circle-active" ng-show="pin.defined[0]"></i>
|
||||
</div>
|
||||
|
||||
<div class="pin-box">
|
||||
<i class="icon-circle" ng-show="!pin.defined[1]"></i>
|
||||
<i class="icon-circle-active" ng-show="pin.defined[1]"></i>
|
||||
</div>
|
||||
|
||||
<div class="pin-box">
|
||||
<i class="icon-circle" ng-show="!pin.defined[2]"></i>
|
||||
<i class="icon-circle-active" ng-show="pin.defined[2]"></i>
|
||||
</div>
|
||||
|
||||
<div class="pin-box">
|
||||
<i class="icon-circle" ng-show="!pin.defined[3]"></i>
|
||||
<i class="icon-circle-active" ng-show="pin.defined[3]"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pin-numbers">
|
||||
<div class="pin-button-bar">
|
||||
<a class="pin-button" ng-click="pin.press(1)">1</a>
|
||||
<a class="pin-button" ng-click="pin.press(2)">2</a>
|
||||
<a class="pin-button" ng-click="pin.press(3)">3</a>
|
||||
</div>
|
||||
<div class="pin-button-bar">
|
||||
<a class="pin-button" ng-click="pin.press(4)">4</a>
|
||||
<a class="pin-button" ng-click="pin.press(5)">5</a>
|
||||
<a class="pin-button" ng-click="pin.press(6)">6</a>
|
||||
</div>
|
||||
<div class="pin-button-bar">
|
||||
<a class="pin-button" ng-click="pin.press(7)">7</a>
|
||||
<a class="pin-button" ng-click="pin.press(8)">8</a>
|
||||
<a class="pin-button" ng-click="pin.press(9)">9</a>
|
||||
</div>
|
||||
<div class="pin-button-bar">
|
||||
<a class="pin-button" ng-click="pin.skip()">
|
||||
<i class="text-primary size-16 vm" translate>Skip</i>
|
||||
</a>
|
||||
<a class="pin-button" ng-click="pin.press(0)">0</a>
|
||||
<a class="pin-button" ng-click="pin.clear()"><i class="fi-arrow-left"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
28
public/views/includes/sidebar.html
Normal file
28
public/views/includes/sidebar.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<nav class="sidebar left-off-canvas-menu" ng-controller="sidebarController as sidebar">
|
||||
<header>
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="80">
|
||||
<div ng-include="'views/includes/version.html'"></div>
|
||||
</header>
|
||||
<ul class="off-canvas-list">
|
||||
<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">
|
||||
<a ng-click="sidebar.switchWallet(item.id)">
|
||||
<div class="avatar-wallet" style="background-color:{{item.color}}">{{(item.name || item.id) | limitTo: 1}}</div>
|
||||
<div class="ellipsis name-wallet">{{item.name || item.id}}</div>
|
||||
<div class="size-12">{{item.m}} of {{item.n}}</div>
|
||||
</a>
|
||||
</li>
|
||||
<li ng-if="!index.isOffLine">
|
||||
<a ng-click="$root.go('add')">
|
||||
<i class="icon-arrow-right3 size-18 right m10t"></i>
|
||||
<i class="fi-plus size-24 db left m10r"></i>
|
||||
<div class="tu text-bold">
|
||||
<span class="size-12" translate>Add wallet</span>
|
||||
</div>
|
||||
<div translate>Create, join or import</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
22
public/views/includes/topbar.html
Normal file
22
public/views/includes/topbar.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<nav ng-controller="topbarController as topbar" class="tab-bar">
|
||||
<section class="left-small">
|
||||
<a class="p10" ng-show="!goBackToState && !index.noFocusedWallet"
|
||||
ng-click="index.openMenu()"><i class="fi-list size-24"></i>
|
||||
</a>
|
||||
<a ng-show="goBackToState"
|
||||
ng-click="$root.go(goBackToState); goBackToState = null"><i class="icon-arrow-left3 icon-back"></i>
|
||||
<span class="text-back" translate>Back</span>
|
||||
</a>
|
||||
</section>
|
||||
|
||||
<section class="right-small" ng-show="index.isComplete && !goBackToState">
|
||||
<a class="p10"
|
||||
ng-click="topbar.openScanner()"><i class="fi-camera size-24"></i></a>
|
||||
</section>
|
||||
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis" style="color:{{index.backgroundColor}}">
|
||||
{{(titleSection|translate) || index.walletName}}
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
25
public/views/includes/transaction.html
Normal file
25
public/views/includes/transaction.html
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<div class="last-transactions-content"
|
||||
ng-class="{'text-gray':!tx.pendingForUs}"
|
||||
ng-click="openTxModal(tx, index.copayers)">
|
||||
<div class="m5b size-12 text-gray">
|
||||
<time>{{ (tx.ts || tx.createdTs ) | amTimeAgo}}</time>
|
||||
</div>
|
||||
<div class="row collapse">
|
||||
<div class="ellipsis small-8 columns size-14">
|
||||
|
||||
<span translate>To</span>:
|
||||
<span ng-if="tx.merchant">
|
||||
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock"></i> {{tx.merchant.domain}}</span>
|
||||
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock"></i> {{tx.merchant.domain}}</span>
|
||||
</span>
|
||||
<contact address="{{tx.toAddress}}" ng-hide="tx.merchant"> </contact>
|
||||
{{tx.toAddress}}
|
||||
</div>
|
||||
|
||||
<div class="small-4 columns text-right">
|
||||
<span class="text-bold size-14" ng-if="!$root.updatingBalance">
|
||||
{{tx.amountStr}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
5
public/views/includes/version.html
Normal file
5
public/views/includes/version.html
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<span ng-controller="versionController as v">
|
||||
<small>v{{v.version}}</small>
|
||||
<small>#{{v.commitHash}}</small>
|
||||
</span>
|
||||
|
||||
66
public/views/join.html
Normal file
66
public/views/join.html
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<div class="join m20t" ng-controller="joinController as join">
|
||||
<div ng-show="join.loading" class="text-center text-gray animated infinite flash" translate>Joining shared wallet...</div>
|
||||
<div class="row" ng-show="!join.loading">
|
||||
<div class="large-12 columns">
|
||||
<form name="joinForm" ng-submit="join.join(joinForm)" novalidate>
|
||||
<label><span translate>Your nickname</span>
|
||||
<div class="input">
|
||||
<input type="text" placeholder="{{'John'|translate}}" class="form-control" name="myName" ng-model="myName" ng-required="true">
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<div class="row collapse">
|
||||
<label for="secret" class="left"><span translate>Wallet Secret</span>
|
||||
<small translate ng-show="joinForm.secret.$pristine">Required</small>
|
||||
</label>
|
||||
<span class="has-error right size-12" ng-show="joinForm.secret.$invalid
|
||||
&& !joinForm.secret.$pristine">
|
||||
<span class="icon-input"><i class="fi-x"></i></span>
|
||||
<span translate>Wallet Secret is not valid!</span>
|
||||
</span>
|
||||
<small class="icon-input right" ng-show="joinForm.secret.$valid
|
||||
&& !joinForm.secret.$pristine"><i class="fi-check"></i></small>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<input id="secret" type="text" placeholder="{{'Paste wallet secret here'|translate}}" name="secret" ng-model="secret" wallet-secret required>
|
||||
<div ng-hide="showScanner || disableScanner">
|
||||
<a class="postfix" ng-click="join.openScanner()"><i class="fi-camera size-24"> </i></a>
|
||||
</div>
|
||||
<div ng-show="showScanner">
|
||||
<a class="postfix button warning" ng-click="cancelScanner()"><i class="fi-x"> </i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="scanner"
|
||||
class="row"
|
||||
ng-if="showScanner"
|
||||
ng-include="'views/includes/scanner.html'">
|
||||
</div>
|
||||
|
||||
<a class="button outline light-gray tiny expand" ng-click="join.hideAdv=!join.hideAdv">
|
||||
<i class="fi-widget m3r"></i>
|
||||
<span translate ng-show="!join.hideAdv">Show</span>
|
||||
<span translate ng-show="join.hideAdv">Hide</span>
|
||||
<span translate>advanced options</span>
|
||||
<i ng-show="!join.hideAdv" class="icon-arrow-down4"></i>
|
||||
<i ng-show="join.hideAdv" class="icon-arrow-up4"></i>
|
||||
</a>
|
||||
<div ng-show="join.hideAdv" class="row">
|
||||
<div class="large-12 columns">
|
||||
<label for="ext-master">Master extended private key
|
||||
<input id="ext-master"
|
||||
type="text"
|
||||
placeholder="{{'BIP32 master extended private key'|translate}}"
|
||||
name="privateKey" ng-model="privateKey">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<button translate type="submit" class="button expand black m0 radius" ng-disabled="joinForm.$invalid">Join</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
|
||||
88
public/views/modals/address-book.html
Normal file
88
public/views/modals/address-book.html
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
<nav class="tab-bar text-right hide-for-large-up">
|
||||
<span ng-click="close()" class="p10 text-white" translate>Close</span>
|
||||
</nav>
|
||||
<div class="modal-mobile">
|
||||
<h1 ng-show="!showForm" translate>Address Book</h1>
|
||||
<h1 ng-show="showForm" translate>Add a new entry</h1>
|
||||
<p translate class="text-gray m15b" ng-show="!showForm && !hasEntry()" translate>
|
||||
Empty. Create an alias for your addresses
|
||||
</p>
|
||||
<div class="box-notification" ng-show="success">
|
||||
<div class="box-icon success">
|
||||
<i class="size-24 fi-check"></i>
|
||||
</div>
|
||||
<span class="size-14 text-success">
|
||||
{{success|translate}}
|
||||
</span>
|
||||
</div>
|
||||
<table class="addressbook line-t" ng-show="!showForm && hasEntry()">
|
||||
<thead class="show-for-large-up">
|
||||
<tr>
|
||||
<th translate>Entry</th>
|
||||
<th class="show-for-large-up" ng-class="{'hide-for-small-only' : $root.wallet.isShared()}" ng-show="$root.wallet.isShared()" translate>Creator</th>
|
||||
<th class="show-for-large-up" translate>Date</th>
|
||||
<th class="show-for-large-up" translate>Visible</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr
|
||||
ng-repeat="(addr, info) in addressBook"
|
||||
ng-class="{'addressbook-disabled': info.hidden}">
|
||||
<td ng-click="copyToSend(addr)">
|
||||
<b>{{info.label}}</b><br>
|
||||
<small class="address-size">{{::addr}}</small>
|
||||
</td>
|
||||
<td class="show-for-large-up" ng-click="copyToSend(addr)" ng-show="$root.wallet.isShared()">{{$root.wallet.publicKeyRing.nicknameForCopayer(info.copayerId)}}</td>
|
||||
<td ng-click="copyToSend(addr)" class="show-for-large-up"><time>{{::info.createdTs | amCalendar}}</time></td>
|
||||
<td class="show-for-large-up text-center">
|
||||
<a ng-click="toggleAddressBookEntry(addr)" title="{{ info.hidden ? 'Enable' : 'Disable'}} address">
|
||||
<i class="fi-checkbox size-21"
|
||||
ng-class="{'text-success':!info.hidden, 'text-gray':info.hidden}"></i>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<form ng-show="showForm" class="m0" name="addressBookForm"
|
||||
ng-disabled="loading"
|
||||
ng-submit="submitAddressBook(addressBookForm)" novalidate>
|
||||
<div class="box-notification" ng-show="error">
|
||||
<div class="box-icon error">
|
||||
<i class="size-24 fi-x"></i>
|
||||
</div>
|
||||
<span class="size-14 text-warning">
|
||||
{{error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="row collapse">
|
||||
<label for="newaddress" class="left"><span translate>Address</span>
|
||||
<small translate ng-hide="!addressBookForm.newaddress.$pristine || newaddress">Required</small>
|
||||
</label>
|
||||
<span class="has-error right size-12" ng-show="addressBookForm.newaddress.$invalid && newaddress">
|
||||
<span class="icon-input"><i class="fi-x"></i></span>
|
||||
<span translate>Not valid</span>
|
||||
</span>
|
||||
<small class="icon-input right" ng-show="!addressBookForm.newaddress.$invalid && newaddress"><i class="fi-check"></i></small>
|
||||
</div>
|
||||
<div class="input">
|
||||
<input type="text" name="newaddress"
|
||||
placeholder="{{'Address'|translate}}" ng-model="newaddress" valid-address required>
|
||||
</div>
|
||||
|
||||
<label for="newlabel"><span translate>Label</span>
|
||||
<small translate ng-hide="!addressBookForm.newlabel.$pristine || newlabel">Required</small>
|
||||
<div class="input">
|
||||
<input type="text" name="newlabel"
|
||||
placeholder="{{'Label'|translate}}" ng-model="newlabel" required>
|
||||
</div>
|
||||
</label>
|
||||
<a translate class="button secondary default" ng-show="!loading" ng-click="cancel(addressBookForm)">Cancel</a>
|
||||
<button class="primary right"
|
||||
ng-disabled="addressBookForm.$invalid || loading"
|
||||
ng-click="submitAddressBook(addressBookForm)">{{'Add'|translate}}</button>
|
||||
</form>
|
||||
<a ng-show="!showForm" class="button primary expand" ng-disabled="loading" ng-click="toggleForm()">
|
||||
<i class="fi-plus"></i> <span translate>Add entry</span>
|
||||
</a>
|
||||
<a class="close-reveal-modal show-for-large-up" ng-click="close()"><i class="fi-x size-18"></i></a>
|
||||
</div>
|
||||
16
public/views/modals/confirmation.html
Normal file
16
public/views/modals/confirmation.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<div class="m20tp text-center">
|
||||
<div class="row">
|
||||
<h1 class="text-center m20b">{{title|translate}}</h1>
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="button light-gray expand outline radius" ng-disabled="loading"
|
||||
ng-click="cancel()">
|
||||
<i class="fi-x"></i> <span class="tu" translate>Cancel</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="warning expand radius" ng-disabled="loading" ng-click="ok()">
|
||||
<i class="fi-trash"></i> <span translate>OK</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
25
public/views/modals/copayers.html
Normal file
25
public/views/modals/copayers.html
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis" translate>
|
||||
Copayers
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
<ul class="no-bullet p60t">
|
||||
<li class="line-b p10" ng-repeat="copayer in copayers">
|
||||
<span class="size-12" ng-show="copayer.id == copayerId">
|
||||
<i class="icon-contact size-24 m10r"></i> {{copayer.name}} ({{'Me'|translate}}) <i class="fi-check m5r right"></i>
|
||||
</span>
|
||||
<span class="size-12 text-gray" ng-show="copayer.id != copayerId">
|
||||
<i class="icon-contact size-24 m10r"></i> {{copayer.name}}<i class="fi-check m5r right"></i>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
50
public/views/modals/paypro.html
Normal file
50
public/views/modals/paypro.html
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis" style="color:{{color}}" translate>
|
||||
Payment protocol request
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
<div class="row p60t">
|
||||
<div class="large-12 columns">
|
||||
<div class="text-center">
|
||||
<div class="size-48">
|
||||
{{unitTotal}} {{unitName}}
|
||||
</div>
|
||||
<div class="size-18 m5t text-gray">
|
||||
{{ alternative }} {{ alternativeIsoCode }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="line-b m10v"></div>
|
||||
|
||||
<div class="ellipsis m10v">
|
||||
<i translate>To:</i> {{paypro.domain}}
|
||||
</div>
|
||||
|
||||
<div class="m10v">
|
||||
<i translate>Certified by:</i>
|
||||
<span ng-show="paypro.verified"><i class="fi-lock color-greeni"></i> {{paypro.verifyData.caName}}</span>
|
||||
<span ng-show="!paypro.verified"><i class="fi-unlock color-yellowi"></i> <span translate>Untrusted</span></span>
|
||||
</div>
|
||||
|
||||
<div ng-if="md.pr.pd.memo" class="m10v lh140">
|
||||
<i translate>Merchant Message:</i>
|
||||
<span class="text-gray">
|
||||
{{paypro.memo}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-if="md.expirationDate" class="m10v">
|
||||
<i translate>Expires:</i> {{paypro.expires | amTimeAgo }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
|
||||
26
public/views/modals/qr-address.html
Normal file
26
public/views/modals/qr-address.html
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis" translate>
|
||||
Address
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
<div class="p60t text-center" ng-init="addr = address.address">
|
||||
<qrcode size="220" data="{{addr}}"></qrcode>
|
||||
|
||||
<div class="size-12" ng-class="{'enable_text_select': !isCordova}">
|
||||
{{addr}}
|
||||
</div>
|
||||
<div class="m5t size-10 text-secondary" ng-show="address.isChange" translate>change</div>
|
||||
<div class="text-center m10t" ng-if="isCordova">
|
||||
<button class="secondary" ng-click="copyAddress(addr)">
|
||||
<i class="fi-clipboard-pencil"></i> <span translate>Copy to clipboard</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
16
public/views/modals/scanner.html
Normal file
16
public/views/modals/scanner.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis" translate>
|
||||
QR-Scanner
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
<div class="p60t text-center" ng-init="init()">
|
||||
<canvas id="qr-canvas" width="200" height="150"></canvas>
|
||||
<video id="qrcode-scanner-video" width="300" height="225"></video>
|
||||
</div>
|
||||
100
public/views/modals/tx-details.html
Normal file
100
public/views/modals/tx-details.html
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis" style="color:{{color}}" translate>
|
||||
Transaction
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
|
||||
<div class="p45t">
|
||||
<div class="header-modal text-center">
|
||||
<div class="size-42">
|
||||
<span ng-if="btx.action == 'received'">+</span><span ng-if="btx.action == 'sent'">-</span>{{btx.amountStr}} {{settings.unitName}}
|
||||
</div>
|
||||
<div class="size-18 m5t text-gray" ng-show="btx.alternativeAmount">
|
||||
{{btx.alternativeAmount}} {{settings.alternativeIsoCode}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4 class="title m0" translate>Information</h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li ng-if="btx.addressTo" class="line-b p10 oh">
|
||||
<span class="text-gray" translate>To:</span>
|
||||
<span class="right">
|
||||
<span ng-if="btx.merchant">
|
||||
<span ng-show="btx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{btx.merchant.domain}}</span>
|
||||
<span ng-show="!btx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{btx.merchant.domain}}</span>
|
||||
</span>
|
||||
<span ng-if="!btx.merchant">
|
||||
<span class="text-gray enable_text_select"> {{btx.labelTo || btx.addressTo}}</span>
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
<li ng-if="btx.time" class="line-b p10">
|
||||
<span class="text-gray" translate>Date:</span>
|
||||
<span class="right">
|
||||
<time>{{ btx.time * 1000 | amCalendar}}</time>
|
||||
</span>
|
||||
</li>
|
||||
<li ng-if="btx.message" class="line-b p10 oh">
|
||||
<span class="text-gray" translate>Note:</span>
|
||||
<span class="right">
|
||||
{{btx.message}}
|
||||
</span>
|
||||
</li>
|
||||
<li ng-if="btx.merchant" class="line-b p10 oh">
|
||||
<span class="text-gray" translate>Merchant Message:</span>
|
||||
<span class="right">
|
||||
{{btx.merchant.pr.pd.memo}}
|
||||
</span>
|
||||
</li>
|
||||
<li ng-if="btx.time" class="line-b p10">
|
||||
<span class="text-gray" translate>Confirmations:</span>
|
||||
<span class="right">
|
||||
<span class="text-warning" ng-show="!btx.confirmations || btx.confirmations == 0" translate>
|
||||
Unconfirmed
|
||||
</span>
|
||||
<span class="text-secondary" ng-show="btx.confirmations>0">
|
||||
{{btx.confirmations}}
|
||||
</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div ng-if="btx.actions[0]">
|
||||
<h4 class="title m0" translate>Signatures</h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li class="line-b p10 text-gray" ng-repeat="c in btx.actions">
|
||||
<span class="right">
|
||||
<i ng-if="c.type == 'reject'" class="fi-x icon-sign x db"></i>
|
||||
<i ng-if="c.type == 'accept'" class="fi-check icon-sign check db"></i>
|
||||
</span>
|
||||
<span>{{c.copayerName}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div ng-show="btx.txid" class="tx-details-blockchain">
|
||||
<h4 class="title m0" translate>Blockchain</h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li class="line-b p10 oh">
|
||||
<span class="text-gray">ID:</span>
|
||||
<span class="right">
|
||||
<small class="ellipsis text-gray enable_text_select m5t">{{btx.txid}}</small>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p10"
|
||||
ng-click="$root.openExternalLink('http://' + getShortNetworkName() + '.insight.is/tx/' + btx.txid)">
|
||||
<span class="text-gray" translate>See it on the blockchain</span>
|
||||
<i class="icon-arrow-right3 size-24 right text-gray"></i>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
32
public/views/modals/tx-status.html
Normal file
32
public/views/modals/tx-status.html
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
<div ng-if="statusStr && statusStr == 'Transaction broadcasted'" class="popup-txsent">
|
||||
<i class="small-centered columns fi-check m20tp"></i>
|
||||
<div class="text-center size-18 text-white text-bold tu p20">
|
||||
<span translate>Payment Sent</span>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="button outline white small-5 tiny" ng-click="cancel()" translate>OKAY</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="statusStr && statusStr == 'Transaction proposal signed'" class="popup-txsigned">
|
||||
<i class="small-centered columns fi-check m20tp"></i>
|
||||
<div class="text-center size-18 text-primary tu text-bold p20">
|
||||
{{statusStr|translate}}
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="button outline light-gray small-5 tiny" ng-click="cancel()" translate>OKAY</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="statusStr && statusStr == 'Transaction was rejected'" class="popup-txrejected">
|
||||
<i class="fi-x small-centered columns m20tp"></i>
|
||||
<div class="text-center size-18 tu text-warning text-bold p20">
|
||||
{{statusStr|translate}}
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<a class="button outline light-gray small-5 tiny" ng-click="cancel()" translate>OKAY</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
143
public/views/modals/txp-details.html
Normal file
143
public/views/modals/txp-details.html
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
<nav class="tab-bar">
|
||||
<section class="right-small">
|
||||
<a ng-click="cancel()">
|
||||
<span class="text-close" translate>Close</span>
|
||||
</a>
|
||||
</section>
|
||||
<section class="middle tab-bar-section">
|
||||
<h1 class="title ellipsis" style="color:{{color}}" translate>
|
||||
Transaction proposal
|
||||
</h1>
|
||||
</section>
|
||||
</nav>
|
||||
<div class="p45t" ng-init="updateCopayerList()">
|
||||
<h4 class="title m0" translate> Information </h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li class="line-b p10">
|
||||
<span class="text-gray">To:</span>
|
||||
<span class="right">{{tx.toAddress}}</span>
|
||||
</li>
|
||||
<li class="line-b p10">
|
||||
<span class="text-gray">Amount:</span>
|
||||
<span class="right">{{tx.amountStr}}
|
||||
<span class="label gray radius">{{tx.alternativeAmountStr}}</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p10">
|
||||
<span class="text-gray">Time:</span>
|
||||
<span class="right">
|
||||
<time>{{ (tx.ts || tx.createdOn ) * 1000 | amTimeAgo}}</time>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p10 oh">
|
||||
<span class="text-gray">Create by:</span>
|
||||
<span class="right">{{tx.creatorName}}</span>
|
||||
</li>
|
||||
<li class="line-b p10 oh">
|
||||
<span class="text-gray">Note:</span>
|
||||
<span class="right">{{tx.message}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div ng-if="tx.paypro">
|
||||
<h4 class="title m0">PAYMENT DETAILS</h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li class="line-b p10">
|
||||
<span class="text-gray">To:</span>
|
||||
<span class="right">
|
||||
<span>
|
||||
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock"></i> {{tx.paypro.domain}}</span>
|
||||
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock"></i> {{tx.paypro.domain}}</span>
|
||||
</span>
|
||||
<contact address="{{tx.toAddress}}" ng-hide="tx.merchant"></contact>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p10">
|
||||
<span class="text-gray">Expires:</span>
|
||||
<span class="right">
|
||||
<time>{{tx.paypro.expirationDate | amTimeAgo }}</time>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p10">
|
||||
<span class="text-gray">Merchant Message:</span>
|
||||
<span class="db">{{tx.paypro.pr.pd.memo}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div ng-if="tx.actions[0] && !txRejected && !txBroadcasted">
|
||||
<h4 class="title m0">Signatures:</h4>
|
||||
<ul class="no-bullet size-14 m0">
|
||||
<li class="line-b p10 text-gray" ng-repeat="ac in tx.actions">
|
||||
<i class="icon-contact size-24"></i>
|
||||
<span>{{ac.copayerName}}</span>
|
||||
<span class="right">
|
||||
<i ng-if="ac.type == 'reject'" class="fi-x icon-sign x db"></i>
|
||||
<i ng-if="ac.type == 'accept'" class="fi-check icon-sign check db"></i>
|
||||
<i ng-if="!ac.type" class="fi-loop"></i>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box-notification" ng-show="error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row column m20t text-center text-warning" ng-if="tx.removed">
|
||||
The transaction was removed by creator
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row column m20t" ng-if="tx.couldRemove">
|
||||
<button class="button expand outline dark-gray m0 expand" ng-click="hideTxInfo = true; remove(tx);"
|
||||
ng-disabled="loading" ng-show="tx.couldRemove">
|
||||
<i class="fi-x icon-sign x"></i>
|
||||
<span translate>Remove</span>
|
||||
</button>
|
||||
<div class="text-gray size-12 text-center" show="tx.couldRemove" translate>
|
||||
* Only transactions created by yourself with no peer signatures can be removed
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m20t" ng-if="tx.pendingForUs">
|
||||
<div class="large-5 medium-5 small-6 columns">
|
||||
<button class="button outline dark-gray m0 expand" ng-click="hideTxInfo = true; reject(tx);"
|
||||
ng-disabled="loading">
|
||||
<i class="fi-x icon-sign x"></i>
|
||||
<span translate>Reject</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="large-5 medium-5 small-6 columns text-right">
|
||||
<button class="button primary m0 expand" ng-click="hideTxInfo = true; sign(tx)" style="background-color:{{color}}"
|
||||
ng-disabled="loading">
|
||||
<i class="fi-check icon-sign check"></i>
|
||||
<span translate>Sign</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="!hideTxInfo">
|
||||
<div class="row collapse m10t"
|
||||
ng-show="tx.status=='accepted' && !txBroadcasted && !txRejected">
|
||||
<button class="primary expand"
|
||||
ng-click="broadcast(tx)"
|
||||
ng-disabled="loading"> <i class="fi-upload-cloud"></i>
|
||||
<span translate>Broadcast Transaction</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="text-success m10t oh"
|
||||
ng-show="txBroadcasted">
|
||||
<span translate>Transaction sent!</span>
|
||||
</div>
|
||||
<div class="text-center text-warning"
|
||||
ng-show="txRejected" translate>
|
||||
Transaction finally rejected
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
30
public/views/modals/walletSelection.html
Normal file
30
public/views/modals/walletSelection.html
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<nav class="tab-bar text-right hide-for-large-up">
|
||||
<span ng-click="cancel()" class="p10 text-white" translate>Close</span>
|
||||
</nav>
|
||||
<div class="modal-mobile" ng-init="setWallets()">
|
||||
|
||||
<h1 class="line-b" translate>Select a wallet to make the payment</h1>
|
||||
|
||||
<div class="m20v" ng-show="!wallets[0]" translate>Loading...</div>
|
||||
<ul class="wallet-selection wallets" ng-show="wallets[0]">
|
||||
<li ng-repeat="item in wallets track by $index" class="nav-item" ng-show="+item.balanceInfo.totalBalanceBTC > 0" ng-click="ok(item)">
|
||||
<div class="col1">
|
||||
<div class="avatar-wallet">{{item.getName() | limitTo: 1}}</div>
|
||||
</div>
|
||||
<div class="col2">
|
||||
<a class="size-12 wallet-item">
|
||||
<div class="oh">
|
||||
<div class="right size-10 type-wallet">
|
||||
[ {{item.requiredCopayers}} of {{item.totalCopayers}} ]</div>
|
||||
<div class="ellipsis name-wallet">{{item.getName()}}</div>
|
||||
</div>
|
||||
<div class="oh">
|
||||
<b class="m5r size-12">{{item.balanceInfo.totalBalance || 0}} {{item.settings.unitName}}</b>
|
||||
<span class="alt-currency size-10">{{item.balanceInfo.totalBalanceAlternative}} {{item.balanceInfo.alternativeIsoCode}}</span>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<a class="close-reveal-modal show-for-large-up" ng-click="cancel()"><i class="fi-x size-18"></i></a>
|
||||
</div>
|
||||
23
public/views/paymentUri.html
Normal file
23
public/views/paymentUri.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<div class="row m20t" ng-controller="paymentUriController as payment">
|
||||
<div class="large-12 columns" ng-init="uri = payment.checkBitcoinUri()">
|
||||
<div class="panel text-center" ng-show="!uri">
|
||||
<h1 translate>Bitcoin URI is NOT valid!</h1>
|
||||
</div>
|
||||
<div ng-show="uri">
|
||||
<div class="panel size-14">
|
||||
<div class="ellipsis"><b translate>Address</b>: {{uri.address.toString()}}</div>
|
||||
<div ng-show="uri.amount"><b translate>Amount</b>: {{uri.amount}}</div>
|
||||
<div ng-show="uri.message"><b translate>Message</b>: {{uri.message}}</div>
|
||||
</div>
|
||||
<h1 translate>Select a wallet</h1>
|
||||
<ul class="no-bullet" ng-init="wallets = payment.getWallets()">
|
||||
<li class="panel" ng-repeat="w in wallets">
|
||||
<a ng-click="payment.selectWallet(w.id)">
|
||||
<div class="ellipsis">{{w.name || w.id}}</div>
|
||||
<div class="size-12">{{w.m}} of {{w.n}}</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
55
public/views/preferences.html
Normal file
55
public/views/preferences.html
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<div class="preferences" ng-controller="preferencesController as preferences">
|
||||
|
||||
<ul class="no-bullet m0 size-14">
|
||||
<h4 class="title m0" translate>{{index.walletName}} settings</h4>
|
||||
<li class="line-b p20" ng-click="$root.go('preferencesColor')">
|
||||
<span translate>Color</span>
|
||||
<span class="right text-gray">
|
||||
<i class="icon-arrow-right3 size-24 right"></i>
|
||||
<span style="color:{{index.backgroundColor || '#1ABC9C'}}">█</span>
|
||||
</span>
|
||||
</li>
|
||||
<li class="line-b p20">
|
||||
<span translate>Encrypt Private Key</span>
|
||||
<switch id="network-name" name="encrypt" ng-model="encrypt" class="green right"></switch>
|
||||
</li>
|
||||
|
||||
|
||||
<h4 class="title m0" translate> </h4>
|
||||
<li class="line-b p20" ng-click="$root.go('backup')">
|
||||
<i class="icon-arrow-right3 size-24 right text-gray"></i>
|
||||
<span translate>Backup</span>
|
||||
</li>
|
||||
<li class="line-b p20" ng-click="$root.go('delete')">
|
||||
<i class="icon-arrow-right3 size-24 right text-gray"></i>
|
||||
<span translate>Delete</span>
|
||||
</li>
|
||||
|
||||
<h4 class="title m0" translate>Global settings</h4>
|
||||
<li class="line-b p20" ng-click="$root.go('preferencesUnit')">
|
||||
<span translate>Unit</span>
|
||||
<span class="right text-gray">
|
||||
<i class="icon-arrow-right3 size-24 right"></i>
|
||||
{{preferences.unitName}}
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<li class="line-b p20" ng-click="$root.go('preferencesAltCurrency')">
|
||||
<span translate>Alternative Currency</span>
|
||||
<span class="right text-gray">
|
||||
<i class="icon-arrow-right3 size-24 right"></i>
|
||||
{{preferences.selectedAlternative.name}}
|
||||
</span>
|
||||
</li>
|
||||
|
||||
<li class="line-b p20" ng-click="$root.go('preferencesBwsUrl')">
|
||||
<span translate>Bitcore Wallet Service</span>
|
||||
<span class="text-gray db">
|
||||
<i class="icon-arrow-right3 size-24 right"></i>
|
||||
{{preferences.bwsurl}}
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
8
public/views/preferencesAltCurrency.html
Normal file
8
public/views/preferencesAltCurrency.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<div class="preferences" ng-controller="preferencesAltCurrencyController as prefAltCurrency">
|
||||
<div ng-repeat="altCurrency in prefAltCurrency.alternativeOpts" ng-click="prefAltCurrency.save(altCurrency)" class="line-b p20 size-14">
|
||||
<span>{{altCurrency.name}}</span>
|
||||
<i class="fi-check size-16 right" ng-show="altCurrency.name == prefAltCurrency.selectedAlternative.name"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
|
||||
9
public/views/preferencesBwsUrl.html
Normal file
9
public/views/preferencesBwsUrl.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<div class="preferences m20t columns" ng-controller="preferencesBwsUrlController as prefBwsUrl">
|
||||
<form name="settingsBwsUrlForm" ng-submit="prefBwsUrl.save()" class="m20t">
|
||||
<label translate>Bitcore Wallet Service URL</label>
|
||||
<input type="text" id="bwsurl" type="text" name="bwsurl" ng-model="prefBwsUrl.bwsurl">
|
||||
<input type="submit" class="button expand black radius" value="{{'Save'|translate}}"
|
||||
style="background-color:{{index.backgroundColor}}">
|
||||
</form>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
7
public/views/preferencesColor.html
Normal file
7
public/views/preferencesColor.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<div class="preferences" ng-controller="preferencesColorController as p">
|
||||
<div ng-repeat="c in p.colorOpts" ng-click="p.save(c)" class="line-b p20 size-14">
|
||||
<span style="color:{{c}}">█</span>
|
||||
<i class="fi-check size-16 right" ng-show="p.color == c"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
17
public/views/preferencesDeleteWallet.html
Normal file
17
public/views/preferencesDeleteWallet.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<div class="m20t" ng-controller="preferencesDeleteWalletController as preferences">
|
||||
<h4 class="text-warning text-center m0" translate> Warning! </h4>
|
||||
<div class="box-notification" ng-show="preferences.error" >
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{preferences.error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="columns text-center m10t">
|
||||
<p translate class="size-12 text-gray">Permanently delete this wallet. WARNING: this action cannot be reversed.</p>
|
||||
<button class="button expand warning" ng-click="preferences.deleteWallet()">
|
||||
Delete wallet
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
7
public/views/preferencesUnit.html
Normal file
7
public/views/preferencesUnit.html
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<div class="preferences" ng-controller="preferencesUnitController as prefUnit">
|
||||
<div ng-repeat="unit in prefUnit.unitOpts" ng-click="prefUnit.save(unit)" class="line-b p20 size-14">
|
||||
<span>{{unit.shortName}}</span>
|
||||
<i class="fi-check size-16 right" ng-show="prefUnit.unitName == unit.shortName"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
124
public/views/profile.html
Normal file
124
public/views/profile.html
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
<div class="backup" ng-controller="ProfileController" ng-init="init()">
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="panel">
|
||||
<div class="row collapse">
|
||||
<div class="large-2 medium-2 columns text-center">
|
||||
<a class="photo-container profile"
|
||||
ng-click="$root.openExternalLink('https://gravatar.com/')"
|
||||
ng-init="isHover=0"
|
||||
ng-mouseenter="isHover=1"
|
||||
ng-mouseleave="isHover=0">
|
||||
<img ng-show="!isHover" gravatar-src="'{{username}}'" gravatar-size="80">
|
||||
<img ng-show="isHover" src="img/change-avatar.png" with="80">
|
||||
</a>
|
||||
</div>
|
||||
<div class="large-10 medium-10 columns">
|
||||
<h2>
|
||||
<span translate>Profile</span>
|
||||
<span class="size-12 text-warning" ng-if="$root.iden.backupNeeded">
|
||||
[ <span translate>Needs Backup</span> ]
|
||||
</span>
|
||||
</h2>
|
||||
<span translate class="text-gray">It's important to backup your profile so that you can recover it in case of disaster. The backup will include all your profile's wallets</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" ng-show="!backupProfilePlainText">
|
||||
<div class="large-12 columns">
|
||||
<button class="primary expand" ng-click="downloadProfileBackup()" ng-disabled="loading"
|
||||
ng-show="!isSafari && !isCordova"><i class="fi-download"></i>
|
||||
<span translate>Download backup</span></button>
|
||||
<button class="primary expand" ng-click="viewProfileBackup()" ng-disabled="loading"
|
||||
ng-show="isSafari && !isCordova"><i class="fi-eye"></i>
|
||||
<span translate>View backup</span></button>
|
||||
<div ng-show="isCordova">
|
||||
<h4 translate>Backup options</h4>
|
||||
<button class="primary expand"
|
||||
ng-click="copyProfileBackup()"><i class="fi-clipboard-pencil"></i>
|
||||
<span translate>Copy to clipboard</span></button>
|
||||
<button class="primary expand"
|
||||
ng-click="sendProfileBackup()"><i class="fi-mail"></i>
|
||||
<span translate>Send by email</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m20b" ng-show="backupProfilePlainText">
|
||||
<div class="large-12 columns">
|
||||
<h3 translate>Copy backup in a safe place</h3>
|
||||
<div class="input">
|
||||
<textarea class="show-for-large-up" readonly rows="5">{{backupProfilePlainText}}</textarea>
|
||||
<textarea class="hide-for-large-up" rows="5">{{backupProfilePlainText}}</textarea>
|
||||
</div>
|
||||
<div class="size-12 text-gray text-right">
|
||||
<i class="icon-compose"></i>
|
||||
<span translate>Copy this text as it is in a safe place (notepad or email)</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="$root.quotaPerItem">
|
||||
<div class="line-dashed-h m20b"></div>
|
||||
|
||||
<div class="row size-12 m20b">
|
||||
<div class="large-12 columns">
|
||||
<div ng-if="perItem" translate>
|
||||
Your current server usage quotas are: <b>{{perItem}}kB</b> per wallet and up to <b>{{nrWallets}}</b> wallets.
|
||||
</div>
|
||||
<div ng-if="$root.needsEmailConfirmation" class="m10t">
|
||||
<i class="fi-alert"></i>
|
||||
<span translate>Confirm your email address to increase storage usage limits.</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="line-dashed-h m20b"></div>
|
||||
|
||||
<div class="row oh m20b">
|
||||
<div class="large-12 columns">
|
||||
<a class="button outline light-gray tiny" ng-click="hideAdv=!hideAdv">
|
||||
<i class="fi-widget m3r"></i>
|
||||
<span translate ng-hide="!hideAdv">Show</span>
|
||||
<span translate ng-hide="hideAdv">Hide</span>
|
||||
<span translate>advanced options</span>
|
||||
<i ng-if="hideAdv" class="icon-arrow-down4"></i>
|
||||
<i ng-if="!hideAdv" class="icon-arrow-up4"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-hide="hideAdv" class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="panel">
|
||||
<h2><i class="fi-minus-circle m10r"></i>
|
||||
<span translate>Delete Profile</span>
|
||||
</h2>
|
||||
<p translate class="text-gray">Permanently delete this profile and all its wallets. WARNING: this action cannot be reversed.</p>
|
||||
<div ng-show="!confirmDelete">
|
||||
<a translate class="button warning m0" ng-click="confirmDelete=!confirmDelete">Delete Profile
|
||||
</a>
|
||||
</div>
|
||||
<div class="text-center" ng-show="confirmDelete">
|
||||
<h2 translate>Are you sure you want to delete this profile?</h2>
|
||||
<div class="row">
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="gray" ng-disabled="loading"
|
||||
ng-click="confirmDelete=!confirmDelete" translate>Cancel</button>
|
||||
</div>
|
||||
<div class="large-6 medium-6 small-6 columns">
|
||||
<button class="warning" ng-disabled="loading" ng-click="deleteProfile()">
|
||||
<i class="fi-trash"></i> <span translate>Delete</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
71
public/views/receive.html
Normal file
71
public/views/receive.html
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
<div class="receive" ng-controller="receiveController as receive" ng-init="receive.getAddress()">
|
||||
|
||||
<div ng-show="index.needsBackup && !receive.skipBackup" class="p60t row text-center">
|
||||
<div class="text-warning text-bold m15b">
|
||||
<i class="fi-alert"></i>
|
||||
<span translate>
|
||||
WARNING: Backup needed
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-gray m15h" translate>
|
||||
Before receiving funds, it is highly recommended you backup your wallet keys.
|
||||
</div>
|
||||
|
||||
<div class="small-6 columns m20t">
|
||||
<span class="button expand outline dark-gray tiny"
|
||||
ng-click="receive.skipBackup = true">
|
||||
<span translate>SKIP BACKUP</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="small-6 columns m20t">
|
||||
<span class="button black expand radius tiny"
|
||||
ng-click="$root.go('backup')" style="background-color:{{index.backgroundColor}}" >
|
||||
<span translate>Backup now</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-show="!index.needsBackup || receive.skipBackup">
|
||||
<div class="row" ng-show="receive.generatingAddress">
|
||||
<div class="large-12 columns">
|
||||
<div class="oh text-center">
|
||||
<span class="text-gray" translate>Generating a new address...</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="!receive.generatingAddress">
|
||||
<div class="row" ng-show="receive.addr">
|
||||
<!-- Address-->
|
||||
<div class="large-12 columns">
|
||||
<h2 class="text-center m10t" translate>My Bitcoin address:</h2>
|
||||
<div class="text-center" ng-click="receive.copyAddress(receive.addr)">
|
||||
<qrcode size="220" data="bitcoin:{{receive.addr}}"></qrcode>
|
||||
<div class="m10t">
|
||||
<h4 ng-class="{'enable_text_select': !index.isCordova}" class="size-12">{{receive.addr}}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="m10t text-center" ng-show="index.isCordova">
|
||||
<span class="button outline dark-gray tiny"
|
||||
ng-click="receive.shareAddress(receive.addr)">
|
||||
<i class="fi-share"></i>
|
||||
<span translate>Share address</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="line-t size-12" translate>
|
||||
Share this with anyone to have them send you payments. To protect your privacy, new addresses are generated automatically once you use them.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m20t" ng-show="receive.addr && !index.isOffLine && !index.clientError">
|
||||
<div class="large-12 columns">
|
||||
<a class="button black expand radius" ng-click="receive.newAddress()" style="background-color:{{index.backgroundColor}}" translate>
|
||||
Generate new address
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
165
public/views/send.html
Normal file
165
public/views/send.html
Normal file
|
|
@ -0,0 +1,165 @@
|
|||
<div class="send" ng-controller="sendController as send" ng-init="send.init()" ng-show="!index.isOffLine">
|
||||
<div ng-show="index.lockedBalance">
|
||||
<h4 class="title m0">
|
||||
<div class="left">
|
||||
<i class="fi-info size-36 m10r lh"></i>
|
||||
</div>
|
||||
<div class="size-12">
|
||||
<span class="db text-bold">
|
||||
<span translate>Available Balance</span>:
|
||||
{{index.availableBalanceStr }}
|
||||
</span>
|
||||
<span class="text-gray">
|
||||
{{index.lockedBalanceStr}}
|
||||
<span translate>in pending transactions</span>
|
||||
</span>
|
||||
</div>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="row m20t">
|
||||
<div class="large-12 large-centered columns">
|
||||
<div class="box-notification" ng-show="send.fetchingURL">
|
||||
<div class="box-icon secondary">
|
||||
<i class="fi-bitcoin-circle size-24"></i>
|
||||
</div>
|
||||
<span class="text-secondary size-14" translate>
|
||||
Fetching Payment Information...
|
||||
</span>
|
||||
</div>
|
||||
<form ng-show="!send.fetchingURL" name="sendForm" ng-submit="send.submitForm(sendForm)" ng-disabled="send.blockUx" novalidate>
|
||||
<div class="box-notification" ng-show="send.error && !send.hideForWP ">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{send.error|translate}}
|
||||
</span>
|
||||
<a class="close-notification text-warning" ng-click="send.resetForm(sendForm)">×</a>
|
||||
</div>
|
||||
<div class="box-notification" ng-show="success">
|
||||
<div class="box-icon success">
|
||||
<i class="fi-check size-24"></i>
|
||||
</div>
|
||||
<span class="text-success size-14">
|
||||
{{success|translate}}
|
||||
</span>
|
||||
<a class="close-notification text-success" ng-click="success=null">×</a>
|
||||
</div>
|
||||
|
||||
<div ng-hide="send._paypro || send.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">
|
||||
<span class="icon-input">
|
||||
<i class="fi-x"></i>
|
||||
</span>
|
||||
<span translate>Not valid</span>
|
||||
</span>
|
||||
<small class="icon-input right" ng-show="!sendForm.address.$invalid">
|
||||
<i class="fi-check"></i>
|
||||
</small>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<input type="text" id="address" name="address" ng-disabled="send.blockUx || send.lockAddress" placeholder="{{'Bitcoin address'|translate}}" ng-model="_address" valid-address required ng-focus="send.formFocus('address')" ng-blur="send.formFocus(false)">
|
||||
<!--
|
||||
<a class="postfix" ng-click="openAddressBook()"><i class="fi-address-book size-24"></i></a>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="send._paypro && !send.hideAddress">
|
||||
<div class="row collapse" ng-click="send.openPPModal(send._paypro)">
|
||||
|
||||
<label for="domain">
|
||||
<span translate>Payment to</span>
|
||||
</label>
|
||||
|
||||
<div class="input block">
|
||||
<input class="p45li" type="text" id="domain" name="domain" ng-model="send._paypro.domain" ng-disabled="1">
|
||||
<i ng-show="send._paypro.verified" class="fi-lock color-greeni"></i>
|
||||
<i ng-show="!send._paypro.verified" class="fi-unlock color-yellowi"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" ng-init="showAlternative = false" ng-hide="send.hideAmount">
|
||||
<div class="large-12 medium-12 columns">
|
||||
<div class="m5b right" ng-hide="sendForm.amount.$pristine">
|
||||
<span class="has-error right size-12" ng-show="sendForm.amount.$invalid">
|
||||
<span class="icon-input"><i class="fi-x"></i></span>
|
||||
<span translate>Not valid</span>
|
||||
</span>
|
||||
<small class="icon-input right" ng-show="!sendForm.amount.$invalid">
|
||||
<i class="fi-check"></i>
|
||||
</small>
|
||||
</div>
|
||||
<div ng-show="!showAlternative">
|
||||
<label for="amount">
|
||||
<span translate>Amount</span>
|
||||
</label>
|
||||
|
||||
<div class="input">
|
||||
<input type="number" id="amount" ng-disabled="send.blockUx || send.lockAmount" name="amount" placeholder="{{'Amount'|translate}}" ng-minlength="0.00000001" ng-maxlength="10000000000" ng-model="_amount" valid-amount required autocomplete="off" ng-focus="send.formFocus('amount')" ng-blur="send.formFocus(false)">
|
||||
<a class="postfix" ng-click="showAlternative = true">{{send.unitName}}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div ng-show="showAlternative">
|
||||
<label for="alternative"><span translate>Amount in</span> {{ send.alternativeName }}
|
||||
</label>
|
||||
<div class="input">
|
||||
<input type="number" id="alternative" ng-disabled="send.blockUx || !send.isRateAvailable || send.lockAmount" name="alternative" placeholder="{{'Amount'|translate}}" ng-model="_alternative" requiredautocomplete="off" ng-focus="send.formFocus('amount')" ng-blur="send.formFocus(false)">
|
||||
<a class="postfix" ng-click="showAlternative = false"> {{ send.alternativeIsoCode }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<label for="comment"><span translate>Note</span>
|
||||
<small translate ng-hide="!sendForm.comment.$pristine">optional</small>
|
||||
<small translate class="has-error" ng-show="sendForm.comment.$invalid && !sendForm.comment.$pristine">too long!</small>
|
||||
</label>
|
||||
<div class="input">
|
||||
<textarea id="comment" ng-disabled="send.blockUx" name="comment" ng-if="index.n > 1"
|
||||
placeholder="{{'Leave a private message to your copayers'|translate}}"
|
||||
ng-maxlength="100" ng-model="_comment" ng-focus="send.formFocus('msg')"
|
||||
ng-blur="send.formFocus(false)"></textarea>
|
||||
<textarea id="comment" ng-disabled="send.blockUx" name="comment" ng-if="index.n == 1"
|
||||
placeholder="{{'Add a private comment to identify the transaction'|translate}}"
|
||||
ng-maxlength="100" ng-model="_comment" ng-focus="send.formFocus('msg')"
|
||||
ng-blur="send.formFocus(false)"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-gray text-center m10t animated infinite flash" ng-show="send.onGoingProcess" >
|
||||
<span translate>{{send.onGoingProcess}}...</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="row" ng-show="!send.onGoingProcess">
|
||||
<div class="large-6 medium-6 small-12 columns">
|
||||
<button type="submit" class="button black radius expand" ng-disabled="sendForm.$invalid || send.blockUx" style="background-color:{{index.backgroundColor}}" translate>
|
||||
Send
|
||||
</button>
|
||||
</div>
|
||||
<div class="large-4 medium-4 small-12 columns text-right">
|
||||
<a ng-click="send.resetForm(sendForm)" class="button expand warning"
|
||||
ng-show="(send._paypro || send.lockAddress) && !send.blockUx" translate>Cancel</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end of row -->
|
||||
</div>
|
||||
<div ng-if="index.isOffLine" class="m20tp text-center" translate>Checking your internet connection...</div>
|
||||
|
||||
<div class="extra-margin-bottom"></div>
|
||||
60
public/views/settings.html
Normal file
60
public/views/settings.html
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
<div class="settings row" ng-controller="settingsController as settings" ng-init="settings.init()">
|
||||
<h1 class="hide-for-small-only">{{$root.title|translate}}</h1>
|
||||
<div class="large-5 large-centered medium-7 medium-centered columns">
|
||||
<div class="logo-setup show-for-large-up" id="top">
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="100">
|
||||
<div ng-include="'views/includes/version.html'"></div>
|
||||
</div>
|
||||
<h2>Settings</h2>
|
||||
<form name="settingsForm">
|
||||
<div class="box-notification" ng-show="message">
|
||||
<div class="box-icon">
|
||||
<i class="fi-check size-24"></i>
|
||||
</div>
|
||||
<span class="text-primary size-14">
|
||||
{{message|translate}}
|
||||
</span>
|
||||
</div>
|
||||
<fieldset>
|
||||
<legend translate>Bitcore wallet service</legend>
|
||||
<div class="row collapse">
|
||||
<label class="left" for="bws">URL</label>
|
||||
<div class="has-error right size-12" ng-show="settingsForm.bws.$invalid">
|
||||
<span class="icon-input"><i class="fi-x"></i></span>
|
||||
<span translate>Not valid</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input">
|
||||
<input type="text" class="form-control" name="bws" ng-model="settings.bws" valid-url required>
|
||||
</div>
|
||||
|
||||
<small class="text-gray">
|
||||
<span translate>Bitcore wallet service is open-source software. You can run your own instances, check</span>
|
||||
<a href
|
||||
ng-click="$root.openExternalLink('https://github.com/bitpay/bitcore-wallet-service')">Github repository</a>
|
||||
</small>
|
||||
</fieldset>
|
||||
<button translate
|
||||
type="submit"
|
||||
class="button primary radius expand m0"
|
||||
ng-disabled="settingsForm.$invalid || loading" ng-click="settings.save()">
|
||||
Save
|
||||
</button>
|
||||
</form>
|
||||
<div class="box-setup-footer">
|
||||
<div class="left">
|
||||
<a class="button outline dark-gray tiny" ng-click="$root.go('signin')">
|
||||
<i class="icon-arrow-left4 size-10"></i>
|
||||
<span translate>Back</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="right">
|
||||
<a class="button outline dark-gray tiny" href="" ng-click="settings.reset()">
|
||||
<i class="fi-page-delete"></i>
|
||||
<span translate>Reset settings</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
132
public/views/signin.html
Normal file
132
public/views/signin.html
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
<div class="signin" ng-controller="signinController as signin" ng-init="signin.init()">
|
||||
|
||||
|
||||
<div ng-if="askForPin || ($root.hasPin && !$root.iden)">
|
||||
<div ng-include="'views/includes/pin-number.html'"></div>
|
||||
</div>
|
||||
|
||||
<div ng-show="$root.starting">
|
||||
<div ng-include="'views/includes/loading.html'" ng-init="title = 'Accessing your profile'"></div>
|
||||
</div>
|
||||
|
||||
<div class="row" ng-show="signin.showDisclaimer">
|
||||
<div class="large-8 medium-10 small-12 large-centered medium-centered columns">
|
||||
<h1 class="text-white text-center" translate>Disclaimer</h1>
|
||||
<p class="text-white" translate>
|
||||
The software you are about to use is free, open source, and unsupported beta software. It is important to understand
|
||||
that beta software refers to software that is undergoing testing and has not officially been released, could have
|
||||
bugs, and may not act in a reliable fashion. Because the software is currently in beta, it is possible but not certain
|
||||
that you may lose bitcoin or the value of your bitcoin. It is recommended that you store only nominal amounts of
|
||||
bitcoins. You acknowledge that your use of this software is at your own discretion and in compliance with all
|
||||
applicable laws. You are responsible for safekeeping your login IDs, passwords, private key pairs, PINs and any other
|
||||
codes you use to access the software. IF YOU HAVE NOT SEPARATELY STORED A BACKUP OF ANY WALLET ADDRESSES AND PRIVATE
|
||||
KEY PAIRS MAINTAINED IN YOUR ACCOUNT, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOINS YOU HAVE ASSOCIATED WITH SUCH WALLET
|
||||
ADDRESSES WILL BECOME INACCESSIBLE IF YOU DO NOT HAVE YOUR ACCOUNT PASSWORD AND/OR PIN. All transaction requests are
|
||||
irreversible. The authors of the software, employees and affiliates of Bitpay, copyright holders, and BitPay, Inc.
|
||||
cannot retrieve your private keys or passwords if you lose or forget them and cannot guarantee transaction
|
||||
confirmation as they do not have control over the Bitcoin network. You agree to provide accurate and complete
|
||||
information in connection with your use of the account. You assume any and all risk associated with the use of the
|
||||
software. To the fullest extent permitted by law, this software is provided “as is” and no representations or
|
||||
warranties can be made of any kind, express or implied, including but not limited to the warranties of
|
||||
merchantability, fitness or a particular purpose and noninfringement. In no event shall the authors of the software,
|
||||
employees and affiliates of Bitpay, copyright holders, or BitPay, Inc. be held liable for any claim, damages or other
|
||||
liability, whether in an action of contract, tort, or otherwise, arising from, out of or in connection with the
|
||||
software or the use or other dealings in the software. We reserve the right to modify this disclaimer from time to
|
||||
time.
|
||||
</p>
|
||||
<button class="success expand" ng-click="signin.agreeDisclaimer()">
|
||||
{{'I read and agree with these terms'|translate}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="large-5 large-centered medium-7 medium-centered columns" ng-show="!$root.starting && !signin.showDisclaimer">
|
||||
|
||||
<div class="logo-setup" ng-show="!$root.iden && !signin.hideForWP && !$root.hasPin">
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="100">
|
||||
<div ng-include="'views/includes/version.html'"></div>
|
||||
</div>
|
||||
|
||||
<div ng-if='askForPin || ($root.hasPin && !$root.iden)'>
|
||||
<h2 ng-show="$root.hasPin && !$root.iden" translate>Enter PIN</h2>
|
||||
<h2 ng-show="signin.askForPin && signin.askForPin !=2" translate>Set up a PIN</h2>
|
||||
<h2 ng-show="signin.askForPin == 2" translate>Repeat PIN</h2>
|
||||
<div class="box-notification" ng-show="signin.error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{signin.error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
<div ng-include="'views/includes/pin.html'"></div>
|
||||
</div>
|
||||
|
||||
<div ng-if='!$root.hasPin && !signin.askForPin && !$root.iden'>
|
||||
<h2 translate>Signin</h2>
|
||||
<div class="p10 bg-success m20b text-white" ng-show="signin.pendingPayment">
|
||||
<div class="left">
|
||||
<i class="size-36 m10r"></i>
|
||||
</div>
|
||||
<div class="size-14" translate>
|
||||
Please sign in to make the payment
|
||||
</div>
|
||||
</div>
|
||||
<form name="loginForm" ng-submit="signin.openWithCredentials(loginForm)" novalidate>
|
||||
<div class="box-notification" ng-show="error">
|
||||
<div class="box-icon error">
|
||||
<i class="fi-x size-24"></i>
|
||||
</div>
|
||||
<span class="text-warning size-14">
|
||||
{{error|translate}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="input">
|
||||
<input type="text" ng-model="email" class="form-control" name="email" placeholder="{{'Username'|translate}}"
|
||||
required show-focus="!isMobile" ng-focus="formFocus()">
|
||||
<i class="icon-person"></i>
|
||||
</div>
|
||||
<div class="input">
|
||||
<input type="password" ng-model="password" class="form-control" name="password"
|
||||
placeholder="{{'Password'|translate}}" required ng-focus="formFocus()">
|
||||
<i class="icon-locked"></i>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<button type="submit" class="button primary radius expand m0"
|
||||
ng-disabled="loginForm.$invalid">
|
||||
{{'Sign in'|translate}}
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<div class="box-setup-footer">
|
||||
|
||||
<div class="right">
|
||||
<a class="button outline dark-gray tiny" ng-click="$root.go('settings')">
|
||||
<i class="icon-wrench show-for-large-up size-14"></i>
|
||||
<span translate>Settings</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="left m10r">
|
||||
<a class="button outline dark-gray tiny" ng-click="$root.go('createProfile')">
|
||||
<i class="icon-person show-for-large-up size-14"></i>
|
||||
<span translate>Create profile</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="left">
|
||||
<a class="button outline dark-gray tiny" ng-click="$root.go('importProfile')">
|
||||
<i class="icon-upload show-for-large-up size-14"></i>
|
||||
<span translate>Import</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
17
public/views/splash/1.html
Normal file
17
public/views/splash/1.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<div class="panel text-center m15 splash">
|
||||
<div class="row">
|
||||
<div class="medium-6 large-4 medium-centered small-centered large-centered columns">
|
||||
<div class="m50b p20">
|
||||
<h4 class="text-bold size-14" translate>WELCOME TO</h4>
|
||||
<img src="img/logo.svg" alt="tour1" width="100">
|
||||
</div>
|
||||
<div class="line-b"></div>
|
||||
<span class="text-gray size-14 db m10b m10t" translate>
|
||||
* In case you need to import wallets from previous Copay versions go to <b>Menu</b>
|
||||
</span>
|
||||
<div class="line-b m20b"></div>
|
||||
</div>
|
||||
</div>
|
||||
<button ng-click="$root.go('createProfile')" class="button black expand radius " translate> START </button>
|
||||
</div>
|
||||
|
||||
3
public/views/splash/2.html
Normal file
3
public/views/splash/2.html
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<div class="tour">
|
||||
<img ng-click="$root.go('splash.four')" class="m15t" src="img/tour2.png" alt="tour1" width="90%">
|
||||
</div>
|
||||
3
public/views/splash/3.html
Normal file
3
public/views/splash/3.html
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<div class="tour">
|
||||
<img ng-click="$root.go('splash.four')" class="m15t" src="img/tour3.png" alt="tour1" width="90%">
|
||||
</div>
|
||||
3
public/views/splash/4.html
Normal file
3
public/views/splash/4.html
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<div class="tour">
|
||||
<img ng-click="$root.go('walletHome')" class="m15t" src="img/tour4.png" alt="tour1" width="90%">
|
||||
</div>
|
||||
15
public/views/splash/5.html
Normal file
15
public/views/splash/5.html
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<div class="tour">
|
||||
<img ng-click="$root.go('splash.finish')" class="m15t" src="img/tour5.png" alt="tour1" width="90%">
|
||||
</div>
|
||||
<div class="row tour5">
|
||||
<div class="small-6 columns">
|
||||
<button class="button outline light-gray radius expand">
|
||||
SKIP
|
||||
</button>
|
||||
</div>
|
||||
<div class="small-6 columns">
|
||||
<button class="black radius expand">
|
||||
SET A PIN
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
14
public/views/unsupported.html
Normal file
14
public/views/unsupported.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<div class="wide-page" ng-controller="unsupportedController">
|
||||
<div class="text-center">
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="146" height="59">
|
||||
<div class="text-white" ng-include="'views/includes/version.html'"></div>
|
||||
</div>
|
||||
<h1 translate class="text-center text-white">Browser unsupported</h1>
|
||||
<h3 class="text-center text-white">
|
||||
Copay does not support your browser.
|
||||
Please use a current version of Google Chrome, Mozilla Firefox, Internet Explorer, Safari, or Opera.
|
||||
<br>
|
||||
Note that localStorage should also be enabled (enabled by default in most cases).
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
114
public/views/walletHome.html
Normal file
114
public/views/walletHome.html
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
<div class="home-wallet" ng-controller="walletHomeController as home" ng-init="home.init()">
|
||||
<div class="row" ng-show="!index.noFocusedWallet">
|
||||
<div class="amount" style="background-color:{{index.backgroundColor}}">
|
||||
<div class="size-36">
|
||||
<strong>
|
||||
<span ng-show="!index.hideBalance">
|
||||
<span ng-class="{'animated pulse':!index.hideBalance}">{{index.totalBalanceStr || '...'}}</span>
|
||||
</span>
|
||||
<span ng-show="index.hideBalance">...</span>
|
||||
</strong>
|
||||
</div>
|
||||
<div class="size-14" ng-show="!index.hideBalance">
|
||||
<span ng-if="index.alternativeBalanceAvailable" ng-class="{'animated fadeIn':!index.hideBalance}">{{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}</span>
|
||||
<span ng-if="!index.alternativeBalanceAvailable">N/A</span>
|
||||
</div>
|
||||
<div class="size-14" ng-show="index.hideBalance">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="pr columns line-b">
|
||||
<div class="avatar-wallet left" style="background-color:{{index.backgroundColor}}">{{index.walletName | limitTo: 1}}</div>
|
||||
<div class="right">
|
||||
<a ng-click="$root.go('preferences')" class="button outline light-gray tiny m0">
|
||||
<i class="fi-widget size-18 vm"></i>
|
||||
<span class="show-for-medium-up" translate>Preferences</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="wallet-info" ng-click="openCopayersModal(index.copayers, index.copayerId)">
|
||||
<p class="m0">
|
||||
{{index.m}} <span translate>of</span> {{index.n}}
|
||||
</p>
|
||||
<div class="size-12 text-gray">
|
||||
<span ng-if="index.n > 1" translate>Multisignature wallet </span>
|
||||
<span ng-if="index.n == 1" translate>Personal Wallet</span>
|
||||
<span ng-if="index.network != 'livenet'" translate> - Testnet</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div ng-show="index.notAuthorized">
|
||||
<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 dark-gray tiny"
|
||||
ng-click="index.recreate()"
|
||||
<span translate>Recreate</span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div ng-show="index.requiresMultipleSignatures && index.txps[0]">
|
||||
<h4 class="title m0" translate>Spend proposals</h4>
|
||||
<div class="last-transactions pr" ng-repeat="tx in index.txps | orderBy:'-createdTs'"
|
||||
ng-include="'views/includes/transaction.html'">
|
||||
</div>
|
||||
|
||||
<div class="text-gray text-center size-12 p10t"
|
||||
ng-show="index.lockedBalance && !index.updatingStatus">
|
||||
<span translate>Total Locked Balance</span>:
|
||||
<b>{{index.lockedBalance}} {{index.unitName}} </b>
|
||||
<span> {{index.lockedBalanceAlternative}}
|
||||
{{index.alternativeIsoCode}} </span>
|
||||
</div>
|
||||
|
||||
<div class="pr" ng-if="!index.txps[0]">
|
||||
<p translate>No pending spend proposals at the moment.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!index.requiresMultipleSignatures && index.txps[0]">
|
||||
<div class="row">
|
||||
<div class="large-12 columns">
|
||||
<div class="panel oh">
|
||||
<h2 class="line-b" translate>Unsent transactions</h2>
|
||||
<div class="last-transactions pr" ng-repeat="tx in index.txps"
|
||||
ng-include="'views/includes/transaction.html'">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row columns m20tp" ng-show="index.noFocusedWallet">
|
||||
<div class="text-center text-warning m20b">
|
||||
<i class="fi-alert"></i> <span translate>You do not have any wallet</span>
|
||||
</div>
|
||||
<button class="button black expand" ng-click="$root.go('add')" translate>Create</button>
|
||||
</div>
|
||||
|
||||
<div class="text-gray text-center m10t animated infinite flash" ng-show="index.anyOnGoingProcess" >
|
||||
<span translate ng-show="index.onGoingProcessName == 'openingWallet'">Opening Wallet...</span>
|
||||
<span translate ng-show="index.onGoingProcessName == 'updatingStatus'">Updating Status...</span>
|
||||
<span translate ng-show="index.onGoingProcessName == 'updatingBalance'">Updating Balance...</span>
|
||||
<span translate ng-show="index.onGoingProcessName == 'updatingPendingTxps'">Updating Pending Transactions...</span>
|
||||
<span translate ng-show="index.onGoingProcessName == 'scanning'">Scanning Wallet funds...</span>
|
||||
<span translate ng-show="index.onGoingProcessName == 'recreating'">Recreating Wallet on BWS...</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="extra-margin-bottom"></div>
|
||||
|
||||
26
public/views/warning.html
Normal file
26
public/views/warning.html
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<div class="wide-page" ng-controller="WarningController"
|
||||
ng-init="checkLock()">
|
||||
<div class="text-center">
|
||||
<img src="img/logo-negative-beta.svg" alt="Copay" width="146" height="59">
|
||||
<div class="text-white" ng-include="'views/includes/version.html'"></div>
|
||||
</div>
|
||||
<h1 translate class="text-center text-warning">Warning!</h1>
|
||||
<h3 class="text-center text-white">
|
||||
<span translate>This wallet appears to be currently open.</span>
|
||||
<br>
|
||||
<span translate>Opening the wallet in multiple browser tabs could lead to unexpected results</span>
|
||||
</h3>
|
||||
<div class="text-center m30v large-12 columns">
|
||||
<div class="row">
|
||||
<div class="large-12 columns medium-12 small-12 text-center">
|
||||
<a href class="button sucess" ng-click="signout()">« <span translate>Back</span></a>
|
||||
<br>
|
||||
<br>
|
||||
<a translate href ng-click="ignoreLock()">Continue anyways</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center text-gray small cb">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue