Initial Commit

master
root 2017-09-14 21:08:38 +02:00
commit edd66c94d2
20 changed files with 3829 additions and 0 deletions

261
admin.html 100644
View File

@ -0,0 +1,261 @@
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.4.0/jquery.timeago.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/handlebars.js/1.3.0/handlebars.min.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
<link href="custom.css" rel="stylesheet">
<script src="custom.js"></script>
<style>
#statsHolder {
margin-bottom: 0;
}
.luckGood {
color: #03a678;
}
.luckBad {
color: #e66b6b;
}
body {
padding-top: 65px;
padding-bottom: 80px;
overflow-y: scroll;
}
.navbar {
font-size: 1.2em;
}
.layout {
position: relative;
}
#loading {
font-size: 2em;
position: absolute;
width: 100%;
text-align: center;
top: 10%;
}
footer {
position: fixed;
bottom: 0;
width: 100%;
background-color: #f5f5f5;
}
footer > div {
margin: 10px auto;
text-align: center;
}
</style>
<script src="config.js"></script>
<script>
lastStats = {};
$(function() {
$.get(api + '/stats', function(data) {
lastStats = data;
routePage();
});
});
var docCookies = {
getItem: function(sKey) {
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
},
setItem: function(sKey, sValue, vEnd, sPath, sDomain, bSecure) {
if(!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) {
return false;
}
var sExpires = "";
if(vEnd) {
switch(vEnd.constructor) {
case Number:
sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
break;
case String:
sExpires = "; expires=" + vEnd;
break;
case Date:
sExpires = "; expires=" + vEnd.toUTCString();
break;
}
}
document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
return true;
},
removeItem: function(sKey, sPath, sDomain) {
if(!sKey || !this.hasItem(sKey)) {
return false;
}
document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ( sDomain ? "; domain=" + sDomain : "") + ( sPath ? "; path=" + sPath : "");
return true;
},
hasItem: function(sKey) {
return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
}
};
function getReadableCoins(coins) {
return (parseInt(coins || 0) / lastStats.config.coinUnits).toFixed(lastStats.config.coinUnits.toString().length - 1);
}
function getReadableHashRateString(hashrate) {
hashrate = hashrate || 0;
var i = 0;
var byteUnits = [' H', ' KH', ' MH', ' GH', ' TH', ' PH' ];
while(hashrate > 1000) {
hashrate = hashrate / 1000;
i++;
}
return parseInt(hashrate).toFixed(2) + byteUnits;
}
window.onhashchange = function() {
routePage();
};
function fetchLiveStats() {
$.ajax({
url: api + '/live_stats',
dataType: 'json',
cache: 'false'
}).done(function(data) {
//pulseLiveUpdate();
//lastStats = data;
//updateIndex();
if(currentPage.update) {
currentPage.update();
}
}).always(function() {
fetchLiveStats();
});
}
// init Handlebars template
function renderTemplate(usersData, templateId, view) {
var source = $(templateId).html(),
template = Handlebars.compile(source),
context = usersData,
html = template(context);
$(view).html(html);
}
function sortTable() {
var table = $(this).parents('table').eq(0),
rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));
this.asc = !this.asc;
if(!this.asc) {
rows = rows.reverse()
}
for(var i = 0; i < rows.length; i++) {
table.append(rows[i])
}
}
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index);
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB)
}
}
function getCellValue(row, index) {
return $(row).children('td').eq(index).data("sort")
}
var currentPage;
var xhrPageLoading;
function routePage(loadedCallback) {
if(currentPage && currentPage.destroy) {
currentPage.destroy();
}
$('#page').html('');
$('#loading').show();
if(xhrPageLoading) {
xhrPageLoading.abort();
}
$('.hot_link').removeClass('active');
var $link = $('a.hot_link[href="' + (window.location.hash || '#') + '"]');
$link.addClass('active');
var page = $link.data('page');
xhrPageLoading = $.ajax({
url: 'pages/' + page,
cache: false,
success: function(data) {
$('#loading').hide();
$('#page').show().html(data);
currentPage && currentPage.update && currentPage.update();
if(loadedCallback) {
loadedCallback();
}
}
});
}
</script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Admin Center</a>
</div>
<div class="collapse navbar-collapse">
<!-- <div class="navbar-form navbar-right">
<a href="" class="btn btn-primary"><i class="fa fa-sign-out"></i> Sign out</a>
</div> -->
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-sm-3">
<div class="list-group">
<a data-page="admin/statistics.html" href="#" class="list-group-item hot_link active"> <i class="fa fa-bar-chart-o"></i> Statistics </a> <a data-page="admin/monitoring.html" href="#monitoring" class="hot_link list-group-item"> <i class="fa fa-eye"></i> Monitoring </a> <a data-page="admin/userslist.html" href="#users_list" class=" hot_link list-group-item"> <i class="fa fa-users"></i> Users List </a>
</div>
</div>
<div class="col-sm-9 layout">
<p id="loading" class="text-center"><i class="fa fa-circle-o-notch fa-spin"></i></p>
<div id="page"></div>
</div>
</div>
</div>
</body>
</html>

16
config.js 100644
View File

@ -0,0 +1,16 @@
var api = "http://xmrpool.l--n.de:1117";
var poolHost = "xmrpool.l--n.de";
var irc = "";
var email = "support@xmrpool.l--n.de";
var cryptonatorWidget = ["{symbol}-BTC", "{symbol}-USD", "{symbol}-EUR"];
//var easyminerDownload = "https://github.com/zone117x/cryptonote-easy-miner/releases/";
var blockchainExplorer = "http://chainradar.com/{symbol}/block/{id}";
var transactionExplorer = "http://chainradar.com/{symbol}/transaction/{id}";
var themeCss = "themes/default-theme.css";

417
custom.css 100644
View File

