2014-03-19 09:17:18 -07:00
|
|
|
<!doctype html>
|
|
|
|
<html lang="en">
|
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">
|
2014-03-28 11:08:14 -07:00
|
|
|
<title>Copay - Multisignature Wallet</title>
|
2014-03-27 08:07:10 -07:00
|
|
|
<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-03-14 13:38:27 -07:00
|
|
|
<link rel="stylesheet" href="css/main.css">
|
|
|
|
</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-04-29 10:24:26 -07:00
|
|
|
<div class="large-3 medium-3 columns">
|
2014-04-29 07:56:37 -07:00
|
|
|
<span class="logo"></span>
|
2014-04-25 13:22:51 -07:00
|
|
|
</div>
|
2014-04-29 10:24:26 -07:00
|
|
|
<div class="large-9 medium-9 columns text-center p10t" ng-show="$root.wallet">
|
|
|
|
<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}}">
|
2014-04-29 14:20:44 -07:00
|
|
|
<strong><span>{{$root.getWalletDisplay()}}</span></strong>
|
2014-04-29 10:24:26 -07:00
|
|
|
</a>
|
|
|
|
<a class="button radius small-icon" href="#" title="Signout" ng-click="signout()"><i class="fi-power"></i></a>
|
|
|
|
</div>
|
|
|
|
<div class="large-4 medium-4 columns line-dashed-v">
|
2014-04-28 13:23:01 -07:00
|
|
|
Balance: {{totalBalance || 0}} <i class="fi-bitcoin"></i><br>
|
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-04-28 13:23:01 -07:00
|
|
|
Available to Spend: {{availableBalance || 0}} <i class="fi-bitcoin"></i>
|
2014-04-29 07:56:37 -07:00
|
|
|
</div>
|
2014-04-24 12:35:52 -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">
|
|
|
|
<a ng-click="isCollapsed=!isCollapsed"> Menu</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)}">
|
2014-04-25 13:22:51 -07:00
|
|
|
<a href="{{item.link}}"> <i class="{{item.icon}}"></i> {{item.title}}</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</section>
|
|
|
|
</nav>
|
|
|
|
|
2014-04-19 00:55:32 -07:00
|
|
|
</div>
|
2014-04-09 07:05:25 -07:00
|
|
|
|
2014-04-25 13:22:51 -07:00
|
|
|
<div class="row" ng-if='$root.flashMessage.message' notification>
|
|
|
|
<div class="small-8 large-centered columns">
|
2014-04-30 10:59:20 -07:00
|
|
|
<div data-alert class="alert-box radius {{$root.flashMessage.type}}">
|
2014-04-25 13:22:51 -07:00
|
|
|
{{$root.flashMessage.message}}
|
|
|
|
<a ng-click="clearFlashMessage()" class="close">×</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-23 09:44:20 -07:00
|
|
|
|
2014-04-25 13:22:51 -07:00
|
|
|
<div class="row">
|
2014-04-30 10:59:20 -07:00
|
|
|
<div ng-if='$root.wallet && !$root.wallet.publicKeyRing.isComplete() && !loading' data-alert class="alert-box warn radius size-18" >
|
2014-04-23 09:44:20 -07:00
|
|
|
|
|
|
|
|
2014-04-25 13:22:51 -07:00
|
|
|
<div style="float:left; margin:0 15px">
|
|
|
|
<i class="fi-alert size-60"></i>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="size-18">
|
|
|
|
Note: Your wallet is not complete yet.
|
|
|
|
<span ng-show="$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers()>1">
|
|
|
|
{{$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers() }} keys are
|
|
|
|
</span>
|
|
|
|
<span ng-show="$root.wallet.publicKeyRing.totalCopayers - $root.wallet.publicKeyRing.registeredCopayers()==1">
|
|
|
|
One key is
|
|
|
|
</span>
|
|
|
|
missing.
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="size-18">
|
|
|
|
Share this secret with your other copayers for them to join your wallet <br>
|
|
|
|
</div>
|
|
|
|
<div class="size-24">
|
2014-04-30 08:58:40 -07:00
|
|
|
<b>{{$root.wallet.getSecret()}}</b>
|
2014-04-25 13:22:51 -07:00
|
|
|
</div>
|
|
|
|
</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-04-25 13:22:51 -07:00
|
|
|
<div id="main" class="row">
|
|
|
|
<div class="large-12 columns" ng-view></div>
|
|
|
|
</div>
|
2014-04-09 07:05:25 -07:00
|
|
|
</div>
|
|
|
|
|
2014-04-29 07:56:37 -07:00
|
|
|
<div id="footer" data-ng-controller="FooterController" ng-show="$root.wallet">
|
|
|
|
<link rel="stylesheet" ng-href="{{theme}}">
|
2014-04-29 14:20:44 -07:00
|
|
|
<div class="row">
|
2014-04-29 15:12:14 -07:00
|
|
|
<div class="large-2 columns">
|
|
|
|
<strong><div>{{$root.getWalletDisplay()}}</div></strong>
|
|
|
|
<span class="size-12">
|
|
|
|
{{$root.wallet.requiredCopayers}}-of-{{$root.wallet.totalCopayers}} wallet
|
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
<div class="large-2 columns" style="float:right;"
|
|
|
|
ng-repeat="copayer in $root.wallet.getRegisteredPeerIds()">
|
|
|
|
<video
|
|
|
|
ng-class="($root.wallet.getOnlinePeerIDs().indexOf(copayer) != -1) ? 'online' : 'offline'"
|
|
|
|
class="video-small"
|
|
|
|
autoplay ng-show="$root.videoSrc[copayer]"
|
|
|
|
ng-src="{{$root.getVideoURL(copayer)}}"
|
|
|
|
id="{{copayer + '-video'}}" muted="true"
|
|
|
|
title="{{copayer + (copayer == $root.wallet.network.peerId?' (You)':'')}}" ></video>
|
|
|
|
<img ng-show="!$root.videoSrc[copayer]"
|
|
|
|
ng-class="($root.wallet.getOnlinePeerIDs().indexOf(copayer) != -1) ? 'online' : 'offline'"
|
|
|
|
class="video-small"
|
|
|
|
src="./img/satoshi.gif"
|
|
|
|
title="{{copayer + (copayer == $root.wallet.network.peerId?' (You)':'')}}" />
|
|
|
|
</div>
|
2014-04-29 07:56:37 -07:00
|
|
|
</div>
|
2014-04-29 15:12:14 -07:00
|
|
|
<!--
|
|
|
|
<div class="large-2 columns text-right">
|
2014-04-25 13:22:51 -07:00
|
|
|
<a class="size-12" ng-if="themes.length > 1" ng-click="change_theme(th)" ng-repeat="th in themes">{{th}} {{$last ? '' : '· '}}</a>
|
|
|
|
</div>
|
2014-04-29 15:12:14 -07:00
|
|
|
-->
|
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">
|
2014-04-22 12:07:14 -07:00
|
|
|
<div class="signin" ng-controller="SigninController">
|
2014-04-30 10:59:20 -07:00
|
|
|
<div data-alert class="alert-box info radius" ng-show="loading">
|
2014-04-24 19:13:55 -07:00
|
|
|
Looking for peers...
|
2014-03-31 08:48:35 -07:00
|
|
|
</div>
|
|
|
|
<div ng-show="!loading">
|
2014-04-24 12:35:52 -07:00
|
|
|
<div ng-show="!wallets.length">
|
2014-04-17 08:37:10 -07:00
|
|
|
<div class="row">
|
|
|
|
<div class="large-6 columns">
|
|
|
|
<h3>Create a New Wallet</h3>
|
|
|
|
</div>
|
|
|
|
<div class="large-3 columns">
|
2014-04-30 10:59:20 -07:00
|
|
|
<button class="button secondary expand radius" ng-click="create()" ng-disabled="loading" loading="Creating">Create</button>
|
2014-04-17 08:37:10 -07:00
|
|
|
</div>
|
2014-03-31 14:05:35 -07:00
|
|
|
</div>
|
2014-04-17 10:28:50 -07:00
|
|
|
<hr>
|
2014-04-21 08:10:34 -07:00
|
|
|
</div>
|
2014-04-24 12:35:52 -07:00
|
|
|
<div ng-show="wallets.length">
|
2014-04-17 10:28:50 -07:00
|
|
|
<div class="row">
|
2014-04-21 09:04:47 -07:00
|
|
|
<div class="large-6 columns">
|
|
|
|
<h3>Open Wallet</h3>
|
|
|
|
<select class="form-control" ng-model="selectedWalletId"
|
2014-04-24 12:35:52 -07:00
|
|
|
ng-options="w.id as w.show for w in wallets">
|
2014-04-21 09:04:47 -07:00
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
<div class="large-3 columns">
|
2014-04-30 10:59:20 -07:00
|
|
|
<button class="button secondary expand radius" type="button"
|
2014-04-24 18:43:19 -07:00
|
|
|
ng-click="open(selectedWalletId)" ng-disabled="loading" loading="Opening">Open</button>
|
2014-04-17 10:28:50 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-21 09:04:47 -07:00
|
|
|
<hr>
|
2014-04-17 08:37:10 -07:00
|
|
|
</div>
|
2014-04-21 09:04:47 -07:00
|
|
|
<div ng-show="true">
|
2014-04-17 08:37:10 -07:00
|
|
|
<div class="row">
|
|
|
|
<div class="large-6 columns">
|
2014-04-21 09:04:47 -07:00
|
|
|
<h3>Join a Wallet in Creation</h3>
|
|
|
|
<input type="text" class="form-control" placeholder="Paste wallet secret here"
|
2014-04-23 18:43:17 -07:00
|
|
|
ng-model="connectionId" required autofocus>
|
2014-04-17 08:37:10 -07:00
|
|
|
</div>
|
|
|
|
<div class="large-3 columns">
|
2014-04-30 10:59:20 -07:00
|
|
|
<button class="button primary expand radius"
|
2014-04-24 18:43:19 -07:00
|
|
|
ng-click="join(connectionId)" ng-disabled="loading" loading="Joining">Join</button>
|
2014-04-17 08:37:10 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-17 14:11:42 -07:00
|
|
|
<hr>
|
2014-04-21 09:04:47 -07:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="row">
|
|
|
|
<div class="large-12 columns">
|
2014-04-24 12:35:52 -07:00
|
|
|
<div ng-show="wallets.length">
|
2014-04-24 18:43:19 -07:00
|
|
|
<a ng-click="create()" ng-disabled="loading" loading="Creating">Create a new wallet</a>
|
2014-04-17 08:37:10 -07:00
|
|
|
</div>
|
2014-04-25 13:34:24 -07:00
|
|
|
<a class="right" ng-href="#import">Import from file</a>
|
2014-03-31 14:05:35 -07:00
|
|
|
</div>
|
2014-03-27 12:31:42 -07:00
|
|
|
</div>
|
2014-04-17 14:11:42 -07:00
|
|
|
|
2014-04-17 08:37:10 -07:00
|
|
|
|
2014-03-27 12:31:42 -07:00
|
|
|
</div>
|
|
|
|
</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">
|
|
|
|
<h3>{{title}}</h3>
|
2014-04-25 15:11:56 -07:00
|
|
|
|
|
|
|
<div class="large-6 columns">
|
|
|
|
<input type="file" class="form-control" placeholder="Select a backup file" ng-model="backupFile" autofocus="" ng-file-select>
|
|
|
|
</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-04-29 13:44:35 -07:00
|
|
|
Creating new wallet...
|
2014-04-16 13:07:14 -07:00
|
|
|
</div>
|
|
|
|
<div ng-show="!loading">
|
|
|
|
<div class="row">
|
2014-04-17 14:11:42 -07:00
|
|
|
<div class="large-6 large-centered columns">
|
|
|
|
<h3>Create new multisig wallet</h3>
|
|
|
|
<hr>
|
|
|
|
<h6>Select total number of copayers</h6>
|
2014-04-16 13:07:14 -07:00
|
|
|
<select ng-model="totalCopayers"
|
|
|
|
ng-options="totalCopayers as totalCopayers for totalCopayers in TCValues">
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row">
|
2014-04-17 14:11:42 -07:00
|
|
|
<div class="large-6 large-centered columns m30v">
|
2014-04-21 08:08:39 -07:00
|
|
|
<h6>Select required number of signatures</h6>
|
2014-04-16 13:07:14 -07:00
|
|
|
<select ng-model="requiredCopayers"
|
|
|
|
ng-options="requiredCopayers as requiredCopayers for requiredCopayers in RCValues">
|
|
|
|
</select>
|
|
|
|
</div>
|
2014-04-24 12:35:52 -07:00
|
|
|
<div class="large-6 large-centered columns m30v">
|
|
|
|
<h6>Wallet name (optional)</h6>
|
2014-04-28 06:57:59 -07:00
|
|
|
<input ng-model="walletName" placeholder="My multisig wallet" class="size-24" style="width:100%">
|
2014-04-24 12:35:52 -07:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="large-6 large-centered columns m30v">
|
2014-04-17 14:11:42 -07:00
|
|
|
<hr>
|
2014-04-30 10:59:20 -07:00
|
|
|
<button class="button primary radius right" type="button"
|
2014-04-24 12:35:52 -07:00
|
|
|
ng-click="create(totalCopayers, requiredCopayers, walletName)">
|
2014-04-16 15:45:22 -07:00
|
|
|
Create {{requiredCopayers}}-of-{{totalCopayers}} wallet
|
|
|
|
</button>
|
2014-04-17 14:11:42 -07:00
|
|
|
<div class="left">
|
|
|
|
<a href="#signin">Go back</a>
|
|
|
|
</div>
|
2014-04-17 08:37:10 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-16 13:07:14 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</script>
|
|
|
|
|
2014-04-20 16:21:54 -07:00
|
|
|
<!-- ADDRESS -->
|
|
|
|
<script type="text/ng-template" id="addresses.html">
|
|
|
|
<div class="addresses" data-ng-controller="AddressesController">
|
2014-04-17 10:49:54 -07:00
|
|
|
<div ng-show='$root.wallet.publicKeyRing.isComplete()'>
|
2014-04-29 11:17:14 -07:00
|
|
|
<div class="row">
|
|
|
|
<div class="large-9 columns" ng-if="addrs[0]">
|
|
|
|
<div class="large-8 columns">
|
2014-04-30 08:25:33 -07:00
|
|
|
<a class="panel db" ng-repeat="addr in addrs" ng-click="selectAddr(addr)">
|
|
|
|
<span>{{addr}}</span>
|
|
|
|
<span ng-if="!isMain[addr]">(change)</span>
|
|
|
|
<span ng-if="typeof(balanceByAddr[addr]) !== 'undefined'" class="right">
|
|
|
|
{{balanceByAddr[addr]}} <i class="fi-bitcoin"></i>
|
|
|
|
</span>
|
|
|
|
<span ng-if="typeof(balanceByAddr[addr]) === 'undefined'" class="right">
|
|
|
|
Loading...
|
|
|
|
</span>
|
|
|
|
</a>
|
2014-04-29 11:17:14 -07:00
|
|
|
</div>
|
|
|
|
<div class="large-4 columns line-dashed-v text-center">
|
|
|
|
<qrcode size="160" data="{{selectedAddr}}"></qrcode>
|
2014-04-30 08:25:33 -07:00
|
|
|
<p class="m10t" ng-repeat="addr in addrs" ng-if="selectedAddr==addr">
|
|
|
|
<strong> {{balanceByAddr[addr]}} <i class="fi-bitcoin"></i> </strong>
|
|
|
|
</p>
|
2014-04-29 11:17:14 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="columns text-center" ng-class="{'large-3' : addrs[0]}">
|
|
|
|
<p> Create a New <strong> Address </strong> </p>
|
2014-04-30 10:59:20 -07:00
|
|
|
<button class="secondary radius expandi new-address" ng-click="newAddr()" ng-disabled="loading" loading="Creating"> Create </button>
|
2014-04-29 11:17:14 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-17 10:49:54 -07:00
|
|
|
</div>
|
2014-03-26 05:18:42 -07:00
|
|
|
</div>
|
|
|
|
</script>
|
2014-04-08 10:16:38 -07:00
|
|
|
|
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">
|
2014-04-17 10:49:54 -07:00
|
|
|
<div class="row" ng-show='$root.wallet.publicKeyRing.isComplete()'>
|
2014-04-14 13:58:12 -07:00
|
|
|
<div class="large-12 columns">
|
2014-04-22 22:01:54 -07:00
|
|
|
<h4>Transactions proposals <small>({{txs.length}})</small></h4>
|
2014-04-30 10:59:20 -07:00
|
|
|
<div class="panel radius pending" ng-repeat="tx in txs | orderBy: 'createdTs':true">
|
2014-04-20 15:08:04 -07:00
|
|
|
<div class="txheader">
|
2014-04-30 10:59:20 -07:00
|
|
|
<div class="row m10">
|
2014-04-20 15:08:04 -07:00
|
|
|
<div class="large-8 columns">
|
2014-04-29 12:34:40 -07:00
|
|
|
<div class="row" ng-repeat="out in tx.outs">
|
|
|
|
<p class="large-3 columns"> {{out.value}} <i class="fi-bitcoin size-18"></i></p>
|
|
|
|
<i class="large-1 columns fi-arrow-right size-24"> </i>
|
|
|
|
<p class="large-8 columns"> {{out.address}} </p>
|
|
|
|
</div>
|
2014-04-20 15:08:04 -07:00
|
|
|
</div>
|
|
|
|
<div class="large-4 columns text-right">
|
2014-04-22 08:26:23 -07:00
|
|
|
<h6> created at {{tx.createdTs | date:'medium'}} </h6>
|
2014-04-20 15:08:04 -07:00
|
|
|
</div>
|
|
|
|
</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-29 15:43:38 -07:00
|
|
|
<div class="box-copayers" ng-repeat="(peer, actions) in tx.peerActions">
|
2014-04-29 12:34:40 -07:00
|
|
|
<figure class="left">
|
2014-04-29 15:43:38 -07:00
|
|
|
<a href="#/transactions" class="has-tip" tooltip-popup-delay='1000' tooltip="{{peer === $root.wallet.getMyCopayerId() ? 'You' : peer}}">
|
|
|
|
<img src="./img/satoshi.gif" alt="peer" width="200">
|
|
|
|
</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 at {{ts | date:'medium'}}">
|
|
|
|
<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 at {{ts | date:'medium'}}">
|
|
|
|
<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 at {{ts | date:'medium'}}">
|
|
|
|
<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 at {{ts | date:'medium'}}">
|
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 10:59:20 -07:00
|
|
|
</div>
|
2014-04-18 07:33:49 -07:00
|
|
|
</div>
|
2014-04-20 15:08:04 -07:00
|
|
|
|
2014-04-30 10:59:20 -07:00
|
|
|
<div class="row m15">
|
|
|
|
<div class="large-4 columns" ng-show="!tx.sentTs" style="padding-left: 5px;">
|
|
|
|
<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">
|
|
|
|
<i class="fi-check"></i> Sign
|
|
|
|
</button>
|
|
|
|
<button class="warning radius" ng-click="reject(tx.ntxid)" ng-disabled="loading" loading>
|
|
|
|
<i class="fi-x" ></i> Reject
|
|
|
|
</button>
|
2014-04-20 15:08:04 -07:00
|
|
|
</div>
|
2014-04-30 10:59:20 -07:00
|
|
|
|
|
|
|
<span ng-show="!tx.missingSignatures && !tx.sentTs">
|
|
|
|
<button class="primary radius" ng-click="send(tx.ntxid)" ng-disabled="loading" loading="Broadcasting"> <i class=".fi-upload-cloud"></i>
|
|
|
|
Broadcast Transaction
|
|
|
|
</button>
|
|
|
|
</span>
|
|
|
|
</div>
|
2014-04-30 12:11:50 -07:00
|
|
|
|
2014-04-30 10:59:20 -07:00
|
|
|
<div class="large-8 columns text-right">
|
2014-04-30 12:11:50 -07:00
|
|
|
<span ng-show="tx.finallyRejected" class="text-warning">
|
2014-04-30 10:59:20 -07:00
|
|
|
Transaction finally rejected
|
|
|
|
</span>
|
|
|
|
<p class="small" ng-show="!tx.missingSignatures && tx.sentTs">
|
|
|
|
<a href="http://live.insight.is/tx/{{tx.sentTxid}}" target="blank">
|
|
|
|
<i class="fi-arrow-right size-40"></i>
|
2014-04-20 17:19:32 -07:00
|
|
|
Sent at {{tx.sentTs | date:'medium'}}
|
2014-04-30 10:59:20 -07:00
|
|
|
</a>
|
|
|
|
</p>
|
|
|
|
<p class="text-gray" ng-show="!tx.finallyRejected && tx.missingSignatures==1">
|
|
|
|
One signature missing
|
|
|
|
</p>
|
|
|
|
<p class="text-gray" ng-show="!tx.finallyRejected && tx.missingSignatures>1">
|
|
|
|
{{tx.missingSignatures}} signatures missing</p>
|
|
|
|
<small class="right text-gray">
|
|
|
|
<strong> Fee: </strong> <i class="fi-bitcoin"></i> {{tx.fee}}
|
|
|
|
<strong> Proposal ID: </strong> {{tx.ntxid}}
|
|
|
|
</small>
|
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-04-08 10:16:38 -07:00
|
|
|
</div>
|
2014-04-22 23:37:17 -07:00
|
|
|
<div class="large-12 columns" ng-init="getTransactions()" ng-show="blockchain_txs[0].txid">
|
2014-04-22 21:55:00 -07:00
|
|
|
<h3>Last transactions</h3>
|
2014-04-22 23:37:17 -07:00
|
|
|
<div class="btransactions">
|
2014-04-30 12:11:50 -07:00
|
|
|
<div class="panel radius" ng-repeat="btx in blockchain_txs | orderBy: 'firstSeenTs':true">
|
|
|
|
<div class="m15">
|
2014-04-22 21:55:00 -07:00
|
|
|
<div class="row">
|
|
|
|
<div class="large-8 columns">
|
|
|
|
ID: {{btx.txid}}
|
|
|
|
</div>
|
|
|
|
<div class="large-4 columns text-right">
|
|
|
|
{{btx.firstSeenTs * 1000 | date:'medium'}} </h6>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2014-04-30 12:11:50 -07:00
|
|
|
<div class="tx-copayers">
|
2014-04-22 21:55:00 -07:00
|
|
|
<div class="large-5 columns">
|
|
|
|
<div ng-repeat="vin in btx.vin">
|
2014-04-30 12:11:50 -07:00
|
|
|
<p class="left text-gray size-12"> {{vin.addr}} </p>
|
|
|
|
<small class="right">{{vin.value}}</small>
|
2014-04-22 21:55:00 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="large-1 columns text-center">
|
|
|
|
<i class="fi-arrow-right"></i>
|
|
|
|
</div>
|
|
|
|
<div class="large-6 columns">
|
|
|
|
<div ng-repeat="vout in btx.vout">
|
|
|
|
<div class="row">
|
|
|
|
<div class="large-10 columns">
|
|
|
|
<div ng-repeat="addr in vout.scriptPubKey.addresses">
|
2014-04-30 12:11:50 -07:00
|
|
|
<p class="text-gray size-12"> {{addr}} </p>
|
2014-04-22 21:55:00 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="large-2 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">
|
2014-04-22 21:55:00 -07:00
|
|
|
<div class="row">
|
|
|
|
<div class="large-4 columns">Fees: {{btx.fees}}</div>
|
|
|
|
<div class="large-4 columns text-center">Confirmations: {{btx.confirmations || 0}}</div>
|
|
|
|
<div class="large-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">
|
2014-04-17 10:49:54 -07:00
|
|
|
<div class="row" ng-show='$root.wallet.publicKeyRing.isComplete()'>
|
2014-04-19 00:55:32 -07:00
|
|
|
<div class="small-6 large-centered columns">
|
2014-04-20 16:21:54 -07:00
|
|
|
<h3>{{title}}</h3>
|
2014-04-19 00:55:32 -07:00
|
|
|
<form name="sendForm" ng-submit="submitForm(sendForm)" novalidate>
|
|
|
|
<div class="row">
|
|
|
|
<div class="large-12 columns">
|
|
|
|
<label for="address">To address
|
|
|
|
<small ng-hide="!sendForm.address.$pristine">required</small>
|
2014-04-22 12:07:14 -07:00
|
|
|
<small class="is-valid" ng-show="!sendForm.address.$invalid && !sendForm.address.$pristine">valid!</small>
|
2014-04-19 00:55:32 -07:00
|
|
|
<small class="has-error" ng-show="sendForm.address.$invalid && !sendForm.address.$pristine">
|
2014-04-22 12:07:14 -07:00
|
|
|
not valid</small>
|
2014-04-19 00:55:32 -07:00
|
|
|
</label>
|
2014-04-22 12:07:14 -07:00
|
|
|
<input type="text" id="address" name="address" placeholder="Send to" ng-model="address" valid-address required>
|
2014-04-19 00:55:32 -07:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="row">
|
|
|
|
<div class="large-6 columns">
|
|
|
|
<div class="row collapse">
|
|
|
|
<label for="amount">Amount
|
|
|
|
<small ng-hide="!sendForm.amount.$pristine">required</small>
|
2014-04-22 12:07:14 -07:00
|
|
|
<small class="is-valid" ng-show="!sendForm.amount.$invalid && !sendForm.amount.$pristine">valid!</small>
|
2014-04-19 00:55:32 -07:00
|
|
|
<small class="has-error" ng-show="sendForm.amount.$invalid && !sendForm.amount.$pristine">
|
2014-04-23 09:16:20 -07:00
|
|
|
not valid.</small>
|
|
|
|
<small ng-show="notEnoughAmount">{{notEnoughAmount}}</small>
|
2014-04-19 00:55:32 -07:00
|
|
|
</label>
|
|
|
|
<div class="small-9 columns">
|
2014-04-23 09:16:20 -07:00
|
|
|
<input type="number" id="amount" name="amount" placeholder="Amount" ng-model="amount" min="0.0001" max="10000000" enough-amount required>
|
2014-04-19 00:55:32 -07:00
|
|
|
</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">
|
2014-04-19 00:55:32 -07:00
|
|
|
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">
|
|
|
|
<div class="backup" data-ng-controller="BackupController">
|
2014-04-20 16:21:54 -07:00
|
|
|
<h3>{{title}}</h3>
|
2014-04-03 12:32:17 -07:00
|
|
|
<div class="row text-center">
|
|
|
|
<div class="large-4 columns">
|
2014-04-17 14:02:20 -07:00
|
|
|
<a class="panel 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>
|
|
|
|
<div class="large-4 columns">
|
2014-04-17 14:02:20 -07:00
|
|
|
<a class="panel box-backup" ng-click="dropbox()">
|
2014-04-03 12:32:17 -07:00
|
|
|
<i class="fi-social-dropbox size-72"></i>
|
|
|
|
<p> Backup to Dropbox </p>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<div class="large-4 columns">
|
2014-04-17 14:02:20 -07:00
|
|
|
<a class="panel 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-04-03 12:32:17 -07:00
|
|
|
<!-- / <div class="large-4 columns box-backup">Backup to Dropbox</div>
|
|
|
|
// <div class="large-4 columns box-backup">Backup to email</div> -->
|
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>
|
|
|
|
|
2014-04-20 12:06:56 -07:00
|
|
|
<script src="config.js"></script>
|
|
|
|
|
2014-03-19 09:17:18 -07:00
|
|
|
<script src="lib/angular/angular.min.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>
|
2014-03-27 08:07:10 -07:00
|
|
|
<script src="lib/angular-foundation/mm-foundation.min.js"></script>
|
|
|
|
<script src="lib/angular-foundation/mm-foundation-tpls.min.js"></script>
|
2014-03-21 14:45:59 -07:00
|
|
|
<script src="lib/peerjs/peer.js"></script>
|
2014-04-07 11:31:41 -07:00
|
|
|
<script src="lib/bitcore.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>
|
2014-04-16 20:36:08 -07:00
|
|
|
<script src="lib/socket.io.js"></script>
|
2014-04-30 10:14:43 -07:00
|
|
|
<script src="lib/sjcl.js"></script>
|
2014-04-11 11:58:53 -07:00
|
|
|
<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>
|
2014-04-16 20:36:08 -07:00
|
|
|
<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-03-27 12:31:42 -07:00
|
|
|
|
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>
|
2014-04-20 16:21:54 -07:00
|
|
|
<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>
|
2014-03-27 12:31:42 -07:00
|
|
|
<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-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>
|