This commit is contained in:
Matias Alejo Garcia 2015-03-06 12:00:10 -03:00
commit 320de62f13
348 changed files with 7745 additions and 30874 deletions

32
public/views/add.html Normal file
View 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
View 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>

View 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
View 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>

View 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 dont have an internet connection active. Copay needs connection to create a wallet</p>
</div>
</div>
</div>
<!-- <div ng&#45;if="!index.isOffLine &#38;&#38; !cp.creatingProfile" ng&#45;include="'views/includes/pin.html'" ng&#45;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>

View file

@ -0,0 +1,2 @@
<div class="settings" ng-controller="DevLoginController">
</div>

View 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
View 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
View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View file

@ -0,0 +1 @@
<span class="photo-container"><i class="fi-torso size-42"></i></span>

View 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>

View 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>

View 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>

View 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>

View 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
View 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">&nbsp;</i></a>
</div>
<div ng-show="showScanner">
<a class="postfix button warning" ng-click="cancelScanner()"><i class="fi-x">&nbsp;</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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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'}}">&block;</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>&nbsp;</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>

View 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>

View 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>

View 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}}">&block;</span>
<i class="fi-check size-16 right" ng-show="p.color == c"></i>
</div>
</div>
<div class="extra-margin-bottom"></div>

View 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>

View 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
View 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
View 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
View 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)">&#215;</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">&#215;</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>

View 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
View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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">
&nbsp;
</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
View 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()">&laquo; <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>