copay/index.html

771 lines
38 KiB
HTML
Raw Normal View History

2014-03-19 09:17:18 -07:00
<!doctype html>
2014-05-14 07:27:18 -07:00
<html lang="en" ng-csp>
2014-03-14 13:38:27 -07:00
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width">
<title>Copay - Multisignature Wallet</title>
<link rel="stylesheet" href="css/foundation.min.css">
2014-03-28 12:39:58 -07:00
<link rel="stylesheet" href="css/foundation-icons.css">
2014-05-14 07:27:18 -07:00
<link rel="stylesheet" href="lib/angular/angular-csp.css">
2014-03-14 13:38:27 -07:00
<link rel="stylesheet" href="css/main.css">
2014-05-16 06:39:46 -07:00
<link rel="shortcut icon" href="img/favicon.ico">
2014-03-14 13:38:27 -07:00
</head>
2014-04-25 07:50:53 -07:00
<body ng-cloak class="ng-cloak">
2014-04-25 13:22:51 -07:00
<div id="wrap">
<div data-ng-init="init()" data-ng-controller="HeaderController">
<div class="header">
<div class="header-content">
2014-05-26 12:37:56 -07:00
<div class="large-3 medium-3 small-3 columns">
2014-04-29 07:56:37 -07:00
<span class="logo"></span>
2014-04-25 13:22:51 -07:00
</div>
2014-05-26 12:37:56 -07:00
<div class="large-9 medium-9 small-9 columns text-center p10t" ng-show="$root.wallet">
2014-05-01 08:01:15 -07:00
<div class="large-4 medium-4 columns line-dashed-v">
2014-04-29 15:31:59 -07:00
<a href="#/addresses" class="has-tip" tooltip-placement="bottom" tooltip="{{$root.wallet.id}}">
<strong><span>{{$root.wallet.getName()}}</span></strong>
2014-04-29 10:24:26 -07:00
</a>
2014-04-30 15:50:13 -07:00
<a class="button radius small-icon" title="Manual Refresh"
ng-disabled="$root.loading"
ng-click="refresh()"><i class="fi-refresh"></i></a>
<a class="button radius small-icon" title="Signout"
ng-click="signout()"><i class="fi-power"></i></a>
2014-04-29 10:24:26 -07:00
</div>
<div class="large-4 medium-4 columns line-dashed-v">
2014-05-08 13:23:12 -07:00
Balance:
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
<span ng-if="!$root.updatingBalance">{{totalBalance || 0}}
<i class="fi-bitcoin"></i>
</span>
2014-04-29 07:56:37 -07:00
</div>
2014-04-29 10:24:26 -07:00
<div class="large-4 medium-4 columns">
2014-05-08 13:23:12 -07:00
Available to Spend:
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
<span ng-if="!$root.updatingBalance">{{availableBalance || 0}}
<i class="fi-bitcoin"></i>
</span>
2014-04-29 07:56:37 -07:00
</div>
2014-05-12 08:00:25 -07:00
</div>
2014-03-28 08:32:29 -07:00
</div>
2014-04-25 13:22:51 -07:00
<nav class="top-bar" data-topbar ng-show="$root.wallet">
<ul class="title-area">
<li class="name"></li>
<li class="toggle-topbar menu-icon">
2014-05-26 12:37:56 -07:00
<a ng-click="isCollapsed=!isCollapsed"></a>
2014-04-15 10:02:45 -07:00
</li>
2014-03-28 08:32:29 -07:00
</ul>
2014-04-25 13:22:51 -07:00
<section class="top-bar-section {{isCollapsed && 'hide_menu' || 'show_menu'}}">
<ul>
2014-04-29 15:26:12 -07:00
<li data-ng-repeat="item in menu" ui-route="/{{item.link}}" class="text-center" data-ng-class="{active: isActive(item)}">
<a href="{{item.link}}"> <i class="{{item.icon}}"></i> {{item.title}}
2014-05-13 07:27:31 -07:00
<span class="label alert round" ng-if="item.link=='#/transactions' && $root.pendingTxCount > 0">{{$root.pendingTxCount}}</span>
</a>
2014-04-25 13:22:51 -07:00
</li>
</ul>
</section>
</nav>
</div>
2014-04-09 07:05:25 -07:00
2014-05-20 08:30:20 -07:00
<div class="row" ng-if='$root.$flashMessage.message' notification>
2014-04-25 13:22:51 -07:00
<div class="small-8 large-centered columns">
2014-05-20 08:30:20 -07:00
<div data-alert class="alert-box radius {{$root.$flashMessage.type}}">
{{$root.$flashMessage.message}}
2014-04-25 13:22:51 -07:00
<a ng-click="clearFlashMessage()" class="close">&times;</a>
</div>
</div>
</div>
2014-04-23 09:44:20 -07:00
2014-04-25 13:22:51 -07:00
<div class="row">
2014-05-08 11:45:57 -07:00
<div ng-if='$root.wallet && !$root.wallet.publicKeyRing.isComplete() && !loading'>
<div class="alert-box secondary radius" data-alert>
<i class="fi-info"></i>
Not all copayers have joined your wallet yet.
2014-05-09 08:29:00 -07:00
<span ng-show="$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers()>1">
{{$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers() }} people have
2014-05-09 08:29:00 -07:00
</span>
<span ng-show="$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers()==1">
One person has
2014-05-09 08:29:00 -07:00
</span>
yet to join.
2014-05-08 11:45:57 -07:00
</div>
2014-04-25 13:22:51 -07:00
2014-05-08 11:45:57 -07:00
<div class="panel radius">
<h3 class="m15b">Share this secret with your other copayers
<small> for them to join your wallet</small>
</h3>
<div class="row">
2014-05-09 08:29:00 -07:00
<div class="large-9 medium-12 small-12 columns line-dashed-v text-gray">
<div class="panel input">
2014-05-08 11:45:57 -07:00
<p class="text-gray">{{$root.wallet.getSecret()}}</p>
</div>
</div>
2014-05-09 08:29:00 -07:00
<div class="large-3 columns hide-for-medium hide-for-small" ng-show="$root.wallet">
<h5 class="m0">{{$root.wallet.getName()}}</h5>
2014-05-08 11:45:57 -07:00
<p class="text-gray">{{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}} wallet</p>
</div>
2014-04-25 13:22:51 -07:00
</div>
2014-05-08 11:45:57 -07:00
</div>
2014-04-25 13:22:51 -07:00
</div>
2014-04-17 14:11:42 -07:00
</div>
2014-04-17 09:43:34 -07:00
2014-04-25 13:22:51 -07:00
</div>
2014-04-17 09:43:34 -07:00
2014-05-14 22:13:25 -07:00
<div notifications="middle right"></div>
2014-05-07 12:08:24 -07:00
<div id="main" class="row" ng-class="{'main-home': !$root.wallet}">
2014-04-25 13:22:51 -07:00
<div class="large-12 columns" ng-view></div>
</div>
2014-04-09 07:05:25 -07:00
</div>
2014-05-07 12:08:24 -07:00
<div id="footer" data-ng-controller="FooterController" ng-class="{'footer-home': !$root.wallet}">
2014-04-29 07:56:37 -07:00
<link rel="stylesheet" ng-href="{{theme}}">
2014-05-07 12:08:24 -07:00
<div class="row" ng-show="!$root.wallet">
<div class="large-12 columns text-right">
Copay
2014-05-14 17:02:01 -07:00
<small>v{{version}}</small>
2014-05-07 12:08:24 -07:00
</div>
</div>
2014-05-13 10:55:26 -07:00
<div class="row p10t" ng-show="$root.wallet">
2014-05-26 12:37:56 -07:00
<div class="large-3 medium-3 hide-for-small columns">
2014-05-01 08:01:15 -07:00
<div>
<strong>{{$root.wallet.getName()}}</strong>
2014-05-01 08:01:15 -07:00
</div>
<div class="size-12 m10t">
2014-04-29 15:12:14 -07:00
{{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}} wallet
2014-05-01 08:01:15 -07:00
</div>
<div class="size-12 m10t" ng-if="themes.length > 1">
<a class="size-12" ng-click="change_theme(th)" ng-repeat="th in themes">{{th}} {{$last ? '' : '&middot; '}}</a>
</div>
2014-04-29 15:12:14 -07:00
</div>
2014-05-07 11:16:56 -07:00
<div class="large-9 medium-9 small-9 columns">
2014-05-13 10:55:26 -07:00
<a href="#/addresses" > </a>
<div class="bottom-copay"
ng-repeat="c in $root.wallet.getRegisteredPeerIds()" class="has-tip" tooltip-popup-delay="1000" tooltip-placement="top" tooltip="{{c.nick}}">
2014-05-08 11:48:00 -07:00
<video ng-if="$root.videoInfo[c.peerId]"
avatar peer="{{c}}"
2014-05-07 15:04:36 -07:00
autoplay
2014-05-08 12:31:08 -07:00
ng-class="($root.wallet.getOnlinePeerIDs().indexOf(c.peerId) != -1) ? 'online' : 'offline'"
ng-src="{{getVideoURL(c.peerId)}}"
2014-05-08 11:48:00 -07:00
></video>
2014-05-07 15:04:36 -07:00
<img ng-if="!$root.videoInfo[c.peerId]"
2014-05-08 11:48:00 -07:00
avatar peer="{{c}}"
2014-05-08 12:31:08 -07:00
ng-class="($root.wallet.getOnlinePeerIDs().indexOf(c.peerId) != -1) ? 'online' : 'offline'"
2014-05-01 08:01:15 -07:00
src="./img/satoshi.gif"
2014-05-08 11:48:00 -07:00
/>
2014-05-01 08:01:15 -07:00
</div>
2014-04-29 15:12:14 -07:00
</div>
2014-04-29 07:56:37 -07:00
</div>
2014-03-26 05:18:42 -07:00
</div>
2014-03-19 09:17:18 -07:00
<!-- Templates -->
<script type="text/ng-template" id="signin.html">
<div class="signin" ng-controller="SigninController">
<div data-alert class="alert-box info radius" ng-show="loading && !failure">
2014-05-07 14:48:56 -07:00
<i class="size-21 fi-bitcoin-circle icon-rotate spinner"></i>
Authenticating and Looking for peers...
</div>
<div class="alert-box error radius" ng-show="failure">
Oops, we had an error! Looks like you are already connected to this wallet,
please close all other Copay Wallets and <a ng-click='failure = false; loading = false'>Try again</a>.
</div>
<div ng-show="!loading">
2014-04-30 12:11:55 -07:00
<div class="row">
<div class="large-6 medium-6 columns">
2014-05-09 08:29:00 -07:00
<div class="box-signin radius">
2014-05-01 07:51:35 -07:00
<div ng-show="wallets.length">
<h3>Open Wallet</h3>
<form name="openForm" ng-submit="open(openForm)" novalidate>
<select class="form-control" ng-model="selectedWalletId" ng-options="w.id as w.show for w in wallets" required>
</select>
2014-05-09 13:13:56 -07:00
<input type="password" class="form-control" placeholder="Your password" name="openPassword" ng-model="openPassword" required>
<button type="submit" class="button secondary radius" ng-disabled="openForm.$invalid || loading" loading="Opening">Open</button>
</form>
2014-05-01 07:51:35 -07:00
</div>
<div ng-show="!wallets.length">
<h3>Create a new wallet</h3>
<form name="createForm" ng-submit="create(createForm)" novalidate>
<input type="text" class="form-control" ng-model="walletName" name="walletName" placeholder="Wallet name (optional)">
2014-05-26 11:03:39 -07:00
<input type="password" class="form-control" placeholder="Choose your password" name="createPassword" ng-model="createPassword" check-strength="createPassword" required>
<button type="submit" class="button secondary radius" ng-disabled="createForm.$invalid || loading" loading="Creating">Create</button>
</form>
2014-05-01 07:51:35 -07:00
</div>
2014-04-17 08:37:10 -07:00
</div>
</div>
<div class="large-6 medium-6 columns">
2014-05-09 08:29:00 -07:00
<div class="box-signin radius">
<h3>Join a Wallet in Creation</h3>
<form name="joinForm" ng-submit="join(joinForm)" novalidate>
2014-05-14 14:24:24 -07:00
<input type="text" class="form-control" placeholder="Paste wallet secret here" name="connectionId" ng-model="connectionId" wallet-secret required>
2014-05-26 11:03:39 -07:00
<input type="password" class="form-control" placeholder="Choose your password" name="joinPassword" ng-model="joinPassword" check-strength="joinPassword" required>
<input type="text" class="form-control" placeholder="Your name (optional)" name="nickname" ng-model="nickname">
<button type="submit" class="button primary radius" ng-disabled="joinForm.$invalid || loading" loading="Joining">Join</button>
</form>
</div>
</div>
2014-04-21 09:04:47 -07:00
</div>
<div class="row">
2014-04-30 12:11:55 -07:00
<div class="large-12 columns text-center line-dashed">
2014-05-13 10:19:37 -07:00
<a href="#settings">Settings</a> &middot;
2014-04-30 12:11:55 -07:00
<span ng-show="wallets.length">
2014-05-16 13:26:47 -07:00
<a href="#setup">Create a new wallet</a> &middot;
2014-04-30 12:11:55 -07:00
</span>
2014-05-16 13:26:47 -07:00
<a href="#import">Import a backup</a>
2014-03-31 14:05:35 -07:00
</div>
</div>
2014-04-30 12:11:55 -07:00
</div> <!-- End !loading -->
</div>
</script>
2014-04-29 12:34:40 -07:00
2014-04-25 13:34:24 -07:00
<script type="text/ng-template" id="import.html">
<div ng-controller="ImportController">
2014-05-07 14:48:56 -07:00
<div data-alert class="alert-box info radius" ng-show="loading">
<i class="size-21 fi-bitcoin-circle icon-rotate spinner"></i>
Importing wallet...
</div>
2014-05-15 14:02:21 -07:00
<div ng-init="choosefile=0; pastetext=0" ng-show="!loading">
<h3>{{title}}</h3>
2014-05-05 09:16:56 -07:00
<form name="importForm" ng-submit="import(importForm)" novalidate>
2014-05-15 14:02:21 -07:00
<div class="row">
<div class="large-6 large-centered medium-6 medium-centered columns">
<fieldset>
<legend>Select which method want to use to restore</legend>
<label for="backupFile" ng-click="choosefile=!choosefile" class="m10b">&middot; Choose backup file from your computer <i class="fi-laptop"></i></label>
<input type="file" class="form-control" placeholder="Select a backup file" name="backupFile" ng-model="backupFile" ng-file-select ng-show="choosefile">
<label for="backupText" ng-click="pastetext=!pastetext" class="m10b">&middot; Paste backup plain text code <i class="fi-clipboard"></i></label>
<textarea class="form-control" name="backupText" ng-model="backupText" rows="5" ng-show="pastetext"></textarea>
</fieldset>
2014-05-05 09:16:56 -07:00
2014-05-15 14:02:21 -07:00
<div class="large-8 medium-8 columns">
<label for="password">Password <small>Required</small></label>
<input type="password" class="form-control" placeholder="Your wallet password" name="password" ng-model="password" required>
</div>
</div>
</div>
<div class="row">
<div class="large-12 columns line-dashed">
<button type="submit" class="button primary radius right" ng-disabled="importForm.$invalid" loading="Importing">
Import backup
</button>
<a class="button secondary radius" href="#signin">Go back</a>
</div>
</div>
2014-05-05 09:16:56 -07:00
</form>
</div>
2014-04-25 13:34:24 -07:00
</div>
</script>
2014-04-16 13:07:14 -07:00
<script type="text/ng-template" id="setup.html">
<div ng-controller="SetupController">
2014-04-30 10:59:20 -07:00
<div data-alert class="alert-box info radius" ng-show="loading">
2014-05-07 14:48:56 -07:00
<i class="size-21 fi-bitcoin-circle icon-rotate spinner"></i>
Creating wallet...
2014-04-16 13:07:14 -07:00
</div>
<div ng-show="!loading">
<form name="setupForm" ng-submit="create(setupForm)" novalidate>
2014-04-16 13:07:14 -07:00
<div class="row">
2014-04-30 14:47:44 -07:00
<div class="small-12 medium-8 medium-centered large-8 large-centered columns box-setup">
2014-05-01 10:32:09 -07:00
<div class="large-6 columns line-dashed-v">
<h6>Select total number of copayers</h6>
<select ng-model="totalCopayers" ng-options="totalCopayers as totalCopayers for totalCopayers in TCValues">
</select>
</div>
<div class="large-6 columns">
2014-05-08 11:48:00 -07:00
<h6>Select required signatures</h6>
2014-05-01 10:32:09 -07:00
<select ng-model="requiredCopayers" ng-options="requiredCopayers as requiredCopayers for requiredCopayers in RCValues">
</select>
</div>
2014-04-16 13:07:14 -07:00
</div>
2014-04-30 14:47:44 -07:00
</div>
<div class="row">
<div class="small-12 medium-6 medium-centered large-6 large-centered columns m30v">
<div class="box-setup-copayers">
<div class="box-setup-copayers-fix">
<img class="box-setup-copay" ng-repeat="i in getNumber(totalCopayers) track by $index" src="./img/satoshi.gif" alt="Copayer {{$index+1}}-{{totalCopayers}}" ng-class="{'box-setup-copay-required': ($index+1) <= requiredCopayers}">
</div>
</div>
</div>
<div class="small-12 medium-6 medium-centered large-6 large-centered columns m30v">
2014-05-09 13:13:56 -07:00
<h6>Your Wallet Password (you don't need to share this) <small>Required</small></h6>
2014-05-26 11:03:39 -07:00
<input type="password" class="form-control" ng-model="walletPassword" check-strength="walletPassword" required>
</div>
2014-04-30 14:47:44 -07:00
<div class="small-12 medium-6 medium-centered large-6 large-centered columns m30v">
<h6>Wallet name <small>Optional</small></h6>
<input type="text" class="form-control" ng-model="walletName">
</div>
2014-05-01 05:41:18 -07:00
<div class="large-6 large-centered columns m30v">
<h6>Your name <small>Optional</small></h6>
<input type="text" class="form-control" ng-model="myNickname">
2014-05-01 05:41:18 -07:00
</div>
2014-04-30 14:47:44 -07:00
</div>
<div class="row">
<div class="large-12 columns line-dashed">
<button type="submit" class="button primary radius right" ng-disabled="setupForm.$invalid || loading">
2014-04-16 15:45:22 -07:00
Create {{requiredCopayers}}-of-{{totalCopayers}} wallet
</button>
2014-04-30 14:47:44 -07:00
<a class="button secondary radius" href="#signin">Go back</a>
2014-04-17 08:37:10 -07:00
</div>
</div>
</form>
2014-04-16 13:07:14 -07:00
</div>
</div>
</script>
2014-05-13 10:55:26 -07:00
<!-- ADDRESS -->
<script type="text/ng-template" id="addresses.html">
2014-05-19 13:51:21 -07:00
<div class="addresses" ng-controller="AddressesController">
<div ng-show='$root.wallet.publicKeyRing.isComplete()'>
<div class="row">
<div class="large-9 medium-12 columns" ng-if="addresses[0]">
2014-05-22 13:42:56 -07:00
<div class="large-8 medium-8 columns" ng-init="showAll=0">
<a class="panel radius db" ng-repeat="addr in addresses | limitAddress:showAll"
ng-click="selectAddress(addr)"
ng-class="{selected : addr.address == selectedAddr.address}">
2014-05-22 13:42:56 -07:00
<span>{{addr.address}}</span>
<small ng-if="addr.isChange">change</small>
2014-04-30 15:50:13 -07:00
<span class="right">
<span ng-if="addrWithFund == addr.address">
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
<span ng-if="!$root.updatingBalance">
{{$root.balanceByAddr[addr.address] || 0}}
<i class="fi-bitcoin"></i>
</span>
</span>
<span ng-if="addrWithFund != addr.address">
{{addr.balance || 0}}
<i class="fi-bitcoin"></i>
</span>
2014-04-30 08:25:33 -07:00
</span>
</a>
2014-05-22 13:42:56 -07:00
<button class="button small secondary radius" ng-click="showAll=!showAll" ng-show="(addresses|withoutFunds) > 1">
<span ng-if="!showAll">Show all</span>
<span ng-if="showAll">Show less</span>
</button>
</div>
<div class="large-4 medium-4 columns line-dashed-v text-center" ng-show="selectedAddr">
<qrcode size="160" data="{{selectedAddr.address}}"></qrcode>
2014-04-30 15:50:13 -07:00
<p class="m10t">
<strong>
<span ng-if="addrWithFund == selectedAddr.address">
<span ng-if="$root.updatingBalance">
<i class="fi-bitcoin-circle icon-rotate spinner"></i>
</span>
<span ng-if="!$root.updatingBalance">{{balanceByAddr[selectedAddr.address] || 0}}
<i class="fi-bitcoin"></i>
</span>
</span>
<span ng-if="addrWithFund != selectedAddr.address">
{{selectedAddr.balance || 0}}
<i class="fi-bitcoin"></i>
</span>
2014-04-30 15:50:13 -07:00
</strong>
2014-04-30 08:25:33 -07:00
</p>
</div>
</div>
<div class="columns text-center m10t" ng-class="{'large-3' : !!addresses[0]}">
<p> Create a New <strong> Address </strong> </p>
2014-04-30 15:50:13 -07:00
<button class="secondary radius expandi new-address" ng-click="newAddr()"
ng-disabled="loading" loading="Creating"> Create </button>
</div>
</div>
</div>
</div>
2014-03-26 05:18:42 -07:00
</script>
2014-03-26 13:56:11 -07:00
<!-- TRANSACTIONS -->
2014-03-26 05:18:42 -07:00
<script type="text/ng-template" id="transactions.html">
<div class="transactions" data-ng-controller="TransactionsController">
<div class="row" ng-show='$root.wallet.publicKeyRing.isComplete()'>
2014-04-14 13:58:12 -07:00
<div class="large-12 columns">
<h4> Transaction proposals <span ng-if="onlyPending">[Pending]</span> <small>({{txs.length}})</small></h4>
2014-05-27 11:40:59 -07:00
<ul class="button-group radius">
<li> <button class="secondary" ng-click="show(true)" ng-disabled="loading || onlyPending" loading="Updating"> Pending </button>
<li> <button class="secondary" ng-click="show()" ng-disabled="loading || !onlyPending" loading="Updating"> All </button>
</ul>
<div class="panel radius pending" ng-repeat="tx in txs | paged">
2014-05-19 12:56:07 -07:00
<div class="txheader row m10">
<div class="large-8 medium-8 small-12 columns">
<div class="row" ng-repeat="out in tx.outs">
<div class="large-3 medium-3 small-3 columns ellipsis"> {{out.value}} <i class="fi-bitcoin size-18"></i></div>
<div class="large-1 medium-1 small-2 columns fi-arrow-right size-24"> </div>
<div class="large-8 medium-8 small-7 columns ellipsis"> {{out.address}} </div>
2014-04-20 15:08:04 -07:00
</div>
</div>
2014-05-19 12:56:07 -07:00
<div class="large-4 medium-4 small-12 columns text-right">
<h6>{{tx.createdTs | amCalendar}}</h6>
</div>
2014-04-18 07:33:49 -07:00
</div>
2014-04-20 15:08:04 -07:00
2014-04-29 12:34:40 -07:00
<div class="tx-copayers">
2014-04-30 14:46:52 -07:00
<div class="box-copayers" ng-repeat="(cId, actions) in tx.peerActions">
2014-04-29 12:34:40 -07:00
<figure class="left">
<a href="#/transactions" class="has-tip" tooltip-popup-delay="1000" tooltip="{{cId === $root.wallet.getMyCopayerId() ? 'You' : $root.wallet.publicKeyRing.nicknameForCopayer(cId)}}">
<img src="./img/satoshi.gif" alt="{{cId}}" width="200">
2014-04-29 15:43:38 -07:00
</a>
2014-04-29 12:34:40 -07:00
</figure>
<div class="box-status">
2014-04-29 15:43:38 -07:00
<span ng-repeat="(action, ts) in actions">
<a ng-if="action == 'create'" href="#/transactions" class="has-tip" tooltip-popup-delay="1000" tooltip="Created {{ts | amTimeAgo}}">
2014-04-29 15:43:38 -07:00
<i class="fi-crown size-12 icon-status icon-active"></i>
</a>
<a ng-if="action == 'seen'" href="#/transactions" class="has-tip" tooltip-popup-delay="1000" tooltip="Seen {{ts | amTimeAgo}}">
2014-04-29 15:43:38 -07:00
<i class="fi-eye size-12 icon-status icon-active"></i>
</a>
<a ng-if="action == 'sign'" href="#/transactions" class="has-tip" tooltip-popup-delay="1000" tooltip="Signed {{ts | amTimeAgo}}">
2014-04-29 15:43:38 -07:00
<i class="fi-check size-12 icon-status icon-active-check"></i>
</a>
<a ng-if="action == 'rejected'" href="#/transactions" class="has-tip" tooltip-popup-delay="1000" tooltip="Rejected {{ts | amTimeAgo}}">
2014-04-30 12:11:50 -07:00
<i class="fi-x size-12 icon-status icon-active-x"></i>
2014-04-29 15:43:38 -07:00
</a>
</span>
2014-04-29 12:34:40 -07:00
</div>
2014-04-30 14:46:52 -07:00
<div class="text-center" style="margin-right:16px; color:#999; font-size:12px">
{{$root.wallet.publicKeyRing.nicknameForCopayer(cId)}}
</div>
2014-04-30 10:59:20 -07:00
</div>
2014-04-18 07:33:49 -07:00
</div>
2014-04-20 15:08:04 -07:00
<div class="row m10">
2014-05-19 12:56:07 -07:00
<div class="large-5 medium-5 columns" ng-show="!tx.sentTs">
2014-04-30 10:59:20 -07:00
<div ng-show="!tx.signedByUs && !tx.rejectedByUs && !tx.finallyRejected && tx.missingSignatures">
<button class="secondary radius m10r" ng-click="sign(tx.ntxid)" ng-disabled="loading" loading="Signing">
2014-04-30 10:59:20 -07:00
<i class="fi-check"></i> Sign
</button>
<button class="warning radius" ng-click="reject(tx.ntxid)" ng-disabled="loading" loading="Rejecting">
2014-04-30 10:59:20 -07:00
<i class="fi-x" ></i> Reject
</button>
2014-04-20 15:08:04 -07:00
</div>
2014-05-19 12:56:07 -07:00
<div ng-show="!tx.missingSignatures && !tx.sentTs">
2014-04-30 10:59:20 -07:00
<button class="primary radius" ng-click="send(tx.ntxid)" ng-disabled="loading" loading="Broadcasting"> <i class=".fi-upload-cloud"></i>
Broadcast Transaction
</button>
2014-05-19 12:56:07 -07:00
</div>
2014-04-30 10:59:20 -07:00
</div>
2014-04-30 12:11:50 -07:00
2014-05-19 12:56:07 -07:00
<div class="large-7 medium-7 columns text-right">
<div ng-show="tx.finallyRejected" class="text-warning m10b">
2014-04-30 10:59:20 -07:00
Transaction finally rejected
</div>
2014-05-16 08:12:11 -07:00
<div ng-show="!tx.missingSignatures && tx.sentTs">
<div class="success m10b">
<strong>Sent</strong> <span class="text-gray" am-time-ago="tx.sentTs"></span>
</div>
<div class="ellipsis small">
Transaction ID:
<a href="http://{{getShortNetworkName()}}.insight.is/tx/{{tx.sentTxid}}" target="blank">
{{tx.sentTxid}}
</a>
</div>
2014-05-16 08:12:11 -07:00
</div>
<p class="text-gray m5b" ng-show="!tx.finallyRejected && tx.missingSignatures==1">
2014-04-30 10:59:20 -07:00
One signature missing
</p>
<p class="text-gray m5b" ng-show="!tx.finallyRejected && tx.missingSignatures>1">
2014-04-30 10:59:20 -07:00
{{tx.missingSignatures}} signatures missing</p>
<div class="ellipsis small text-gray">
<strong>Fee:</strong> <i class="fi-bitcoin"></i> {{tx.fee}}
<strong>Proposal ID:</strong> {{tx.ntxid}}
</div>
2014-04-20 15:08:04 -07:00
</div>
2014-04-18 07:33:49 -07:00
</div>
2014-04-20 15:08:04 -07:00
</div>
2014-05-27 11:40:59 -07:00
<pagination ng-show="!onlyPending" total-items="txs.length" items-per-page="txpItemsPerPage" page="txpCurrentPage" on-select-page="show()" class="pagination-small primary"></pagination>
2014-04-08 10:16:38 -07:00
</div>
<div class="large-12 columns">
<h4>Last transactions</h4>
2014-05-26 06:46:05 -07:00
<button ng-click="toogleLast()" ng-disabled="loading" loading="Updating" ng-hide="lastShowed && !loading">Show</button>
<button ng-click="toogleLast()" ng-disabled="loading" loading="Updating" ng-show="lastShowed && !loading">Hide</button>
<div class="btransactions" ng-if="lastShowed">
<div ng-if="!blockchain_txs[0].txid && !loading">
No transactions yet.
</div>
2014-04-30 12:11:50 -07:00
<div class="panel radius" ng-repeat="btx in blockchain_txs | orderBy: 'firstSeenTs':true">
<div class="m15">
<div class="row">
<div class="large-8 columns">
2014-05-27 11:40:59 -07:00
<a class="ellipsis" href="http://{{getShortNetworkName()}}.insight.is/tx/{{btx.txid}}" target="blank">
{{btx.txid}}
</a>
</div>
<div class="large-4 columns text-right">
2014-05-16 13:18:25 -07:00
{{btx.firstSeenTs * 1000 | amCalendar}} </h6>
</div>
</div>
</div>
2014-04-30 12:11:50 -07:00
<div class="tx-copayers">
2014-05-27 11:40:59 -07:00
<div class="large-5 small-5 columns">
2014-05-26 06:46:05 -07:00
<div ng-repeat="vin in btx.vin track by $index | groupByAddress">
2014-05-27 11:40:59 -07:00
<p class="small-8 ellipsis left text-gray size-12"> {{vin.addr}} </p>
<small class="small-4 right">{{vin.value}}</small>
</div>
</div>
2014-05-27 11:40:59 -07:00
<div class="large-1 small-1 columns text-center">
<i class="fi-arrow-right"></i>
</div>
2014-05-27 11:40:59 -07:00
<div class="large-6 small-6 columns">
<div ng-repeat="vout in btx.vout">
<div class="row">
2014-05-27 11:40:59 -07:00
<div class="large-10 small-8 columns">
<div ng-repeat="addr in vout.scriptPubKey.addresses">
2014-05-27 11:40:59 -07:00
<p class="ellipsis text-gray size-12"> {{addr}} </p>
</div>
</div>
2014-05-27 11:40:59 -07:00
<div class="large-2 small-4 columns">
<small>{{vout.value}}</small>
</div>
</div>
</div>
</div>
</div>
2014-04-30 12:11:50 -07:00
<div class="m15 size-12 text-gray">
<div class="row">
2014-05-27 11:40:59 -07:00
<div class="large-4 medium-4 small-4 columns">Fees: {{btx.fees}}</div>
<div class="large-4 medium-4 small-4 columns text-center">Confirmations: {{btx.confirmations || 0}}</div>
<div class="large-4 medium-4 small-4 columns text-right">Total: {{btx.valueOut}}</div>
</div>
</div>
2014-04-08 10:16:38 -07:00
</div>
</div>
</div>
</div>
2014-03-26 05:18:42 -07:00
</div>
</script>
2014-03-26 13:56:11 -07:00
<!-- SEND -->
2014-03-26 05:18:42 -07:00
<script type="text/ng-template" id="send.html">
<div class="send" data-ng-controller="SendController">
<div class="row" ng-show='$root.wallet.publicKeyRing.isComplete()'>
2014-05-07 11:16:56 -07:00
<div class="medium-6 medium-centered large-6 large-centered columns">
<h3>{{title}}</h3>
<form name="sendForm" ng-submit="submitForm(sendForm)" novalidate>
<div class="row">
<div class="large-12 columns">
2014-05-06 13:02:49 -07:00
<div class="row collapse">
<label for="address">To address
2014-05-07 07:21:30 -07:00
<small ng-hide="!sendForm.address.$pristine || address">required</small>
<small class="is-valid" ng-show="!sendForm.address.$invalid && address">valid!</small>
<small class="has-error" ng-show="sendForm.address.$invalid && address">
2014-05-06 13:02:49 -07:00
not valid</small>
</label>
<div class="small-10 columns">
2014-05-26 07:51:27 -07:00
<input type="text" id="address" name="address" ng-disabled="loading"
placeholder="Send to" ng-model="address" valid-address required>
2014-05-06 13:02:49 -07:00
</div>
2014-05-22 10:40:46 -07:00
<div class="small-2 columns" ng-hide="showScanner || !isHttp">
2014-05-08 08:27:08 -07:00
<a class="postfix button secondary" ng-click="openScanner()"><i class="fi-camera"></i></a>
2014-05-06 13:02:49 -07:00
</div>
2014-05-22 10:40:46 -07:00
<div class="small-2 columns" ng-show="showScanner && isHttp">
2014-05-08 08:27:08 -07:00
<a class="postfix button warning" ng-click="cancelScanner()">Cancel</a>
2014-05-06 13:02:49 -07:00
</div>
</div>
<div id="scanner" class="row" ng-if="showScanner">
<div class="text-centered">
<canvas id="qr-canvas" width="200" height="150"></canvas>
<div ng-show="isMobile">
<div id="file-input-wrapper" class="btn btn-primary">
<span class="pull-left text-centered">
<i class="glyphicon glyphicon-refresh icon-rotate"></i>
Get QR code
</span>
<input id="qrcode-camera" type="file" capture="camera" accept="image/*">
</div>
</div>
<div ng-hide="isMobile">
<video id="qrcode-scanner-video" width="300" height="225" ng-hide="isMobile"></video>
</div>
</div>
</div>
</div>
</div>
<div class="row">
2014-05-07 11:16:56 -07:00
<div class="large-6 medium-6 columns">
<div class="row collapse">
<label for="amount">Amount
<small ng-hide="!sendForm.amount.$pristine">required</small>
<small class="is-valid" ng-show="!sendForm.amount.$invalid && !sendForm.amount.$pristine">valid!</small>
<small class="has-error" ng-show="sendForm.amount.$invalid && !sendForm.amount.$pristine">
not valid.</small>
<small ng-show="notEnoughAmount">{{notEnoughAmount}}</small>
</label>
<div class="small-9 columns">
2014-05-26 07:51:27 -07:00
<input type="number" id="amount" ng-disabled="loading"
name="amount" placeholder="Amount" ng-model="amount"
min="0.0001" max="10000000" enough-amount required>
</div>
<div class="small-3 columns">
<span class="postfix">BTC</span>
</div>
</div>
</div>
</div>
<div class="row">
2014-04-24 18:43:19 -07:00
<div class="large-5 columns">
2014-04-30 10:59:20 -07:00
<button type="submit" class="button secondary radius text-center" ng-disabled="sendForm.$invalid || loading" loading="Sending">
Send
</button>
</div>
</div>
2014-04-16 06:52:13 -07:00
</form>
</div>
</div>
2014-03-26 05:18:42 -07:00
</div>
</script>
2014-03-26 13:56:11 -07:00
<!-- BACKUP -->
2014-03-26 05:18:42 -07:00
<script type="text/ng-template" id="backup.html">
2014-05-13 10:19:37 -07:00
<div class="backup" ng-controller="BackupController">
<h3>{{title}}</h3>
2014-04-03 12:32:17 -07:00
<div class="row text-center">
2014-05-09 06:43:24 -07:00
<div class="large-6 medium-6 columns">
2014-05-09 08:29:00 -07:00
<a class="panel radius box-backup" ng-click="download()">
2014-04-03 12:32:17 -07:00
<i class="fi-download size-72"></i>
<p> Download File </p>
</a>
</div>
2014-05-09 06:43:24 -07:00
<div class="large-6 medium-6 columns">
2014-05-09 08:29:00 -07:00
<a class="panel radius box-backup" ng-click="email()">
2014-04-03 12:32:17 -07:00
<i class="fi-mail size-72"></i>
<p> Backup to email </p>
</a>
</div>
</div>
2014-03-26 05:18:42 -07:00
</div>
2014-03-19 09:17:18 -07:00
</script>
2014-04-17 09:43:34 -07:00
2014-05-13 10:19:37 -07:00
<!-- CONFIG -->
<script type="text/ng-template" id="settings.html">
<div class="settings" ng-controller="SettingsController">
<h3>{{title}}</h3>
2014-05-15 12:58:15 -07:00
<form name="settingsForm">
<div class="small-12 medium-6 medium-centered large-6 large-centered columns">
<fieldset>
<legend>Bitcoin Network</legend>
<input id="network-name" type="checkbox" ng-model="networkName" ng-true-value="livenet" ng-false-value="testnet" class="form-control">
<label for="network-name">Livenet</label>
</fieldset>
<fieldset>
<legend>Insight API server</legend>
<div class="row">
<label for="insight-host">Host</label>
<input type="text" ng-model="insightHost" class="form-control" name="insight-host">
</div>
<div class="row">
<label for="insight-port">Port</label>
<input type="number" ng-model="insightPort" class="form-control" name="insight-port">
</div>
</fieldset>
<fieldset>
<legend>PeerJS server</legend>
<div class="row">
<label for="peerjs-key">Key</label>
<input type="text" ng-model="networkKey" class="form-control" name="peerjs-key">
</div>
<div class="row">
<label for="peerjs-host">Host</label>
<input type="text" ng-model="networkHost" class="form-control" name="peerjs-host">
</div>
<div class="row">
<label for="peerjs-port">Port</label>
<input type="number" ng-model="networkPort" class="form-control" name="peerjs-port">
</div>
</fieldset>
</div>
<div class="row">
<div class="large-12 columns line-dashed">
<button type="submit" class="button primary radius right ng-binding" ng-disabled="setupForm.$invalid || loading" disabled="disabled" ng-click="save()">
Save
</button>
2014-05-16 08:40:26 -07:00
<a class="button secondary radius" href="#signin" ng-hide="$root.wallet">Home</a>
2014-05-13 10:19:37 -07:00
</div>
</div>
2014-05-15 12:58:15 -07:00
</form>
2014-05-13 10:19:37 -07:00
</div>
</script>
2014-05-12 08:00:25 -07:00
<!-- UNSUPPORTED -->
<script type="text/ng-template" id="unsupported.html">
<h2 class="text-center">Browser unsupported</h2>
<h3 class="text-center">
Copay uses webRTC for peer-to-peer communications,
but your browser does not support it.
Please use
a current version of Google Chrome, Mozilla Firefox, or Opera.
<br><br>
For more information
on supported browsers please check <a href="http://www.webrtc.org/">http://www.webrtc.org/</a>
</h3>
</script>
2014-03-26 13:56:11 -07:00
<!-- NOT FOUND -->
2014-03-19 09:17:18 -07:00
<script type="text/ng-template" id="404.html">
2014-03-26 05:18:42 -07:00
<h2 class="text-center">404</h2>
<h3 class="text-center">Page not found</h3>
<p class="text-center"><a href="#/">go back...</a></p>
2014-03-19 09:17:18 -07:00
</script>
<script src="config.js"></script>
2014-03-19 09:17:18 -07:00
<script src="lib/angular/angular.min.js"></script>
2014-05-16 13:18:25 -07:00
<script src="lib/moment/moment.js"></script>
<script src="lib/angular-moment/angular-moment.js"></script>
2014-03-26 13:56:11 -07:00
<script src="lib/qrcode-generator/js/qrcode.js"></script>
<script src="lib/angular-qrcode/qrcode.js"></script>
2014-03-19 09:17:18 -07:00
<script src="lib/angular-route/angular-route.min.js"></script>
<script src="lib/angular-foundation/mm-foundation.min.js"></script>
<script src="lib/angular-foundation/mm-foundation-tpls.min.js"></script>
<script src="lib/peer.js"></script> <!-- TODO Change this on new PeerJS version -->
2014-05-14 13:36:34 -07:00
<script src="lib/bitcore/browser/bundle.js"></script>
2014-04-28 13:23:15 -07:00
<script src="lib/crypto-js/rollups/sha256.js"></script>
<script src="lib/crypto-js/rollups/pbkdf2.js"></script>
2014-04-15 14:13:25 -07:00
<script src="lib/crypto-js/rollups/aes.js"></script>
2014-04-17 14:02:20 -07:00
<script src="lib/file-saver/FileSaver.js"></script>
<script src="lib/socket.io.js"></script>
2014-04-30 10:14:43 -07:00
<script src="lib/sjcl.js"></script>
2014-05-06 13:02:49 -07:00
<script src="lib/ios-imagefile-megapixel/megapix-image.js"></script>
<script src="lib/qrcode-decoder-js/lib/qrcode-decoder.min.js"></script>
<script src="js/copayBundle.js"></script>
2014-04-07 11:31:41 -07:00
2014-03-19 09:17:18 -07:00
<script src="js/app.js"></script>
2014-04-07 20:54:38 -07:00
<script src="js/routes.js"></script>
2014-03-19 09:17:18 -07:00
<script src="js/directives.js"></script>
<script src="js/filters.js"></script>
<script src="js/services/socket.js"></script>
2014-04-23 17:20:44 -07:00
<script src="js/services/video.js"></script>
2014-04-16 15:14:58 -07:00
<script src="js/services/walletFactory.js"></script>
2014-04-17 07:46:49 -07:00
<script src="js/services/controllerUtils.js"></script>
2014-04-30 06:52:39 -07:00
<script src="js/services/passphrase.js"></script>
2014-05-14 22:13:25 -07:00
<script src="js/services/notifications.js"></script>
2014-03-25 07:35:04 -07:00
<script src="js/controllers/header.js"></script>
2014-04-25 13:22:51 -07:00
<script src="js/controllers/footer.js"></script>
<script src="js/controllers/addresses.js"></script>
2014-03-26 05:18:42 -07:00
<script src="js/controllers/transactions.js"></script>
<script src="js/controllers/send.js"></script>
<script src="js/controllers/backup.js"></script>
<script src="js/controllers/signin.js"></script>
2014-04-16 13:07:14 -07:00
<script src="js/controllers/setup.js"></script>
2014-04-25 13:34:24 -07:00
<script src="js/controllers/import.js"></script>
2014-05-13 10:19:37 -07:00
<script src="js/controllers/settings.js"></script>
2014-03-25 07:35:04 -07:00
2014-03-19 09:17:18 -07:00
<script src="js/init.js"></script>
2014-03-14 13:38:27 -07:00
</body>
</html>