@ -0,0 +1,417 @@
@import url(//fonts.googleapis.com/css?family=Roboto+Condensed:400,700);
@import url(//fonts.googleapis.com/css?family=Roboto:400,300,500);
/* Insert your pool's unique css here */
.marketRate {
display: none;
}
a {
color: #03a678;
}
a:hover {
color: #025b42;
}
body {
font-size: 14px;
line-height: 1.428571429;
color: #6f6e6e;
font-family: 'Roboto', Helvetica, Arial, sans-serif;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
font-weight: 400;
-webkit-font-smoothing: antialiased;
font-family: 'Roboto Condensed', Arial, sans-serif;
}
h3,
.h3 {
font-size: 32px;
margin-bottom: 14px;
}
.navbar-inverse {
background-color: #2D5768;
border-color: #f9f9f8;
border-width: 0;
}
.navbar-inverse .container {
background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-brand {
color: #fff;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: rgba(255, 255, 255, 0);
}
.navbar-inverse .navbar-text {
color: #CEE3E4;
}
.navbar-inverse .navbar-nav > li > a {
color: #F0F9FA;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #ffffff;
background-color: #03a678;
}
#stats_updated {
color: #F4FC3D;
}
hr {
border-top-color: #BBBBBB;
}
.stats > div:not(#addressError) {
color: #7C7C7C;
padding: 10px 0px;
}
.stats > div:not(#addressError).marketFooter {
padding: 5px 0;
}
.stats > div:not(#addressError) > i.fa {
color: #03a678;
font-size: 21px;
width: 30px;
text-align: center;
}
.stats > div:not(#addressError) > span:not(.input-group-btn):first-of-type {
font-weight: 500;
padding: 0 2px;
color: #336A80;
}
.form-control {
border: 1px solid #03a678;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
-webkit-box-shadow: none;
box-shadow: none;
border-color: #027454;
}
.input-group-addon {
background-color: #03a678;
color: #fff;
border-color: #03a678;
}
.btn-default {
color: #ffffff;
background-color: #03a678;
border-color: #03a678;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #ffffff;
background-color: #027454;
border-color: #026a4d;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #03a678;
border-color: #03a678;
}
.btn-default .badge {
color: #03a678;
background-color: #ffffff;
}
.table th,
.table .miningAppTitle {
font-weight: 500;
}
code {
padding: 2px 10px;
color: #DB2B24;
background-color: #FDECF1;
border-radius: 0;
}
.container .paymentsStatHolder,
.container .blocksStatHolder {
padding-top: 20px;
}
.container .paymentsStatHolder > span,
.container .blocksStatHolder > span {
border-width: 0;
padding: 6px 13px;
}
.container .paymentsStatHolder > span > span,
.container .blocksStatHolder > span > span {
font-weight: 500;
}
.bg-primary {
background-color: #03a678;
}
.bg-info {
background-color: #336A80;
color: #fff;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #f4f9ff;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #dbebff;
}
.table > thead > tr > th {
color: #336A80;
border-bottom-color: #336A80;
}
.table > tbody > tr > td {
border-top-color: #c9e0e9;
}
footer {
background-color: #FDFDFD;
}
/************************************************
*** charts ***
************************************************/
.chartsPoolStat {
padding-top: 30px;
}
.chartWrap {
display: none;
}
.userChart .chart,
.chartWrap .chart {
margin-bottom: 10px;
}
.userChart h4,
.chartWrap h4 {
text-align: center;
font-size: 21px;
}
.userChart {
display: none;
}
/************************************************
*** sparkline override ***
************************************************/
.jqstooltip {
border: none !important;
background: rgba(0, 0, 0, 0.8) !important;
border-radius: 2px !important;
margin-top: -20px !important;
/* Override Bootstrap defaults to fix jQuery.Sparkline tooltips appearance */
-webkit-box-sizing: content-box !important;
-moz-box-sizing: content-box;
box-sizing: content-box !important;
}
.jqstooltip .jqsfield {
color: #ccc;
font-size: 13px !important;
}
.jqstooltip .jqsfield b {
color: #fff;
}
/************************************************
*** home page fixes ***
************************************************/
#yourAddressDisplay {
word-wrap: break-word;
}
/************************************************
*** 20% width block ***
************************************************/
.col-sm-20 {
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
}
@media (min-width: 768px) {
.col-sm-20 {
float: left;
width: 20%;
}
}
/************************************************
*** admin page ***
************************************************/
.btn-primary {
color: #ffffff;
background-color: #03a678;
border-color: #03a678;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #ffffff;
background-color: #027454;
border-color: #026a4d;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #03a678;
border-color: #03a678;
}
.btn-primary .badge {
color: #03a678;
background-color: #ffffff;
}
a.list-group-item {
font-size: 1.1em;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
color: #ffffff;
background-color: #03a678;
border-color: #03a678;
}
a.list-group-item:first-child {
border-top-right-radius: 0;
border-top-left-radius: 0;
}
a.list-group-item:last-child {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.adminStats > div {
min-height: 127px;
color: #2E3D31;
position: relative;
-webkit-box-shadow: inset 0px 0px 0 1px #ffffff;
box-shadow: inset 0px 0px 0 1px #ffffff;
background-color: #EBEBEB;
}
.adminStats .statValue {
position: absolute;
display: block;
padding: 0 10px;
height: 100%;
width: 100%;
top: 0;
left: 0;
line-height: 100px;
text-align: center;
word-wrap: break-word;
font-size: 17px;
}
.adminStats .statValue.lead {
font-size: 21px;
font-weight: 600;
}
.adminStats h4 {
text-align: right;
font-size: 18px;
position: absolute;
bottom: 10px;
right: 15px;
margin: 0;
color: #26839B;
}
.adminStats .statsTitle h3 {
line-height: 127px;
margin: 0;
color: #00C1FF;
text-align: center;
}
.usersList {
table-layout: fixed;
word-wrap: break-word;
}
.usersList .tooltip-inner {
max-width: 100%;
}
.usersList .sort {
cursor: pointer;
}
.usersList tr > th:first-child {
width: 40%;
}
strong,
b {
font-weight: 500;
}
.nav-pills > li > a {
border-radius: 0;
background-color: #F3F3F3;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #03a678;
}
.adminMonitor code {
white-space: normal;
}
.adminMonitor .tab-pane li {
margin-bottom: 10px;
}

1
custom.js 100644
View File

@ -0,0 +1 @@
/* Insert your pool's unique Javascript here */

373
index.html 100644
View File

@ -0,0 +1,373 @@
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1">
<title>Cryptonote Mining Pool</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-timeago/1.4.0/jquery.timeago.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-sparklines/2.1.2/jquery.sparkline.min.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">
<link href="//fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet" type="text/css">
<script src="config.js"></script>
<script src="custom.js"></script>
<style>
#coinName{
text-transform: capitalize;
}
body {
padding-top: 65px;
padding-bottom: 80px;
overflow-y: scroll;
}
.container{
font-size: 1.2em;
}
#loading{
font-size: 2em;
}
.stats {
margin-bottom: 10px;
margin-top: 5px;
}
.stats:last-child{
width: auto;
}
.stats > h3 > i{
font-size: 0.80em;
width: 21px;
}
.stats > div{
padding: 5px 0;
}
.stats > div > .fa {
width: 25px;
}
.stats > div > span:first-of-type{
font-weight: bold;
}
#stats_updated{
opacity: 0;
float: right;
margin-left: 30px;
color: #e8e8e8;
line-height: 47px;
font-size: 0.9em;
}
footer{
position: fixed;
bottom: 0;
width: 100%;
background-color: #f5f5f5;
}
footer > div{
margin: 10px auto;
text-align: center;
}
</style>
<link href="custom.css" rel="stylesheet">
</head>
<body>
<script>
var docCookies = {
getItem: function (sKey) {
return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
},
setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {
if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return false; }
var sExpires = "";
if (vEnd) {
switch (vEnd.constructor) {
case Number:
sExpires = vEnd === Infinity ? "; expires=Fri, 31 Dec 9999 23:59:59 GMT" : "; max-age=" + vEnd;
break;
case String:
sExpires = "; expires=" + vEnd;
break;
case Date:
sExpires = "; expires=" + vEnd.toUTCString();
break;
}
}
document.cookie = encodeURIComponent(sKey) + "=" + encodeURIComponent(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
return true;
},
removeItem: function (sKey, sPath, sDomain) {
if (!sKey || !this.hasItem(sKey)) { return false; }
document.cookie = encodeURIComponent(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + ( sDomain ? "; domain=" + sDomain : "") + ( sPath ? "; path=" + sPath : "");
return true;
},
hasItem: function (sKey) {
return (new RegExp("(?:^|;\\s*)" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
}
};
function getTransactionUrl(id) {
return transactionExplorer.replace('{symbol}', lastStats.config.symbol.toLowerCase()).replace('{id}', id);
}
$.fn.update = function(txt){
var el = this[0];
if (el.textContent !== txt)
el.textContent = txt;
return this;
};
function updateTextClasses(className, text){
var els = document.getElementsByClassName(className);
for (var i = 0; i < els.length; i++){
var el = els[i];
if (el.textContent !== text)
el.textContent = text;
}
}
function updateText(elementId, text){
var el = document.getElementById(elementId);
if (el.textContent !== text){
el.textContent = text;
}
return el;
}
var currentPage;
var lastStats;
function getReadableCoins(coins, digits, withoutSymbol){
var amount = (parseInt(coins || 0) / lastStats.config.coinUnits).toFixed(digits || lastStats.config.coinUnits.toString().length - 1);
return amount + (withoutSymbol ? '' : (' ' + lastStats.config.symbol));
}
function formatDate(time){
if (!time) return '';
return new Date(parseInt(time) * 1000).toLocaleString();
}
function formatPaymentLink(hash){
return '<a target="_blank" href="' + getTransactionUrl(hash) + '">' + hash + '</a>';
}
function getPaymentRowElement(payment, jsonString){
var row = document.createElement('tr');
row.setAttribute('data-json', jsonString);
row.setAttribute('data-time', payment.time);
row.setAttribute('id', 'paymentRow' + payment.time);
row.innerHTML = getPaymentCells(payment);
return row;
}
function parsePayment(time, serializedPayment){
var parts = serializedPayment.split(':');
return {
time: parseInt(time),
hash: parts[0],
amount: parts[1],
fee: parts[2],
mixin: parts[3],
recipients: parts[4]
};
}
function renderPayments(paymentsResults){
var $paymentsRows = $('#payments_rows');
for (var i = 0; i < paymentsResults.length; i += 2){
var payment = parsePayment(paymentsResults[i + 1], paymentsResults[i]);
var paymentJson = JSON.stringify(payment);
var existingRow = document.getElementById('paymentRow' + payment.time);
if (existingRow && existingRow.getAttribute('data-json') !== paymentJson){
$(existingRow).replaceWith(getPaymentRowElement(payment, paymentJson));
}
else if (!existingRow){
var paymentElement = getPaymentRowElement(payment, paymentJson);
var inserted = false;
var rows = $paymentsRows.children().get();
for (var f = 0; f < rows.length; f++) {
var pTime = parseInt(rows[f].getAttribute('data-time'));
if (pTime < payment.time){
inserted = true;
$(rows[f]).before(paymentElement);
break;
}
}
if (!inserted)
$paymentsRows.append(paymentElement);
}
}
}
function pulseLiveUpdate(){
var stats_update = document.getElementById('stats_updated');
stats_update.style.transition = 'opacity 100ms ease-out';
stats_update.style.opacity = 1;
setTimeout(function(){
stats_update.style.transition = 'opacity 7000ms linear';
stats_update.style.opacity = 0;
}, 500);
}
window.onhashchange = function(){
routePage();
};
function fetchLiveStats() {
$.ajax({
url: api + '/live_stats',
dataType: 'json',
cache: 'false'
}).done(function(data){
pulseLiveUpdate();
lastStats = data;
updateIndex();
currentPage.update();
}).always(function () {
fetchLiveStats();
});
}
function floatToString(float) {
return float.toFixed(6).replace(/[0\.]+$/, '');
}
var xhrPageLoading;
function routePage(loadedCallback) {
if (currentPage) currentPage.destroy();
$('#page').html('');
$('#loading').show();
if (xhrPageLoading)
xhrPageLoading.abort();
$('.hot_link').parent().removeClass('active');
var $link = $('a.hot_link[href="' + (window.location.hash || '#') + '"]');
$link.parent().addClass('active');
var page = $link.data('page');
xhrPageLoading = $.ajax({
url: 'pages/' + page,
cache: false,
success: function (data) {
$('#loading').hide();
$('#page').show().html(data);
currentPage.update();
if (loadedCallback) loadedCallback();
}
});
}
function updateIndex(){
updateText('coinName', lastStats.config.coin);
updateText('poolVersion', lastStats.config.version);
}
function getBlockchainUrl(id) {
return blockchainExplorer.replace('{symbol}', lastStats.config.symbol.toLowerCase()).replace('{id}', id);
}
$(function(){
$("head").append("<link rel='stylesheet' href=" + themeCss + ">");
$.get(api + '/stats', function(data){
lastStats = data;
updateIndex();
routePage(fetchLiveStats);
});
});
</script>
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand"><span id="coinName"></span> Mining Pool</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a class="hot_link" data-page="home.html" href="#">
<i class="fa fa-home"></i> Home
</a></li>
<li><a class="hot_link" data-page="getting_started.html" href="#getting_started">
<i class="fa fa-rocket"></i> Getting Started
</a></li>
<li><a class="hot_link" data-page="pool_blocks.html" href="#pool_blocks">
<i class="fa fa-cubes"></i> Pool Blocks
</a></li>
<li><a class="hot_link" data-page="payments.html" href="#payments">
<i class="fa fa-paper-plane-o"></i> Payments
</a></li>
<li><a class="hot_link" data-page="support.html" href="#support">
<i class="fa fa-comments"></i> Support
</a></li>
</ul>
<div id="stats_updated">Stats Updated &nbsp;<i class="fa fa-bolt"></i></div>
</div>
</div>
</div>
<div class="container">
<div id="page"></div>
<p id="loading" class="text-center"><i class="fa fa-circle-o-notch fa-spin"></i></p>
</div>
<footer>
<div class="text-muted">
Powered by <a target="_blank" href="//cryptonotemining.org"><i class="fa fa-github"></i> cryptonote-universal-pool</a>
<span id="poolVersion"></span>
open sourced under the <a href="http://www.gnu.org/licenses/gpl-2.0.html">GPL</a>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,130 @@
<!-- /// define Handlebars template /// -->
<script id="monitoringInfo" type="text/x-handlebars-template">
<div class="tab-pane active" id="rpcLog">
<div class="row">
<div class="col-sm-6">
<h3>Daemon</h3>
<ul class="list-unstyled">
<li><strong>Last check:</strong> {{monitoringDaemon.lastCheck}}</li>
<li><strong>Last status:</strong>
<span id="daemonStatus">{{monitoringDaemon.lastStatus}}</span>
</li>
<li><strong>Last response:</strong>
<pre>{{monitoringDaemon.lastResponse}}</pre>
</li>
<li><strong>Last fail:</strong>
<span>{{monitoringDaemon.lastFail}}</span>
</li>
<li><strong>Last fail response:</strong>
<pre>{{monitoringDaemon.lastFailResponse}}</pre>
</li>
</ul>
</div>
<div class="col-sm-6">
<h3>Wallet</h3>
<ul class="list-unstyled">
<li><strong>Last check:</strong> {{monitoringWallet.lastCheck}}</li>
<li><strong>Last status:</strong>
<span id="walletStatus">{{monitoringWallet.lastStatus}}</span>
</li>
<li><strong>Last response:</strong>
<pre>{{monitoringWallet.lastResponse}}</pre>
</li>
<li><strong>Last fail:</strong>
<span>{{monitoringWallet.lastFail}}</span>
</li>
<li><strong>Last fail response:</strong>
<pre>{{monitoringWallet.lastFailResponse}}</span></pre>
</ul>
</div>
</div>
<h3>Logs</h3>
<table class="table table-hover table-striped logList" id="logTable">
<thead>
<tr>
<th class="sort">Name <i class="fa fa-sort"></i></th>
<th class="sort">Modified <i class="fa fa-sort"></i></th>
<th class="sort">Size <i class="fa fa-sort"></i></th>
</tr>
</thead>
<tbody>
{{#each logs}}
<tr>
<td data-sort="{{@key}}"><a href="{{this.link}}" target="_blank">{{@key}}</a></td>
<td data-sort="{{this.changed}}">{{this.changed}}</td>
<td data-sort="{{this.size}}">{{this.size}} bytes</td>
</tr>
{{/each}}
</tbody>
</table>
</div>
</script>
<script>
function getCheckTime(timestamp) {
return timestamp ? $.timeago(new Date(timestamp * 1000).toISOString()) : null;
}
function monitoringInfoParse(data) {
var monitoringDaemon = {
lastCheck: getCheckTime(data['monitoring'].daemon.lastCheck) || 'never',
lastStatus: data['monitoring'].daemon.lastStatus || '',
lastFail: getCheckTime(data['monitoring'].daemon.lastFail) || 'never',
lastFailResponse: data['monitoring'].daemon.lastFailResponse || ' ',
lastResponse: data['monitoring'].daemon.lastResponse || ' '
};
var monitoringWallet = {
lastCheck: getCheckTime(data['monitoring'].wallet.lastCheck) || 'never',
lastStatus: data['monitoring'].wallet.lastStatus || '',
lastFail: getCheckTime(data['monitoring'].wallet.lastFail) || 'never',
lastFailResponse: data['monitoring'].wallet.lastFailResponse || ' ',
lastResponse: data['monitoring'].wallet.lastResponse || ' '
};
var properData = {};
for(var prop in data) {
if(data.hasOwnProperty('logs')) {
properData['logs'] = data['logs'];
for(var log in data['logs']) {
properData['logs'][log].changed = Date(data['logs'][log].changed * 1000);
data['logs'][log].link = api + '/admin_log?file=' + log + '&password=' + docCookies.getItem('password');
}
}
}
properData['monitoringDaemon'] = monitoringDaemon;
properData['monitoringWallet'] = monitoringWallet;
return properData;
}
function renderLogInfo() {
$.ajax({
url: api + '/admin_monitoring',
data: {password: docCookies.getItem('password')},
cache: false,
dataType: 'json',
success: function(data) {
renderTemplate(monitoringInfoParse(data), '#monitoringInfo', '#monitoringInfoView');
$('#daemonStatus').addClass(data['monitoring'].daemon.lastStatus == 'ok' ? 'text-success' : 'text-danger');
$('#walletStatus').addClass(data['monitoring'].wallet.lastStatus == 'ok' ? 'text-success' : 'text-danger');
$('#logTable th.sort').on('click', sortTable);
}
});
}
$(function() {
renderLogInfo();
});
</script>
<div class="adminMonitor">
<!-- Tab panes -->
<div class="tab-content">
<div id="monitoringInfoView"></div>
</div>
</div>

View File

@ -0,0 +1,83 @@
<script>
function formatLuck(difficulty, shares) {
var percent = Math.round(shares / difficulty * 100);
if(!percent) {
return '<span class="luckGood">?</span>';
}
else if(percent <= 100) {
return '<span class="luckGood">' + percent + '%</span>';
}
else {
return '<span class="luckBad">' + percent + '%</span>';
}
}
function getStats(promptPassword) {
var password = docCookies.getItem('password');
if(!password || promptPassword) {
password = prompt('Enter admin password');
}
$('#loading').show();
$.ajax({
url: api + '/admin_stats',
data: {password: password},
success: function(data) {
docCookies.setItem('password', password, Infinity);
$('#loading').hide();
renderData(data);
},
error: function(e) {
docCookies.removeItem('password');
getStats(true);
}
});
}
function renderData(data) {
$('#totalOwed').text(getReadableCoins(data.totalOwed));
$('#totalPaid').text(getReadableCoins(data.totalPaid));
$('#totalMined').text(getReadableCoins(data.totalRevenue));
$('#profit').text(getReadableCoins(data.totalRevenue - data.totalOwed - data.totalPaid));
$('#averageLuck').html(formatLuck(data.totalDiff, data.totalShares));
$('#orphanPercent').text((data.blocksOrphaned / data.blocksUnlocked * 100).toFixed(2));
$('#registeredAddresses').text(data.totalWorkers);
}
$(function() {
getStats();
});
</script>
<div class="row adminStats">
<div class="col-sm-3 color1">
<h4>Total Owed</h4>
<span class="statValue" id="totalOwed">...</span>
</div>
<div class="col-sm-3 color2">
<h4>Total Paid</h4>
<span class="statValue" id="totalPaid">...</span>
</div>
<div class="col-sm-3 color3">
<h4>Total Mined</h4>
<span class="statValue" id="totalMined">...</span>
</div>
<div class="col-sm-3 color4">
<h4>Profit (before tx fees)</h4>
<span class="statValue" id="profit">...</span>
</div>
<div class="col-sm-4 color5">
<h4>Average Luck (shares/diff)</h4>
<span class="statValue lead" id="averageLuck">...</span>
</div>
<div class="col-sm-4 color6">
<h4>Orphan Percent</h4>
<span class="statValue lead" id="orphanPercent">...</span>
</div>
<div class="col-sm-4 color7">
<h4>Registered Addresses</h4>
<span class="statValue lead" id="registeredAddresses">...</span>
</div>
</div>

View File

@ -0,0 +1,80 @@
<style>
td {
text-align: center
}
</style>
<!-- /// define Handlebars template /// -->
<script id="usersListTable" type="text/x-handlebars-template">
{{#each users}}
<tr>
<td><a href="./?wallet={{this.number}}">{{this.number}}</a></td>
<td data-sort="{{this.wallet.hashrate}}">{{this.readableHashrate}}</td>
<td data-sort="{{this.wallet.hashes}}">{{this.readableHashes}}</td>
<td data-sort="{{this.wallet.pending}}">{{this.readablePending}}</td>
<td data-sort="{{this.wallet.paid}}">{{this.readablePaid}}</td>
<td data-sort="{{this.wallet.lastShare}}">{{this.timeago}}</td>
</tr>
{{/each}}
</script>
<script>
function parseUsers(wallets) {
var walletsArray = [],
properObject = {};
for(var wallet in wallets) {
if(wallets.hasOwnProperty(wallet)) {
var userData = wallets[wallet];
walletsArray.push({
number: wallet,
wallet: userData,
timeago: $.timeago(new Date(userData.lastShare * 1000).toISOString()),
readablePending: getReadableCoins(userData.pending),
readablePaid: getReadableCoins(userData.paid),
readableHashrate: getReadableHashRateString(userData.hashrate) + '/s',
readableHashes: getReadableHashRateString(userData.hashes)
});
}
}
properObject['users'] = walletsArray.sort(function(a, b) {
return a.wallet.hashrate - b.wallet.hashrate
}).reverse();
return properObject;
}
function cretaUserTable() {
$.ajax({
url: api + '/admin_users',
data: {password: docCookies.getItem('password')},
cache: false,
dataType: 'json',
success: function(data) {
renderTemplate(parseUsers(data), '#usersListTable', '#template');
}
});
}
$(function() {
$('[data-toggle="tooltip"]').tooltip();
$('.usersList th.sort').on('click', sortTable);
cretaUserTable();
});
</script>
<div class="table-responsive">
<table class="table table-hover table-striped usersList">
<thead>
<tr>
<th>Wallet</th>
<th class="sort" style="width:10%;">Hashrate <i class="fa fa-sort"></i></th>
<th class="sort" style="width:10%;">Hashes <i class="fa fa-sort"></i></th>
<th class="sort" style="width:16%;">Pending <i class="fa fa-sort"></i></th>
<th class="sort" style="width:10%;">Paid <i class="fa fa-sort"></i></th>
<th class="sort" style="width:14%;">Last share <i class="fa fa-sort"></i></th>
</tr>
</thead>
<tbody id="template">
</tbody>
</table>
</div>

View File

@ -0,0 +1,224 @@
<style>
hr{
border-top-color: #d9d9d9;
margin-top: 40px !important;
margin-bottom: 40px !important;
}
#miningPorts > .stats{
width: auto !important;
margin-right: 70px;
margin-left: 15px;
display: inline-block;
}
#miningPorts > .stats:last-child{
margin-right: 0;
}
.getting_started_windows{
line-height: 40px;
}
#getting_started_list > li{
margin-bottom: 20px;
}
#mining_apps > tr:first-child > td{
padding-top: 35px;
}
#mining_apps > tr > td{
border-top: none;
}
#mining_apps > tr:nth-child(even) > td{
border-bottom: 1px solid #e5e5e5;
padding-bottom: 20px;
}
#mining_apps > tr:nth-child(odd) > td{
padding-top: 20px;
}
#mining_apps{
margin-top: 10px;
}
.miningAppTitle{
font-weight: bold;
}
.exampleAddress{
font-style: italic;
}
#cpuminer_code{
display: inline-block;
white-space: normal;
}
</style>
<h3>Connection Details</h3>
<div class="stats">
<div><i class="fa fa-cloud"></i> Mining Pool Address: <span id="miningPoolHost"></span></div>
</div>
<h4>Mining Ports</h4>
<div id="miningPorts" class="row">
<div class="stats">
<div><i class="fa fa-tachometer"></i> Port: <span class="miningPort"></span></div>
<div><i class="fa fa-unlock-alt"></i> Starting Difficulty: <span class="miningPortDiff"></span></div>
<div><i class="fa fa-question"></i> Description: <span class="miningPortDesc"></span></div>
</div>
</div>
<hr>
<h3>For <i class="fa fa-windows"></i> Windows users new to mining</h3>
<p class="getting_started_windows">
You can <a class="btn btn-default btn-sm" target="_blank" id="easyminer_link"><i class="fa fa-download"></i> Download</a>
and run <a target="_blank" href="https://github.com/zone117x/cryptonote-easy-miner">cryptonote-easy-miner</a> <i class="fa fa-github"></i>
which will automatically generate your wallet address and run CPUMiner with the proper parameters.
</p>
<hr>
<h3>Mining Apps</h3>
<div class="yourStats table-responsive">
<table class="table">
<thead>
<tr>
<th><i class="fa fa-book"></i> App Name</th>
<th><i class="fa fa-car"></i> Architecture</th>
<th><i class="fa fa-download"></i> Downloads</th>
<th><i class="fa fa-comments"></i> Discussion</th>
<th><i class="fa fa-file-code-o"></i> Source Code</th>
</tr>
</thead>
<tbody id="mining_apps">
<tr>
<td class="miningAppTitle">XMR-Stak-CPU (by fireice_uk)</td>
<td>CPU</td>
<td><a target="_blank" href="https://github.com/fireice-uk/xmr-stak-cpu/releases">Github</a></td>
<td><a target="_blank" href="https://www.reddit.com/r/Monero/comments/5lsfgt/xmrstakcpu_high_performance_open_source_miner/">Reddit</a></td>
<td><a target="_blank" href="https://github.com/fireice-uk/xmr-stak-cpu">Github</a></td>
</tr>
<tr>
<td colspan="5">
<span>Example:</span>
<code>xmr-stak-cpu</code>
Please edit <code>config.txt</code> file to suit your needs.
</td>
</tr>
<tr>
<td class="miningAppTitle">XMR-Stak-AMD (by fireice_uk)</td>
<td>OpenCL (AMD)</td>
<td><a target="_blank" href="https://github.com/fireice-uk/xmr-stak-amd/releases">Github</a></td>
<td><a target="_blank" href="https://www.reddit.com/r/Monero/comments/5prg4a/xmrstakamd_released/">reddit</a></td>
<td><a target="_blank" href="https://github.com/fireice-uk/xmr-stak-amd">Github</a></td>
</tr>
<tr>
<td colspan="5">
<span>Example:</span>
<code>xmr-stak-amd</code>
Please edit <code>config.txt</code> file to suit your needs.
</td>
</tr>
<tr>
<td class="miningAppTitle">CPUMiner (forked by LucasJones & Wolf)</td>
<td>CPU</td>
<td><a target="_blank" href="https://github.com/wolf9466/cpuminer-multi">Github</a></td>
<td><a target="_blank" href="https://bitcointalk.org/index.php?topic=632724">BitcoinTalk</a></td>
<td><a target="_blank" href="https://github.com/wolf9466/cpuminer-multi">Github</a></td>
</tr>
<tr>
<td colspan="5">
<span>Example:</span>
<code>minerd -a cryptonight -o stratum+tcp://<span class="exampleHost"></span>:<span class="examplePort"></span> -u <span class="exampleAddress">YOUR_WALLET_ADDRESS</span> -p x</code>
</td>
</tr>
<tr>
<td class="miningAppTitle">YAM Miner (by yvg1900)</td>
<td>CPU</td>
<td><a target="_blank" href="https://mega.co.nz/#F!h0tkXSxZ!f62uoUXogkxQmP2xO8Ib-g">MEGA</a></td>
<td><a target="_blank" href="https://twitter.com/yvg1900">Twitter</a></td>
<td>Proprietary <i class="fa fa-frown-o"></i></td>
</tr>
<tr>
<td colspan="5">
<span>Example:</span>
<code>yam -c x -M stratum+tcp://<span class="exampleAddress">YOUR_WALLET_ADDRESS</span>:x@<span class="exampleHost"></span>:<span class="examplePort"></span>/xmr</code>
</td>
</tr>
<tr>
<td class="miningAppTitle">Claymore CPU Miner</td>
<td>CPU</td>
<td><a target="_blank" href="https://mega.co.nz/#F!Hg4g1bLT!4Upg8GNiEZYCaZ04XVh_yg">MEGA</a></td>
<td><a target="_blank" href="https://bitcointalk.org/index.php?topic=647251.0">BitcoinTalk</a></td>
<td>Proprietary <i class="fa fa-frown-o"></i></td>
</tr>
<tr>
<td colspan="5">
<span>Example:</span>
<code>NsCpuCNMiner64 -o stratum+tcp://<span class="exampleHost"></span>:<span class="examplePort"></span> -u <span class="exampleAddress">YOUR_WALLET_ADDRESS</span> -p x</code>
</td>
</tr>
<tr>
<td class="miningAppTitle">Claymore GPU Miner</td>
<td>OpenCL (AMD)</td>
<td><a target="_blank" href="https://mega.co.nz/#F!e4JVEAIJ!l1iF4z10fMyJzY5-LnyC2A">MEGA</a></td>
<td><a target="_blank" href="https://bitcointalk.org/index.php?topic=638915.0">Discussion</a></td>
<td>Proprietary <i class="fa fa-frown-o"></i></td>
</tr>
<tr>
<td colspan="5">
<span>Example:</span>
<code>NsGpuCNMiner -o stratum+tcp://<span class="exampleHost"></span>:<span class="examplePort"></span> -u <span class="exampleAddress">YOUR_WALLET_ADDRESS</span> -p x</code>
</td>
</tr>
<tr>
<td class="miningAppTitle">ccminer (forked by tsiv)</td>
<td>CUDA (Nvidia)</td>
<td><a target="_blank" href="https://github.com/tsiv/ccminer-cryptonight/releases">Github</a></td>
<td><a target="_blank" href="https://bitcointalk.org/index.php?topic=656841.msg7487737#msg7487737">BitcoinTalk</a></td>
<td><a target="_blank" href="https://github.com/tsiv/ccminer-cryptonight">Github</a></td>
</tr>
<tr>
<td colspan="5">
<span>Example:</span>
<code>ccminer -o stratum+tcp://<span class="exampleHost"></span>:<span class="examplePort"></span> -u <span class="exampleAddress">YOUR_WALLET_ADDRESS</span> -p x</code>
</td>
</tr>
</tbody>
</table>
</div>
<script>
currentPage = {
destroy: function(){
},
update: function(){
var portsJson = JSON.stringify(lastStats.config.ports);
if (lastPortsJson !== portsJson) {
lastPortsJson = portsJson;
var $miningPortChildren = [];
for (var i = 0; i < lastStats.config.ports.length; i++) {
var portData = lastStats.config.ports[i];
var $portChild = $(miningPortTemplate);
$portChild.find('.miningPort').text(portData.port);
$portChild.find('.miningPortDiff').text(portData.difficulty);
$portChild.find('.miningPortDesc').text(portData.desc);
$miningPortChildren.push($portChild);
}
$miningPorts.empty().append($miningPortChildren);
}
updateTextClasses('exampleHost', poolHost);
updateTextClasses('examplePort', lastStats.config.ports[0].port.toString());
}
};
document.getElementById('easyminer_link').setAttribute('href', easyminerDownload);
document.getElementById('miningPoolHost').textContent = poolHost;
var lastPortsJson = '';
var $miningPorts = $('#miningPorts');
var miningPortTemplate = $miningPorts.html();
$miningPorts.empty();
</script>

