Initial Commit
commit
edd66c94d2
|
@ -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>
|
|
@ -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";
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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 <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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 86 KiB |
Binary file not shown.
After Width: | Height: | Size: 149 KiB |
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
Loading…
Reference in New Issue