Adding testing theme for #444
This is just a WiP to test a new website template. Taken online from source referenced in the sidebar footer. Very nice and clean look, have not had the time to add all features yet and is only used to demonstrate it.
139
public/include/pages/dashboard.inc.php
Normal file
@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
// Make sure we are called from index.php
|
||||
if (!defined('SECURITY')) die('Hacking attempt');
|
||||
|
||||
// Globally available variables
|
||||
$debug->append('Global smarty variables', 3);
|
||||
|
||||
$debug->append('No cached page detected, loading smarty globals', 3);
|
||||
// Defaults to get rid of PHP Notice warnings
|
||||
$dDifficulty = 1;
|
||||
$aRoundShares = 1;
|
||||
|
||||
// Only run these if the user is logged in
|
||||
$aRoundShares = $statistics->getRoundShares();
|
||||
if ($bitcoin->can_connect() === true) {
|
||||
$dDifficulty = $bitcoin->query('getdifficulty');
|
||||
if (is_array($dDifficulty) && array_key_exists('proof-of-work', $dDifficulty))
|
||||
$dDifficulty = $dDifficulty['proof-of-work'];
|
||||
}
|
||||
|
||||
// Always fetch this since we need for ministats header
|
||||
$bitcoin->can_connect() === true ? $dNetworkHashrate = $bitcoin->query('getnetworkhashps') : $dNetworkHashrate = 0;
|
||||
|
||||
// Fetch some data
|
||||
if (!$iCurrentActiveWorkers = $worker->getCountAllActiveWorkers()) $iCurrentActiveWorkers = 0;
|
||||
$iCurrentPoolHashrate = $statistics->getCurrentHashrate();
|
||||
$iCurrentPoolShareRate = $statistics->getCurrentShareRate();
|
||||
|
||||
// Avoid confusion, ensure our nethash isn't higher than poolhash
|
||||
if ($iCurrentPoolHashrate > $dNetworkHashrate) $dNetworkHashrate = $iCurrentPoolHashrate;
|
||||
|
||||
// Global data for Smarty
|
||||
$aGlobal = array(
|
||||
'hashrate' => $iCurrentPoolHashrate,
|
||||
'nethashrate' => $dNetworkHashrate,
|
||||
'sharerate' => $iCurrentPoolShareRate,
|
||||
'workers' => $iCurrentActiveWorkers,
|
||||
'roundshares' => $aRoundShares,
|
||||
'fees' => $config['fees'],
|
||||
'confirmations' => $config['confirmations'],
|
||||
'reward' => $config['reward'],
|
||||
'price' => $setting->getValue('price'),
|
||||
'disable_mp' => $setting->getValue('disable_mp'),
|
||||
'config' => array(
|
||||
'accounts' => $config['accounts'],
|
||||
'disable_invitations' => $setting->getValue('disable_invitations'),
|
||||
'disable_notifications' => $setting->getValue('disable_notifications'),
|
||||
'price' => array( 'currency' => $config['price']['currency'] ),
|
||||
'targetdiff' => $config['difficulty'],
|
||||
'currency' => $config['currency'],
|
||||
'txfee' => $config['txfee'],
|
||||
'payout_system' => $config['payout_system'],
|
||||
'ap_threshold' => array(
|
||||
'min' => $config['ap_threshold']['min'],
|
||||
'max' => $config['ap_threshold']['max']
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// Website configurations
|
||||
$aGlobal['website']['name'] = $setting->getValue('website_name');
|
||||
$aGlobal['website']['title'] = $setting->getValue('website_title');
|
||||
$aGlobal['website']['slogan'] = $setting->getValue('website_slogan');
|
||||
$aGlobal['website']['email'] = $setting->getValue('website_email');
|
||||
$aGlobal['website']['api']['disabled'] = $setting->getValue('disable_api');
|
||||
$aGlobal['website']['blockexplorer']['disabled'] = $setting->getValue('website_blockexplorer_disabled');
|
||||
$aGlobal['website']['chaininfo']['disabled'] = $setting->getValue('website_chaininfo_disabled');
|
||||
$setting->getValue('website_blockexplorer_url') ? $aGlobal['website']['blockexplorer']['url'] = $setting->getValue('website_blockexplorer_url') : $aGlobal['website']['blockexplorer']['url'] = 'http://explorer.litecoin.net/block/';
|
||||
$setting->getValue('website_chaininfo_url') ? $aGlobal['website']['chaininfo']['url'] = $setting->getValue('website_chaininfo_url') : $aGlobal['website']['chaininfo']['url'] = 'http://allchains.info';
|
||||
|
||||
// ACLs
|
||||
$aGlobal['acl']['pool']['statistics'] = $setting->getValue('acl_pool_statistics');
|
||||
$aGlobal['acl']['block']['statistics'] = $setting->getValue('acl_block_statistics');
|
||||
|
||||
// Special calculations for PPS Values based on reward_type setting and/or available blocks
|
||||
if ($config['reward_type'] != 'block') {
|
||||
$aGlobal['ppsvalue'] = number_format(round($config['reward'] / (pow(2,32) * $dDifficulty) * pow(2, $config['difficulty']), 12) ,12);
|
||||
} else {
|
||||
// Try to find the last block value and use that for future payouts, revert to fixed reward if none found
|
||||
if ($aLastBlock = $block->getLast()) {
|
||||
$aGlobal['ppsvalue'] = number_format(round($aLastBlock['amount'] / (pow(2,32) * $dDifficulty) * pow(2, $config['difficulty']), 12) ,12);
|
||||
} else {
|
||||
$aGlobal['ppsvalue'] = number_format(round($config['reward'] / (pow(2,32) * $dDifficulty) * pow(2, $config['difficulty']), 12) ,12);
|
||||
}
|
||||
}
|
||||
|
||||
// We don't want these session infos cached
|
||||
if (@$_SESSION['USERDATA']['id']) {
|
||||
$aGlobal['userdata'] = $_SESSION['USERDATA']['id'] ? $user->getUserData($_SESSION['USERDATA']['id']) : array();
|
||||
$aGlobal['userdata']['balance'] = $transaction->getBalance($_SESSION['USERDATA']['id']);
|
||||
|
||||
// Other userdata that we can cache savely
|
||||
$aGlobal['userdata']['shares'] = $statistics->getUserShares($_SESSION['USERDATA']['id']);
|
||||
$aGlobal['userdata']['hashrate'] = $statistics->getUserHashrate($_SESSION['USERDATA']['id']);
|
||||
$aGlobal['userdata']['sharerate'] = $statistics->getUserSharerate($_SESSION['USERDATA']['id']);
|
||||
|
||||
switch ($config['payout_system']) {
|
||||
case 'prop' || 'pplns':
|
||||
// Some estimations
|
||||
if (@$aRoundShares['valid'] > 0) {
|
||||
$aGlobal['userdata']['est_block'] = round(( (int)$aGlobal['userdata']['shares']['valid'] / (int)$aRoundShares['valid'] ) * (float)$config['reward'], 8);
|
||||
$aGlobal['userdata']['no_fees'] == 0 ? $aGlobal['userdata']['est_fee'] = round(((float)$config['fees'] / 100) * (float)$aGlobal['userdata']['est_block'], 8) : $aGlobal['userdata']['est_fee'] = 0;
|
||||
$aGlobal['userdata']['est_donation'] = round((( (float)$aGlobal['userdata']['donate_percent'] / 100) * ((float)$aGlobal['userdata']['est_block'] - (float)$aGlobal['userdata']['est_fee'])), 8);
|
||||
$aGlobal['userdata']['est_payout'] = round((float)$aGlobal['userdata']['est_block'] - (float)$aGlobal['userdata']['est_donation'] - (float)$aGlobal['userdata']['est_fee'], 8);
|
||||
} else {
|
||||
$aGlobal['userdata']['est_block'] = 0;
|
||||
$aGlobal['userdata']['est_fee'] = 0;
|
||||
$aGlobal['userdata']['est_donation'] = 0;
|
||||
$aGlobal['userdata']['est_payout'] = 0;
|
||||
}
|
||||
case 'pplns':
|
||||
if ($iAvgBlockShares = round($block->getAvgBlockShares($config['pplns']['blockavg']['blockcount']))) {
|
||||
$aGlobal['pplns']['target'] = $iAvgBlockShares;
|
||||
} else {
|
||||
$aGlobal['pplns']['target'] = $config['pplns']['shares']['default'];
|
||||
}
|
||||
break;
|
||||
case 'pps':
|
||||
break;
|
||||
}
|
||||
|
||||
// Site-wide notifications, based on user events
|
||||
if ($aGlobal['userdata']['balance']['confirmed'] >= $config['ap_threshold']['max'])
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'You have exceeded the pools configured ' . $config['currency'] . ' warning threshold. Please initiate a transfer!', 'TYPE' => 'errormsg');
|
||||
if ($user->getUserFailed($_SESSION['USERDATA']['id']) > 0)
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'You have ' . $user->getUserFailed($_SESSION['USERDATA']['id']) . ' failed login attempts! <a href="?page=account&action=reset_failed">Reset Counter</a>', 'TYPE' => 'errormsg');
|
||||
}
|
||||
|
||||
if ($setting->getValue('maintenance'))
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => 'This pool is currently in maintenance mode.', 'TYPE' => 'warning');
|
||||
if ($motd = $setting->getValue('system_motd'))
|
||||
$_SESSION['POPUP'][] = array('CONTENT' => $motd, 'TYPE' => 'info');
|
||||
|
||||
// Make it available in Smarty
|
||||
$smarty->assign('PATH', 'site_assets/' . THEME);
|
||||
$smarty->assign('GLOBAL', $aGlobal);
|
||||
$smarty->assign('CONTENT', 'default.tpl');
|
||||
?>
|
||||
21
public/site_assets/test/css/custom.css
Normal file
@ -0,0 +1,21 @@
|
||||
/* Custom checkboxes */
|
||||
input[type=checkbox] {
|
||||
display:none;
|
||||
}
|
||||
|
||||
input[type=checkbox] + label
|
||||
{
|
||||
background: url('../images/icn_alert_error.png');
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
display:inline-block;
|
||||
padding: 0 0 0 0px;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + label
|
||||
{
|
||||
background: url('../images/icn_alert_success.png');
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
display:inline-block;
|
||||
padding: 0 0 0 0px;
|
||||
43
public/site_assets/test/css/ie.css
Normal file
@ -0,0 +1,43 @@
|
||||
.quick_search {
|
||||
text-align: center;
|
||||
padding: 14px 0 0px 0;
|
||||
}
|
||||
|
||||
.quick_search input[type=text] {
|
||||
text-align: left;
|
||||
height: 22px;
|
||||
width: 88%;
|
||||
color: #ccc;
|
||||
padding-left: 2%;
|
||||
padding-top: 5px;
|
||||
background: #fff url(../images/icn_search.png) no-repeat;
|
||||
background-position: 10px 6px;
|
||||
}
|
||||
|
||||
.toggleLink {
|
||||
display: inline;
|
||||
float: none;
|
||||
margin-left: 2%
|
||||
}
|
||||
|
||||
html ul.tabs li.active, html ul.tabs li.active a:hover {
|
||||
background: #ccc;
|
||||
}
|
||||
|
||||
input[type=submit].btn_post_message {
|
||||
background: url(../images/post_message.png) no-repeat;
|
||||
}
|
||||
|
||||
fieldset input[type=text] {
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
|
||||
fieldset select {
|
||||
margin-left: -10px
|
||||
}
|
||||
|
||||
fieldset textarea {
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
910
public/site_assets/test/css/layout.css
Normal file
@ -0,0 +1,910 @@
|
||||
/* Essentials */
|
||||
|
||||
html, div, map, dt, isindex, form, header, aside, section, section, article, footer {
|
||||
display: block;
|
||||
}
|
||||
|
||||
html, body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, Verdana, sans-serif;
|
||||
background: #F8F8F8;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.spacer {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
a:link, a:visited {
|
||||
color: #77BACE;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
||||
/* Header */
|
||||
|
||||
header#header {
|
||||
height: 55px;
|
||||
width: 100%;
|
||||
background: #222222 url(../images/header_bg.png) repeat-x;
|
||||
}
|
||||
|
||||
header#header h1.site_title, header#header h2.section_title {
|
||||
float: left;
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
display: block;
|
||||
width: 23%;
|
||||
height: 55px;
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
text-indent: 1.8%;
|
||||
line-height: 55px;
|
||||
color: #fff;
|
||||
text-shadow: 0 -1px 0 #000;
|
||||
}
|
||||
|
||||
header#header h1.site_title a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
header#header h2.section_title {
|
||||
text-align: center;
|
||||
text-indent: 4.5%;
|
||||
width: 68%;
|
||||
background: url(../images/header_shadow.png) no-repeat left top;
|
||||
}
|
||||
|
||||
.btn_view_site {
|
||||
float: left;
|
||||
width: 9%;
|
||||
}
|
||||
|
||||
.btn_view_site a {
|
||||
display: block;
|
||||
margin-top: 12px;
|
||||
width: 91px;
|
||||
height: 27px;
|
||||
background: url(../images/btn_view_site.png) no-repeat;
|
||||
text-align: center;
|
||||
line-height: 29px;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
text-shadow: 0 -1px 0 #000;}
|
||||
|
||||
.btn_view_site a:hover {
|
||||
background-position: 0 -27px;
|
||||
}
|
||||
|
||||
/* Secondary Header Bar */
|
||||
|
||||
section#secondary_bar {
|
||||
height: 38px;
|
||||
width: 100%;
|
||||
background: #F1F1F4 url(../images/secondary_bar.png) repeat-x;
|
||||
}
|
||||
|
||||
section#secondary_bar .user {
|
||||
float: left;
|
||||
width: 12%;
|
||||
height: 38px;
|
||||
}
|
||||
|
||||
.user p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #666666;
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
float: left;
|
||||
width: 85%;
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
text-indent: 25px;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
background: url(../images/icn_user.png) no-repeat center left;
|
||||
margin-left: 6%;
|
||||
}
|
||||
|
||||
.user a {
|
||||
text-decoration: none;
|
||||
color: #666666}
|
||||
|
||||
.user a:hover {
|
||||
color: #77BACE;
|
||||
}
|
||||
|
||||
.user a.logout_user {
|
||||
float: left;
|
||||
display: block;
|
||||
width: 16px;
|
||||
height: 35px;
|
||||
text-indent: -5000px;
|
||||
background: url(../images/icn_logout.png) center no-repeat;
|
||||
}
|
||||
|
||||
/* Breadcrumbs */
|
||||
|
||||
section#secondary_bar .breadcrumbs_container {
|
||||
float: left;
|
||||
width: 77%;
|
||||
background: url(../images/secondary_bar_shadow.png) no-repeat left top;
|
||||
height: 38px;
|
||||
}
|
||||
|
||||
article.breadcrumbs {
|
||||
float: left;
|
||||
padding: 0 10px;
|
||||
border: 1px solid #ccc;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 1px 0 #fff;
|
||||
-moz-box-shadow: 0 1px 0 #fff;
|
||||
box-shadow: 0 1px 0 #fff;
|
||||
height: 23px;
|
||||
margin: 4px 3%;
|
||||
}
|
||||
|
||||
.breadcrumbs a {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
height: 24px;
|
||||
line-height: 23px;
|
||||
}
|
||||
|
||||
.breadcrumbs a.current, .breadcrumbs a.current:hover {
|
||||
color: #9E9E9E;
|
||||
font-weight: bold;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.breadcrumbs a:link, .breadcrumbs a:visited {
|
||||
color: #44474F;
|
||||
text-decoration: none;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-weight: bold;}
|
||||
|
||||
.breadcrumbs a:hover {
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
.breadcrumb_divider {
|
||||
display: inline-block;
|
||||
width: 12px;
|
||||
height: 24px;
|
||||
background: url(../images/breadcrumb_divider.png) no-repeat;
|
||||
float: left;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
/* Sidebar */
|
||||
|
||||
aside#sidebar {
|
||||
width: 12%;
|
||||
background: #E0E0E3 url(../images/sidebar.png) repeat;
|
||||
float: left;
|
||||
min-height: 88%;
|
||||
margin-top: -4px;
|
||||
}
|
||||
|
||||
#sidebar hr {
|
||||
border: none;
|
||||
outline: none;
|
||||
background: url(../images/sidebar_divider.png) repeat-x;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 2px;}
|
||||
|
||||
|
||||
/* Search */
|
||||
|
||||
.quick_search {
|
||||
text-align: center;
|
||||
padding: 14px 0 10px 0;
|
||||
}
|
||||
|
||||
.quick_search input[type=text] {
|
||||
-webkit-border-radius: 20px;
|
||||
-moz-border-radius: 20px;
|
||||
border-radius: 20px;
|
||||
border: 1px solid #bbb;
|
||||
height: 26px;
|
||||
width: 90%;
|
||||
color: #ccc;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
text-indent: 30px;
|
||||
background: #fff url(../images/icn_search.png) no-repeat;
|
||||
background-position: 10px 6px;
|
||||
}
|
||||
|
||||
.quick_search input[type=text]:focus {
|
||||
outline: none;
|
||||
color: #666666;
|
||||
border: 1px solid #77BACE;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
}
|
||||
|
||||
/* Sidebar Menu */
|
||||
|
||||
#sidebar h3 {
|
||||
color: #1F1F20;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-size: 13px;
|
||||
margin: 10px 0 10px 6%;
|
||||
display: block;
|
||||
float: left;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.toggleLink {
|
||||
color: #999999;
|
||||
font-size: 10px;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
float: right;
|
||||
margin-right: 2%
|
||||
}
|
||||
|
||||
#sidebar .toggleLink:hover {
|
||||
color: #77BACE;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#sidebar ul {
|
||||
clear: both;
|
||||
margin: 0; padding: 0;
|
||||
}
|
||||
|
||||
#sidebar li {
|
||||
list-style: none;
|
||||
margin: 0 0 0 12%; padding: 0;
|
||||
}
|
||||
|
||||
#sidebar li a {
|
||||
color: #666666;
|
||||
padding-left: 25px;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
height: 17px;
|
||||
line-height: 17px;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
#sidebar li a:hover {
|
||||
color: #444444;
|
||||
}
|
||||
|
||||
/* Sidebar Icons */
|
||||
|
||||
#sidebar li.icn_new_article a {
|
||||
background: url(../images/icn_new_article.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_edit_article a {
|
||||
background: url(../images/icn_edit_article.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_categories a {
|
||||
background: url(../images/icn_categories.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_tags a {
|
||||
background: url(../images/icn_tags.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_add_user a {
|
||||
background: url(../images/icn_add_user.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_view_users a {
|
||||
background: url(../images/icn_view_users.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_profile a {
|
||||
background: url(../images/icn_profile.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_folder a {
|
||||
background: url(../images/icn_folder.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_photo a {
|
||||
background: url(../images/icn_photo.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_audio a {
|
||||
background: url(../images/icn_audio.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_video a {
|
||||
background: url(../images/icn_video.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_settings a {
|
||||
background: url(../images/icn_settings.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_security a {
|
||||
background: url(../images/icn_security.png) no-repeat center left;
|
||||
}
|
||||
#sidebar li.icn_jump_back a {
|
||||
background: url(../images/icn_jump_back.png) no-repeat center left;
|
||||
}
|
||||
|
||||
#sidebar p {
|
||||
color: #666666;
|
||||
padding-left: 6%;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
margin: 10px 0 0 0;}
|
||||
|
||||
#sidebar a {
|
||||
color: #666666;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#sidebar a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#sidebar footer {
|
||||
margin-top: 20%;
|
||||
}
|
||||
|
||||
|
||||
/* Main Content */
|
||||
|
||||
|
||||
section#main {
|
||||
width: 87%;
|
||||
min-height: 88%;
|
||||
background: url(../images/sidebar_shadow.png) repeat-y left top;
|
||||
float: left;
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
#main h3 {
|
||||
color: #1F1F20;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-size: 13px;
|
||||
margin: 8px 20px;
|
||||
}
|
||||
|
||||
/* Modules */
|
||||
|
||||
.module {
|
||||
border: 1px solid #9BA0AF;
|
||||
width: 100%;
|
||||
margin: 20px 3% 0 3%;
|
||||
margin-top: 20px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
#main .module header h3 {
|
||||
display: block;
|
||||
width: 90%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.module header {
|
||||
height: 38px;
|
||||
width: 100%;
|
||||
background: #F1F1F4 url(../images/secondary_bar.png) repeat-x;
|
||||
-webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px;
|
||||
-moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;
|
||||
border-top-left-radius: 5px; border-top-right-radius: 5px;
|
||||
}
|
||||
|
||||
.module footer {
|
||||
height: 32px;
|
||||
width: 100%;
|
||||
border-top: 1px solid #9CA1B0;
|
||||
background: #F1F1F4 url(../images/module_footer_bg.png) repeat-x;
|
||||
-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px;
|
||||
-moz-border-radius-bottomleft: 5px; -moz-border-radius-bottomright: 5px;
|
||||
-webkit-border-bottom-left-radius: 5px; -webkit-border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
.module_content {
|
||||
margin: 10px 20px;
|
||||
color: #666;}
|
||||
|
||||
/* Module Widths */
|
||||
|
||||
.width_full {
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.width_half {
|
||||
width: 46%;
|
||||
margin-right: 0;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.width_quarter {
|
||||
width: 26%;
|
||||
margin-right: 0;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.width_3_quarter {
|
||||
width: 66%;
|
||||
margin-right: 0;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* Stats Module */
|
||||
|
||||
.stats_graph {
|
||||
width: 64%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.stats_overview {
|
||||
background: #F6F6F6;
|
||||
border: 1px solid #ccc;
|
||||
float: right;
|
||||
width: 26%;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.overview_today, .overview_previous {
|
||||
width: 50%;
|
||||
float: left;}
|
||||
|
||||
.stats_overview p {
|
||||
margin: 0; padding: 0;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
|
||||
.stats_overview p.overview_day {
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
margin: 6px 0;
|
||||
}
|
||||
|
||||
.stats_overview p.overview_count {
|
||||
font-size: 26px;
|
||||
font-weight: bold;
|
||||
color: #333333;}
|
||||
|
||||
.stats_overview p.overview_type {
|
||||
font-size: 10px;
|
||||
color: #999999;
|
||||
margin-bottom: 8px}
|
||||
|
||||
/* Content Manager */
|
||||
|
||||
.tablesorter {
|
||||
width: 100%;
|
||||
margin: -5px 0 0 0;
|
||||
}
|
||||
|
||||
.tablesorter td{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-bottom: 1px dotted #ccc;
|
||||
}
|
||||
|
||||
.tablesorter thead tr {
|
||||
height: 34px;
|
||||
background: url(../images/table_sorter_header.png) repeat-x;
|
||||
text-align: left;
|
||||
text-indent: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tablesorter td {
|
||||
padding: 15px 10px;
|
||||
}
|
||||
|
||||
.tablesorter input[type=image] {
|
||||
margin-right: 10px;}
|
||||
|
||||
ul.tabs {
|
||||
margin: 3px 10px 0 0;
|
||||
padding: 0;
|
||||
float: right;
|
||||
list-style: none;
|
||||
height: 24px; /*--Set height of tabs--*/
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 1px 0 #fff;
|
||||
-moz-box-shadow: 0 1px 0 #fff;
|
||||
box-shadow: 0 1px 0 #fff;
|
||||
border: 1px solid #ccc;
|
||||
font-weight: bold;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
ul.tabs li {
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 24px;
|
||||
}
|
||||
ul.tabs li a {
|
||||
text-decoration: none;
|
||||
color: #999;
|
||||
display: block;
|
||||
padding: 0 10px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
ul.tabs li a:hover {
|
||||
color: #44474F;
|
||||
}
|
||||
|
||||
html ul.tabs li.active a {
|
||||
color: #44474F;
|
||||
}
|
||||
|
||||
html ul.tabs li.active, html ul.tabs li.active a:hover {
|
||||
background: #F1F2F4;
|
||||
-webkit-box-shadow: inset 0 2px 3px #818181;
|
||||
-moz-box-shadow: inset 0 2px 3px #818181;
|
||||
box-shadow: inset 0 2px 3px #818181;
|
||||
}
|
||||
|
||||
html ul.tabs li:first-child, html ul.tabs li:first-child a {
|
||||
-webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px;
|
||||
-moz-border-radius-topleft: 5px; -moz-border-radius-bottomleft: 5px;
|
||||
border-top-left-radius: 5px; border-bottom-left-radius: 5px;
|
||||
}
|
||||
|
||||
html ul.tabs li:last-child, html ul.tabs li:last-child a {
|
||||
-webkit-border-top-right-radius: 5px; -webkit-border-bottom-right-radius: 5px;
|
||||
-moz-border-radius-topright: 5px; -moz-border-radius-bottomright: 5px;
|
||||
border-top-right-radius: 5px; border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
#main .module header h3.tabs_involved {
|
||||
display: block;
|
||||
width: 60%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* Messages */
|
||||
|
||||
.message {
|
||||
border-bottom: 1px dotted #cccccc;
|
||||
}
|
||||
|
||||
input[type=submit] {
|
||||
background: #D0D1D4 url(../images/btn_submit.png) repeat-x;
|
||||
border: 1px solid #A8A9A8;
|
||||
-webkit-box-shadow: 0 1px 0 #fff;
|
||||
-moz-box-shadow: 0 1px 0 #fff;
|
||||
box-shadow: 0 1px 0 #fff;
|
||||
font-weight: bold;
|
||||
height: 22px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 0 10px;
|
||||
color: #666;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
input[type=submit]:hover {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
input[type=submit].alt_btn {
|
||||
background: #D0D1D4 url(../images/btn_submit_2.png) repeat-x;
|
||||
border: 1px solid#30B0C8;
|
||||
-webkit-box-shadow: 0 1px 0 #fff;
|
||||
-moz-box-shadow: 0 1px 0 #fff;
|
||||
box-shadow: 0 1px 0 #fff;
|
||||
font-weight: bold;
|
||||
height: 22px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 0 10px;
|
||||
color: #003E49;
|
||||
text-shadow: 0 1px 0 #6CDCF9;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
input[type=submit].alt_btn:hover {
|
||||
color: #001217;
|
||||
}
|
||||
|
||||
input[type=submit].btn_post_message {
|
||||
background: #D0D1D4 url(../images/post_message.png) no-repeat;
|
||||
display: block;
|
||||
width: 37px;
|
||||
border: none;
|
||||
height: 24px;
|
||||
cursor: pointer;
|
||||
text-indent: -5000px;
|
||||
}
|
||||
|
||||
input[type=submit].btn_post_message:hover {
|
||||
background-position: 0 -24px;
|
||||
}
|
||||
|
||||
.post_message {
|
||||
text-align: left;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.post_message input[type=text] {
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #bbb;
|
||||
height: 20px;
|
||||
width: 70%;
|
||||
color: #ccc;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
text-indent: 10px;
|
||||
background-position: 10px 6px;
|
||||
float: left;
|
||||
margin: 0 3.5%;
|
||||
}
|
||||
|
||||
.post_message input[type=text]:focus {
|
||||
outline: none;
|
||||
border: 1px solid #77BACE;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
.post_message input[type=image] {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.message_list {
|
||||
height: 250px;
|
||||
overflow-x:hidden;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
/* New/Edit Article Module */
|
||||
|
||||
fieldset {
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #F6F6F6;
|
||||
border: 1px solid #ccc;
|
||||
padding: 1% 0%;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
fieldset label {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 200px;
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-weight: bold;
|
||||
padding-left: 10px;
|
||||
margin: -5px 0 5px 0;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
fieldset input[type=password] {
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #BBBBBB;
|
||||
height: 20px;
|
||||
color: #666666;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
padding-left: 10px;
|
||||
background-position: 10px 6px;
|
||||
margin: 0;
|
||||
display: block;
|
||||
float: left;
|
||||
width: 92%;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
fieldset input[type=password]:focus {
|
||||
outline: none;
|
||||
border: 1px solid #77BACE;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
}
|
||||
|
||||
fieldset input[type=text] {
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #BBBBBB;
|
||||
height: 20px;
|
||||
color: #666666;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
padding-left: 10px;
|
||||
background-position: 10px 6px;
|
||||
margin: 0;
|
||||
display: block;
|
||||
float: left;
|
||||
width: 92%;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
fieldset input[type=text]:focus {
|
||||
outline: none;
|
||||
border: 1px solid #77BACE;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
}
|
||||
|
||||
fieldset select {
|
||||
width: 96%;
|
||||
margin: 0 10px;
|
||||
border: 1px solid #bbb;
|
||||
height: 20px;
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
fieldset textarea {
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #BBBBBB;
|
||||
color: #666666;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 1px 0 #fff;
|
||||
padding-left: 10px;
|
||||
background-position: 10px 6px;
|
||||
margin: 0 0.5%;
|
||||
display: block;
|
||||
float: left;
|
||||
width: 96%;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
fieldset textarea:focus {
|
||||
outline: none;
|
||||
border: 1px solid #77BACE;
|
||||
-webkit-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
-moz-box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
box-shadow: inset 0 2px 2px #ccc, 0 0 10px #ADDCE6;
|
||||
}
|
||||
|
||||
.submit_link {
|
||||
float: right;
|
||||
margin-right: 3%;
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.submit_link select {
|
||||
width: 150px;
|
||||
border: 1px solid #bbb;
|
||||
height: 20px;
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
#main .module_content h1 {
|
||||
color: #333333;
|
||||
text-transform: none;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-size: 22px;
|
||||
margin: 8px 0px;
|
||||
}
|
||||
|
||||
#main .module_content h2 {
|
||||
color: #444444;
|
||||
text-transform: none;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-size: 18px;
|
||||
margin: 8px 0px;
|
||||
}
|
||||
|
||||
#main .module_content h3 {
|
||||
color: #666666;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-size: 13px;
|
||||
margin: 8px 0px;
|
||||
}
|
||||
|
||||
#main .module_content h4 {
|
||||
color: #666666;
|
||||
text-transform: none;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
font-size: 13px;
|
||||
margin: 8px 0px;
|
||||
}
|
||||
|
||||
#main .module_content li {
|
||||
line-height: 150%;
|
||||
}
|
||||
|
||||
/* Alerts */
|
||||
|
||||
#main h4.info {
|
||||
display: block;
|
||||
width: 95%;
|
||||
margin: 20px 3% 0 3%;
|
||||
margin-top: 20px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #B5E5EF url(../images/icn_alert_info.png) no-repeat;
|
||||
background-position: 10px 10px;
|
||||
border: 1px solid #77BACE;
|
||||
color: #082B33;
|
||||
padding: 10px 0;
|
||||
text-indent: 40px;
|
||||
font-size: 14px;}
|
||||
|
||||
#main h4.warning {
|
||||
display: block;
|
||||
width: 95%;
|
||||
margin: 20px 3% 0 3%;
|
||||
margin-top: 20px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #F5F3BA url(../images/icn_alert_warning.png) no-repeat;
|
||||
background-position: 10px 10px;
|
||||
border: 1px solid #C7A20D;
|
||||
color: #796616;
|
||||
padding: 10px 0;
|
||||
text-indent: 40px;
|
||||
font-size: 14px;}
|
||||
|
||||
#main h4.errormsg {
|
||||
display: block;
|
||||
width: 95%;
|
||||
margin: 20px 3% 0 3%;
|
||||
margin-top: 20px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #F3D9D9 url(../images/icn_alert_error.png) no-repeat;
|
||||
background-position: 10px 10px;
|
||||
border: 1px solid #D20009;
|
||||
color: #7B040F;
|
||||
padding: 10px 0;
|
||||
text-indent: 40px;
|
||||
font-size: 14px;}
|
||||
|
||||
#main h4.success {
|
||||
display: block;
|
||||
width: 95%;
|
||||
margin: 20px 3% 0 3%;
|
||||
margin-top: 20px;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
background: #E2F6C5 url(../images/icn_alert_success.png) no-repeat;
|
||||
background-position: 10px 10px;
|
||||
border: 1px solid #79C20D;
|
||||
color: #32510F;
|
||||
padding: 10px 0;
|
||||
text-indent: 40px;
|
||||
font-size: 14px;}
|
||||
47
public/site_assets/test/css/visualize.css
Normal file
@ -0,0 +1,47 @@
|
||||
/*plugin styles*/
|
||||
.visualize { border: 1px solid #bbb; position: relative; background: #fbfbfb; margin: 20px auto 40px auto; z-index: 1; }
|
||||
.visualize canvas { position: absolute; }
|
||||
.visualize ul, .visualize ul li { margin: 0; padding: 0; background: none; }
|
||||
.visualize-bar { border-top: 0; }
|
||||
|
||||
/*table title, key elements*/
|
||||
.visualize .visualize-info { padding: 0 0 2px 8px; background: #fafafa; border: 1px solid #aaa; position: absolute; top: -15px; right: 10px; font-size: 11px; }
|
||||
.visualize .visualize-title { display: block; color: #333; margin-bottom: 3px; }
|
||||
.visualize ul.visualize-key { list-style: none; }
|
||||
.visualize ul.visualize-key li { list-style: none; float: left; margin-right: 10px; padding-left: 10px; position: relative;}
|
||||
.visualize ul.visualize-key .visualize-key-color { width: 6px; height: 6px; left: 0; position: absolute; top: 50%; margin-top: -3px; font-size: 6px; }
|
||||
.visualize ul.visualize-key .visualize-key-label { color: #333; }
|
||||
|
||||
/*pie labels*/
|
||||
.visualize-pie .visualize-labels { list-style: none; }
|
||||
.visualize-pie .visualize-label-pos, .visualize-pie .visualize-label { position: absolute; margin: 0; padding:0; }
|
||||
.visualize-pie .visualize-label { display: block; color: #fff; font-weight: bold; font-size: 1em; }
|
||||
.visualize-pie-outside .visualize-label { color: #000; font-weight: normal; }
|
||||
|
||||
/*line,bar, area labels*/
|
||||
.visualize-labels-x,.visualize-labels-y { position: absolute; left: 0; top: 0; list-style: none; }
|
||||
.visualize-labels-x li, .visualize-labels-y li { position: absolute; bottom: 0; }
|
||||
.visualize-labels-x li span.label, .visualize-labels-y li span.label { position: absolute; color: #555; }
|
||||
.visualize-labels-x li span.line, .visualize-labels-y li span.line { position: absolute; border: 0 solid #ccc; }
|
||||
.visualize-labels-x li { height: 100%; font-size: 10px; }
|
||||
.visualize-labels-x li span.label { top: 100%; margin-top: 15px; left:-10; -webkit-transform: rotate(-45deg); -moz-transform: rotate(-45deg); }
|
||||
.visualize-labels-x li span.line { border-left-width: 1px; height: 100%; display: block; }
|
||||
.visualize-labels-x li span.line { border: 0;} /*hide vertical lines on area, line, bar*/
|
||||
.visualize-labels-y li { width: 100%; font-size: 11px; line-height: normal; }
|
||||
.visualize-labels-y li span.label { right: 100%; margin-right: 5px; display: block; width: 100px; text-align: right; }
|
||||
.visualize-labels-y li span.line { border-top-width: 1px; width: 100%; }
|
||||
.visualize-bar .visualize-labels-x li span.label { width: 100%; text-align: center; }
|
||||
|
||||
/*tooltips*/
|
||||
.visualize .chart_tooltip {
|
||||
padding: 6px 7px;
|
||||
background: #000;
|
||||
background: url(../images/mbg.png) 0 0 repeat;
|
||||
margin: 3px 4px 0;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
color: #ddd;
|
||||
font-size: 10px;
|
||||
line-height: normal;
|
||||
}
|
||||
BIN
public/site_assets/test/images/breadcrumb_divider.png
Normal file
|
After Width: | Height: | Size: 210 B |
BIN
public/site_assets/test/images/btn_submit.png
Normal file
|
After Width: | Height: | Size: 217 B |
BIN
public/site_assets/test/images/btn_submit_2.png
Normal file
|
After Width: | Height: | Size: 214 B |
BIN
public/site_assets/test/images/btn_view_site.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
public/site_assets/test/images/chartbg-vanilla.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
public/site_assets/test/images/chartbg.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
public/site_assets/test/images/header_bg.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/site_assets/test/images/header_shadow.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
public/site_assets/test/images/icn_add_user.png
Normal file
|
After Width: | Height: | Size: 462 B |
BIN
public/site_assets/test/images/icn_alert_error.png
Normal file
|
After Width: | Height: | Size: 386 B |
BIN
public/site_assets/test/images/icn_alert_info.png
Normal file
|
After Width: | Height: | Size: 434 B |
BIN
public/site_assets/test/images/icn_alert_success.png
Normal file
|
After Width: | Height: | Size: 347 B |
BIN
public/site_assets/test/images/icn_alert_warning.png
Normal file
|
After Width: | Height: | Size: 418 B |
BIN
public/site_assets/test/images/icn_audio.png
Normal file
|
After Width: | Height: | Size: 643 B |
BIN
public/site_assets/test/images/icn_categories.png
Normal file
|
After Width: | Height: | Size: 251 B |
BIN
public/site_assets/test/images/icn_edit.png
Normal file
|
After Width: | Height: | Size: 357 B |
BIN
public/site_assets/test/images/icn_edit_article.png
Normal file
|
After Width: | Height: | Size: 467 B |
BIN
public/site_assets/test/images/icn_folder.png
Normal file
|
After Width: | Height: | Size: 309 B |
BIN
public/site_assets/test/images/icn_jump_back.png
Normal file
|
After Width: | Height: | Size: 489 B |
BIN
public/site_assets/test/images/icn_logout.png
Normal file
|
After Width: | Height: | Size: 443 B |
BIN
public/site_assets/test/images/icn_new_article.png
Normal file
|
After Width: | Height: | Size: 290 B |
BIN
public/site_assets/test/images/icn_photo.png
Normal file
|
After Width: | Height: | Size: 336 B |
BIN
public/site_assets/test/images/icn_profile.png
Normal file
|
After Width: | Height: | Size: 485 B |
BIN
public/site_assets/test/images/icn_search.png
Normal file
|
After Width: | Height: | Size: 429 B |
BIN
public/site_assets/test/images/icn_security.png
Normal file
|
After Width: | Height: | Size: 465 B |
BIN
public/site_assets/test/images/icn_settings.png
Normal file
|
After Width: | Height: | Size: 272 B |
BIN
public/site_assets/test/images/icn_tags.png
Normal file
|
After Width: | Height: | Size: 292 B |
BIN
public/site_assets/test/images/icn_trash.png
Normal file
|
After Width: | Height: | Size: 284 B |
BIN
public/site_assets/test/images/icn_user.png
Normal file
|
After Width: | Height: | Size: 489 B |
BIN
public/site_assets/test/images/icn_video.png
Normal file
|
After Width: | Height: | Size: 311 B |
BIN
public/site_assets/test/images/icn_view_users.png
Normal file
|
After Width: | Height: | Size: 528 B |
BIN
public/site_assets/test/images/module_footer_bg.png
Normal file
|
After Width: | Height: | Size: 233 B |
BIN
public/site_assets/test/images/post_message.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/site_assets/test/images/secondary_bar.png
Normal file
|
After Width: | Height: | Size: 263 B |
BIN
public/site_assets/test/images/secondary_bar_shadow.png
Normal file
|
After Width: | Height: | Size: 498 B |
BIN
public/site_assets/test/images/sidebar.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
public/site_assets/test/images/sidebar_divider.png
Normal file
|
After Width: | Height: | Size: 203 B |
BIN
public/site_assets/test/images/sidebar_shadow.png
Normal file
|
After Width: | Height: | Size: 204 B |
BIN
public/site_assets/test/images/table_sorter_header.png
Normal file
|
After Width: | Height: | Size: 239 B |
54
public/site_assets/test/js/custom.js
Normal file
@ -0,0 +1,54 @@
|
||||
$(document).ready(function() {
|
||||
$(".tablesorter").tablesorter();
|
||||
$(".tab_content").hide(); //Hide all content
|
||||
$("ul.tabs li:first").addClass("active").show(); //Activate first tab
|
||||
$(".tab_content:first").show(); //Show first tab content
|
||||
$("ul.tabs li").click(function() {
|
||||
$("ul.tabs li").removeClass("active"); //Remove any "active" class
|
||||
$(this).addClass("active"); //Add "active" class to selected tab
|
||||
$(".tab_content").hide(); //Hide all tab content
|
||||
var activeTab = $(this).find("a").attr("href"); //Find the href attribute value to identify the active tab + content
|
||||
$(activeTab).fadeIn(); //Fade in the active ID content
|
||||
$(activeTab).find('.visualize').trigger('visualizeRefresh');
|
||||
return false;
|
||||
});
|
||||
$('table.visualize').each(function () {
|
||||
if ($(this).attr('rel')) {
|
||||
var statsType = $(this).attr('rel');
|
||||
} else {
|
||||
var statsType = 'area';
|
||||
}
|
||||
|
||||
// hack to statically set width as something is broken with div width calculation - anni
|
||||
var chart_width = $(document).width() - 500;
|
||||
|
||||
if (statsType == 'line' || statsType == 'pie') {
|
||||
$(this).hide().visualize({
|
||||
type: statsType,
|
||||
// 'bar', 'area', 'pie', 'line'
|
||||
width: chart_width,
|
||||
height: '240px',
|
||||
colors: ['#6fb9e8', '#ec8526', '#9dc453', '#ddd74c'],
|
||||
lineDots: 'double',
|
||||
interaction: true,
|
||||
multiHover: 5,
|
||||
tooltip: true,
|
||||
tooltiphtml: function (data) {
|
||||
var html = '';
|
||||
for (var i = 0; i < data.point.length; i++) {
|
||||
html += '<p class="chart_tooltip"><strong>' + data.point[i].value + '</strong> ' + data.point[i].yLabels[0] + '</p>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$(this).hide().visualize({
|
||||
// 'bar', 'area', 'pie', 'line'
|
||||
width: chart_width,
|
||||
type: statsType,
|
||||
height: '240px',
|
||||
colors: ['#6fb9e8', '#ec8526', '#9dc453', '#ddd74c']
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
36
public/site_assets/test/js/excanvas.js
Normal file
@ -0,0 +1,36 @@
|
||||
// Copyright 2006 Google Inc.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
document.createElement("canvas").getContext||(function(){var s=Math,j=s.round,F=s.sin,G=s.cos,V=s.abs,W=s.sqrt,k=10,v=k/2;function X(){return this.context_||(this.context_=new H(this))}var L=Array.prototype.slice;function Y(b,a){var c=L.call(arguments,2);return function(){return b.apply(a,c.concat(L.call(arguments)))}}var M={init:function(b){if(/MSIE/.test(navigator.userAgent)&&!window.opera){var a=b||document;a.createElement("canvas");a.attachEvent("onreadystatechange",Y(this.init_,this,a))}},init_:function(b){b.namespaces.g_vml_||
|
||||
b.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml","#default#VML");b.namespaces.g_o_||b.namespaces.add("g_o_","urn:schemas-microsoft-com:office:office","#default#VML");if(!b.styleSheets.ex_canvas_){var a=b.createStyleSheet();a.owningElement.id="ex_canvas_";a.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}g_o_\\:*{behavior:url(#default#VML)}"}var c=b.getElementsByTagName("canvas"),d=0;for(;d<c.length;d++)this.initElement(c[d])},
|
||||
initElement:function(b){if(!b.getContext){b.getContext=X;b.innerHTML="";b.attachEvent("onpropertychange",Z);b.attachEvent("onresize",$);var a=b.attributes;if(a.width&&a.width.specified)b.style.width=a.width.nodeValue+"px";else b.width=b.clientWidth;if(a.height&&a.height.specified)b.style.height=a.height.nodeValue+"px";else b.height=b.clientHeight}return b}};function Z(b){var a=b.srcElement;switch(b.propertyName){case "width":a.style.width=a.attributes.width.nodeValue+"px";a.getContext().clearRect();
|
||||
break;case "height":a.style.height=a.attributes.height.nodeValue+"px";a.getContext().clearRect();break}}function $(b){var a=b.srcElement;if(a.firstChild){a.firstChild.style.width=a.clientWidth+"px";a.firstChild.style.height=a.clientHeight+"px"}}M.init();var N=[],B=0;for(;B<16;B++){var C=0;for(;C<16;C++)N[B*16+C]=B.toString(16)+C.toString(16)}function I(){return[[1,0,0],[0,1,0],[0,0,1]]}function y(b,a){var c=I(),d=0;for(;d<3;d++){var f=0;for(;f<3;f++){var h=0,g=0;for(;g<3;g++)h+=b[d][g]*a[g][f];c[d][f]=
|
||||
h}}return c}function O(b,a){a.fillStyle=b.fillStyle;a.lineCap=b.lineCap;a.lineJoin=b.lineJoin;a.lineWidth=b.lineWidth;a.miterLimit=b.miterLimit;a.shadowBlur=b.shadowBlur;a.shadowColor=b.shadowColor;a.shadowOffsetX=b.shadowOffsetX;a.shadowOffsetY=b.shadowOffsetY;a.strokeStyle=b.strokeStyle;a.globalAlpha=b.globalAlpha;a.arcScaleX_=b.arcScaleX_;a.arcScaleY_=b.arcScaleY_;a.lineScale_=b.lineScale_}function P(b){var a,c=1;b=String(b);if(b.substring(0,3)=="rgb"){var d=b.indexOf("(",3),f=b.indexOf(")",d+
|
||||
1),h=b.substring(d+1,f).split(",");a="#";var g=0;for(;g<3;g++)a+=N[Number(h[g])];if(h.length==4&&b.substr(3,1)=="a")c=h[3]}else a=b;return{color:a,alpha:c}}function aa(b){switch(b){case "butt":return"flat";case "round":return"round";case "square":default:return"square"}}function H(b){this.m_=I();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.fillStyle=this.strokeStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=k*1;this.globalAlpha=1;this.canvas=b;
|
||||
var a=b.ownerDocument.createElement("div");a.style.width=b.clientWidth+"px";a.style.height=b.clientHeight+"px";a.style.overflow="hidden";a.style.position="absolute";b.appendChild(a);this.element_=a;this.lineScale_=this.arcScaleY_=this.arcScaleX_=1}var i=H.prototype;i.clearRect=function(){this.element_.innerHTML=""};i.beginPath=function(){this.currentPath_=[]};i.moveTo=function(b,a){var c=this.getCoords_(b,a);this.currentPath_.push({type:"moveTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};
|
||||
i.lineTo=function(b,a){var c=this.getCoords_(b,a);this.currentPath_.push({type:"lineTo",x:c.x,y:c.y});this.currentX_=c.x;this.currentY_=c.y};i.bezierCurveTo=function(b,a,c,d,f,h){var g=this.getCoords_(f,h),l=this.getCoords_(b,a),e=this.getCoords_(c,d);Q(this,l,e,g)};function Q(b,a,c,d){b.currentPath_.push({type:"bezierCurveTo",cp1x:a.x,cp1y:a.y,cp2x:c.x,cp2y:c.y,x:d.x,y:d.y});b.currentX_=d.x;b.currentY_=d.y}i.quadraticCurveTo=function(b,a,c,d){var f=this.getCoords_(b,a),h=this.getCoords_(c,d),g={x:this.currentX_+
|
||||
0.6666666666666666*(f.x-this.currentX_),y:this.currentY_+0.6666666666666666*(f.y-this.currentY_)};Q(this,g,{x:g.x+(h.x-this.currentX_)/3,y:g.y+(h.y-this.currentY_)/3},h)};i.arc=function(b,a,c,d,f,h){c*=k;var g=h?"at":"wa",l=b+G(d)*c-v,e=a+F(d)*c-v,m=b+G(f)*c-v,r=a+F(f)*c-v;if(l==m&&!h)l+=0.125;var n=this.getCoords_(b,a),o=this.getCoords_(l,e),q=this.getCoords_(m,r);this.currentPath_.push({type:g,x:n.x,y:n.y,radius:c,xStart:o.x,yStart:o.y,xEnd:q.x,yEnd:q.y})};i.rect=function(b,a,c,d){this.moveTo(b,
|
||||
a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath()};i.strokeRect=function(b,a,c,d){var f=this.currentPath_;this.beginPath();this.moveTo(b,a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath();this.stroke();this.currentPath_=f};i.fillRect=function(b,a,c,d){var f=this.currentPath_;this.beginPath();this.moveTo(b,a);this.lineTo(b+c,a);this.lineTo(b+c,a+d);this.lineTo(b,a+d);this.closePath();this.fill();this.currentPath_=f};i.createLinearGradient=function(b,
|
||||
a,c,d){var f=new D("gradient");f.x0_=b;f.y0_=a;f.x1_=c;f.y1_=d;return f};i.createRadialGradient=function(b,a,c,d,f,h){var g=new D("gradientradial");g.x0_=b;g.y0_=a;g.r0_=c;g.x1_=d;g.y1_=f;g.r1_=h;return g};i.drawImage=function(b){var a,c,d,f,h,g,l,e,m=b.runtimeStyle.width,r=b.runtimeStyle.height;b.runtimeStyle.width="auto";b.runtimeStyle.height="auto";var n=b.width,o=b.height;b.runtimeStyle.width=m;b.runtimeStyle.height=r;if(arguments.length==3){a=arguments[1];c=arguments[2];h=g=0;l=d=n;e=f=o}else if(arguments.length==
|
||||
5){a=arguments[1];c=arguments[2];d=arguments[3];f=arguments[4];h=g=0;l=n;e=o}else if(arguments.length==9){h=arguments[1];g=arguments[2];l=arguments[3];e=arguments[4];a=arguments[5];c=arguments[6];d=arguments[7];f=arguments[8]}else throw Error("Invalid number of arguments");var q=this.getCoords_(a,c),t=[];t.push(" <g_vml_:group",' coordsize="',k*10,",",k*10,'"',' coordorigin="0,0"',' style="width:',10,"px;height:",10,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]){var E=[];E.push("M11=",
|
||||
this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",j(q.x/k),",","Dy=",j(q.y/k),"");var p=q,z=this.getCoords_(a+d,c),w=this.getCoords_(a,c+f),x=this.getCoords_(a+d,c+f);p.x=s.max(p.x,z.x,w.x,x.x);p.y=s.max(p.y,z.y,w.y,x.y);t.push("padding:0 ",j(p.x/k),"px ",j(p.y/k),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",E.join(""),", sizingmethod='clip');")}else t.push("top:",j(q.y/k),"px;left:",j(q.x/k),"px;");t.push(' ">','<g_vml_:image src="',b.src,
|
||||
'"',' style="width:',k*d,"px;"," height:",k*f,'px;"',' cropleft="',h/n,'"',' croptop="',g/o,'"',' cropright="',(n-h-l)/n,'"',' cropbottom="',(o-g-e)/o,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",t.join(""))};i.stroke=function(b){var a=[],c=P(b?this.fillStyle:this.strokeStyle),d=c.color,f=c.alpha*this.globalAlpha;a.push("<g_vml_:shape",' filled="',!!b,'"',' style="position:absolute;width:',10,"px;height:",10,'px;"',' coordorigin="0 0" coordsize="',k*10," ",k*10,'"',' stroked="',
|
||||
!b,'"',' path="');var h={x:null,y:null},g={x:null,y:null},l=0;for(;l<this.currentPath_.length;l++){var e=this.currentPath_[l];switch(e.type){case "moveTo":a.push(" m ",j(e.x),",",j(e.y));break;case "lineTo":a.push(" l ",j(e.x),",",j(e.y));break;case "close":a.push(" x ");e=null;break;case "bezierCurveTo":a.push(" c ",j(e.cp1x),",",j(e.cp1y),",",j(e.cp2x),",",j(e.cp2y),",",j(e.x),",",j(e.y));break;case "at":case "wa":a.push(" ",e.type," ",j(e.x-this.arcScaleX_*e.radius),",",j(e.y-this.arcScaleY_*e.radius),
|
||||
" ",j(e.x+this.arcScaleX_*e.radius),",",j(e.y+this.arcScaleY_*e.radius)," ",j(e.xStart),",",j(e.yStart)," ",j(e.xEnd),",",j(e.yEnd));break}if(e){if(h.x==null||e.x<h.x)h.x=e.x;if(g.x==null||e.x>g.x)g.x=e.x;if(h.y==null||e.y<h.y)h.y=e.y;if(g.y==null||e.y>g.y)g.y=e.y}}a.push(' ">');if(b)if(typeof this.fillStyle=="object"){var m=this.fillStyle,r=0,n={x:0,y:0},o=0,q=1;if(m.type_=="gradient"){var t=m.x1_/this.arcScaleX_,E=m.y1_/this.arcScaleY_,p=this.getCoords_(m.x0_/this.arcScaleX_,m.y0_/this.arcScaleY_),
|
||||
z=this.getCoords_(t,E);r=Math.atan2(z.x-p.x,z.y-p.y)*180/Math.PI;if(r<0)r+=360;if(r<1.0E-6)r=0}else{var p=this.getCoords_(m.x0_,m.y0_),w=g.x-h.x,x=g.y-h.y;n={x:(p.x-h.x)/w,y:(p.y-h.y)/x};w/=this.arcScaleX_*k;x/=this.arcScaleY_*k;var R=s.max(w,x);o=2*m.r0_/R;q=2*m.r1_/R-o}var u=m.colors_;u.sort(function(ba,ca){return ba.offset-ca.offset});var J=u.length,da=u[0].color,ea=u[J-1].color,fa=u[0].alpha*this.globalAlpha,ga=u[J-1].alpha*this.globalAlpha,S=[],l=0;for(;l<J;l++){var T=u[l];S.push(T.offset*q+
|
||||
o+" "+T.color)}a.push('<g_vml_:fill type="',m.type_,'"',' method="none" focus="100%"',' color="',da,'"',' color2="',ea,'"',' colors="',S.join(","),'"',' opacity="',ga,'"',' g_o_:opacity2="',fa,'"',' angle="',r,'"',' focusposition="',n.x,",",n.y,'" />')}else a.push('<g_vml_:fill color="',d,'" opacity="',f,'" />');else{var K=this.lineScale_*this.lineWidth;if(K<1)f*=K;a.push("<g_vml_:stroke",' opacity="',f,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',aa(this.lineCap),
|
||||
'"',' weight="',K,'px"',' color="',d,'" />')}a.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",a.join(""))};i.fill=function(){this.stroke(true)};i.closePath=function(){this.currentPath_.push({type:"close"})};i.getCoords_=function(b,a){var c=this.m_;return{x:k*(b*c[0][0]+a*c[1][0]+c[2][0])-v,y:k*(b*c[0][1]+a*c[1][1]+c[2][1])-v}};i.save=function(){var b={};O(this,b);this.aStack_.push(b);this.mStack_.push(this.m_);this.m_=y(I(),this.m_)};i.restore=function(){O(this.aStack_.pop(),
|
||||
this);this.m_=this.mStack_.pop()};function ha(b){var a=0;for(;a<3;a++){var c=0;for(;c<2;c++)if(!isFinite(b[a][c])||isNaN(b[a][c]))return false}return true}function A(b,a,c){if(!!ha(a)){b.m_=a;if(c)b.lineScale_=W(V(a[0][0]*a[1][1]-a[0][1]*a[1][0]))}}i.translate=function(b,a){A(this,y([[1,0,0],[0,1,0],[b,a,1]],this.m_),false)};i.rotate=function(b){var a=G(b),c=F(b);A(this,y([[a,c,0],[-c,a,0],[0,0,1]],this.m_),false)};i.scale=function(b,a){this.arcScaleX_*=b;this.arcScaleY_*=a;A(this,y([[b,0,0],[0,a,
|
||||
0],[0,0,1]],this.m_),true)};i.transform=function(b,a,c,d,f,h){A(this,y([[b,a,0],[c,d,0],[f,h,1]],this.m_),true)};i.setTransform=function(b,a,c,d,f,h){A(this,[[b,a,0],[c,d,0],[f,h,1]],true)};i.clip=function(){};i.arcTo=function(){};i.createPattern=function(){return new U};function D(b){this.type_=b;this.r1_=this.y1_=this.x1_=this.r0_=this.y0_=this.x0_=0;this.colors_=[]}D.prototype.addColorStop=function(b,a){a=P(a);this.colors_.push({offset:b,color:a.color,alpha:a.alpha})};function U(){}G_vmlCanvasManager=
|
||||
M;CanvasRenderingContext2D=H;CanvasGradient=D;CanvasPattern=U})();
|
||||
|
||||
39
public/site_assets/test/js/hideshow.js
Normal file
@ -0,0 +1,39 @@
|
||||
// Andy Langton's show/hide/mini-accordion @ http://andylangton.co.uk/jquery-show-hide
|
||||
|
||||
// this tells jquery to run the function below once the DOM is ready
|
||||
$(document).ready(function() {
|
||||
|
||||
// choose text for the show/hide link - can contain HTML (e.g. an image)
|
||||
var showText='Show';
|
||||
var hideText='Hide';
|
||||
|
||||
// initialise the visibility check
|
||||
var is_visible = false;
|
||||
|
||||
// append show/hide links to the element directly preceding the element with a class of "toggle"
|
||||
$('.toggle').prev().append(' <a href="#" class="toggleLink">'+hideText+'</a>');
|
||||
|
||||
// hide all of the elements with a class of 'toggle'
|
||||
$('.toggle').show();
|
||||
|
||||
// capture clicks on the toggle links
|
||||
$('a.toggleLink').click(function() {
|
||||
|
||||
// switch visibility
|
||||
is_visible = !is_visible;
|
||||
|
||||
// change the link text depending on whether the element is shown or hidden
|
||||
if ($(this).text()==showText) {
|
||||
$(this).text(hideText);
|
||||
$(this).parent().next('.toggle').slideDown('slow');
|
||||
}
|
||||
else {
|
||||
$(this).text(showText);
|
||||
$(this).parent().next('.toggle').slideUp('slow');
|
||||
}
|
||||
|
||||
// return false so any link destination is not followed
|
||||
return false;
|
||||
|
||||
});
|
||||
});
|
||||
16
public/site_assets/test/js/jquery-1.5.2.min.js
vendored
Normal file
5
public/site_assets/test/js/jquery-1.9.1.min.js
vendored
Normal file
20
public/site_assets/test/js/jquery.equalHeight.js
Normal file
@ -0,0 +1,20 @@
|
||||
// make sure the $ is pointing to JQuery and not some other library
|
||||
(function($){
|
||||
// add a new method to JQuery
|
||||
|
||||
$.fn.equalHeight = function() {
|
||||
// find the tallest height in the collection
|
||||
// that was passed in (.column)
|
||||
tallest = 0;
|
||||
this.each(function(){
|
||||
thisHeight = $(this).height();
|
||||
if( thisHeight > tallest)
|
||||
tallest = thisHeight;
|
||||
});
|
||||
|
||||
// set each items height to use the tallest value found
|
||||
this.each(function(){
|
||||
$(this).height(tallest);
|
||||
});
|
||||
}
|
||||
})(jQuery);
|
||||
4
public/site_assets/test/js/jquery.tablesorter.min.js
vendored
Normal file
106
public/site_assets/test/js/jquery.tooltip.visualize.js
Normal file
@ -0,0 +1,106 @@
|
||||
/**
|
||||
* --------------------------------------------------------------------
|
||||
* Tooltip plugin for the jQuery-Plugin "Visualize"
|
||||
* Tolltip by Iraê Carvalho, irae@irae.pro.br, http://irae.pro.br/en/
|
||||
* Copyright (c) 2010 Iraê Carvalho
|
||||
* Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
|
||||
*
|
||||
* Visualize plugin by Scott Jehl, scott@filamentgroup.com
|
||||
* Copyright (c) 2009 Filament Group, http://www.filamentgroup.com
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
(function($){
|
||||
$.visualizePlugins.push(function visualizeTooltip(options,tableData) {
|
||||
//configuration
|
||||
var o = $.extend({
|
||||
tooltip: false,
|
||||
tooltipalign: 'auto', // also available 'left' and 'right'
|
||||
tooltipvalign: 'top',
|
||||
tooltipclass: 'visualize-tooltip',
|
||||
tooltiphtml: function(data){
|
||||
if(options.multiHover) {
|
||||
var html='';
|
||||
for(var i=0;i<data.point.length;i++){
|
||||
html += '<p>'+data.point[i].value+' - '+data.point[i].yLabels[0]+'</p>';
|
||||
}
|
||||
return html;
|
||||
} else {
|
||||
return '<p>'+data.point.value+' - '+data.point.yLabels[0]+'</p>';
|
||||
}
|
||||
},
|
||||
delay:false
|
||||
},options);
|
||||
|
||||
// don't go any further if we are not to show anything
|
||||
if(!o.tooltip) {return;}
|
||||
|
||||
var self = $(this),
|
||||
canvasContain = self.next(),
|
||||
scroller = canvasContain.find('.visualize-scroller'),
|
||||
scrollerW = scroller.width(),
|
||||
tracker = canvasContain.find('.visualize-interaction-tracker');
|
||||
|
||||
// IE needs background color and opacity white or the tracker stays behind the tooltip
|
||||
tracker.css({
|
||||
backgroundColor:'white',
|
||||
opacity:0,
|
||||
zIndex:100
|
||||
});
|
||||
|
||||
var tooltip = $('<div class="'+o.tooltipclass+'"/>').css({
|
||||
position:'absolute',
|
||||
display:'none',
|
||||
zIndex:90
|
||||
})
|
||||
.insertAfter(scroller.find('canvas'));
|
||||
|
||||
var usescroll = true;
|
||||
|
||||
if( typeof(G_vmlCanvasManager) != 'undefined' ){
|
||||
scroller.css({'position':'absolute'});
|
||||
tracker.css({marginTop:'-'+(o.height)+'px'});
|
||||
}
|
||||
|
||||
|
||||
self.bind('vizualizeOver',function visualizeTooltipOver(e,data){
|
||||
if(data.canvasContain.get(0) != canvasContain.get(0)) {return;} // for multiple graphs originated from same table
|
||||
if(o.multiHover) {
|
||||
var p = data.point[0].canvasCords;
|
||||
} else {
|
||||
var p = data.point.canvasCords;
|
||||
}
|
||||
var left,right,top,clasRem,clasAd,bottom,x=Math.round(p[0]+data.tableData.zeroLocX),y=Math.round(p[1]+data.tableData.zeroLocY);
|
||||
if(o.tooltipalign == 'left' || ( o.tooltipalign=='auto' && x-scroller.scrollLeft()<=scrollerW/2 ) ) {
|
||||
if($.browser.msie && ($.browser.version == 7 || $.browser.version == 6) ) {usescroll=false;} else {usescroll=true;}
|
||||
left = (x-(usescroll?scroller.scrollLeft():0))+'px';
|
||||
right = '';
|
||||
clasAdd="tooltipleft";
|
||||
clasRem="tooltipright";
|
||||
} else {
|
||||
if($.browser.msie && $.browser.version == 7) {usescroll=false;} else {usescroll=true;}
|
||||
left = '';
|
||||
right = (Math.abs(x-o.width)- (o.width-(usescroll?scroller.scrollLeft():0)-scrollerW) )+'px';
|
||||
clasAdd="tooltipright";
|
||||
clasRem="tooltipleft";
|
||||
}
|
||||
|
||||
tooltip
|
||||
.addClass(clasAdd)
|
||||
.removeClass(clasRem)
|
||||
.html(o.tooltiphtml(data))
|
||||
.css({
|
||||
display:'block',
|
||||
top: y+'px',
|
||||
left: left,
|
||||
right: right
|
||||
});
|
||||
});
|
||||
|
||||
self.bind('vizualizeOut',function visualizeTooltipOut(e,data){
|
||||
tooltip.css({display:'none'});
|
||||
});
|
||||
|
||||
});
|
||||
})(jQuery);
|
||||
795
public/site_assets/test/js/jquery.visualize.js
Normal file
@ -0,0 +1,795 @@
|
||||
/**
|
||||
* --------------------------------------------------------------------
|
||||
* jQuery-Plugin "visualize"
|
||||
* by Scott Jehl, scott@filamentgroup.com
|
||||
* http://www.filamentgroup.com
|
||||
* Copyright (c) 2009 Filament Group
|
||||
* Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
|
||||
*
|
||||
* --------------------------------------------------------------------
|
||||
*/
|
||||
(function($) {
|
||||
$.fn.visualize = function(options, container){
|
||||
return $(this).each(function(){
|
||||
//configuration
|
||||
var o = $.extend({
|
||||
type: 'bar', //also available: area, pie, line
|
||||
width: $(this).width(), //height of canvas - defaults to table height
|
||||
height: $(this).height(), //height of canvas - defaults to table height
|
||||
appendTitle: true, //table caption text is added to chart
|
||||
title: null, //grabs from table caption if null
|
||||
appendKey: true, //color key is added to chart
|
||||
colors: ['#be1e2d','#666699','#92d5ea','#ee8310','#8d10ee','#5a3b16','#26a4ed','#f45a90','#e9e744'],
|
||||
textColors: [], //corresponds with colors array. null/undefined items will fall back to CSS
|
||||
parseDirection: 'x', //which direction to parse the table data
|
||||
pieMargin: 10, //pie charts only - spacing around pie
|
||||
pieLabelsAsPercent: true,
|
||||
pieLabelPos: 'inside',
|
||||
lineWeight: 4, //for line and area - stroke weight
|
||||
lineDots: false, //also available: 'single', 'double'
|
||||
dotInnerColor: "#ffffff", // only used for lineDots:'double'
|
||||
lineMargin: (options.lineDots?15:0), //for line and area - spacing around lines
|
||||
barGroupMargin: 10,
|
||||
chartId: '',
|
||||
xLabelParser: null, // function to parse labels as values
|
||||
valueParser: null, // function to parse values. must return a Number
|
||||
chartId: '',
|
||||
chartClass: '',
|
||||
barMargin: 1, //space around bars in bar chart (added to both sides of bar)
|
||||
yLabelInterval: 30, //distance between y labels
|
||||
interaction: false // only used for lineDots != false -- triggers mouseover and mouseout on original table
|
||||
},options);
|
||||
|
||||
//reset width, height to numbers
|
||||
o.width = parseFloat(o.width);
|
||||
o.height = parseFloat(o.height);
|
||||
|
||||
// reset padding if graph is not lines
|
||||
if(o.type != 'line' && o.type != 'area' ) {
|
||||
o.lineMargin = 0;
|
||||
}
|
||||
|
||||
var self = $(this);
|
||||
|
||||
// scrape data from html table
|
||||
var tableData = {};
|
||||
var colors = o.colors;
|
||||
var textColors = o.textColors;
|
||||
|
||||
|
||||
var parseLabels = function(direction){
|
||||
var labels = [];
|
||||
if(direction == 'x'){
|
||||
self.find('thead tr').each(function(i){
|
||||
$(this).find('th').each(function(j){
|
||||
if(!labels[j]) {
|
||||
labels[j] = [];
|
||||
}
|
||||
labels[j][i] = $(this).text()
|
||||
})
|
||||
});
|
||||
}
|
||||
else {
|
||||
self.find('tbody tr').each(function(i){
|
||||
$(this).find('th').each(function(j) {
|
||||
if(!labels[i]) {
|
||||
labels[i] = [];
|
||||
}
|
||||
labels[i][j] = $(this).text()
|
||||
});
|
||||
});
|
||||
}
|
||||
return labels;
|
||||
};
|
||||
|
||||
var fnParse = o.valueParser || parseFloat;
|
||||
var dataGroups = tableData.dataGroups = [];
|
||||
if(o.parseDirection == 'x'){
|
||||
self.find('tbody tr').each(function(i,tr){
|
||||
dataGroups[i] = {};
|
||||
dataGroups[i].points = [];
|
||||
dataGroups[i].color = colors[i];
|
||||
if(textColors[i]){ dataGroups[i].textColor = textColors[i]; }
|
||||
$(tr).find('td').each(function(j,td){
|
||||
dataGroups[i].points.push( {
|
||||
value: fnParse($(td).text()),
|
||||
elem: td,
|
||||
tableCords: [i,j]
|
||||
} );
|
||||
});
|
||||
});
|
||||
} else {
|
||||
var cols = self.find('tbody tr:eq(0) td').size();
|
||||
for(var i=0; i<cols; i++){
|
||||
dataGroups[i] = {};
|
||||
dataGroups[i].points = [];
|
||||
dataGroups[i].color = colors[i];
|
||||
if(textColors[i]){ dataGroups[i].textColor = textColors[i]; }
|
||||
self.find('tbody tr').each(function(j){
|
||||
dataGroups[i].points.push( {
|
||||
value: $(this).find('td').eq(i).text()*1,
|
||||
elem: this,
|
||||
tableCords: [i,j]
|
||||
} );
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
var allItems = tableData.allItems = [];
|
||||
$(dataGroups).each(function(i,row){
|
||||
var count = 0;
|
||||
$.each(row.points,function(j,point){
|
||||
allItems.push(point);
|
||||
count += point.value;
|
||||
});
|
||||
row.groupTotal = count;
|
||||
});
|
||||
|
||||
tableData.dataSum = 0;
|
||||
tableData.topValue = 0;
|
||||
tableData.bottomValue = Infinity;
|
||||
$.each(allItems,function(i,item){
|
||||
tableData.dataSum += fnParse(item.value);
|
||||
if(fnParse(item.value,10)>tableData.topValue) {
|
||||
tableData.topValue = fnParse(item.value,10);
|
||||
}
|
||||
if(item.value<tableData.bottomValue) {
|
||||
tableData.bottomValue = fnParse(item.value);
|
||||
}
|
||||
});
|
||||
var dataSum = tableData.dataSum;
|
||||
var topValue = tableData.topValue;
|
||||
var bottomValue = tableData.bottomValue;
|
||||
|
||||
var xAllLabels = tableData.xAllLabels = parseLabels(o.parseDirection);
|
||||
var yAllLabels = tableData.yAllLabels = parseLabels(o.parseDirection==='x'?'y':'x');
|
||||
|
||||
var xLabels = tableData.xLabels = [];
|
||||
$.each(tableData.xAllLabels,function(i,labels) {
|
||||
tableData.xLabels.push(labels[0]);
|
||||
});
|
||||
|
||||
var totalYRange = tableData.totalYRange = tableData.topValue - tableData.bottomValue;
|
||||
|
||||
var zeroLocX = tableData.zeroLocX = 0;
|
||||
|
||||
if($.isFunction(o.xLabelParser)) {
|
||||
|
||||
var xTopValue = null;
|
||||
var xBottomValue = null;
|
||||
|
||||
$.each(xLabels,function(i,label) {
|
||||
label = xLabels[i] = o.xLabelParser(label);
|
||||
if(i === 0) {
|
||||
xTopValue = label;
|
||||
xBottomValue = label;
|
||||
}
|
||||
if(label>xTopValue) {
|
||||
xTopValue = label;
|
||||
}
|
||||
if(label<xBottomValue) {
|
||||
xBottomValue = label;
|
||||
}
|
||||
});
|
||||
|
||||
var totalXRange = tableData.totalXRange = xTopValue - xBottomValue;
|
||||
|
||||
|
||||
var xScale = tableData.xScale = (o.width -2*o.lineMargin) / totalXRange;
|
||||
var marginDiffX = 0;
|
||||
if(o.lineMargin) {
|
||||
var marginDiffX = -2*xScale-o.lineMargin;
|
||||
}
|
||||
zeroLocX = tableData.zeroLocX = xBottomValue + o.lineMargin;
|
||||
|
||||
tableData.xBottomValue = xBottomValue;
|
||||
tableData.xTopValue = xTopValue;
|
||||
tableData.totalXRange = totalXRange;
|
||||
}
|
||||
|
||||
var yScale = tableData.yScale = (o.height - 2*o.lineMargin) / totalYRange;
|
||||
var zeroLocY = tableData.zeroLocY = (o.height-2*o.lineMargin) * (tableData.topValue/tableData.totalYRange) + o.lineMargin;
|
||||
|
||||
var yLabels = tableData.yLabels = [];
|
||||
|
||||
var numLabels = Math.floor((o.height - 2*o.lineMargin) / 30);
|
||||
var loopInterval = tableData.totalYRange / numLabels; //fix provided from lab
|
||||
loopInterval = Math.round(parseFloat(loopInterval)/5)*5;
|
||||
loopInterval = Math.max(loopInterval, 1);
|
||||
// var start =
|
||||
for(var j=Math.round(parseInt(tableData.bottomValue)/5)*5; j<=tableData.topValue+loopInterval; j+=loopInterval){
|
||||
yLabels.push(j);
|
||||
}
|
||||
if(yLabels[yLabels.length-1] > tableData.topValue+loopInterval) {
|
||||
yLabels.pop();
|
||||
} else if (yLabels[yLabels.length-1] <= tableData.topValue-10) {
|
||||
yLabels.push(tableData.topValue);
|
||||
}
|
||||
|
||||
// populate some data
|
||||
$.each(dataGroups,function(i,row){
|
||||
row.yLabels = tableData.yAllLabels[i];
|
||||
$.each(row.points, function(j,point){
|
||||
point.zeroLocY = tableData.zeroLocY;
|
||||
point.zeroLocX = tableData.zeroLocX;
|
||||
point.xLabels = tableData.xAllLabels[j];
|
||||
point.yLabels = tableData.yAllLabels[i];
|
||||
point.color = row.color;
|
||||
});
|
||||
});
|
||||
|
||||
try{console.log(tableData);}catch(e){}
|
||||
|
||||
var charts = {};
|
||||
|
||||
charts.pie = {
|
||||
interactionPoints: dataGroups,
|
||||
|
||||
setup: function() {
|
||||
charts.pie.draw(true);
|
||||
},
|
||||
draw: function(drawHtml){
|
||||
|
||||
var centerx = Math.round(canvas.width()/2);
|
||||
var centery = Math.round(canvas.height()/2);
|
||||
var radius = centery - o.pieMargin;
|
||||
var counter = 0.0;
|
||||
|
||||
if(drawHtml) {
|
||||
canvasContain.addClass('visualize-pie');
|
||||
|
||||
if(o.pieLabelPos == 'outside'){ canvasContain.addClass('visualize-pie-outside'); }
|
||||
|
||||
var toRad = function(integer){ return (Math.PI/180)*integer; };
|
||||
var labels = $('<ul class="visualize-labels"></ul>')
|
||||
.insertAfter(canvas);
|
||||
}
|
||||
|
||||
|
||||
//draw the pie pieces
|
||||
$.each(dataGroups, function(i,row){
|
||||
var fraction = row.groupTotal / dataSum;
|
||||
if (fraction <= 0 || isNaN(fraction))
|
||||
return;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(centerx, centery);
|
||||
ctx.arc(centerx, centery, radius,
|
||||
counter * Math.PI * 2 - Math.PI * 0.5,
|
||||
(counter + fraction) * Math.PI * 2 - Math.PI * 0.5,
|
||||
false);
|
||||
ctx.lineTo(centerx, centery);
|
||||
ctx.closePath();
|
||||
ctx.fillStyle = dataGroups[i].color;
|
||||
ctx.fill();
|
||||
// draw labels
|
||||
if(drawHtml) {
|
||||
var sliceMiddle = (counter + fraction/2);
|
||||
var distance = o.pieLabelPos == 'inside' ? radius/1.5 : radius + radius / 5;
|
||||
var labelx = Math.round(centerx + Math.sin(sliceMiddle * Math.PI * 2) * (distance));
|
||||
var labely = Math.round(centery - Math.cos(sliceMiddle * Math.PI * 2) * (distance));
|
||||
var leftRight = (labelx > centerx) ? 'right' : 'left';
|
||||
var topBottom = (labely > centery) ? 'bottom' : 'top';
|
||||
var percentage = parseFloat((fraction*100).toFixed(2));
|
||||
|
||||
// interaction variables
|
||||
row.canvasCords = [labelx,labely];
|
||||
row.zeroLocY = tableData.zeroLocY = 0; // related to zeroLocY and plugin API
|
||||
row.zeroLocX = tableData.zeroLocX = 0; // related to zeroLocX and plugin API
|
||||
row.value = row.groupTotal;
|
||||
|
||||
|
||||
if(percentage){
|
||||
var labelval = (o.pieLabelsAsPercent) ? percentage + '%' : row.groupTotal;
|
||||
var labeltext = $('<span class="visualize-label">' + labelval +'</span>')
|
||||
.css(leftRight, 0)
|
||||
.css(topBottom, 0);
|
||||
if(labeltext)
|
||||
var label = $('<li class="visualize-label-pos"></li>')
|
||||
.appendTo(labels)
|
||||
.css({left: labelx, top: labely})
|
||||
.append(labeltext);
|
||||
labeltext
|
||||
.css('font-size', radius / 8)
|
||||
.css('margin-'+leftRight, -labeltext.width()/2)
|
||||
.css('margin-'+topBottom, -labeltext.outerHeight()/2);
|
||||
|
||||
if(dataGroups[i].textColor){ labeltext.css('color', dataGroups[i].textColor); }
|
||||
|
||||
}
|
||||
}
|
||||
counter+=fraction;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
(function(){
|
||||
|
||||
var xInterval;
|
||||
|
||||
var drawPoint = function (ctx,x,y,color,size) {
|
||||
ctx.moveTo(x,y);
|
||||
ctx.beginPath();
|
||||
ctx.arc(x,y,size/2,0,2*Math.PI,false);
|
||||
ctx.closePath();
|
||||
ctx.fillStyle = color;
|
||||
ctx.fill();
|
||||
};
|
||||
|
||||
charts.line = {
|
||||
|
||||
interactionPoints: allItems,
|
||||
|
||||
setup: function(area){
|
||||
|
||||
if(area){ canvasContain.addClass('visualize-area'); }
|
||||
else{ canvasContain.addClass('visualize-line'); }
|
||||
|
||||
//write X labels
|
||||
var xlabelsUL = $('<ul class="visualize-labels-x"></ul>')
|
||||
.width(canvas.width())
|
||||
.height(canvas.height())
|
||||
.insertBefore(canvas);
|
||||
|
||||
if(!o.customXLabels) {
|
||||
xInterval = (canvas.width() - 2*o.lineMargin) / (xLabels.length -1);
|
||||
$.each(xLabels, function(i){
|
||||
var thisLi = $('<li><span>'+this+'</span></li>')
|
||||
.prepend('<span class="line" />')
|
||||
.css('left', o.lineMargin + xInterval * i)
|
||||
.appendTo(xlabelsUL);
|
||||
var label = thisLi.find('span:not(.line)');
|
||||
var leftOffset = label.width()/-2;
|
||||
if(i == 0){ leftOffset = 0; }
|
||||
else if(i== xLabels.length-1){ leftOffset = -label.width(); }
|
||||
label
|
||||
.css('margin-left', leftOffset)
|
||||
.addClass('label');
|
||||
});
|
||||
} else {
|
||||
o.customXLabels(tableData,xlabelsUL);
|
||||
}
|
||||
|
||||
//write Y labels
|
||||
var liBottom = (canvas.height() - 2*o.lineMargin) / (yLabels.length-1);
|
||||
var ylabelsUL = $('<ul class="visualize-labels-y"></ul>')
|
||||
.width(canvas.width())
|
||||
.height(canvas.height())
|
||||
// .css('margin-top',-o.lineMargin)
|
||||
.insertBefore(scroller);
|
||||
|
||||
$.each(yLabels, function(i){
|
||||
var value = Math.floor(this);
|
||||
var posB = (value-bottomValue)*yScale + o.lineMargin;
|
||||
if(posB >= o.height-1 || posB < 0) {
|
||||
return;
|
||||
}
|
||||
var thisLi = $('<li><span>'+value+'</span></li>')
|
||||
.css('bottom', posB);
|
||||
if(Math.abs(posB) < o.height-1) {
|
||||
thisLi.prepend('<span class="line" />');
|
||||
}
|
||||
thisLi.prependTo(ylabelsUL);
|
||||
|
||||
var label = thisLi.find('span:not(.line)');
|
||||
var topOffset = label.height()/-2;
|
||||
if(!o.lineMargin) {
|
||||
if(i == 0){ topOffset = -label.height(); }
|
||||
else if(i== yLabels.length-1){ topOffset = 0; }
|
||||
}
|
||||
label
|
||||
.css('margin-top', topOffset)
|
||||
.addClass('label');
|
||||
});
|
||||
|
||||
//start from the bottom left
|
||||
ctx.translate(zeroLocX,zeroLocY);
|
||||
|
||||
charts.line.draw(area);
|
||||
|
||||
},
|
||||
|
||||
draw: function(area) {
|
||||
// prevent drawing on top of previous draw
|
||||
ctx.clearRect(-zeroLocX,-zeroLocY,o.width,o.height);
|
||||
// Calculate each point properties before hand
|
||||
var integer;
|
||||
$.each(dataGroups,function(i,row){
|
||||
integer = o.lineMargin; // the current offset
|
||||
$.each(row.points, function(j,point){
|
||||
if(o.xLabelParser) {
|
||||
point.canvasCords = [(xLabels[j]-zeroLocX)*xScale - xBottomValue,-(point.value*yScale)];
|
||||
} else {
|
||||
point.canvasCords = [integer,-(point.value*yScale)];
|
||||
}
|
||||
|
||||
if(o.lineDots) {
|
||||
point.dotSize = o.dotSize||o.lineWeight*Math.PI;
|
||||
point.dotInnerSize = o.dotInnerSize||o.lineWeight*Math.PI/2;
|
||||
if(o.lineDots == 'double') {
|
||||
point.innerColor = o.dotInnerColor;
|
||||
}
|
||||
}
|
||||
integer+=xInterval;
|
||||
});
|
||||
});
|
||||
// fire custom event so we can enable rich interaction
|
||||
self.trigger('vizualizeBeforeDraw',{options:o,table:self,canvasContain:canvasContain,tableData:tableData});
|
||||
// draw lines and areas
|
||||
$.each(dataGroups,function(h){
|
||||
// Draw lines
|
||||
ctx.beginPath();
|
||||
ctx.lineWidth = o.lineWeight;
|
||||
ctx.lineJoin = 'round';
|
||||
$.each(this.points, function(g){
|
||||
var loc = this.canvasCords;
|
||||
if(g == 0) {
|
||||
ctx.moveTo(loc[0],loc[1]);
|
||||
}
|
||||
ctx.lineTo(loc[0],loc[1]);
|
||||
});
|
||||
ctx.strokeStyle = this.color;
|
||||
ctx.stroke();
|
||||
// Draw fills
|
||||
if(area){
|
||||
var integer = this.points[this.points.length-1].canvasCords[0];
|
||||
if (isFinite(integer))
|
||||
ctx.lineTo(integer,0);
|
||||
ctx.lineTo(o.lineMargin,0);
|
||||
ctx.closePath();
|
||||
ctx.fillStyle = this.color;
|
||||
ctx.globalAlpha = .3;
|
||||
ctx.fill();
|
||||
ctx.globalAlpha = 1.0;
|
||||
}
|
||||
else {ctx.closePath();}
|
||||
});
|
||||
// draw points
|
||||
if(o.lineDots) {
|
||||
$.each(dataGroups,function(h){
|
||||
$.each(this.points, function(g){
|
||||
drawPoint(ctx,this.canvasCords[0],this.canvasCords[1],this.color,this.dotSize);
|
||||
if(o.lineDots === 'double') {
|
||||
drawPoint(ctx,this.canvasCords[0],this.canvasCords[1],this.innerColor,this.dotInnerSize);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
charts.area = {
|
||||
setup: function() {
|
||||
charts.line.setup(true);
|
||||
},
|
||||
draw: charts.line.draw
|
||||
};
|
||||
|
||||
(function(){
|
||||
|
||||
var horizontal,bottomLabels;
|
||||
|
||||
charts.bar = {
|
||||
setup:function(){
|
||||
/**
|
||||
* We can draw horizontal or vertical bars depending on the
|
||||
* value of the 'barDirection' option (which may be 'vertical' or
|
||||
* 'horizontal').
|
||||
*/
|
||||
|
||||
horizontal = (o.barDirection == 'horizontal');
|
||||
|
||||
canvasContain.addClass('visualize-bar');
|
||||
|
||||
/**
|
||||
* Write labels along the bottom of the chart. If we're drawing
|
||||
* horizontal bars, these will be the yLabels, otherwise they
|
||||
* will be the xLabels. The positioning also varies slightly:
|
||||
* yLabels are values, hence they will span the whole width of
|
||||
* the canvas, whereas xLabels are supposed to line up with the
|
||||
* bars.
|
||||
*/
|
||||
bottomLabels = horizontal ? yLabels : xLabels;
|
||||
|
||||
var xInterval = canvas.width() / (bottomLabels.length - (horizontal ? 1 : 0));
|
||||
|
||||
var xlabelsUL = $('<ul class="visualize-labels-x"></ul>')
|
||||
.width(canvas.width())
|
||||
.height(canvas.height())
|
||||
.insertBefore(canvas);
|
||||
|
||||
$.each(bottomLabels, function(i){
|
||||
var thisLi = $('<li><span class="label">'+this+'</span></li>')
|
||||
.prepend('<span class="line" />')
|
||||
.css('left', xInterval * i)
|
||||
.width(xInterval)
|
||||
.appendTo(xlabelsUL);
|
||||
|
||||
if (horizontal) {
|
||||
var label = thisLi.find('span.label');
|
||||
label.css("margin-left", -label.width() / 2);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Write labels along the left of the chart. Follows the same idea
|
||||
* as the bottom labels.
|
||||
*/
|
||||
var leftLabels = horizontal ? xLabels : yLabels;
|
||||
var liBottom = canvas.height() / (leftLabels.length - (horizontal ? 0 : 1));
|
||||
|
||||
var ylabelsUL = $('<ul class="visualize-labels-y"></ul>')
|
||||
.width(canvas.width())
|
||||
.height(canvas.height())
|
||||
.insertBefore(canvas);
|
||||
|
||||
$.each(leftLabels, function(i){
|
||||
var thisLi = $('<li><span>'+this+'</span></li>').prependTo(ylabelsUL);
|
||||
|
||||
var label = thisLi.find('span:not(.line)').addClass('label');
|
||||
|
||||
if (horizontal) {
|
||||
/**
|
||||
* For left labels, we want to vertically align the text
|
||||
* to the middle of its container, but we don't know how
|
||||
* many lines of text we will have, since the labels could
|
||||
* be very long.
|
||||
*
|
||||
* So we set a min-height of liBottom, and a max-height
|
||||
* of liBottom + 1, so we can then check the label's actual
|
||||
* height to determine if it spans one line or more lines.
|
||||
*/
|
||||
label.css({
|
||||
'min-height': liBottom,
|
||||
'max-height': liBottom + 1,
|
||||
'vertical-align': 'middle'
|
||||
});
|
||||
thisLi.css({'top': liBottom * i, 'min-height': liBottom});
|
||||
|
||||
var r = label[0].getClientRects()[0];
|
||||
if (r.bottom - r.top == liBottom) {
|
||||
/* This means we have only one line of text; hence
|
||||
* we can centre the text vertically by setting the line-height,
|
||||
* as described at:
|
||||
* http://www.ampsoft.net/webdesign-l/vertical-aligned-nav-list.html
|
||||
*
|
||||
* (Although firefox has .height on the rectangle, IE doesn't,
|
||||
* so we use r.bottom - r.top rather than r.height.)
|
||||
*/
|
||||
label.css('line-height', parseInt(liBottom) + 'px');
|
||||
}
|
||||
else {
|
||||
/*
|
||||
* If there is more than one line of text, then we shouldn't
|
||||
* touch the line height, but we should make sure the text
|
||||
* doesn't overflow the container.
|
||||
*/
|
||||
label.css("overflow", "hidden");
|
||||
}
|
||||
}
|
||||
else {
|
||||
thisLi.css('bottom', liBottom * i).prepend('<span class="line" />');
|
||||
label.css('margin-top', -label.height() / 2)
|
||||
}
|
||||
});
|
||||
|
||||
charts.bar.draw();
|
||||
|
||||
},
|
||||
|
||||
draw: function() {
|
||||
// Draw bars
|
||||
|
||||
if (horizontal) {
|
||||
// for horizontal, keep the same code, but rotate everything 90 degrees
|
||||
// clockwise.
|
||||
ctx.rotate(Math.PI / 2);
|
||||
}
|
||||
else {
|
||||
// for vertical, translate to the top left corner.
|
||||
ctx.translate(0, zeroLocY);
|
||||
}
|
||||
|
||||
// Don't attempt to draw anything if all the values are zero,
|
||||
// otherwise we will get weird exceptions from the canvas methods.
|
||||
if (totalYRange <= 0)
|
||||
return;
|
||||
|
||||
var yScale = (horizontal ? canvas.width() : canvas.height()) / totalYRange;
|
||||
var barWidth = horizontal ? (canvas.height() / xLabels.length) : (canvas.width() / (bottomLabels.length));
|
||||
var linewidth = (barWidth - o.barGroupMargin*2) / dataGroups.length;
|
||||
|
||||
for(var h=0; h<dataGroups.length; h++){
|
||||
ctx.beginPath();
|
||||
|
||||
var strokeWidth = linewidth - (o.barMargin*2);
|
||||
ctx.lineWidth = strokeWidth;
|
||||
var points = dataGroups[h].points;
|
||||
var integer = 0;
|
||||
for(var i=0; i<points.length; i++){
|
||||
// If the last value is zero, IE will go nuts and not draw anything,
|
||||
// so don't try to draw zero values at all.
|
||||
if (points[i].value != 0) {
|
||||
var xVal = (integer-o.barGroupMargin)+(h*linewidth)+linewidth/2;
|
||||
xVal += o.barGroupMargin*2;
|
||||
|
||||
ctx.moveTo(xVal, 0);
|
||||
ctx.lineTo(xVal, Math.round(-points[i].value*yScale));
|
||||
}
|
||||
integer+=barWidth;
|
||||
}
|
||||
ctx.strokeStyle = dataGroups[h].color;
|
||||
ctx.stroke();
|
||||
ctx.closePath();
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
//create new canvas, set w&h attrs (not inline styles)
|
||||
var canvasNode = document.createElement("canvas");
|
||||
var canvas = $(canvasNode)
|
||||
.attr({
|
||||
'height': o.height,
|
||||
'width': o.width
|
||||
});
|
||||
|
||||
//get title for chart
|
||||
var title = o.title || self.find('caption').text();
|
||||
|
||||
//create canvas wrapper div, set inline w&h, append
|
||||
var canvasContain = (container || $('<div '+(o.chartId?'id="'+o.chartId+'" ':'')+'class="visualize '+o.chartClass+'" role="img" aria-label="Chart representing data from the table: '+ title +'" />'))
|
||||
.height(o.height)
|
||||
.width(o.width);
|
||||
|
||||
var scroller = $('<div class="visualize-scroller"></div>')
|
||||
.appendTo(canvasContain)
|
||||
.append(canvas);
|
||||
|
||||
//title/key container
|
||||
if(o.appendTitle || o.appendKey){
|
||||
var infoContain = $('<div class="visualize-info"></div>')
|
||||
.appendTo(canvasContain);
|
||||
}
|
||||
|
||||
//append title
|
||||
if(o.appendTitle){
|
||||
$('<div class="visualize-title">'+ title +'</div>').appendTo(infoContain);
|
||||
}
|
||||
|
||||
|
||||
//append key
|
||||
if(o.appendKey){
|
||||
var newKey = $('<ul class="visualize-key"></ul>');
|
||||
$.each(yAllLabels, function(i,label){
|
||||
$('<li><span class="visualize-key-color" style="background: '+dataGroups[i].color+'"></span><span class="visualize-key-label">'+ label +'</span></li>')
|
||||
.appendTo(newKey);
|
||||
});
|
||||
newKey.appendTo(infoContain);
|
||||
};
|
||||
|
||||
// init interaction
|
||||
if(o.interaction) {
|
||||
// sets the canvas to track interaction
|
||||
// IE needs one div on top of the canvas since the VML shapes prevent mousemove from triggering correctly.
|
||||
// Pie charts needs tracker because labels goes on top of the canvas and also messes up with mousemove
|
||||
var tracker = $('<div class="visualize-interaction-tracker"/>')
|
||||
.css({
|
||||
'height': o.height + 'px',
|
||||
'width': o.width + 'px',
|
||||
'position':'relative',
|
||||
'z-index': 200
|
||||
})
|
||||
.insertAfter(canvas);
|
||||
|
||||
var triggerInteraction = function(overOut,data) {
|
||||
var data = $.extend({
|
||||
canvasContain:canvasContain,
|
||||
tableData:tableData
|
||||
},data);
|
||||
self.trigger('vizualize'+overOut,data);
|
||||
};
|
||||
|
||||
var over=false, last=false, started=false;
|
||||
tracker.mousemove(function(e){
|
||||
var x,y,x1,y1,data,dist,i,current,selector,zLabel,elem,color,minDist,found,ev=e.originalEvent;
|
||||
|
||||
// get mouse position relative to the tracker/canvas
|
||||
x = ev.layerX || ev.offsetX || 0;
|
||||
y = ev.layerY || ev.offsetY || 0;
|
||||
|
||||
found = false;
|
||||
minDist = started?30000:(o.type=='pie'?(Math.round(canvas.height()/2)-o.pieMargin)/3:o.lineWeight*4);
|
||||
// iterate datagroups to find points with matching
|
||||
$.each(charts[o.type].interactionPoints,function(i,current){
|
||||
x1 = current.canvasCords[0] + zeroLocX;
|
||||
y1 = current.canvasCords[1] + (o.type=="pie"?0:zeroLocY);
|
||||
dist = Math.sqrt( (x1 - x)*(x1 - x) + (y1 - y)*(y1 - y) );
|
||||
if(dist < minDist) {
|
||||
found = current;
|
||||
minDist = dist;
|
||||
}
|
||||
});
|
||||
|
||||
if(o.multiHover && found) {
|
||||
x = found.canvasCords[0] + zeroLocX;
|
||||
y = found.canvasCords[1] + (o.type=="pie"?0:zeroLocY);
|
||||
found = [found];
|
||||
$.each(charts[o.type].interactionPoints,function(i,current){
|
||||
if(current == found[0]) {return;}
|
||||
x1 = current.canvasCords[0] + zeroLocX;
|
||||
y1 = current.canvasCords[1] + zeroLocY;
|
||||
dist = Math.sqrt( (x1 - x)*(x1 - x) + (y1 - y)*(y1 - y) );
|
||||
if(dist <= o.multiHover) {
|
||||
found.push(current);
|
||||
}
|
||||
});
|
||||
}
|
||||
// trigger over and out only when state changes, instead of on every mousemove
|
||||
over = found;
|
||||
if(over != last) {
|
||||
if(over) {
|
||||
if(last) {
|
||||
triggerInteraction('Out',{point:last});
|
||||
}
|
||||
triggerInteraction('Over',{point:over});
|
||||
last = over;
|
||||
}
|
||||
if(last && !over) {
|
||||
triggerInteraction('Out',{point:last});
|
||||
last=false;
|
||||
}
|
||||
started=true;
|
||||
}
|
||||
});
|
||||
tracker.mouseleave(function(){
|
||||
triggerInteraction('Out',{
|
||||
point:last,
|
||||
mouseOutGraph:true
|
||||
});
|
||||
over = (last = false);
|
||||
});
|
||||
}
|
||||
|
||||
//append new canvas to page
|
||||
if(!container){canvasContain.insertAfter(this); }
|
||||
if( typeof(G_vmlCanvasManager) != 'undefined' ){ G_vmlCanvasManager.init(); G_vmlCanvasManager.initElement(canvas[0]); }
|
||||
|
||||
//set up the drawing board
|
||||
var ctx = canvas[0].getContext('2d');
|
||||
|
||||
// Scroll graphs
|
||||
scroller.scrollLeft(o.width-scroller.width());
|
||||
|
||||
// init plugins
|
||||
$.each($.visualizePlugins,function(i,plugin){
|
||||
plugin.call(self,o,tableData);
|
||||
});
|
||||
|
||||
//create chart
|
||||
charts[o.type].setup();
|
||||
|
||||
if(!container){
|
||||
//add event for updating
|
||||
self.bind('visualizeRefresh', function(){
|
||||
self.visualize(o, $(this).empty());
|
||||
});
|
||||
//add event for redraw
|
||||
self.bind('visualizeRedraw', function(){
|
||||
charts[o.type].draw();
|
||||
});
|
||||
}
|
||||
}).next(); //returns canvas(es)
|
||||
};
|
||||
// create array for plugins. if you wish to make a plugin,
|
||||
// just push your init funcion into this array
|
||||
$.visualizePlugins = [];
|
||||
|
||||
})(jQuery);
|
||||
|
||||
|
||||
1
public/templates/test/account/confirm/default.tpl
Normal file
@ -0,0 +1 @@
|
||||
|
||||
1
public/templates/test/account/default.tpl
Normal file
@ -0,0 +1 @@
|
||||
No action specified
|
||||
53
public/templates/test/account/edit/default.tpl
Normal file
@ -0,0 +1,53 @@
|
||||
{include file="global/block_header.tpl" BLOCK_HEADER="Account Details"}
|
||||
<form action="{$smarty.server.PHP_SELF}" method="post">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page|escape}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action|escape}">
|
||||
<input type="hidden" name="do" value="updateAccount">
|
||||
<table>
|
||||
<tbody><tr><td>Username: </td><td>{$GLOBAL.userdata.username|escape}</td></tr>
|
||||
<tr><td>User Id: </td><td>{$GLOBAL.userdata.id}</td></tr>
|
||||
{if !$GLOBAL.config.website.api.disabled}<tr><td>API Key: </td><td><a href="{$smarty.server.PHP_SELF}?page=api&action=getuserstatus&api_key={$GLOBAL.userdata.api_key}&id={$GLOBAL.userdata.id}">{$GLOBAL.userdata.api_key}</a></td></tr>{/if}
|
||||
<tr><td>E-Mail: </td><td><input type="text" name="email" value="{nocache}{$GLOBAL.userdata.email|escape}{/nocache}" size="20"></td></tr>
|
||||
<tr><td>Payment Address: </td><td><input type="text" name="paymentAddress" value="{nocache}{$smarty.request.paymentAddress|default:$GLOBAL.userdata.coin_address|escape}{nocache}" size="40"></td></tr>
|
||||
<tr><td>Donation %: </td><td><input type="text" name="donatePercent" value="{nocache}{$smarty.request.donatePercent|default:$GLOBAL.userdata.donate_percent|escape}{nocache}" size="4"><font size="1"> [donation amount in percent (example: 0.5)]</font></td></tr>
|
||||
<tr><td>Automatic Payout Threshold: </td><td valign="top"><input type="text" name="payoutThreshold" value="{$smarty.request.payoutThreshold|default:$GLOBAL.userdata.ap_threshold|escape}" size="5" maxlength="5"> <font size="1">[{$GLOBAL.config.ap_threshold.min}-{$GLOBAL.config.ap_threshold.max} {$GLOBAL.config.currency}. Set to '0' for no auto payout]</font></td></tr>
|
||||
<tr><td>Anonymous Account <span id='tt'><img src='{$PATH}/images/questionmark.png' height='15px' width='15px' title='Will hide your username on the website for others. Only admins can still get your user information.'></span>:</td><td>
|
||||
<input type="hidden" name="is_anonymous" value="0" />
|
||||
<input type="checkbox" name="is_anonymous" value="1" id="is_anonymous" {if $GLOBAL.userdata.is_anonymous}checked{/if} />
|
||||
<label for="is_anonymous"></label>
|
||||
</td></tr>
|
||||
<tr><td>4 digit PIN: </td><td><input type="password" name="authPin" size="4" maxlength="4"><font size="1"> [The 4 digit PIN you chose when registering]</font></td></tr>
|
||||
</tbody></table>
|
||||
<input type="submit" class="submit long" value="Update Settings"></form>
|
||||
{include file="global/block_footer.tpl"}
|
||||
|
||||
{if !$GLOBAL.disable_mp}
|
||||
{include file="global/block_header.tpl" BLOCK_HEADER="Cash Out"}
|
||||
<ul><li><font color="">Please note: a {$GLOBAL.config.txfee} {$GLOBAL.config.currency} transaction will apply when processing "On-Demand" manual payments</font></li></ul>
|
||||
<form action="{$smarty.server.PHP_SELF}" method="post">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page|escape}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action|escape}">
|
||||
<input type="hidden" name="do" value="cashOut">
|
||||
<table>
|
||||
<tbody><tr><td>Account Balance: </td><td>{nocache}{$GLOBAL.userdata.balance.confirmed|escape}{/nocache} {$GLOBAL.config.currency}</td></tr>
|
||||
<tr><td>Payout to: </td><td><h6>{nocache}{$GLOBAL.userdata.coin_address|escape}{/nocache}</h6></td></tr>
|
||||
<tr><td>4 digit PIN: </td><td><input type="password" name="authPin" size="4" maxlength="4"></td></tr>
|
||||
</tbody></table>
|
||||
<input type="submit" class="submit mid" value="Cash Out"></form>
|
||||
{include file="global/block_footer.tpl"}
|
||||
{/if}
|
||||
|
||||
{include file="global/block_header.tpl" BLOCK_HEADER="Change Password"}
|
||||
<ul><li><font color="">Note: You will be redirected to login on successful completion of a password change</font></li></ul>
|
||||
<form action="{$smarty.server.PHP_SELF}" method="post"><input type="hidden" name="act" value="updatePassword">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page|escape}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action|escape}">
|
||||
<input type="hidden" name="do" value="updatePassword">
|
||||
<table>
|
||||
<tbody><tr><td>Current Password: </td><td><input type="password" name="currentPassword"></td></tr>
|
||||
<tr><td>New Password: </td><td><input type="password" name="newPassword"></td></tr>
|
||||
<tr><td>New Password Repeat: </td><td><input type="password" name="newPassword2"></td></tr>
|
||||
<tr><td>4 digit PIN: </td><td><input type="password" name="authPin" size="4" maxlength="4"></td></tr>
|
||||
</tbody></table>
|
||||
<input type="submit" class="submit long" value="Change Password"></form>
|
||||
{include file="global/block_footer.tpl"}
|
||||
43
public/templates/test/account/invitations/default.tpl
Normal file
@ -0,0 +1,43 @@
|
||||
{include file="global/block_header.tpl" ALIGN="left" BLOCK_HEADER="Invitations"}
|
||||
<form action="{$smarty.server.PHP_SELF}" method="POST">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action}">
|
||||
<input type="hidden" name="do" value="sendInvitation">
|
||||
<table>
|
||||
<tr>
|
||||
<td>E-Mail</td>
|
||||
<td><input type="text" name="data[email]" value="{$smarty.request.data.email|escape|default:""}" size="30" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Message</td>
|
||||
<td><textarea name="data[message]">{$smarty.request.data.message|escape|default:"Please accept my invitation to this awesome pool."}</textarea></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="center">
|
||||
<input type="submit" class="submit small" value="Send">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{include file="global/block_footer.tpl"}
|
||||
|
||||
{include file="global/block_header.tpl" ALIGN="right" BLOCK_HEADER="Past Invitations"}
|
||||
<table width="100%">
|
||||
<thead style="font-size:13px;">
|
||||
<tr>
|
||||
<th>E-Mail</th>
|
||||
<th class="center">Sent</th>
|
||||
<th class="center">Activated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{section name=invite loop=$INVITATIONS}
|
||||
<tr>
|
||||
<td>{$INVITATIONS[invite].email}</td>
|
||||
<td class="center">{$INVITATIONS[invite].time|date_format:"%d/%m/%Y %H:%M:%S"}</td>
|
||||
<td class="center"><img src="{$PATH}/images/{if $INVITATIONS[invite].is_activated}success{else}error{/if}.gif" /></td>
|
||||
</tr>
|
||||
{/section}
|
||||
<tbody>
|
||||
</table>
|
||||
{include file="global/block_footer.tpl"}
|
||||
84
public/templates/test/account/notifications/default.tpl
Normal file
@ -0,0 +1,84 @@
|
||||
{include file="global/block_header.tpl" ALIGN="left" BLOCK_HEADER="Notification Settings"}
|
||||
<form action="{$smarty.server.PHP_SELF}" method="POST">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action}">
|
||||
<input type="hidden" name="do" value="save">
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<th class="left">Type</th>
|
||||
<th class="center">Active</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left">IDLE Worker</td>
|
||||
<td class="center">
|
||||
<input type="hidden" name="data[idle_worker]" value="0" />
|
||||
<input type="checkbox" name="data[idle_worker]" id="data[idle_worker]" value="1"{nocache}{if $SETTINGS['idle_worker']}checked{/if}{/nocache} />
|
||||
<label for="data[idle_worker]"></label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left">New Blocks</td>
|
||||
<td class="center">
|
||||
<input type="hidden" name="data[new_block]" value="0" />
|
||||
<input type="checkbox" name="data[new_block]" id="data[new_block]" value="1"{nocache}{if $SETTINGS['new_block']}checked{/if}{/nocache} />
|
||||
<label for="data[new_block]"></label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left">Auto Payout</td>
|
||||
<td class="center">
|
||||
<input type="hidden" name="data[auto_payout]" value="0" />
|
||||
<input type="checkbox" name="data[auto_payout]" id="data[auto_payout]" value="1"{nocache}{if $SETTINGS['auto_payout']}checked{/if}{/nocache} />
|
||||
<label for="data[auto_payout]"></label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left">Manual Payout</td>
|
||||
<td class="center">
|
||||
<input type="hidden" name="data[manual_payout]" value="0" />
|
||||
<input type="checkbox" name="data[manual_payout]" id="data[manual_payout]" value="1"{nocache}{if $SETTINGS['manual_payout']}checked{/if}{/nocache} />
|
||||
<label for="data[manual_payout]"></label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="center">
|
||||
<input type="submit" class="submit small" value="Update">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
{include file="global/block_footer.tpl"}
|
||||
|
||||
{include file="global/block_header.tpl" ALIGN="right" BLOCK_HEADER="Notification History"}
|
||||
<center>
|
||||
{include file="global/pagination.tpl"}
|
||||
<table width="100%" class="pagesort">
|
||||
<thead style="font-size:13px;">
|
||||
<tr>
|
||||
<th class="center" style="cursor: pointer;">ID</th>
|
||||
<th class="center" style="cursor: pointer;">Time</th>
|
||||
<th class="center" style="cursor: pointer;">Type</th>
|
||||
<th class="center" style="cursor: pointer;">Active</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size:12px;">
|
||||
{section notification $NOTIFICATIONS}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
<td class="center">{$NOTIFICATIONS[notification].id}</td>
|
||||
<td class="center">{$NOTIFICATIONS[notification].time}</td>
|
||||
<td class="center">
|
||||
{if $NOTIFICATIONS[notification].type == new_block}New Block
|
||||
{else if $NOTIFICATIONS[notification].type == auto_payout}Auto Payout
|
||||
{else if $NOTIFICATIONS[notification].type == idle_worker}IDLE Worker
|
||||
{else if $NOTIFICATIONS[notification].type == manual_payout}Manual Payout
|
||||
{/if}
|
||||
</td>
|
||||
<td class="center">
|
||||
<img src="{$PATH}/images/{if $NOTIFICATIONS[notification].active}success{else}error{/if}.gif" />
|
||||
</td>
|
||||
</tr>
|
||||
{/section}
|
||||
</tbody>
|
||||
</table>
|
||||
</center>
|
||||
{include file="global/block_footer.tpl"}
|
||||
22
public/templates/test/account/qrcode/default.tpl
Normal file
@ -0,0 +1,22 @@
|
||||
{if !$GLOBAL.config.website.api.disabled}
|
||||
{include file="global/block_header.tpl" BLOCK_HEADER="API String"}
|
||||
<p>This code will allow you to import the full API string into your mobile application.</p>
|
||||
<script type="text/javascript" src="{$PATH}/js/jquery.qrcode.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
{literal}
|
||||
//Wrap it within $(document).ready() to invoke the function after DOM loads.
|
||||
$(document).ready(function(){
|
||||
$('#qrcodeholder').qrcode({
|
||||
text : "{/literal}|http{if $smarty.server.HTTPS eq '1'}s{/if}://{$smarty.server.SERVER_NAME}{$smarty.server.PHP_SELF}?page=api|{$GLOBAL.userdata.api_key}|{$GLOBAL.userdata.id}|{literal}",
|
||||
render : "canvas", // 'canvas' or 'table'. Default value is 'canvas'
|
||||
background : "#ffffff",
|
||||
foreground : "#000000",
|
||||
width : 250,
|
||||
height: 250
|
||||
});
|
||||
});
|
||||
{/literal}
|
||||
</script>
|
||||
<div id="qrcodeholder"></div>
|
||||
{include file="global/block_footer.tpl"}
|
||||
{/if}
|
||||
112
public/templates/test/account/transactions/default.tpl
Normal file
@ -0,0 +1,112 @@
|
||||
{include file="global/block_header.tpl" BLOCK_HEADER="Transaction Summary"}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
{foreach $SUMMARY as $type=>$total}
|
||||
<th>{$type}</th>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
{foreach $SUMMARY as $type=>$total}
|
||||
<td class="right">{$total}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{include file="global/block_footer.tpl"}
|
||||
|
||||
{include file="global/block_header.tpl" ALIGN="left" BLOCK_STYLE="width: 23%" BLOCK_HEADER="Transaction Filter"}
|
||||
<form action="{$smarty.server.PHP_SELF}">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page}" />
|
||||
<input type="hidden" name="action" value="{$smarty.request.action}" />
|
||||
<table cellpadding="1" cellspacing="1" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="left">
|
||||
{if $COUNTTRANSACTIONS / $LIMIT > 1}
|
||||
{if $smarty.request.start|default:"0" > 0}
|
||||
<a href="{$smarty.server.PHP_SELF}?page={$smarty.request.page}&action={$smarty.request.action}&start={$smarty.request.start|default:"0" - $LIMIT}{if $FILTERS|default:""}{$FILTERS}{/if}"><img src="{$PATH}/images/prev.png" /></a>
|
||||
{else}
|
||||
<img src="{$PATH}/images/prev.png" />
|
||||
{/if}
|
||||
{/if}
|
||||
</td>
|
||||
<td class="right">
|
||||
{if $COUNTTRANSACTIONS / $LIMIT > 1}
|
||||
{if $COUNTTRANSACTIONS - $smarty.request.start|default:"0" - $LIMIT > 0}
|
||||
<a href="{$smarty.server.PHP_SELF}?page={$smarty.request.page}&action={$smarty.request.action}&start={$smarty.request.start|default:"0" + $LIMIT}{if $FILTERS|default:""}{$FILTERS}{/if}"><img src="{$PATH}/images/next.png" /></a>
|
||||
{else}
|
||||
<img src="{$PATH}/images/next.png" />
|
||||
{/if}
|
||||
{/if}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left">Type</td>
|
||||
<td class="right">{html_options name="filter[type]" options=$TRANSACTIONTYPES selected=$smarty.request.filter.type|default:""}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="left">Status</td>
|
||||
<td class="right">{html_options name="filter[status]" options=$TXSTATUS selected=$smarty.request.filter.status|default:""}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="center" colspan="2"><input type="submit" class="submit small" value="Filter"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
{include file="global/block_footer.tpl"}
|
||||
|
||||
{include file="global/block_header.tpl" ALIGN="right" BLOCK_STYLE="width: 75%" BLOCK_HEADER="Transaction History"}
|
||||
<div class="block_content" style="clear:;">
|
||||
<center>
|
||||
<table cellpadding="1" cellspacing="1" width="100%">
|
||||
<thead style="font-size:13px;">
|
||||
<tr>
|
||||
<th class="header" style="cursor: pointer;">TX #</th>
|
||||
<th class="header" style="cursor: pointer;">Account</th>
|
||||
<th class="header" style="cursor: pointer;">Date</th>
|
||||
<th class="header" style="cursor: pointer;">TX Type</th>
|
||||
<th class="header" style="cursor: pointer;">Status</th>
|
||||
<th class="header" style="cursor: pointer;">Payment Address</th>
|
||||
<th class="header" style="cursor: pointer;">Block #</th>
|
||||
<th class="header" style="cursor: pointer;">Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="font-size:12px;">
|
||||
{section transaction $TRANSACTIONS}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
<td>{$TRANSACTIONS[transaction].id}</td>
|
||||
<td>{$TRANSACTIONS[transaction].username}</td>
|
||||
<td>{$TRANSACTIONS[transaction].timestamp}</td>
|
||||
<td>{$TRANSACTIONS[transaction].type}</td>
|
||||
<td>
|
||||
{if $TRANSACTIONS[transaction].type == 'Credit_PPS' OR
|
||||
$TRANSACTIONS[transaction].type == 'Fee_PPS' OR
|
||||
$TRANSACTIONS[transaction].type == 'Donation_PPS' OR
|
||||
$TRANSACTIONS[transaction].type == 'Debit_MP' OR
|
||||
$TRANSACTIONS[transaction].type == 'Debit_AP' OR
|
||||
$TRANSACTIONS[transaction].type == 'TXFee' OR
|
||||
$TRANSACTIONS[transaction].confirmations >= $GLOBAL.confirmations
|
||||
}<font color="green">Confirmed</font>
|
||||
{else if $TRANSACTIONS[transaction].confirmations == -1}<font color="red">Orphaned</font>
|
||||
{else}<font color="orange">Unconfirmed</font>{/if}
|
||||
<font size="1px">({$TRANSACTIONS[transaction].confirmations|default:"n/a"})</font>
|
||||
</td>
|
||||
<td>{$TRANSACTIONS[transaction].coin_address}</td>
|
||||
<td>{if $TRANSACTIONS[transaction].height == 0}n/a{else}{if $GLOBAL.website.blockexplorer.url}<a href="{$GLOBAL.website.blockexplorer.url}{$TRANSACTIONS[transaction].blockhash}">{$TRANSACTIONS[transaction].height}</a>{else}{$TRANSACTIONS[transaction].height}{/if}{/if}</td>
|
||||
<td><font color="{if $TRANSACTIONS[transaction].type == 'Credit' or $TRANSACTIONS[transaction].type == 'Credit_PPS' or $TRANSACTIONS[transaction].type == 'Bonus'}green{else}red{/if}">{$TRANSACTIONS[transaction].amount|number_format:"8"}</td>
|
||||
</tr>
|
||||
{/section}
|
||||
</tbody>
|
||||
</table>
|
||||
<p>
|
||||
<font color="" size="1">
|
||||
<b>Credit_AP</b> = Auto Threshold Payment, <b>Credit_MP</b> = Manual Payment, <b>Donation</b> = Donation, <b>Fee</b> = Pool Fees (if applicable)
|
||||
</font>
|
||||
</p>
|
||||
</center>
|
||||
</div>
|
||||
{include file="global/block_footer.tpl"}
|
||||
71
public/templates/test/account/workers/default.tpl
Normal file
@ -0,0 +1,71 @@
|
||||
<article class="module width_quarter">
|
||||
<header><h3 class="">Add New Worker</h3></header>
|
||||
<form action="{$smarty.server.PHP_SELF}" method="post">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action}">
|
||||
<input type="hidden" name="do" value="add">
|
||||
<div class="module_content">
|
||||
<fieldset>
|
||||
<label>Worker Name</label>
|
||||
<input type="text" name="username" value="user" size="10" maxlength="20" required>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label>Worker Password</label>
|
||||
<input type="text" name="password" value="password" size="10" maxlength="20" required>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<footer>
|
||||
<div class="submit_link">
|
||||
<input type="submit" value="Add New Worker" class="alt_btn">
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
</article>
|
||||
|
||||
<article class="module width_3_quarter">
|
||||
<header><h3 class="">Worker Configuration</h3></header>
|
||||
<form action="{$smarty.server.PHP_SELF}" method="post">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action}">
|
||||
<input type="hidden" name="do" value="update">
|
||||
<table class="tablesorter" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="header" align="left">Worker Login</th>
|
||||
<th class="header" align="left">Worker Password</th>
|
||||
<th class="header" align="center">Active</th>
|
||||
{if $GLOBAL.config.disable_notifications != 1}<th class="header" align="center">Monitor</th>{/if}
|
||||
<th class="header" align="center">Khash/s</th>
|
||||
<th class="header" align="center" style="padding-right: 25px;">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{nocache}
|
||||
{section worker $WORKERS}
|
||||
{assign var="username" value="."|escape|explode:$WORKERS[worker].username:2}
|
||||
<tr>
|
||||
<td align="left"{if $WORKERS[worker].hashrate > 0} style="color: orange"{/if}>{$username.0|escape}.<input name="data[{$WORKERS[worker].id}][username]" value="{$username.1|escape}" size="10" required/></td>
|
||||
<td align="left"><input type="text" name="data[{$WORKERS[worker].id}][password]" value="{$WORKERS[worker].password|escape}" size="10" required></td>
|
||||
<td align="center"><img src="{$PATH}/images/{if $WORKERS[worker].hashrate > 0}icn_alert_success{else}icn_alert_error{/if}.png" /></td>
|
||||
{if $GLOBAL.config.disable_notifications != 1}
|
||||
<td align="center">
|
||||
<input type="checkbox" name="data[{$WORKERS[worker].id}][monitor]" value="1" id="data[{$WORKERS[worker].id}][monitor]" {if $WORKERS[worker].monitor}checked{/if} />
|
||||
<label for="data[{$WORKERS[worker].id}][monitor]"></label>
|
||||
</td>
|
||||
{/if}
|
||||
<td align="right">{$WORKERS[worker].hashrate|number_format}</td>
|
||||
<td align="center" style="padding-right: 25px;"><a href="{$smarty.server.PHP_SELF}?page={$smarty.request.page|escape}&action={$smarty.request.action|escape}&do=delete&id={$WORKERS[worker].id|escape}" class="icn_trash"><img src="{$PATH}/images/icn_trash.png" /></a></td>
|
||||
</tr>
|
||||
{/section}
|
||||
{/nocache}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="clear"></div>
|
||||
<footer>
|
||||
<div class="submit_link">
|
||||
<input type="submit" class="alt_btn" value="Update Workers">
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
</article>
|
||||
65
public/templates/test/dashboard/default.tpl
Normal file
@ -0,0 +1,65 @@
|
||||
<div class="block_head">
|
||||
<div class="bheadl"></div>
|
||||
<div class="bheadr"></div>
|
||||
<h1>Dashboard</h1>
|
||||
</div>
|
||||
<div class="block_content" style="padding-top:10px;">
|
||||
<table class="sidebar" style="width: 196px">
|
||||
<tr>
|
||||
<td colspan="2"><b><u>Your Stats</u></b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Hashrate</b></td>
|
||||
<td class="right">{$GLOBAL.userdata.hashrate|number_format} KH/s</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><b><u>Unpaid Shares</u></b> <span id='tt'><img src='{$PATH}/images/questionmark.png' height='15px' width='15px' title='Submitted shares between the last 120 confirms block until now.'></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Your Valid<b></td>
|
||||
<td class="right"><i>{$GLOBAL.userdata.shares.valid|number_format}</i><font size='1px'></font></b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Pool Valid</td>
|
||||
<td class="right"><i>{$GLOBAL.roundshares.valid|number_format}</i> <font size='1px'></font></b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><b><u>Round Shares</u></b> <span id='tt'><img src='{$PATH}/images/questionmark.png' height='15px' width='15px' title='Submitted shares since last found block (ie. round shares)'></span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Pool Valid</b></td>
|
||||
<td class="right"><i>{$GLOBAL.roundshares.valid|number_format}</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Pool Invalid</b></td>
|
||||
<td class="right"><i>{$GLOBAL.roundshares.invalid|number_format}</i>{if $GLOBAL.roundshares.valid > 0}<font size='1px'> ({($GLOBAL.roundshares.invalid / ($GLOBAL.roundshares.valid + $GLOBAL.roundshares.invalid) * 100)|number_format:"2"}%)</font>{/if}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Your Invalid</b></td>
|
||||
<td class="right"><i>{$GLOBAL.userdata.shares.invalid|number_format}</i>{if $GLOBAL.roundshares.valid > 0}<font size='1px'> ({($GLOBAL.userdata.shares.invalid / ($GLOBAL.roundshares.valid + $GLOBAL.roundshares.invalid) * 100)|number_format:"2"}%)</font>{/if}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><b><u>{$GLOBAL.config.currency} Round Estimate</u></b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Block</b></td>
|
||||
<td class="right">{$GLOBAL.userdata.est_block|number_format:"8"}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Fees</b></td>
|
||||
<td class="right">{$GLOBAL.userdata.est_fee|number_format:"8"}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Donation</b></td>
|
||||
<td class="right">{$GLOBAL.userdata.est_donation|number_format:"8"}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Payout</b></td>
|
||||
<td class="right">{$GLOBAL.userdata.est_payout|number_format:"8"}</td>
|
||||
</tr>
|
||||
<tr><td colspan="2"> </td></tr>
|
||||
<tr><td colspan="2"><b><u>{$GLOBAL.config.currency} Account Balance</u></b></td></tr>
|
||||
<tr><td>Confirmed</td><td class="right"><b>{$GLOBAL.userdata.balance.confirmed|default:"0"}</td></tr>
|
||||
<tr><td>Unconfirmed</td><td class="right"><b>{$GLOBAL.userdata.balance.unconfirmed|default:"0"}</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
3
public/templates/test/global/breadcrumbs.tpl
Normal file
@ -0,0 +1,3 @@
|
||||
<div class="breadcrumbs_container">
|
||||
<article class="breadcrumbs"><a href="{$smarty.server.PHP_SELF}">The Pool</a> <div class="breadcrumb_divider"></div> <a class="{if ! $smarty.request.action}current{/if}" {if $smarty.request.action}href="{$smarty.server.PHP_SELF}?page={$smarty.request.page|default:"home"}"{/if}>{$smarty.request.page|default:"Home"|capitalize}</a>{if $smarty.request.action} <div class="breadcrumb_divider"></div> <a class="current">{$smarty.request.action|capitalize}</a>{/if}</article>
|
||||
</div>
|
||||
5
public/templates/test/global/footer.tpl
Normal file
@ -0,0 +1,5 @@
|
||||
<footer>
|
||||
<hr />
|
||||
<p><strong>Copyright © 2011 Website Admin</strong></p>
|
||||
<p>Theme by <a href="http://www.medialoot.com">MediaLoot</a></p>
|
||||
</footer>
|
||||
4
public/templates/test/global/header.tpl
Normal file
@ -0,0 +1,4 @@
|
||||
<hgroup>
|
||||
<h1 class="site_title">{$GLOBAL.website.name}</h1>
|
||||
<h2 class="section_title">{if $smarty.request.action|default:""}{$smarty.request.action|capitalize}{/if}</h2>
|
||||
</hgroup>
|
||||
8
public/templates/test/global/login.tpl
Normal file
@ -0,0 +1,8 @@
|
||||
{include file="global/block_header.tpl" BLOCK_HEADER="Login" BLOCK_STYLE="clear:none; margin-left:13px; margin-top:15px;"}
|
||||
<form action="{$smarty.server.PHP_SELF}?page=login" method="post" id="loginForm">
|
||||
<p><input type="text" name="username" value="" id="userForm" maxlength="20" required></p>
|
||||
<p><input type="password" name="password" value="" id="passForm" maxlength="20" required></p>
|
||||
<center><p><input type="submit" class="submit small" value="Login"></p></center>
|
||||
</form>
|
||||
<center><p><a href="{$smarty.server.PHP_SELF}?page=password"><font size="1">Forgot your password?</font></a></p></center>
|
||||
{include file="global/block_footer.tpl"}
|
||||
32
public/templates/test/global/navigation.tpl
Normal file
@ -0,0 +1,32 @@
|
||||
<hr/>
|
||||
<li><a href="{$smarty.server.PHP_SELF}">Home</a></li>
|
||||
{if $smarty.session.AUTHENTICATED|default:"0" == 1}
|
||||
<h3>My Account</h3>
|
||||
<ul class="toggle">
|
||||
<li class="icn_profile"><a href="{$smarty.server.PHP_SELF}?page=dashboard">Dashboard</a></li>
|
||||
<li class="icn_profile"><a href="{$smarty.server.PHP_SELF}?page=account&action=edit">Edit Account</a></li>
|
||||
<li class="icn_edit_article"><a href="{$smarty.server.PHP_SELF}?page=account&action=workers">My Workers</a></li>
|
||||
<li class="icn_categories"><a href="{$smarty.server.PHP_SELF}?page=account&action=transactions">Transactions</a></li>
|
||||
{if !$GLOBAL.config.disable_notifications}<li class="icn_categories"><a href="{$smarty.server.PHP_SELF}?page=account&action=notifications">Notifications</a></li>{/if}
|
||||
{if !$GLOBAL.config.disable_invitations}<li class="icn_categories"><a href="{$smarty.server.PHP_SELF}?page=account&action=invitations">Invitations</a></li>{/if}
|
||||
<li class="icn_tags"><a href="{$smarty.server.PHP_SELF}?page=account&action=qrcode">QR Codes</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
{/if}
|
||||
<h3>Statistics</h3>
|
||||
<ul class="toggle">
|
||||
<li><a href="{$smarty.server.PHP_SELF}?page=statistics&action=pool">Pool</a></li>
|
||||
<li><a href="{$smarty.server.PHP_SELF}?page=statistics&action=blocks">Blocks</a></li>
|
||||
<li><a href="{$smarty.server.PHP_SELF}?page=statistics&action=graphs">Graphs</a></li>
|
||||
</ul>
|
||||
<h3>Other</h3>
|
||||
<ul class="toggle">
|
||||
<li class="icn_settings"><a href="#">Options</a></li>
|
||||
<li class="icn_security"><a href="#">Security</a></li>
|
||||
{if $smarty.session.AUTHENTICATED|default:"0" == 1}
|
||||
<li class="icn_jump_back"><a href="{$smarty.server.PHP_SELF}?page=logout">Logout</a></li>
|
||||
{else}
|
||||
<li class="icn_jump_back"><a href="{$smarty.server.PHP_SELF}?page=login">Login</a></li>
|
||||
{/if}
|
||||
</ul>
|
||||
|
||||
7
public/templates/test/global/userinfo.tpl
Normal file
@ -0,0 +1,7 @@
|
||||
<div class="user">
|
||||
{if $GLOBAL.userdata.username|default}
|
||||
<p>{$smarty.session.USERDATA.username|escape}</p>
|
||||
{else}
|
||||
<p>Guest</p>
|
||||
{/if}
|
||||
</div>
|
||||
9
public/templates/test/home/default.tpl
Normal file
@ -0,0 +1,9 @@
|
||||
{section name=news loop=$NEWS}
|
||||
<article class="module width_full">
|
||||
<header><h3>{$NEWS[news].header}, <font size=\"1px\">posted {$NEWS[news].time|date_format:"%b %e, %Y at %H:%M"} by <b>{$NEWS[news].author}</b></font></h3></header>
|
||||
<div class="module_content">
|
||||
{$NEWS[news].content}
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</article>
|
||||
{/section}
|
||||
22
public/templates/test/login/default.tpl
Normal file
@ -0,0 +1,22 @@
|
||||
<article class="module width_half">
|
||||
<form action="{$smarty.server.PHP_SELF}?page=login" method="post" id="loginForm">
|
||||
<header><h3>Login with existing account</h3></header>
|
||||
<div class="module_content">
|
||||
<fieldset>
|
||||
<label>Username</label>
|
||||
<input type="text" name="username" size="22" maxlength="20" required>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label>Password</label>
|
||||
<input type="password" name="password" size="22" maxlength="20" required>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<footer>
|
||||
<div class="submit_link">
|
||||
<a href="{$smarty.server.PHP_SELF}?page=password"><font size="1">Forgot your password?</font></a>
|
||||
<input type="submit" value="Login" class="alt_btn">
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
</article>
|
||||
45
public/templates/test/master.tpl
Normal file
@ -0,0 +1,45 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>{$GLOBAL.website.name} I {$smarty.request.page|default:"home"|capitalize}</title>
|
||||
|
||||
<link rel="stylesheet" href="{$PATH}/css/layout.css" type="text/css" media="screen" />
|
||||
<link rel="stylesheet" href="{$PATH}/css/visualize.css" type="text/css" media="screen" />
|
||||
<link rel="stylesheet" href="{$PATH}/css/custom.css" type="text/css" media="screen" />
|
||||
<!--[if lt IE 9]>
|
||||
<link rel="stylesheet" href="{$PATH}/css/ie.css" type="text/css" media="screen" />
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<script type="text/javascript" src="{$PATH}/js/jquery-1.9.1.min.js" type="text/javascript"></script>
|
||||
<script type="text/javascript" src="{$PATH}/js/hideshow.js" type="text/javascript"></script>
|
||||
<script type="text/javascript" src="{$PATH}/js/jquery.visualize.js"></script>
|
||||
<script type="text/javascript" src="{$PATH}/js/jquery.tooltip.visualize.js"></script>
|
||||
<script type="text/javascript" src="{$PATH}/js/jquery.tablesorter.min.js" type="text/javascript"></script>
|
||||
<script type="text/javascript" src="{$PATH}/js/jquery.equalHeight.js"></script>
|
||||
<script type="text/javascript" src="{$PATH}/js/custom.js"></script>
|
||||
<!--[if IE]><script type="text/javascript" src="{$PATH}/js/excanvas.js"></script><![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<header id="header">
|
||||
{include file="global/header.tpl"}
|
||||
</header>
|
||||
<section id="secondary_bar">
|
||||
{include file="global/userinfo.tpl"}
|
||||
{include file="global/breadcrumbs.tpl"}
|
||||
</section>
|
||||
<aside id="sidebar" class="column">
|
||||
{include file="global/navigation.tpl"}
|
||||
{include file="global/footer.tpl"}
|
||||
</aside>
|
||||
<section id="main" class="column">
|
||||
{if is_array($smarty.session.POPUP|default)}
|
||||
{section popup $smarty.session.POPUP}
|
||||
<h4 class="{$smarty.session.POPUP[popup].TYPE|default:"info"}">{$smarty.session.POPUP[popup].CONTENT}</h4>
|
||||
{/section}
|
||||
{/if}
|
||||
{if file_exists($smarty.current_dir|cat:"/$PAGE/$ACTION/$CONTENT")}{include file="$PAGE/$ACTION/$CONTENT"}{else}Missing template for this page{/if}
|
||||
<div class="spacer"></div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
25
public/templates/test/password/change/default.tpl
Normal file
@ -0,0 +1,25 @@
|
||||
<article class="module width_half">
|
||||
<form action="{$smarty.server.PHP_SELF}" method="post">
|
||||
<input type="hidden" name="token" value="{$smarty.request.token|escape}">
|
||||
<input type="hidden" name="page" value="{$smarty.request.page|escape}">
|
||||
<input type="hidden" name="action" value="{$smarty.request.action|escape}">
|
||||
<input type="hidden" name="do" value="resetPassword">
|
||||
<header><h3>Password reset</h3></header>
|
||||
<div class="module_content">
|
||||
<fieldset>
|
||||
<label>New Password</label>
|
||||
<input type="text" name="newPassword" required>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label>Repeat New Password</label>
|
||||
<input type="text" name="newPassword2" required>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<footer>
|
||||
<div class="submit_link">
|
||||
<input type="submit" value="Change Password" class="alt_btn">
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
</article>
|
||||
20
public/templates/test/password/default.tpl
Normal file
@ -0,0 +1,20 @@
|
||||
<article class="module width_half">
|
||||
<form action="" method="POST">
|
||||
<input type="hidden" name="page" value="password">
|
||||
<input type="hidden" name="action" value="reset">
|
||||
<header><h3>Password reset</h3></header>
|
||||
<div class="module_content">
|
||||
<p>If you have an email set for your account, enter your username to get your password reset</p>
|
||||
<fieldset>
|
||||
<label>Username</label>
|
||||
<input type="text" name="username" value="{$smarty.post.username|default:""}" size="22" maxlength="20" required>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<footer>
|
||||
<div class="submit_link">
|
||||
<input type="submit" value="Reset" class="alt_btn">
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
</article>
|
||||
0
public/templates/test/password/reset/empty.tpl
Normal file
102
public/templates/test/statistics/blocks/default.tpl
Normal file
@ -0,0 +1,102 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>Block Share Overview</h3></header>
|
||||
<table width="70%" class="visualize" rel="line">
|
||||
<caption>Block Shares</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
{section block $BLOCKSFOUND step=-1}
|
||||
<th scope="col">{$BLOCKSFOUND[block].height}</th>
|
||||
{/section}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">Expected</th>
|
||||
{section block $BLOCKSFOUND step=-1}
|
||||
<td>{round(pow(2,32 - $GLOBAL.config.targetdiff) * $BLOCKSFOUND[block].difficulty)}</td>
|
||||
{/section}
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Actual</th>
|
||||
{section block $BLOCKSFOUND step=-1}
|
||||
<td>{$BLOCKSFOUND[block].shares}</td>
|
||||
{/section}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<footer>
|
||||
<p style="padding-left:30px; padding-redight:30px; font-size:10px;">
|
||||
The graph above illustrates N shares to find a block vs. E Shares expected to find a block based on
|
||||
target and network difficulty and assuming a zero variance scenario.
|
||||
</p>
|
||||
</footer>
|
||||
</article>
|
||||
|
||||
<article class="module width_full">
|
||||
<header><h3>Last {$BLOCKLIMIT} Blocks Found</h3></header>
|
||||
<table class="tablesorter" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center">Block</th>
|
||||
<th align="center">Validity</th>
|
||||
<th>Finder</th>
|
||||
<th align="center">Time</th>
|
||||
<th align="right">Difficulty</th>
|
||||
<th align="right">Amount</th>
|
||||
<th align="right">Expected Shares</th>
|
||||
<th align="right">Actual Shares</th>
|
||||
<th align="right" style="padding-right: 25px;">Percentage</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{assign var=count value=0}
|
||||
{assign var=totalexpectedshares value=0}
|
||||
{assign var=totalshares value=0}
|
||||
{assign var=totalpercentage value=0}
|
||||
{section block $BLOCKSFOUND}
|
||||
{assign var="totalshares" value=$totalshares+$BLOCKSFOUND[block].shares}
|
||||
{assign var="count" value=$count+1}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
{if ! $GLOBAL.website.blockexplorer.disabled}
|
||||
<td align="center"><a href="{$GLOBAL.website.blockexplorer.url}{$BLOCKSFOUND[block].blockhash}" target="_blank">{$BLOCKSFOUND[block].height}</a></td>
|
||||
{else}
|
||||
<td align="center">{$BLOCKSFOUND[block].height}</td>
|
||||
{/if}
|
||||
<td align="center">
|
||||
{if $BLOCKSFOUND[block].confirmations >= $GLOBAL.confirmations}
|
||||
<font color="green">Confirmed</font>
|
||||
{else if $BLOCKSFOUND[block].confirmations == -1}
|
||||
<font color="red">Orphan</font>
|
||||
{else}
|
||||
{$GLOBAL.confirmations - $BLOCKSFOUND[block].confirmations} left
|
||||
{/if}
|
||||
</td>
|
||||
<td>{if $BLOCKSFOUND[block].is_anonymous|default:"0" == 1}anonymous{else}{$BLOCKSFOUND[block].finder|default:"unknown"|escape}{/if}</td>
|
||||
<td align="center">{$BLOCKSFOUND[block].time|date_format:"%d/%m %H:%M:%S"}</td>
|
||||
<td align="right">{$BLOCKSFOUND[block].difficulty|number_format:"2"}</td>
|
||||
<td align="right">{$BLOCKSFOUND[block].amount|number_format:"2"}</td>
|
||||
<td align="right">
|
||||
{math assign="estshares" equation="(pow(2,32 - targetdiff) * blockdiff)" targetdiff=$GLOBAL.config.targetdiff blockdiff=$BLOCKSFOUND[block].difficulty}
|
||||
{assign var="totalexpectedshares" value=$totalexpectedshares+$estshares}
|
||||
{$estshares|number_format}
|
||||
</td>
|
||||
<td align="right">{$BLOCKSFOUND[block].shares|number_format}</td>
|
||||
<td align="right" style="padding-right: 25px;">
|
||||
{math assign="percentage" equation="shares / estshares * 100" shares=$BLOCKSFOUND[block].shares estshares=$estshares}
|
||||
{assign var="totalpercentage" value=$totalpercentage+$percentage}
|
||||
<font color="{if ($percentage <= 100)}green{else}red{/if}">{$percentage|number_format:"2"}</font>
|
||||
</td>
|
||||
</tr>
|
||||
{/section}
|
||||
<tr>
|
||||
<td colspan="6" align="right"><b>Totals</b></td>
|
||||
<td align="right">{$totalexpectedshares|number_format}</td>
|
||||
<td align="right">{$totalshares|number_format}</td>
|
||||
<td align="right" style="padding-right: 25px;"><font color="{if (($totalpercentage / $count) <= 100)}green{else}red{/if}">{($totalpercentage / $count)|number_format:"2"}</font>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<footer>
|
||||
{if $GLOBAL.config.payout_system != 'pps'}<ul><li>Note: Round Earnings are not credited until <font color="orange">{$GLOBAL.confirmations}</font> confirms.</li></ul>{/if}
|
||||
</footer>
|
||||
</article>
|
||||
35
public/templates/test/statistics/blocks/small_table.tpl
Normal file
@ -0,0 +1,35 @@
|
||||
<article class="module width_half">
|
||||
<header><h3>Last Found Blocks</h3></header>
|
||||
<table class="tablesorter" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center">Block</th>
|
||||
<th>Finder</th>
|
||||
<th align="center">Time</th>
|
||||
<th align="right" style="padding-right: 25px;">Actual Shares</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{assign var=rank value=1}
|
||||
{section block $BLOCKSFOUND}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
{if ! $GLOBAL.website.blockexplorer.disabled}
|
||||
<td align="center"><a href="{$GLOBAL.website.blockexplorer.url}{$BLOCKSFOUND[block].blockhash}" target="_new">{$BLOCKSFOUND[block].height}</a></td>
|
||||
{else}
|
||||
<td align="center">{$BLOCKSFOUND[block].height}</td>
|
||||
{/if}
|
||||
<td>{if $BLOCKSFOUND[block].is_anonymous|default:"0" == 1}anonymous{else}{$BLOCKSFOUND[block].finder|default:"unknown"|escape}{/if}</td>
|
||||
<td align="center">{$BLOCKSFOUND[block].time|date_format:"%d/%m %H:%M:%S"}</td>
|
||||
<td align="right" style="padding-right: 25px;">{$BLOCKSFOUND[block].shares|number_format}</td>
|
||||
</tr>
|
||||
{/section}
|
||||
</tbody>
|
||||
</table>
|
||||
{if $GLOBAL.config.payout_system != 'pps'}
|
||||
<footer>
|
||||
<ul>
|
||||
<li>Note: Round Earnings are not credited until <font color="orange">{$GLOBAL.confirmations}</font> confirms.</font></li>
|
||||
</ul>
|
||||
{/if}
|
||||
</footer>
|
||||
</article>
|
||||
28
public/templates/test/statistics/default.tpl
Normal file
@ -0,0 +1,28 @@
|
||||
<article class="module width_full">
|
||||
<header><h3>General Statistics</h3></header>
|
||||
<div class="module_content">
|
||||
<table class="" width="50%" style="font-size:14px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="leftheader">Pool Hash Rate</td>
|
||||
<td>{$GLOBAL.hashrate / 1000} Mhash/s</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Current Total Miners</td>
|
||||
<td>{$GLOBAL.workers}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Current Block</td>
|
||||
<td><a href="http://explorer.litecoin.net/search?q={$CURRENTBLOCK}" target="_new">{$CURRENTBLOCK}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Current Difficulty</td>
|
||||
<td><a href="http://allchains.info/" target="_new">{$DIFFICULTY}</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<footer>
|
||||
{if !$GLOBAL.config.website.api.disabled}<ul><li>These stats are also available in JSON format <a href="{$smarty.server.PHP_SELF}?page=api&action=public" target="_api">HERE</a></li>{/if}
|
||||
</footer>
|
||||
</article>
|
||||
29
public/templates/test/statistics/graphs/both.tpl
Normal file
@ -0,0 +1,29 @@
|
||||
{if is_array($YOURHASHRATES) && is_array($POOLHASHRATES)}
|
||||
<div class="tab_content" id="both">
|
||||
<table class="visualize" rel="area">
|
||||
<caption>Your vs Pool Hashrate</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<td></td>
|
||||
{foreach $YOURHASHRATES as $hour=>$hashrate}
|
||||
<th scope="col">{$hour|default:"0"}:00</th>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">{$smarty.session.USERDATA.username}</th>
|
||||
{foreach $YOURHASHRATES as $hour=>$hashrate}
|
||||
<td>{$hashrate|default:"0"}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">Pool</th>
|
||||
{foreach $POOLHASHRATES as $hour=>$hashrate}
|
||||
<td>{$hashrate|default:"0"}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{/if}
|
||||
15
public/templates/test/statistics/graphs/default.tpl
Normal file
@ -0,0 +1,15 @@
|
||||
<article class="module width_full">
|
||||
<header>
|
||||
<h3 class="tabs_involved">Stats</h3>
|
||||
<ul class="tabs">
|
||||
<li><a href="#mine">Mine</a></li>
|
||||
<li><a href="#pool">Pool</a></li>
|
||||
<li><a href="#both">Both</a></li>
|
||||
</ul>
|
||||
</header>
|
||||
<div class="tab_container">
|
||||
{include file="{$smarty.request.page}/{$smarty.request.action}/mine.tpl"}
|
||||
{include file="{$smarty.request.page}/{$smarty.request.action}/pool.tpl"}
|
||||
{include file="{$smarty.request.page}/{$smarty.request.action}/both.tpl"}
|
||||
</div>
|
||||
</article>
|
||||
23
public/templates/test/statistics/graphs/mine.tpl
Normal file
@ -0,0 +1,23 @@
|
||||
{if is_array($YOURHASHRATES)}
|
||||
<div class="tab_content" id="mine">
|
||||
<table class="visualize" rel="area">
|
||||
<caption>Your Hashrate</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<td></td>
|
||||
{foreach $YOURHASHRATES as $hour=>$hashrate}
|
||||
<th scope="col">{$hour|default:"0"}:00</th>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">{$smarty.session.USERDATA.username}</th>
|
||||
{foreach $YOURHASHRATES as $hour=>$hashrate}
|
||||
<td>{$hashrate|default:"0"}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{/if}
|
||||
23
public/templates/test/statistics/graphs/pool.tpl
Normal file
@ -0,0 +1,23 @@
|
||||
{if is_array($POOLHASHRATES)}
|
||||
<div class="tab_content" id="pool">
|
||||
<table class="visualize" rel="area">
|
||||
<caption>Pool Hashrate</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<td></td>
|
||||
{foreach $POOLHASHRATES as $hour=>$hashrate}
|
||||
<th scope="col">{$hour|default:"0"}:00</th>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">Pool</th>
|
||||
{foreach $POOLHASHRATES as $hour=>$hashrate}
|
||||
<td>{$hashrate|default:"0"}</td>
|
||||
{/foreach}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{/if}
|
||||
65
public/templates/test/statistics/pool/authenticated.tpl
Normal file
@ -0,0 +1,65 @@
|
||||
{include file="statistics/pool/contributors_shares.tpl"}
|
||||
|
||||
{include file="statistics/pool/contributors_hashrate.tpl"}
|
||||
|
||||
<article class="module width_half">
|
||||
<header><h3>General Statistics</h3></header>
|
||||
<div class="module_content">
|
||||
<table class="" width="100%" style="font-size:13px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="leftheader">Pool Hash Rate</td>
|
||||
<td>{($GLOBAL.hashrate / 1000)|number_format:"3"} Mhash/s</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Pool Efficiency</td>
|
||||
<td>{if $GLOBAL.roundshares.valid > 0}{($GLOBAL.roundshares.valid / ($GLOBAL.roundshares.valid + $GLOBAL.roundshares.invalid) * 100)|number_format:"2"}%{else}0%{/if}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Current Active Workers</td>
|
||||
<td>{$GLOBAL.workers}</td>
|
||||
</tr>
|
||||
{if $GLOBAL.website.blockexplorer.url}
|
||||
<tr>
|
||||
<td class="leftheader">Next Network Block</td>
|
||||
<td>{$CURRENTBLOCK + 1} <font size="1"> (Current: <a href="{$GLOBAL.website.blockexplorer.url}{$CURRENTBLOCKHASH}" target="_new">{$CURRENTBLOCK})</a></font></td>
|
||||
</tr>
|
||||
{else}
|
||||
<tr>
|
||||
<td class="leftheader">Next Network Block</td>
|
||||
<td>{$CURRENTBLOCK + 1} (Current: {$CURRENTBLOCK})</td>
|
||||
</tr>
|
||||
{/if}
|
||||
<tr>
|
||||
<td class="leftheader">Last Block Found</td>
|
||||
<td>{if $GLOBAL.website.blockexplorer.url}<a href="{$GLOBAL.website.blockexplorer.url}{$LASTBLOCKHASH}" target="_new">{$LASTBLOCK|default:"0"}</a>{else}{$LASTBLOCK|default:"0"}{/if}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Current Difficulty</td>
|
||||
{if ! $GLOBAL.website.chaininfo.disabled}
|
||||
<td><a href="{$GLOBAL.website.chaininfo.url}" target="_new"><font size="2">{$DIFFICULTY}</font></a></td>
|
||||
{else}
|
||||
<td><font size="2">{$DIFFICULTY}</font></td>
|
||||
{/if}
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Est. Avg. Time per Round</td>
|
||||
<td>{$ESTTIME|seconds_to_words}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Est. Shares this Round</td>
|
||||
<td>{(pow(2, 32 - $GLOBAL.config.targetdiff) * $DIFFICULTY)|number_format:"0"} <font size="1">(done: {(100 / (pow(2, 32 - $GLOBAL.config.targetdiff) * $DIFFICULTY) * $GLOBAL.roundshares.valid)|number_format:"2"} %)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="leftheader">Time Since Last Block</td>
|
||||
<td>{$TIMESINCELAST|seconds_to_words}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<footer>
|
||||
{if !$GLOBAL.website.api.disabled}<ul><li>These stats are also available in JSON format <a href="{$smarty.server.PHP_SELF}?page=api&action=getpoolstatus&api_key={$GLOBAL.userdata.api_key}">HERE</a></li></ul>{/if}
|
||||
</footer>
|
||||
</article>
|
||||
|
||||
{include file="statistics/blocks/small_table.tpl" ALIGN="right" SHORT=true}
|
||||
@ -0,0 +1,39 @@
|
||||
<article class="module width_half" style="min-height: 350px">
|
||||
<header><h3>Contributor Hashrates</h3></header>
|
||||
<div>
|
||||
<table class="tablesorter" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center">Rank</th>
|
||||
<th align="left" scope="col">User Name</th>
|
||||
<th align="right" scope="col">KH/s</th>
|
||||
<th align="right">{$GLOBAL.config.currency}/Day</th>
|
||||
{if $GLOBAL.config.price.currency}<th align="right" style="padding-right: 25px;">{$GLOBAL.config.price.currency}/Day</th>{/if}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{assign var=rank value=1}
|
||||
{assign var=listed value=0}
|
||||
{section contrib $CONTRIBHASHES}
|
||||
{math assign="estday" equation="round(reward / ( diff * pow(2,32) / ( hashrate * 1000 ) / 3600 / 24), 3)" diff=$DIFFICULTY reward=$REWARD hashrate=$CONTRIBHASHES[contrib].hashrate}
|
||||
<tr{if $GLOBAL.userdata.username == $CONTRIBHASHES[contrib].account}{assign var=listed value=1} style="background-color:#99EB99;"{else} class="{cycle values="odd,even"}"{/if}>
|
||||
<td align="center">{$rank++}</td>
|
||||
<td>{if $CONTRIBHASHES[contrib].is_anonymous|default:"0" == 1}anonymous{else}{$CONTRIBHASHES[contrib].account|escape}{/if}</td>
|
||||
<td align="right">{$CONTRIBHASHES[contrib].hashrate|number_format}</td>
|
||||
<td align="right">{$estday|number_format:"3"}</td>
|
||||
{if $GLOBAL.config.price.currency}<td class="right" style="padding-right: 25px;">{($estday * $GLOBAL.price)|default:"n/a"|number_format:"2"}</td>{/if}
|
||||
</tr>
|
||||
{/section}
|
||||
{if $listed != 1 && $GLOBAL.userdata.username|default:""}
|
||||
{if $GLOBAL.userdata.hashrate > 0}{math assign="myestday" equation="round(reward / ( diff * pow(2,32) / ( hashrate * 1000 ) / 3600 / 24), 3)" diff=$DIFFICULTY reward=$REWARD hashrate=$GLOBAL.userdata.hashrate}{/if}
|
||||
<tr>
|
||||
<td align="center">n/a</td>
|
||||
<td>{$GLOBAL.userdata.username|escape}</td>
|
||||
<td align="right">{$GLOBAL.userdata.hashrate}</td>
|
||||
<td align="right">{$myestday|number_format:"3"|default:"n/a"}</td>
|
||||
{if $GLOBAL.config.price.currency}<td align="right" style="padding-right: 25px;">{($myestday * $GLOBAL.price)|default:"n/a"|number_format:"2"}</td>{/if}
|
||||
</tr>
|
||||
{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
</article>
|
||||
@ -0,0 +1,30 @@
|
||||
<article class="module width_half" style="min-height: 350px;">
|
||||
<header><h3>Contributor Shares</h3></header>
|
||||
<table class="tablesorter" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th align="center">Rank</th>
|
||||
<th>User Name</th>
|
||||
<th align="right" style="padding-right: 25px;">Shares</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{assign var=rank value=1}
|
||||
{assign var=listed value=0}
|
||||
{section shares $CONTRIBSHARES}
|
||||
<tr{if $GLOBAL.userdata.username == $CONTRIBSHARES[shares].account}{assign var=listed value=1} style="background-color:#99EB99;"{else} class="{cycle values="odd,even"}"{/if}>
|
||||
<td align="center">{$rank++}</td>
|
||||
<td>{if $CONTRIBSHARES[shares].is_anonymous|default:"0" == 1}anonymous{else}{$CONTRIBSHARES[shares].account|escape}{/if}</td>
|
||||
<td align="right" style="padding-right: 25px;">{$CONTRIBSHARES[shares].shares|number_format}</td>
|
||||
</tr>
|
||||
{/section}
|
||||
{if $listed != 1 && $GLOBAL.userdata.username|default:""}
|
||||
<tr>
|
||||
<td align="center">n/a</td>
|
||||
<td>{$GLOBAL.userdata.username|escape}</td>
|
||||
<td align="right" style="padding-right: 25px;">{$GLOBAL.userdata.shares.valid|number_format}</td>
|
||||
</tr>
|
||||
{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
</article>
|
||||