708
pages/home.html 100644
View File

@ -0,0 +1,708 @@
<style>
.marketFooter{
font-size: 10px;
opacity: 0.6;
}
#networkLastReward{
text-transform: uppercase;
}
#lastHash{
font-family: 'Inconsolata', monospace;
font-size: 0.8em;
}
#poolDonations{
font-size: 0.75em;
}
#miningProfitCalc{
margin: 35px 0;
}
#calcHashDropdown{
border-radius: 0;
border-left: 0;
border-right: 0;
}
#calcHashHolder{
width: 590px;
max-width: 100%;
}
#calcHashRate{
z-index: inherit;
font-family: 'Inconsolata', monospace;
}
#calcHashAmount{
font-family: 'Inconsolata', monospace;
}
#calcHashResultsHolder{
min-width: 145px;
max-width: 145px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#yourStatsInput{
z-index: inherit;
font-family: 'Inconsolata', monospace;
}
#yourAddressDisplay > span {
font-family: 'Inconsolata', monospace;
}
#lookUp > span:nth-child(2){
display: none;
}
.yourStats{
display: none;
}
#yourAddressDisplay{
display: inline-block;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: middle;
font-family: 'Inconsolata', monospace;
font-size: 0.9em;
}
#addressError{
color: red;
}
#payments_rows > tr > td{
vertical-align: middle;
font-family: 'Inconsolata', monospace;
font-size: 0.95em;
text-align: center;
}
#payments_rows > tr > td:nth-child(2){
text-align: left;
}
</style>
<div id="siteInfo">
<!-- Description or information about this pool -->
</div>
<div class="row">
<div class="col-md-4 stats">
<h3>Network</h3>
<div><i class="fa fa-tachometer"></i> Hash Rate: <span id="networkHashrate"></span></div>
<div><i class="fa fa-clock-o"></i> Block Found: <span id="networkLastBlockFound"></span></div>
<div><i class="fa fa-unlock-alt"></i> Difficulty: <span id="networkDifficulty"></span></div>
<div><i class="fa fa-bars"></i> Blockchain Height: <span id="blockchainHeight"></span></div>
<div><i class="fa fa-money"></i> Last Reward: <span id="networkLastReward"></span></div>
<div><i class="fa fa-paw"></i> Last Hash: <a id="lastHash" target="_blank"></a></div>
</div>
<div class="col-md-4 stats">
<h3>Our Pool</h3>
<div><i class="fa fa-tachometer"></i> Hash Rate: <span id="poolHashrate"></span></div>
<div><i class="fa fa-clock-o"></i> Block Found: <span id="poolLastBlockFound"></span></div>
<div><i class="fa fa-users"></i> Connected Miners: <span id="poolMiners"></span></div>
<div id="donations"><i class="fa fa-gift"></i> Donations: <span id="poolDonations"></span></div>
<div><i class="fa fa-money"></i> Total Pool Fee: <span id="poolFee"></span></div>
<div><i class="fa fa-history"></i> Block Found Every: <span id="blockSolvedTime"></span> (est.)</div>
</div>
<div class="col-md-4 stats marketRate">
<h3 id="marketHeader">Market</h3>
<div class="marketFooter">Updated: <span id="marketLastUpdated"></span></div>
<div class="marketFooter">Powered by <a href="https://www.cryptonator.com/">Cryptonator</a></div>
</div>
</div>
<!-- <hr> -->
<div class="row chartsPoolStat">
<div class="col-sm-2 chartWrap">
<h4>Hash/USD <span data-toggle="tooltip" data-placement="top" data-original-title="Reward * Rate / Difficulty"><i class="fa fa-question-circle"></i></span></h4>
<div id="chartHashUsd" data-chart="profit">
<div class="chart"></div>
<!-- <p class="text-center" id="cur_profit">-</p> -->
</div>
</div>
<div class="col-sm-20 chartWrap">
<h4>Price in USD</h4>
<div id="chartPriceUsd" data-chart="price">
<div class="chart"></div>
<!-- <p class="text-center" id="cur_price">-</p> -->
</div>
</div>
<div class="col-sm-20 chartWrap">
<h4>Difficulty</h4>
<div id="chartDifficulty" data-chart="diff">
<div class="chart"></div>
<!-- <p class="text-center" id="cur_diff">-</p> -->
</div>
</div>
<div class="col-sm-20 chartWrap">
<h4>Hashrate</h4>
<div id="chartHashrate" data-chart="hashrate">
<div class="chart"></div>
<!-- <p class="text-center" id="cur_hashrate">-</p> -->
</div>
</div>
<div class="col-sm-20 chartWrap">
<h4>Workers</h4>
<div id="chartWorkers" data-chart="workers">
<div class="chart"></div>
<!-- <p class="text-center" id="cur_workers">-</p> -->
</div>
</div>
<script>
var currencyGraphStat = {
type: 'line',
width: '100%',
height: '75',
lineColor: '#03a678',
fillColor: 'rgba(3, 166, 120, .3)',
spotColor: null,
minSpotColor: null,
maxSpotColor: null,
highlightLineColor: '#236d26',
spotRadius: 3,
chartRangeMin: 0,
drawNormalOnTop: false,
tooltipFormat: '<b>{{y}}</b>, {{offset:names}}'
};
var userGraphStat = {
hashrate: {
type: 'line',
width: '100%',
height: '180',
lineColor: '#03a678',
fillColor: 'rgba(3, 166, 120, .3)',
spotColor: null,
minSpotColor: null,
maxSpotColor: null,
highlightLineColor: '#236d26',
spotRadius: 3,
drawNormalOnTop: false,
chartRangeMin: 0,
tooltipFormat: '<b>{{y}}</b>, {{offset:names}}'
},
payments: {
type: 'line',
width: '100%',
height: '180',
lineColor: '#03a678',
fillColor: 'rgba(3, 166, 120, .3)',
spotColor: null,
minSpotColor: null,
maxSpotColor: null,
highlightLineColor: '#236d26',
spotRadius: 3,
drawNormalOnTop: false,
chartRangeMin: 0,
tooltipFormat: '<b>{{y}}</b>, {{offset:names}}'
}
};
$(function() {
$('[data-toggle="tooltip"]').tooltip();
});
</script>
</div>
<!-- <hr> -->
<div id="miningProfitCalc">
<h3>Estimate Mining Profits</h3>
<div id="calcHashHolder">
<div class="input-group">
<input type="number" class="form-control" id="calcHashRate" placeholder="Enter Your Hash Rate">
<div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="calcHashDropdown">
<span id="calcHashUnit" data-mul="1">KH/s</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu dropdown-menu-right" role="menu" id="calcHashUnits">
<li><a href="#" data-mul="0">H/s</a></li>
<li><a href="#" data-mul="1">KH/s</a></li>
<li><a href="#" data-mul="2">MH/s</a></li>
</ul>
</div>
<span class="input-group-addon">=</span>
<span class="input-group-addon" id="calcHashResultsHolder"><span id="calcHashAmount"></span> <span id="calcHashSymbol"></span>/day</span>
</div>
</div>
</div>
<hr>
<div class="stats">
<h3>Your Stats & Payment History</h3>
<div class="input-group">
<input class="form-control" id="yourStatsInput" type="text" placeholder="Enter Your Address">
<span class="input-group-btn"><button class="btn btn-default" type="button" id="lookUp">
<span><i class="fa fa-search"></i> Lookup</span>
<span><i class="fa fa-refresh fa-spin"></i> Searching...</span>
</button></span>
</div>
<div class="row">
<div class="col-sm-4 stats">
<div id="addressError"></div>
<!-- <div class="yourStats"><i class="fa fa-key"></i> Address: <span id="yourAddressDisplay"></span></div> -->
<div class="yourStats"><i class="fa fa-bank"></i> Pending Balance: <span id="yourPendingBalance"></span></div>
<div class="yourStats"><i class="fa fa-money"></i> Total Paid: <span id="yourPaid"></span></div>
<div class="yourStats"><i class="fa fa-clock-o"></i> Last Share Submitted: <span id="yourLastShare"></span></div>
<div class="yourStats"><i class="fa fa-tachometer"></i> Hash Rate: <span id="yourHashrateHolder"></span></div>
<div class="yourStats"><i class="fa fa-cloud-upload"></i> Total Hashes Submitted: <span id="yourHashes"></span></div>
</div>
<div class="col-sm-4">
<div class="userChart" data-chart="user_hashrate">
<h4>Hash Rate</h4>
<div class="chart">
</div>
</div>
</div>
<div class="col-sm-4">
<div class="userChart" data-chart="user_payments">
<h4>Payments</h4>
<div class="chart">
</div>
</div>
</div>
</div>
<br class="yourStats">
<h4 class="yourStats">Payments</h4>
<div class="yourStats table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th><i class="fa fa-clock-o"></i> Time Sent</th>
<th><i class="fa fa-paw"></i> Transaction Hash</th>
<th><i class="fa fa-money"></i> Amount</th>
<th><i class="fa fa-sitemap"></i> Mixin</th>
</tr>
</thead>
<tbody id="payments_rows">
</tbody>
</table>
</div>
<p class="yourStats text-center">
<button type="button" class="btn btn-default" id="loadMorePayments">Load More</button>
</p>
</div>
<script>
currentPage = {
destroy: function(){
$('#networkLastBlockFound,#poolLastBlockFound,#yourLastShare,#marketLastUpdated').timeago('dispose');
if (xhrAddressPoll) xhrAddressPoll.abort();
if (addressTimeout) clearTimeout(addressTimeout);
clearInterval(intervalMarketPolling);
for (var marketPoll in xhrMarketGets){
xhrMarketGets[marketPoll].abort();
}
if (xhrGetPayments) xhrGetPayments.abort();
},
update: function(){
$('#networkLastBlockFound').timeago('update', new Date(lastStats.network.timestamp * 1000).toISOString());
updateText('networkHashrate', getReadableHashRateString(lastStats.network.difficulty / lastStats.config.coinDifficultyTarget) + '/sec');
updateText('networkDifficulty', lastStats.network.difficulty.toString());
updateText('blockchainHeight', lastStats.network.height.toString());
updateText('networkLastReward', getReadableCoins(lastStats.network.reward, 4));
updateText('lastHash', lastStats.network.hash.substr(0, 13) + '...').setAttribute('href', getBlockchainUrl(lastStats.network.hash));
updateText('poolHashrate', getReadableHashRateString(lastStats.pool.hashrate) + '/sec');
if (lastStats.pool.lastBlockFound){
var d = new Date(parseInt(lastStats.pool.lastBlockFound)).toISOString();
$('#poolLastBlockFound').timeago('update', d);
}
else
$('#poolLastBlockFound').removeAttr('title').data('ts', '').update('Never');
//updateText('poolRoundHashes', lastStats.pool.roundHashes.toString());
updateText('poolMiners', lastStats.pool.miners.toString());
var totalFee = lastStats.config.fee;
if (Object.keys(lastStats.config.donation).length) {
var totalDonation = 0;
for(var i in lastStats.config.donation) {
totalDonation += lastStats.config.donation[i];
}
totalFee += totalDonation;
updateText('poolDonations', floatToString(totalDonation) + '% to open-source devs');
}
else{
$('#donations').hide()
}
updateText('poolFee', floatToString(totalFee) + '%');
updateText('blockSolvedTime', getReadableTime(lastStats.network.difficulty / lastStats.pool.hashrate));
updateText('calcHashSymbol', lastStats.config.symbol);
calcEstimateProfit();
}
};
$('#networkLastBlockFound,#poolLastBlockFound,#yourLastShare,#marketLastUpdated').timeago();
function getReadableTime(seconds){
var units = [ [60, 'second'], [60, 'minute'], [24, 'hour'],
[7, 'day'], [4, 'week'], [12, 'month'], [1, 'year'] ];
function formatAmounts(amount, unit){
var rounded = Math.round(amount);
return '' + rounded + ' ' + unit + (rounded > 1 ? 's' : '');
}
var amount = seconds;
for (var i = 0; i < units.length; i++){
if (amount < units[i][0])
return formatAmounts(amount, units[i][1]);
amount = amount / units[i][0];
}
return formatAmounts(amount, units[units.length - 1][1]);
}
function getReadableHashRateString(hashrate){
var i = 0;
var byteUnits = [' H', ' KH', ' MH', ' GH', ' TH', ' PH' ];
while (hashrate > 1000){
hashrate = hashrate / 1000;
i++;
}
return hashrate.toFixed(2) + byteUnits[i];
}
/* Market data polling */
var intervalMarketPolling = setInterval(updateMarkets, 300000); //poll market data every 5 minutes
var xhrMarketGets = {};
updateMarkets();
function updateMarkets(){
var completedFetches = 0;
var marketsData = [];
for (var i = 0; i < cryptonatorWidget.length; i++){
(function(i){
cryptonatorWidget[i] = cryptonatorWidget[i].replace('{symbol}', lastStats.config.symbol.toLowerCase());
xhrMarketGets[cryptonatorWidget[i]] = $.get('https://api.cryptonator.com/api/ticker/' + cryptonatorWidget[i], function(data){
if(data.error) {
return;
}
$('.marketRate').show();
marketsData[i] = data;
completedFetches++;
if (completedFetches !== cryptonatorWidget.length) return;
var $marketHeader = $('#marketHeader');
$('.marketTicker').remove();
for (var f = marketsData.length - 1; f >= 0 ; f--){
var price = parseFloat(marketsData[f].ticker.price);
if (price > 1) price = Math.round(price * 100) / 100;
else price = marketsData[f].ticker.price;
$marketHeader.after('<div class="marketTicker">' + marketsData[f].ticker.base + ': <span>' + price + ' ' + marketsData[f].ticker.target + '</span></div>');
}
$('#marketLastUpdated').timeago('update', new Date(marketsData[0].timestamp * 1000).toISOString());
}, 'json');
})(i);
}
}
/* Hash Profitability Calculator */
$('#calcHashRate').keyup(calcEstimateProfit).change(calcEstimateProfit);
$('#calcHashUnits > li > a').click(function(e){
e.preventDefault();
$('#calcHashUnit').text($(this).text()).data('mul', $(this).data('mul'));
calcEstimateProfit();
});
function calcEstimateProfit(){
try {
var rateUnit = Math.pow(1000,parseInt($('#calcHashUnit').data('mul')));
var hashRate = parseFloat($('#calcHashRate').val()) * rateUnit;
var profit = (hashRate * 86400 / lastStats.network.difficulty) * lastStats.network.reward;
if (profit) {
updateText('calcHashAmount', getReadableCoins(profit, 2, true));
return;
}
}
catch(e){ }
updateText('calcHashAmount', '');
}
/* Stats by mining address lookup */
function getPaymentCells(payment){
return '<td>' + formatDate(payment.time) + '</td>' +
'<td>' + formatPaymentLink(payment.hash) + '</td>' +
'<td>' + getReadableCoins(payment.amount, 4, true) + '</td>' +
'<td>' + payment.mixin + '</td>';
}
var xhrAddressPoll;
var addressTimeout;
$('#lookUp').click(function(){
var address = $('#yourStatsInput').val().trim();
if (!address){
$('#yourStatsInput').focus();
return;
}
$('#addressError').hide();
$('.yourStats').hide();
$('#payments_rows').empty();
$('#lookUp > span:first-child').hide();
$('#lookUp > span:last-child').show();
if (xhrAddressPoll) xhrAddressPoll.abort();
if (addressTimeout) clearTimeout(addressTimeout);
function fetchAddressStats(longpoll){
xhrAddressPoll = $.ajax({
url: api + '/stats_address',
data: {
address: address,
longpoll: longpoll
},
dataType: 'json',
cache: 'false',
success: function(data){
$('#lookUp > span:last-child').hide();
$('#lookUp > span:first-child').show();
if (!data.stats){
$('.yourStats, .userChart').hide();
$('#addressError').text(data.error).show();
if (addressTimeout) clearTimeout(addressTimeout);
addressTimeout = setTimeout(function(){
fetchAddressStats(false);
}, 2000);
return;
}
$('#addressError').hide();
if (data.stats.lastShare)
$('#yourLastShare').timeago('update', new Date(parseInt(data.stats.lastShare) * 1000).toISOString());
else
updateText('yourLastShare', 'Never');
updateText('yourHashrateHolder', (data.stats.hashrate || '0 H') + '/sec');
updateText('yourHashes', (data.stats.hashes || 0).toString());
updateText('yourPaid', getReadableCoins(data.stats.paid));
updateText('yourPendingBalance', getReadableCoins(data.stats.balance));
renderPayments(data.payments);
$('.yourStats').show(function(){
xhrRenderUserCharts = $.ajax({
url: api + '/stats_address?address=' + address + '&longpoll=false',
cache: false,
dataType: 'json',
success: function(data) {
createUserCharts(data);
}
});
});
docCookies.setItem('mining_address', address, Infinity);
fetchAddressStats(true);
},
error: function(e){
if (e.statusText === 'abort') return;
$('#addressError').text('Connection error').show();
if (addressTimeout) clearTimeout(addressTimeout);
addressTimeout = setTimeout(function(){
fetchAddressStats(false);
}, 2000);
}
});
}
fetchAddressStats(false);
});
var urlWalletAddress = location.search.split('wallet=')[1] || 0;
var address = urlWalletAddress || docCookies.getItem('mining_address');
var xhrRenderUserCharts;
function createUserCharts(data) {
for(var chart in userGraphStat) {
if(data['charts'][chart] && data['charts'][chart].length) {
var graphData = getGraphData(data['charts'][chart], chart == 'payments');
userGraphStat[chart].tooltipValueLookups = {names: graphData.names};
$('[data-chart=user_' + chart + ']').show().find('.chart').sparkline(graphData.values, userGraphStat[chart]);
}
}
}
if (address){
$('#yourStatsInput').val(address);
$('#lookUp').click();
}
$('#yourStatsInput').keyup(function(e){
if(e.keyCode === 13)
$('#lookUp').click();
});
var xhrGetPayments;
$('#loadMorePayments').click(function(){
if (xhrGetPayments) xhrGetPayments.abort();
xhrGetPayments = $.ajax({
url: api + '/get_payments',
data: {
time: $('#payments_rows').children().last().data('time'),
address: address
},
dataType: 'json',
cache: 'false',
success: function(data){
renderPayments(data);
}
});
});
/* Show stats of the currency */
function getGraphData (rawData, fixValueToCoins) {
var graphData = {
names: [],
values: []
};
if(rawData) {
for (var i = 0, xy; xy = rawData[i]; i++) {
graphData.names.push(new Date(xy[0]*1000).toUTCString());
graphData.values.push(fixValueToCoins ? getReadableCoins(xy[1], 4, true) : xy[1]);
}
}
return graphData;
}
function createCharts(data) {
if (data.hasOwnProperty("charts")) {
var graphData = {
profit: getGraphData(data.charts.profit),
diff: getGraphData(data.charts.difficulty),
hashrate: getGraphData(data.charts.hashrate),
price: getGraphData(data.charts.price),
workers: getGraphData(data.charts.workers)
};
for(var graphType in graphData) {
if(graphData[graphType].values.length > 1) {
var settings = jQuery.extend({}, currencyGraphStat);
settings.tooltipValueLookups = {names: graphData[graphType].names};
var $chart = $('[data-chart=' + graphType + '] .chart');
$chart.closest('.chartWrap').show();
$chart.sparkline(graphData[graphType].values, settings);
}
}
}
}
function loadStatistics () {
$.get(api + '/stats', function (stats) {
if (stats) {
showStats(stats)
}
});
}
function showStats (stats) {
$('#cur_diff').text(stats.network.difficulty);
$('#cur_hashrate').text(getReadableHashRateString(stats.pool.hashrate) + '/s');
$('#cur_workers').text(stats.pool.miners);
// Some values aren't available in stats.
// Get the values from charts data.
if (stats.hasOwnProperty('charts')) {
var priceData = stats.charts.price;
$('#cur_price').text(priceData ? priceData[priceData.length-1][1] : '---');
}
if (stats.hasOwnProperty('charts')) {
var profitValue;
var profitData = stats.charts.profit;
if (profitData) {
profitValue = profitData[profitData.length-1][1];
if (profitValue) {
profitValue = profitValue.toPrecision(3).toString().replace(/(.*?)e(\+|\-)(\d+)/, '$1<sup>10<sup>$2$3</sup></sup>');
}
else {
profitValue = '---';
}
}
else {
profitValue = '---';
}
$('#cur_profit').html(profitValue);
}
}
var xhrRenderCharts;
$(function(){
xhrRenderCharts = $.ajax({
url: api + '/stats',
cache: false,
success: createCharts
});
});
</script>

View File

@ -0,0 +1,98 @@
<style>
.paymentsStatHolder > span{
display: inline-block;
border-radius: 5px;
padding: 1px 9px;
border: 1px solid #e5e5e5;
margin: 2px;
}
.paymentsStatHolder > span > span{
font-weight: bold;
}
#payments_rows > tr > td{
vertical-align: middle;
font-family: 'Inconsolata', monospace;
font-size: 0.95em;
text-align: center;
}
</style>
<div class="paymentsStatHolder">
<span class="bg-primary">Total Payments: <span id="paymentsTotal"></span></span>
<span class="bg-info">Total Miners Paid: <span id="paymentsTotalPaid"></span></span>
<span class="bg-info">Minimum Payment Threshold: <span id="paymentsMinimum"></span></span>
<span class="bg-info">Denomination Unit: <span id="paymentsDenomination"></span></span>
</div>
<hr>
<div class="table-responsive">
<table class="table table-hover table-striped">
<thead>
<tr>
<th><i class="fa fa-clock-o"></i> Time Sent</th>
<th><i class="fa fa-paw"></i> Transaction Hash</th>
<th><i class="fa fa-money"></i> Amount</th>
<th><i class="fa fa-tag"></i> Fee</th>
<th><i class="fa fa-sitemap"></i> Mixin</th>
<th><i class="fa fa-group"></i> Payees</th>
</tr>
</thead>
<tbody id="payments_rows">
</tbody>
</table>
</div>
<p class="text-center">
<button type="button" class="btn btn-default" id="loadMorePayments">Load More</button>
</p>
<script>
function getTransactionUrl(id) {
return transactionExplorer.replace('{symbol}', lastStats.config.symbol.toLowerCase()).replace('{id}', id);
}
currentPage = {
destroy: function(){
if (xhrGetPayments) xhrGetPayments.abort();
},
update: function(){
updateText('paymentsTotal', lastStats.pool.totalPayments.toString());
updateText('paymentsTotalPaid', lastStats.pool.totalMinersPaid.toString());
updateText('paymentsMinimum', getReadableCoins(lastStats.config.minPaymentThreshold, 3));
updateText('paymentsDenomination', getReadableCoins(lastStats.config.denominationUnit, 3));
renderPayments(lastStats.pool.payments);
}
};
var xhrGetPayments;
$('#loadMorePayments').click(function(){
if (xhrGetPayments) xhrGetPayments.abort();
xhrGetPayments = $.ajax({
url: api + '/get_payments',
data: {
time: $('#payments_rows').children().last().data('time')
},
dataType: 'json',
cache: 'false',
success: function(data){
renderPayments(data);
}
});
});
function getPaymentCells(payment){
return '<td>' + formatDate(payment.time) + '</td>' +
'<td>' + formatPaymentLink(payment.hash) + '</td>' +
'<td>' + getReadableCoins(payment.amount, 4, true) + '</td>' +
'<td>' + getReadableCoins(payment.fee, 4, true) + '</td>' +
'<td>' + payment.mixin + '</td>' +
'<td>' + payment.recipients + '</td>';
}
</script>

View File

@ -0,0 +1,201 @@
<style>
.blocksStatHolder > span{
display: inline-block;
border-radius: 5px;
padding: 1px 9px;
border: 1px solid #e5e5e5;
margin: 2px;
}
.blocksStatHolder > span > span{
font-weight: bold;
}
#blocks_rows > tr > td{
vertical-align: middle;
font-family: 'Inconsolata', monospace;
font-size: 0.95em;
text-align: center;
}
.luckGood{
color: darkgreen;
}
.luckBad{
color: darkred;
}
</style>
<div class="blocksStatHolder">
<span class="bg-primary">Total Blocks Mined: <span id="blocksTotal"></span></span>
<span class="bg-info">Maturity Depth Requirement: <span id="blocksMaturityCount"></span></span>
</div>
<hr>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th><i class="fa fa-bars"></i> Height</th>
<th title="How many more blocks network must mine before this block is matured"><i class="fa fa-link"></i> Maturity</th>
<th><i class="fa fa-unlock-alt"></i> Difficulty</th>
<th><i class="fa fa-paw"></i> Block Hash</th>
<th><i class="fa fa-clock-o"></i> Time Found</th>
<th><i class="fa fa-star-half-o"></i> Shares/Diff</th>
</tr>
</thead>
<tbody id="blocks_rows">
</tbody>
</table>
</div>
<p class="text-center">
<button type="button" class="btn btn-default" id="loadMoreBlocks">Load More</button>
</p>
<script>
currentPage = {
destroy: function(){
if (xhrGetBlocks) xhrGetBlocks.abort();
},
update: function(){
updateText('blocksTotal', lastStats.pool.totalBlocks.toString());
updateText('blocksMaturityCount', lastStats.config.depth.toString());
renderBlocks(lastStats.pool.blocks);
}
};
var xhrGetBlocks;
$('#loadMoreBlocks').click(function(){
if (xhrGetBlocks) xhrGetBlocks.abort();
xhrGetBlocks = $.ajax({
url: api + '/get_blocks',
data: {
height: $('#blocks_rows').children().last().data('height')
},
dataType: 'json',
cache: 'false',
success: function(data){
renderBlocks(data);
}
});
});
function parseBlock(height, serializedBlock){
var parts = serializedBlock.split(':');
var block = {
height: parseInt(height),
hash: parts[0],
time: parts[1],
difficulty: parseInt(parts[2]),
shares: parseInt(parts[3]),
orphaned: parts[4],
reward: parts[5]
};
var toGo = lastStats.config.depth - (lastStats.network.height - block.height);
block.maturity = toGo < 1 ? '' : (toGo + ' to go');
switch (block.orphaned){
case '0':
block.status = 'unlocked';
break;
case '1':
block.status = 'orphaned';
break;
default:
block.status = 'pending';
break;
}
return block;
}
function getBlockRowElement(block, jsonString){
function formatLuck(difficulty, shares) {
var percent = Math.round(shares / difficulty * 100);
if(!percent) {
return '<span class="luckGood">?</span>';
}
else if(percent <= 100) {
return '<span class="luckGood">' + percent + '%</span>';
}
else {
return '<span class="luckBad">' + percent + '%</span>';
}
}
function formatBlockLink(hash){
return '<a target="_blank" href="' + getBlockchainUrl(hash) + '">' + hash + '</a>';
}
var blockStatusClasses = {
'pending': '',
'unlocked': 'success',
'orphaned': 'danger'
};
var row = document.createElement('tr');
row.setAttribute('data-json', jsonString);
row.setAttribute('data-height', block.height);
row.setAttribute('id', 'blockRow' + block.height);
row.setAttribute('title', block.status);
row.className = blockStatusClasses[block.status];
var columns =
'<td>' + block.height + '</td>' +
'<td>' + block.maturity + '</td>' +
'<td>' + block.difficulty + '</td>' +
'<td>' + formatBlockLink(block.hash) + '</td>' +
'<td>' + formatDate(block.time) + '</td>' +
'<td>' + formatLuck(block.difficulty, block.shares) + '</td>';
row.innerHTML = columns;
return row;
}
function renderBlocks(blocksResults){
var $blocksRows = $('#blocks_rows');
for (var i = 0; i < blocksResults.length; i += 2){
var block = parseBlock(blocksResults[i + 1], blocksResults[i]);
var blockJson = JSON.stringify(block);
var existingRow = document.getElementById('blockRow' + block.height);
if (existingRow && existingRow.getAttribute('data-json') !== blockJson){
$(existingRow).replaceWith(getBlockRowElement(block, blockJson));
}
else if (!existingRow){
var blockElement = getBlockRowElement(block, blockJson);
var inserted = false;
var rows = $blocksRows.children().get();
for (var f = 0; f < rows.length; f++) {
var bHeight = parseInt(rows[f].getAttribute('data-height'));
if (bHeight < block.height){
inserted = true;
$(rows[f]).before(blockElement);
break;
}
}
if (!inserted)
$blocksRows.append(blockElement);
}
}
}
</script>

24
pages/support.html 100644
View File

@ -0,0 +1,24 @@
<h3>Contact</h3>
<p>Email pool support at <a id="emailLink" href=""></a></p>
<h3>Chat Room</h3>
<iframe id="kiwi_irc" style="border:0; width:100%; height:500px;"></iframe>
<script>
currentPage = {
destroy: function(){
},
update: function(){
}
};
document.getElementById('kiwi_irc').setAttribute('src', 'https://kiwiirc.com/client/' + irc);
var emailEl = document.getElementById('emailLink');
emailEl.setAttribute('href', 'mailto:' + email);
emailEl.textContent = email;
</script>

View File

@ -0,0 +1,247 @@
a {
color: #3AB34D;
}
a:hover {
color: #34a045;
}
body {
color: #ffffff;
background-color: #000000;
background-image: url(http://subtlepatterns.com/patterns/outlets.png);
}
.form-control {
background-color: rgba(0, 0, 0, 0.7);
color: #fff;
}
.navbar-inverse {
background-color: #464646;
border-color: #000000;
border-bottom: 1px solid #6d6d6d;
}
.navbar-inverse .container {
background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-brand {
color: #fff;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: rgba(255, 255, 255, 0);
}
.navbar-inverse .navbar-text {
color: #CEE3E4;
}
.navbar-inverse .navbar-nav > li > a {
color: #F0F9FA;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #ffffff;
background-color: #6d6d6d;
}
#stats_updated {
/*color: #F4FC3D;*/
}
hr {
border-top-color: #818181 !important;
}
.stats > div:not(#addressError) {
color: #E2E2E2;
}
.stats > div:not(#addressError) > i.fa {
color: #A5A5A5;
}
.stats > div:not(#addressError) > span:not(.input-group-btn):first-of-type {
color: #755900;
}
.form-control {
border: 1px solid #6d6d6d;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.form-control:focus {
border-color: #535353;
}
.input-group-addon {
background-color: #6d6d6d;
color: #fff;
border-color: #6d6d6d;
}
.btn-default {
color: #ffffff;
background-color: #6d6d6d;
border-color: #6d6d6d;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #ffffff;
background-color: #535353;
border-color: #4e4e4e;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #6d6d6d;
border-color: #6d6d6d;
}
.btn-default .badge {
color: #6d6d6d;
background-color: #ffffff;
}
code {
color: #FFF500;
background-color: #3D3D3D;
}
.bg-primary {
background-color: #6d6d6d;
}
.bg-info {
background-color: #A3A3A3;
color: #fff;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #000000;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #000000;
}
.table > thead > tr > th {
color: #C2C2C2;
border-bottom-color: #C2C2C2;
}
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #2E2E2E;
}
.table > tbody > tr:hover td,
.table > tbody > tr:hover th {
background-color: #353535;
}
.table > tbody > tr > td {
border-top-color: #c9e0e9;
}
.table > tbody > tr > td .luckGood {
color: #5eff5e;
}
.table > tbody > tr > td .luckBad {
color: red;
}
footer {
background-color: #464646 !important;
}
footer .text-muted {
color: #fff;
}
.chartWrap p span {
color: #755900;
}
.btn-primary {
color: #ffffff;
background-color: #6d6d6d;
border-color: #6d6d6d;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #ffffff;
background-color: #535353;
border-color: #4e4e4e;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #6d6d6d;
border-color: #6d6d6d;
}
.btn-primary .badge {
color: #6d6d6d;
background-color: #ffffff;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
color: #ffffff;
background-color: #6d6d6d;
border-color: #6d6d6d;
}
.adminStats > div {
color: #2E3D31;
-webkit-box-shadow: inset 0px 0px 0 1px #ffffff;
box-shadow: inset 0px 0px 0 1px #ffffff;
background-color: #EBEBEB;
}
.adminStats h4 {
color: #26839B;
}
.adminStats .statsTitle h3 {
color: #00C1FF;
}
.nav-pills > li > a {
background-color: #F3F3F3;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
background-color: #6d6d6d;
}

View File

@ -0,0 +1,223 @@
a {
color: #03a678;
}
a:hover {
color: #025b42;
}
body {
line-height: 1.428571429;
color: #6f6e6e;
}
.navbar-inverse {
background-color: #2D5768;
border-color: #f9f9f8;
}
.navbar-inverse .container {
background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-brand {
color: #fff;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: rgba(255, 255, 255, 0);
}
.navbar-inverse .navbar-text {
color: #CEE3E4;
}
.navbar-inverse .navbar-nav > li > a {
color: #F0F9FA;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #ffffff;
background-color: #03a678;
}
#stats_updated {
color: #F4FC3D;
}
hr {
border-top-color: #BBBBBB;
}
.stats > div:not(#addressError) {
color: #7C7C7C;
}
.stats > div:not(#addressError) > i.fa {
color: #03a678;
}
.stats > div:not(#addressError) > span:not(.input-group-btn):first-of-type {
color: #336A80;
}
.form-control {
border: 1px solid #03a678;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.form-control:focus {
border-color: #027454;
}
.input-group-addon {
background-color: #03a678;
color: #fff;
border-color: #03a678;
}
.btn-default {
color: #ffffff;
background-color: #03a678;
border-color: #03a678;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #ffffff;
background-color: #027454;
border-color: #026a4d;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #03a678;
border-color: #03a678;
}
.btn-default .badge {
color: #03a678;
background-color: #ffffff;
}
code {
color: #DB2B24;
background-color: #FDECF1;
}
.bg-primary {
background-color: #03a678;
}
.bg-info {
background-color: #336A80;
color: #fff;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #f4f9ff;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #dbebff;
}
.table > thead > tr > th {
color: #336A80;
border-bottom-color: #336A80;
}
.table > tbody > tr > td {
border-top-color: #c9e0e9;
}
footer {
background-color: #FDFDFD;
}
.btn-primary {
color: #ffffff;
background-color: #03a678;
border-color: #03a678;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #ffffff;
background-color: #027454;
border-color: #026a4d;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #03a678;
border-color: #03a678;
}
.btn-primary .badge {
color: #03a678;
background-color: #ffffff;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
color: #ffffff;
background-color: #03a678;
border-color: #03a678;
}
.adminStats > div {
color: #2E3D31;
-webkit-box-shadow: inset 0px 0px 0 1px #ffffff;
box-shadow: inset 0px 0px 0 1px #ffffff;
background-color: #EBEBEB;
}
.adminStats h4 {
color: #26839B;
}
.adminStats .statsTitle h3 {
color: #00C1FF;
}
.nav-pills > li > a {
background-color: #F3F3F3;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #03a678;
}

View File

@ -0,0 +1,248 @@
a {
color: #0088aa;
}
a:hover {
color: #007491;
}
body {
color: #8a8a8a;
background-color: #ffffff;
background-image: url(img/bg2.jpg);
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
}
.navbar-inverse {
background-color: #2B2B2B;
border-color: #ffffff;
border-bottom: 1px solid #0088aa;
}
.navbar-inverse .container {
background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-brand {
color: #fff;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: rgba(255, 255, 255, 0);
}
.navbar-inverse .navbar-text {
color: #CEE3E4;
}
.navbar-inverse .navbar-nav > li > a {
color: #F0F9FA;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #ffffff;
background-color: #0088aa;
}
#stats_updated {
/*color: #F4FC3D;*/
}
hr {
border-top-color: #818181 !important;
}
.stats > div:not(#addressError) {
color: #8A8A8A;
}
.stats > div:not(#addressError) > i.fa {
color: #727272;
}
.stats > div:not(#addressError) > span:not(.input-group-btn):first-of-type {
color: #464646;
}
.form-control {
border: 1px solid #0088aa;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.form-control:focus {
border-color: #005f77;
}
.input-group-addon {
background-color: #0088aa;
color: #fff;
border-color: #0088aa;
}
.btn-default {
color: #ffffff;
background-color: #0088aa;
border-color: #0088aa;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #ffffff;
background-color: #005f77;
border-color: #00576d;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #0088aa;
border-color: #0088aa;
}
.btn-default .badge {
color: #0088aa;
background-color: #ffffff;
}
code {
color: #4F5A51;
background-color: #C9C9C9;
}
.bg-primary {
background-color: #0088aa;
}
.bg-info {
background-color: #A3A3A3;
color: #fff;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #fafafa;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #ededed;
}
.table > thead > tr > th {
color: #0088aa;
border-bottom-color: #0088aa;
}
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #E7E7E7;
}
.table > tbody > tr:hover td,
.table > tbody > tr:hover th {
background-color: #E7E7E7;
}
.table > tbody > tr > td {
border-top-color: #c9e0e9;
}
.table > tbody > tr > td .luckGood {
color: #008500;
}
.table > tbody > tr > td .luckBad {
color: red;
}
footer {
background-color: #2B2B2B !important;
}
footer .text-muted {
color: #fff;
}
.chartWrap p span {
color: #464646;
}
.btn-primary {
color: #ffffff;
background-color: #0088aa;
border-color: #0088aa;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #ffffff;
background-color: #005f77;
border-color: #00576d;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #0088aa;
border-color: #0088aa;
}
.btn-primary .badge {
color: #0088aa;
background-color: #ffffff;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
color: #ffffff;
background-color: #0088aa;
border-color: #0088aa;
}
.adminStats > div {
color: #2E3D31;
-webkit-box-shadow: inset 0px 0px 0 1px #ffffff;
box-shadow: inset 0px 0px 0 1px #ffffff;
background-color: #EBEBEB;
}
.adminStats h4 {
color: #26839B;
}
.adminStats .statsTitle h3 {
color: #00C1FF;
}
.nav-pills > li > a {
background-color: #F3F3F3;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #0088aa;
}

BIN
themes/img/bg.jpg 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
themes/img/bg2.jpg 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

View File

@ -0,0 +1,248 @@
a {
color: #00863b;
}
a:hover {
color: #006d30;
}
body {
color: #ffffff;
background-color: #000000;
background-image: url(img/bg.jpg);
}
.form-control {
background-color: rgba(0, 0, 0, 0.7);
color: #00863b;
}
.navbar-inverse {
background-color: #1E4B44;
border-color: #000000;
border-bottom: 1px solid #00863b;
}
.navbar-inverse .container {
background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-brand {
color: #fff;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: rgba(255, 255, 255, 0);
}
.navbar-inverse .navbar-text {
color: #CEE3E4;
}
.navbar-inverse .navbar-nav > li > a {
color: #F0F9FA;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #ffffff;
background-color: #00863b;
}
#stats_updated {
/*color: #F4FC3D;*/
}
hr {
border-top-color: #BBBBBB;
}
.stats > div:not(#addressError) {
color: #76A500;
}
.stats > div:not(#addressError) > i.fa {
color: #888888;
}
.stats > div:not(#addressError) > span:not(.input-group-btn):first-of-type {
color: #E3FF9D;
}
.form-control {
border: 1px solid #00863b;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.form-control:focus {
border-color: #005325;
}
.input-group-addon {
background-color: #00863b;
color: #fff;
border-color: #00863b;
}
.btn-default {
color: #ffffff;
background-color: #00863b;
border-color: #00863b;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #ffffff;
background-color: #005325;
border-color: #004920;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #00863b;
border-color: #00863b;
}
.btn-default .badge {
color: #00863b;
background-color: #ffffff;
}
code {
color: #FFF500;
background-color: #3D3D3D;
}
.bg-primary {
background-color: #00863b;
}
.bg-info {
background-color: #3A6C94;
color: #fff;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #000000;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #000000;
}
.table > thead > tr > th {
color: #fff;
border-bottom-color: #fff;
}
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #202020;
}
.table > tbody > tr:hover td,
.table > tbody > tr:hover th {
background-color: #353535;
}
.table > tbody > tr > td {
border-top-color: #c9e0e9;
}
.table > tbody > tr > td .luckGood {
color: #5eff5e;
}
.table > tbody > tr > td .luckBad {
color: red;
}
footer {
background-color: #1E4B44 !important;
}
footer .text-muted {
color: #fff;
}
.chartWrap p span {
color: #E3FF9D;
}
.btn-primary {
color: #ffffff;
background-color: #00863b;
border-color: #00863b;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #ffffff;
background-color: #005325;
border-color: #004920;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #00863b;
border-color: #00863b;
}
.btn-primary .badge {
color: #00863b;
background-color: #ffffff;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
color: #ffffff;
background-color: #00863b;
border-color: #00863b;
}
.adminStats > div {
color: #2E3D31;
-webkit-box-shadow: inset 0px 0px 0 1px #ffffff;
box-shadow: inset 0px 0px 0 1px #ffffff;
background-color: #EBEBEB;
}
.adminStats h4 {
color: #26839B;
}
.adminStats .statsTitle h3 {
color: #00C1FF;
}
.nav-pills > li > a {
background-color: #F3F3F3;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #00863b;
}

View File

@ -0,0 +1,247 @@
a {
color: #6ED5EE;
}
a:hover {
color: #57ceeb;
}
body {
color: #ffffff;
background-color: #333333;
background-image: url(http://subtlepatterns.com/patterns/subtle_carbon.png);
}
.form-control {
background-color: #131313;
color: #00FF33;
}
.navbar-inverse {
background-color: #213442;
border-color: #333333;
border-width: 0;
border-bottom: 1px solid #1f94b1;
}
.navbar-inverse .container {
background-color: rgba(0, 0, 0, 0);
}
.navbar-inverse .navbar-brand {
color: #fff;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: rgba(255, 255, 255, 0);
}
.navbar-inverse .navbar-text {
color: #CEE3E4;
}
.navbar-inverse .navbar-nav > li > a {
color: #F0F9FA;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #ffffff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #ffffff;
background-color: #1f94b1;
}
#stats_updated {
/*color: #F4FC3D;*/
}
hr {
border-top-color: #BBBBBB;
}
.stats > div:not(#addressError) {
color: #E6E6E6;
}
.stats > div:not(#addressError) > i.fa {
color: #1f94b1;
}
.stats > div:not(#addressError) > span:not(.input-group-btn):first-of-type {
color: #01C2AB;
}
.form-control {
border: 1px solid #1f94b1;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.form-control:focus {
border-color: #177086;
}
.input-group-addon {
background-color: #1f94b1;
color: #fff;
border-color: #1f94b1;
}
.btn-default {
color: #ffffff;
background-color: #1f94b1;
border-color: #1f94b1;
}
.btn-default:hover,
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #ffffff;
background-color: #177086;
border-color: #16687d;
}
.btn-default.disabled,
.btn-default[disabled],
fieldset[disabled] .btn-default,
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled:active,
.btn-default[disabled]:active,
fieldset[disabled] .btn-default:active,
.btn-default.disabled.active,
.btn-default[disabled].active,
fieldset[disabled] .btn-default.active {
background-color: #1f94b1;
border-color: #1f94b1;
}
.btn-default .badge {
color: #1f94b1;
background-color: #ffffff;
}
code {
color: #ECA4A2;
background-color: #3C3C3C;
}
.bg-primary {
background-color: #1f94b1;
}
.bg-info {
background-color: #336A80;
color: #fff;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #000000;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #000000;
}
.table > thead > tr > th {
color: #20BFFF;
border-bottom-color: #20BFFF;
}
.table-striped > tbody > tr:nth-child(odd) > td,
.table-striped > tbody > tr:nth-child(odd) > th {
background-color: #202020;
}
.table > tbody > tr:hover td,
.table > tbody > tr:hover th {
background-color: #353535;
}
.table > tbody > tr > td {
border-top-color: #c9e0e9;
}
.table > tbody > tr > td .luckGood {
color: #5eff5e;
}
.table > tbody > tr > td .luckBad {
color: red;
}
footer {
background-color: #213442 !important;
}
footer .text-muted {
color: #fff;
}
/************************************************
*** admin page ***
************************************************/
.btn-primary {
color: #ffffff;
background-color: #1f94b1;
border-color: #1f94b1;
}
.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #ffffff;
background-color: #177086;
border-color: #16687d;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled,
.btn-primary[disabled],
fieldset[disabled] .btn-primary,
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled:active,
.btn-primary[disabled]:active,
fieldset[disabled] .btn-primary:active,
.btn-primary.disabled.active,
.btn-primary[disabled].active,
fieldset[disabled] .btn-primary.active {
background-color: #1f94b1;
border-color: #1f94b1;
}
.btn-primary .badge {
color: #1f94b1;
background-color: #ffffff;
}
a.list-group-item {
font-size: 1.1em;
}
a.list-group-item.active,
a.list-group-item.active:hover,
a.list-group-item.active:focus {
color: #ffffff;
background-color: #1f94b1;
border-color: #1f94b1;
}
.adminStats > div {
color: #2E3D31;
-webkit-box-shadow: inset 0px 0px 0 1px #ffffff;
box-shadow: inset 0px 0px 0 1px #ffffff;
background-color: #EBEBEB;
}
.adminStats h4 {
color: #26839B;
}
.adminStats .statsTitle h3 {
color: #00C1FF;
}
.nav-pills > li > a {
background-color: #F3F3F3;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #1f94b1;
}