Advertisement
Guest User

Untitled

a guest
Sep 24th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 59.62 KB | None | 0 0
  1. <div class="section-header">
  2.     <div class="container">
  3.         <div class="row">
  4.             <div class="col-md-12 text-left">
  5.                 <button class="btn btn-primary btn-xs" style="margin-top: 3px;" data-original-title="Asiapool used dedicated servers for best performance mining pool"
  6.                    data-placement="bottom" data-toggle="tooltip" type="button"><i class="fa fa-tasks"></i> <i class="icon-film"></i>Dedicated
  7.                     Server</button>
  8.                 <button class="btn btn-primary btn-xs" style="margin-top: 3px;" data-original-title="You can monitor your workers directly with realtime information"
  9.                    data-placement="bottom" data-toggle="tooltip" type="button"><i aria-hidden="true" class="fa fa-eye"></i>
  10.                     Realtime Statistic</button>
  11.                 <button class="btn btn-primary btn-xs" style="margin-top: 3px;" data-original-title="Asiapool uses a very low fees than the fees of other pools"
  12.                    data-placement="bottom" data-toggle="tooltip" type="button"><i aria-hidden="true" class="fa fa-money"></i>
  13.                     Low Fee</button>
  14.                 <button class="btn btn-primary btn-xs" style="margin-top: 3px;" data-original-title="Asiapool support of paymentId, integrated address and Subaddress allows to mine directly to an exchange"
  15.                    data-placement="bottom" data-toggle="tooltip" type="button"><i aria-hidden="true" class="fa fa-exchange"></i>
  16.                     Direct Mine to Exchange</button>
  17.                 <button class="btn btn-primary btn-xs" style="margin-top: 3px;" data-original-title="Asiapool support to set fixed difficulty on miner"
  18.                    data-placement="bottom" data-toggle="tooltip" type="button"><i aria-hidden="true" class="fa fa-bell"></i>
  19.                     Telegram Bot Notifications</button>
  20.                 <button class="btn btn-primary btn-xs" style="margin-top: 3px;" data-original-title="Asiapool support to set fixed difficulty on miner"
  21.                    data-placement="bottom" data-toggle="tooltip" type="button"><i aria-hidden="true" class="fa fa-lock"></i>
  22.                     DifficultyFixed</button>
  23.             </div>
  24.         </div>
  25.     </div>
  26. </div>
  27. <div class="container">
  28.     <div class="row">
  29.         <div class="col-md-8">
  30.             <h4>Pool News</h4>
  31.             <div class="panel panel-primary borderleft">
  32.                 <div class="panel-body">
  33.                     <div class="scroll"></div>
  34.                 </div>
  35.             </div>
  36.         </div>
  37.         <div class="col-md-4">
  38.             <h4>Pool Community</h4>
  39.             <div class="panel panel-primary borderleft">
  40.                 <div class="panel-body">
  41.                     <a class="btn btn-primary btn-xs" href="https://goo.gl/forms/9xxHY3IWR9g9EwFm1" style="margin-bottom: 5px; color:white;"
  42.                        target="_blank" type="button"><i aria-hidden="true" class="fa fa-pencil-square-o"></i> Request
  43.                         New Coin</a> <a class="btn btn-primary btn-xs" href="https://t.me/asiapoolmining" style="margin-bottom: 5px; color:white;"
  44.                        target="_blank" type="button"><i aria-hidden="true" class="fa fa-telegram"></i> Telegram Chat</a>
  45.                     <a class="btn btn-primary btn-xs" href="https://twitter.com/asiapool_io" style="margin-bottom: 5px; color:white;"
  46.                        target="_blank" type="button"><i aria-hidden="true" class="fa fa-twitter"></i> Follow Twitter</a>
  47.                     <a class="btn btn-primary btn-xs" href="https://discord.gg/7a34Xp8" style="margin-bottom: 5px; color:white;"
  48.                        target="_blank" type="button"><i aria-hidden="true" class="fa fa-hashtag"></i> Discord Chat</a>
  49.                     <a class="btn btn-primary btn-xs" href="http://asiapool.io/bios" style="margin-bottom: 5px; color:white;"
  50.                        target="_blank" type="button"><i aria-hidden="true" class="fa fa-microchip"></i> Bios Mod
  51.                         Collection</a>
  52.                 </div>
  53.             </div>
  54.         </div>
  55.     </div>
  56.     <div class="row" id="poolStats">
  57.         <div class="col-md-4">
  58.             <h4>Network</h4>
  59.             <div class="bs-component">
  60.                 <ul class="breadcrumb">
  61.                     <li class="active"><i class="fa fa-tachometer"></i> Has Rate: <span class="text-primary" id="networkHashrate"></span></li>
  62.                 </ul>
  63.                 <ul class="breadcrumb">
  64.                     <li class="active"><i class="fa fa-clock-o"></i> Block Found: <span class="time"><span class="text-primary"
  65.                                id="networkLastBlockFound"></span></span></li>
  66.                 </ul>
  67.                 <ul class="breadcrumb">
  68.                     <li class="active"><i class="fa fa-lock"></i> Difficulty: <span class="text-primary" id="networkDifficulty"></span></li>
  69.                 </ul>
  70.                 <ul class="breadcrumb">
  71.                     <li class="active"><i class="fa fa-delicious"></i> Blockchain Height: <span class="text-primary" id="blockchainHeight"></span></li>
  72.                 </ul>
  73.                 <ul class="breadcrumb">
  74.                     <li class="active"><i class="fa fa-gift"></i> Last Reward: <span class="text-primary" id="networkLastReward"></span></li>
  75.                 </ul>
  76.                 <ul class="breadcrumb">
  77.                     <li class="active"><i class="fa fa-unlink"></i> Last Hash: <span class="value"><a id="lastHash"
  78.                                target="_blank"></a></span> <span class="time"><span class="small" id="networkLastBlockFound"></span></span></li>
  79.                 </ul>
  80.                 <ul class="breadcrumb">
  81.                     <li class="active"><i class="fa fa-hashtag"></i> Algorithm: <span class="text-primary" id="cnAlgorithm"></span></li>
  82.                 </ul>
  83.             </div>
  84.         </div>
  85.         <div class="col-md-4">
  86.             <h4>Our Pool</h4>
  87.             <div class="component">
  88.                 <ul class="breadcrumb">
  89.                     <li class="active"><i class="fa fa-tachometer"></i> Has Rate: <span class="text-primary" id="poolHashrate"></span>
  90.                         <span class="small">(<span id="hashPower"></span>)</span></li>
  91.                 </ul>
  92.                 <ul class="breadcrumb">
  93.                     <li class="active"><i class="fa fa-clock-o"></i> Block Found: <span class="text-primary" id="blocksTotal"
  94.                            style="display:none !important"></span> <span class="text-primary" id="poolLastBlockFound"></span></li>
  95.                 </ul>
  96.                 <ul class="breadcrumb">
  97.                     <li class="active"><i class="fa fa-users"></i> Miner: <span class="text-primary" id="poolMiners"></span>
  98.                         <span><small>(<span id="poolWorkers"></span> <span>workers</span>)</small></span></li>
  99.                 </ul>
  100.                 <ul class="breadcrumb">
  101.                     <li class="active"><i class="fa fa-tags"></i> Pool Fee: <span class="text-primary" id="poolFee"></span></li>
  102.                 </ul>
  103.                 <ul class="breadcrumb">
  104.                     <li class="active"><i class="fa fa-history"></i> Block Found Every: <span class="text-primary" id="blockSolvedTime"></span></li>
  105.                 </ul>
  106.                 <ul class="breadcrumb">
  107.                     <li class="active"><i class="fa fa-star-half-o"></i> Current Effort: <span class="text-primary" id="currentEffort"></span></li>
  108.                 </ul>
  109.                 <ul class="breadcrumb">
  110.                     <li class="active"><i class="fa fa-money"></i> Min Payout: <span class="text-primary" id="paymentsMinimum"></span></li>
  111.                 </ul>
  112.             </div>
  113.         </div>
  114.         <div class="col-md-4">
  115.             <h4>Coin Price</h4>
  116.             <div>
  117.                 <ul class="breadcrumb">
  118.                     <li class="active"><span>BTC:</span> <i class="fa fa-btc text-primary"></i> <span class="text-primary"
  119.                            id="coinPriceBTC">...</span></li>
  120.                 </ul>
  121.                 <ul class="breadcrumb">
  122.                     <li class="active"><span>USD:</span> <i class="fa fa-dollar text-primary"></i> <span class="text-primary"
  123.                            id="coinPriceUSD">...</span></li>
  124.                 </ul>
  125.                 <ul class="breadcrumb">
  126.                     <li class="active"><span>IDR:</span> <i class="fa fa-podcast text-primary"></i> <span class="text-primary"
  127.                            id="coinPriceIDR">...</span></li>
  128.                 </ul>
  129.                 <ul class="breadcrumb">
  130.                     <li class="active"><span>JPY:</span> <i class="fa fa-jpy text-primary"></i> <span class="text-primary"
  131.                            id="coinPriceJPY">...</span></li>
  132.                 </ul>
  133.                 <ul class="breadcrumb">
  134.                     <li class="active"><span>EUR:</span> <i class="fa fa-eur text-primary"></i> <span class="text-primary"
  135.                            id="coinPriceEUR">...</span></li>
  136.                 </ul>
  137.                 <div id="miningProfitCalc">
  138.                     <div id="calcHashHolder">
  139.                         <div class="input-group">
  140.                             <input class="form-control" id="calcHashRate" placeholder="Estimated Mining Profit" type="number">
  141.                             <span class="input-group-btn">
  142.                                 <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" id="calcHashDropdown">
  143.                                     <span id="calcHashUnit" data-mul="1">KH/s</span>
  144.                                     <span class="caret"></span>
  145.                                 </button>
  146.                                 <ul class="dropdown-menu dropdown-menu-right" role="menu" id="calcHashUnits">
  147.                                     <li>
  148.                                         <a href="#" data-mul="0">H/s</a>
  149.                                     </li>
  150.                                     <li>
  151.                                         <a href="#" data-mul="1">KH/s</a>
  152.                                     </li>
  153.                                     <li>
  154.                                         <a href="#" data-mul="2">MH/s</a>
  155.                                     </li>
  156.                                 </ul>
  157.                             </span>
  158.                         </div>
  159.                         <span class="btn btn-default" id="calcHashResultsHolder" style="margin-top:18px;">
  160.                             <span id="calcHashAmount">
  161.                                 <span data-toggle="tooltip" data-placement="left" data-original-title="Estimation Profit Per Day"><i
  162.                                        class="fa fa-question-circle"></i></span> <span id="getcoin">0</span> | <span
  163.                                    id="getusd">0</span> USD | <span id="getbtc">0</span> BTC
  164.                             </span>
  165.                         </span>
  166.                     </div>
  167.                 </div>
  168.             </div>
  169.         </div>
  170.     </div>
  171.     <br>
  172.     <!-- Pool Charts -->
  173.     <div class="row">
  174.         <div class="col-md-4 poolChart">
  175.             <h4>Pool HashRate</h4>
  176.             <div class="panel panel-primary">
  177.                 <div class="panel-body" style="background: #8360c3; /* fallback for old browsers */ background: -webkit-linear-gradient(to right, #2ebf91, #8360c3); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient(to right, #2ebf91, #8360c3); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ padding: 5px;">
  178.                     <div class="chart">
  179.                         <canvas id="chart_poolhashrate"></canvas><a class="chart-style"></a>
  180.                     </div>
  181.                 </div>
  182.             </div>
  183.         </div>
  184.         <div class="col-md-4 poolChart">
  185.             <h4>Network Difficulty</h4>
  186.             <div class="panel panel-primary">
  187.                 <div class="panel-body" style="background: #a8c0ff; /* fallback for old browsers */ background: -webkit-linear-gradient(to right, #3f2b96, #a8c0ff); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient(to right, #3f2b96, #a8c0ff); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ padding: 5px;">
  188.                     <div class="chart">
  189.                         <canvas id="chart_pooldiff"></canvas><a class="chart-style"></a>
  190.                     </div>
  191.                 </div>
  192.             </div>
  193.         </div>
  194.         <div class="col-md-4 poolChart">
  195.             <h4>Miner</h4>
  196.             <div class="panel panel-primary">
  197.                 <div class="panel-body" style="background: #11998e; /* fallback for old browsers */ background: -webkit-linear-gradient(to right, #38ef7d, #11998e); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient(to right, #38ef7d, #11998e); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ padding: 5px;">
  198.                     <div class="chart">
  199.                         <canvas id="chart_poolminers"></canvas><a class="chart-style"></a>
  200.                     </div>
  201.                 </div>
  202.             </div>
  203.         </div>
  204.     </div><!-- Worker Stats -->
  205.     <div class="row" id="workerStats">
  206.         <div class="col-md-12" style="padding-bottom:20px;">
  207.             <h4>Your Stats & Payment History</h4>
  208.            <div class="input-group">
  209.                <input class="form-control" id="yourStatsInput" placeholder="Enter Your Address" type="text">
  210.                <span class="input-group-btn"><button class="btn btn-default" id="lookUp" type="button"><i class="fa fa-search"
  211.                            aria-hidden="true"></i> LOOKUP</button></span>
  212.            </div>
  213.        </div>
  214.  
  215.        <div class="text-center" id="addressError"></div>
  216.        <div class="yourStats push-up-20">
  217.            <div class="col-md-12">
  218.                <h5>Account Overview</h5>
  219.            </div>
  220.            <div class="col-md-3 text-center">
  221.                <div class="panel panel-primary">
  222.                    <div class="panel-heading">
  223.                        <i class="fa fa-money"></i> Pending Balance
  224.                    </div>
  225.                    <div class="panel-body">
  226.                        <abbr class="text-primary workerstatspool" id="yourPendingBalance" title="Total your coin for next payment interval"></abbr>
  227.                    </div>
  228.                </div>
  229.            </div>
  230.            <div class="col-md-3 text-center">
  231.                <div class="panel panel-primary">
  232.                    <div class="panel-heading">
  233.                        <i class="fa fa-smile-o"></i> Total Paid
  234.                    </div>
  235.                    <div class="panel-body">
  236.                        <abbr class="text-primary workerstatspool" id="yourPaid" title="Total coin already sent via payments"></abbr>
  237.                    </div>
  238.                </div>
  239.            </div>
  240.            <div class="col-md-3 text-center">
  241.                <div class="panel panel-primary">
  242.                    <div class="panel-heading">
  243.                        <i class="fa fa-dashboard"></i> Hash Rate
  244.                    </div>
  245.                    <div class="panel-body">
  246.                        <span class="text-primary workerstatspool" id="yourHashrateHolder"></span>
  247.                    </div>
  248.                </div>
  249.            </div>
  250.            <div class="col-md-3 text-center">
  251.                <div class="panel panel-primary">
  252.                    <div class="panel-heading">
  253.                        <i class="fa fa-cloud-download"></i> Total Shares
  254.                    </div>
  255.                    <div class="panel-body">
  256.                        <span class="text-primary workerstatspool" id="yourHashes"></span>
  257.                    </div>
  258.                </div>
  259.            </div>
  260.            <div class="col-md-8">
  261.                <h5>Realtime Mining Estimation <span data-toggle="tooltip" data-placement="right" data-original-title="Based on current difficulty"><i
  262.                            class="fa fa-question-circle"></i></span></h5>
  263.                <div class="table-responsive">
  264.                    <table class="table table-bordered">
  265.                        <tbody>
  266.                            <tr>
  267.                                <td style="width:15%;"><i class="fa fa-clock-o"></i> Hourly</td>
  268.                                 <td><abbr title="" id="hourlycoin">N/A</abbr> / <abbr title="" id="hourlycoinusd">0 USD</abbr>
  269.                                     / <abbr title="" id="hourlycoinbtc">0 BTC</abbr> / <abbr title="" id="hourlycoinidr">0
  270.                                         IDR</abbr></td>
  271.                             </tr>
  272.                             <tr>
  273.                                 <td style="width:15%;"><i class="fa fa-clock-o"></i> Daily</td>
  274.                                 <td><abbr title="" id="dailycoin">N/A</abbr> / <abbr title="" id="dailycoinusd">0 USD</abbr>
  275.                                     / <abbr title="" id="dailycoinbtc">0 BTC</abbr> / <abbr title="" id="hourlycoinidr">0
  276.                                         IDR</abbr></td>
  277.                             </tr>
  278.                             <tr>
  279.                                 <td style="width:15%;"><i class="fa fa-clock-o"></i> Weekly</td>
  280.                                 <td><abbr title="" id="weeklycoin">N/A</abbr> / <abbr title="" id="weeklycoinusd">0 USD</abbr>
  281.                                     / <abbr title="" id="weeklycoinbyc">0 BTC</abbr> / <abbr title="" id="hourlycoinidr">0
  282.                                         IDR</abbr></td>
  283.                             </tr>
  284.                             <tr>
  285.                                 <td style="width:15%;"><i class="fa fa-clock-o"></i> Monthly</td>
  286.                                 <td><abbr title="" id="monthlycoin">N/A</abbr> / <abbr title="" id="monthlycoinusd">0
  287.                                         USD</abbr> / <abbr title="" id="monthlycoinbtc">0 BTC</abbr> / <abbr title=""
  288.                                        id="hourlycoinidr">0 IDR</abbr></td>
  289.                             </tr>
  290.                         </tbody>
  291.                     </table>
  292.                 </div>
  293.             </div>
  294.             <div class="col-md-4 text-center">
  295.                 <h5>Set Payment Treshold</h5>
  296.                 <div class="panel panel-primary">
  297.                     <div class="panel-heading">
  298.                         <i class="fa fa-pencil-square-o"></i> Your Treshold
  299.                     </div>
  300.                     <div class="panel-body">
  301.                         <abbr class="text-primary workerstatspool" id="yourPayoutRate" title=""></abbr> <span class="text-primary workerstatspool"
  302.                            id="coinSymbol"></span>
  303.                         <br>
  304.                         <div class="btn btn-primary btn-sm" style="margin-top:12px;margin-bottom:10px;">
  305.                             <i class="fa fa-gear"></i> <a href="#settings" style="color: #fff;" target="_blank">Set Up
  306.                                 Min. Payment</a>
  307.                         </div>
  308.                     </div>
  309.                 </div>
  310.             </div>
  311.             <div class="col-md-6 yourStats">
  312.                 <h5>Your Hashrate Charts</h5>
  313.                 <div class="panel panel-default">
  314.                     <div class="panel-body userChart" style="background: #12c2e9; /* fallback for old browsers */ background: -webkit-linear-gradient(to right, #f64f59, #c471ed, #12c2e9); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient(to right, #f64f59, #c471ed, #12c2e9); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ padding: 5px;">
  315.                         <div class="chart">
  316.                             <canvas id="chart_userhashrate"></canvas><a class="chart-style"></a>
  317.                         </div>
  318.                     </div>
  319.                 </div>
  320.             </div>
  321.             <div class="col-md-6 yourStats">
  322.                 <h5>Your Payments Charts</h5>
  323.                 <div class="panel panel-default">
  324.                     <div class="panel-body userChart" style="background: #11998e; /* fallback for old browsers */ background: -webkit-linear-gradient(to right, #38ef7d, #11998e); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient(to right, #38ef7d, #11998e); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ padding: 5px;">
  325.                         <div class="chart">
  326.                             <canvas id="chart_userpayments"></canvas><a class="chart-style"></a>
  327.                         </div>
  328.                     </div>
  329.                 </div>
  330.             </div>
  331.             <div class="col-md-12">
  332.                 <h5>Your Workers</h5>
  333.                 <div class="table-responsive" id="workersReport">
  334.                     <table class="table table-bordered">
  335.                         <thead>
  336.                             <tr>
  337.                                 <th class="col1 sort"><span>Status</span> <i class="fa fa-sort"></i></th>
  338.                                 <th class="col2 sort"><span>Worker Name</span> <i class="fa fa-sort"></i></th>
  339.                                 <th class="col3 sort"><span>Hash Rate</span> <i class="fa fa-sort"></i></th>
  340.                                 <th class="col4 sort"><span>Last Share Submitted</span> <i class="fa fa-sort"></i></th>
  341.                                 <th class="col5 sort"><span>Share Submitted</span> <i class="fa fa-sort"></i></th>
  342.                             </tr>
  343.                         </thead>
  344.                         <tbody id="workersReport_rows"></tbody>
  345.                     </table>
  346.                 </div>
  347.             </div>
  348.         </div>
  349.         <div class="col-md-12">
  350.             <div class="yourStats">
  351.                 <h5>Your Payments</h5>
  352.                 <div class="table-responsive" id="workerPayments">
  353.                     <table class="table table-bordered">
  354.                         <thead>
  355.                             <tr>
  356.                                 <th class="col1"><span>Time Sent</span></th>
  357.                                 <th class="col2"><span>Transaction Hash</span></th>
  358.                                 <th class="col3"><span>Amount</span></th>
  359.                                 <th class="col4"><span>Mixin</span></th>
  360.                             </tr>
  361.                         </thead>
  362.                         <tbody id="paymentsReport_rows"></tbody>
  363.                     </table>
  364.                 </div>
  365.             </div>
  366.             <p class="yourStats text-center push-up-10"><button class="btn btn-default" id="loadMorePayments" type="button"><span>Load
  367.                         More</span></button></p>
  368.         </div>
  369.     </div>
  370. </div>
  371. <script>
  372.     // Tooltip
  373.     $(document).ready(function () {
  374.         $('[data-toggle="tooltip"]').tooltip();
  375.     });
  376.  
  377.     // Coin PRICES
  378.     $.ajax({
  379.         url: CoinPriceAPI,
  380.         dataType: 'json',
  381.         cache: 'false'
  382.     }).done(function (data) {
  383.         CoinPrice = data;
  384.         updateText('coinPriceBTC', CoinPrice.BTC);
  385.         updateText('coinPriceUSD', CoinPrice.USD);
  386.         updateText('coinPriceIDR', CoinPrice.IDR);
  387.         updateText('coinPriceJPY', CoinPrice.JPY);
  388.         updateText('coinPriceEUR', CoinPrice.EUR);
  389.         updateText('lastrewardusd', parseFloat(getReadableCoins(lastStats.lastblock.reward * CoinPrice.USD)).toFixed(
  390.             2));
  391.     });
  392.  
  393.     // Charts initialized
  394.     var chartsInitialized = false;
  395.     var intervalChartsUpdate;
  396.     var userChartsData2 = null;
  397.     var chartsInitialized2 = false;
  398.     var xhrAddressPoll;
  399.     var addressTimeout;
  400.     // Update current page
  401.     currentPage = {
  402.         destroy: function () {
  403.             calcEstimateProfit();
  404.             $('#networkLastBlockFound,#poolLastBlockFound').timeago('dispose');
  405.             if (chartsInitialized) {
  406.                 chartsInitialized = false;
  407.                 clearInterval(intervalChartsUpdate);
  408.             }
  409.         },
  410.         update: function () {
  411.             $('#networkLastBlockFound').timeago('update', new Date(lastStats.lastblock.timestamp * 1000).toISOString());
  412.  
  413.             updateText('networkHashrate', getReadableHashRateString(lastStats.network.difficulty / lastStats.config
  414.                 .coinDifficultyTarget) + '/sec');
  415.             updateText('networkDifficulty', getReadableDiffString(lastStats.network.difficulty));
  416.             updateText('coinSymbol', lastStats.config.symbol);
  417.             updateText('blockchainHeight', formatNumber(lastStats.network.height.toString(), ' '));
  418.             updateText('lastHash', (lastStats.lastblock.hash).substring(0, 13) + '...').setAttribute('href',
  419.                 getBlockchainUrl(lastStats.lastblock.hash));
  420.  
  421.             if (lastStats.config.networkFee) {
  422.                 var networkFeePercent = lastStats.config.networkFee / 100;
  423.                 updateText('networkLastReward', getReadableCoins(lastStats.lastblock.reward - (lastStats.lastblock
  424.                     .reward * networkFeePercent)));
  425.             } else {
  426.                 updateText('networkLastReward', getReadableCoins(lastStats.lastblock.reward));
  427.             }
  428.  
  429.             updateText('poolHashrate', getReadableHashRateString(lastStats.pool.hashrate) + '/sec');
  430.             updateText('blocksTotal', lastStats.pool.totalBlocks.toString());
  431.  
  432.             var hashPower = lastStats.pool.hashrate / (lastStats.network.difficulty / lastStats.config.coinDifficultyTarget) *
  433.                 100;
  434.             updateText('hashPower', hashPower.toFixed(2) + '%');
  435.  
  436.             if (lastStats.pool.lastBlockFound) {
  437.                 var d = new Date(parseInt(lastStats.pool.lastBlockFound)).toISOString();
  438.                 $('#poolLastBlockFound').timeago('update', d);
  439.             } else {
  440.                 $('#poolLastBlockFound').removeAttr('title').data('ts', '').update('Never');
  441.             }
  442.  
  443.             updateText('poolMiners', lastStats.pool.miners.toString());
  444.             updateText('poolWorkers', lastStats.pool.workers.toString());
  445.  
  446.             var totalFee = lastStats.config.fee;
  447.             if (Object.keys(lastStats.config.donation).length) {
  448.                 var totalDonation = 0;
  449.                 for (var i in lastStats.config.donation) {
  450.                     totalDonation += lastStats.config.donation[i];
  451.                 }
  452.                 totalFee += totalDonation;
  453.             }
  454.             updateText('poolFee', (totalFee > 0 && totalFee != 100 ? floatToString(totalFee) - 1 : (totalFee ==
  455.                100 ? '100' : '0')) + '%');
  456.  
  457.             updateText('paymentsInterval', getReadableTime(lastStats.config.paymentsInterval));
  458.             updateText('paymentsMinimum', getReadableCoins(lastStats.config.minPaymentThreshold));
  459.  
  460.             updateText('blockSolvedTime', getReadableTime(lastStats.network.difficulty / lastStats.pool.hashrate));
  461.             updateText('currentEffort', (lastStats.pool.roundHashes / lastStats.network.difficulty * 100).toFixed(
  462.                 1) + '%');
  463.  
  464.             if (lastStats.charts && !chartsInitialized) {
  465.                intervalChartsUpdate = setInterval(createCharts, 60 * 1000);
  466.                 createCharts();
  467.                 chartsInitialized = true;
  468.             }
  469.  
  470.             // CN Algorithm
  471.             var cnAlgorithm = lastStats.config.cnAlgorithm || "cryptonight";
  472.             var cnVariant = lastStats.config.cnVariant || 0;
  473.  
  474.             algorithm = '';
  475.             xmrstakAlgo = '';
  476.  
  477.             if (cnAlgorithm == "cryptonight_light") {
  478.                 if (cnVariant === 1) {
  479.                     algorithm = 'Cryptonight Light (Aeon v7)';
  480.                     xmrstakAlgo = 'cryptonight_lite_v7';
  481.                 } else if (cnVariant === 2) {
  482.                     algorithm = 'Cryptonight Light (IPBC)';
  483.                     xmrstakAlgo = 'cryptonight_lite_v7_xor';
  484.                 } else {
  485.                     algorithm = 'Cryptonight Light (Original)';
  486.                     xmrstakAlgo = 'cryptonight_lite';
  487.                 }
  488.             } else if (cnAlgorithm == "cryptonight_heavy") {
  489.                 algorithm = 'Cryptonight Heavy';
  490.                 xmrstakAlgo = 'cryptonight_heavy';
  491.             } else {
  492.                 if (cnVariant === 1) {
  493.                     algorithm = 'Cryptonight (Monero v7)';
  494.                     xmrstakAlgo = 'cryptonight_v7';
  495.                 } else if (cnVariant === 3) {
  496.                     algorithm = 'Cryptonight (Stellite v7)';
  497.                     xmrstakAlgo = 'cryptonight_v7_stellite';
  498.                 } else if (cnVariant === 4) {
  499.                     algorithm = 'Cryptonight Fast (Masari)';
  500.                     xmrstakAlgo = 'cryptonight_masari';
  501.                 } else {
  502.                     algorithm = 'Cryptonight (Saber)';
  503.                     xmrstakAlgo = 'cryptonight_bittube';
  504.                 }
  505.             }
  506.  
  507.             updateText('cnAlgorithm', algorithm);
  508.             updateText('xmrstakAlgo', xmrstakAlgo);
  509.         }
  510.     };
  511.  
  512.     // Enable timeago on last block found
  513.     $('#networkLastBlockFound,#poolLastBlockFound').timeago();
  514.  
  515.     /**
  516.      * Charts
  517.      **/
  518.  
  519.     // Create charts
  520.     function createCharts() {
  521.         if (!lastStats || !lastStats.charts) return;
  522.         var data = lastStats.charts;
  523.  
  524.         var graphData = {
  525.             poolhashrate: getGraphData(data.hashrate),
  526.             pooldiff: getGraphData(data.difficulty),
  527.             poolminers: getGraphData(data.miners),
  528.         };
  529.  
  530.         for (var graphType in graphData) {
  531.             if (graphData[graphType].values.length > 1) {
  532.                 var $chart = $('#chart_' + graphType);
  533.                 var bgcolor = null,
  534.                     bordercolor = null,
  535.                     borderwidth = null;
  536.                 var colorelem = $chart.siblings('a.chart-style');
  537.                 if (colorelem.length == 1) {
  538.                     bgcolor = colorelem.css('background-color');
  539.                     bordercolor = colorelem.css('border-left-color');
  540.                     borderwidth = parseFloat(colorelem.css('width'));
  541.                 }
  542.                 if (bgcolor === null) bgcolor = 'rgba(3, 169, 244, .4)';
  543.                 if (bordercolor === null) bordercolor = '#03a9f4';
  544.                 if (borderwidth === null || isNaN(borderwidth)) borderwidth = 1;
  545.  
  546.                 var chartObj = new Chart(document.getElementById('chart_' + graphType), {
  547.                     type: 'line',
  548.                     data: {
  549.                         labels: graphData[graphType].names,
  550.                         datasets: [{
  551.                             data: graphData[graphType].values,
  552.                             dataType: graphType,
  553.                             fill: true,
  554.                             backgroundColor: bgcolor,
  555.                             borderColor: bordercolor,
  556.                             borderWidth: borderwidth
  557.                         }]
  558.                     },
  559.                     options: {
  560.                         animation: false,
  561.                         responsive: true,
  562.                         maintainAspectRatio: false,
  563.                         legend: {
  564.                             display: false
  565.                         },
  566.                         elements: {
  567.                             point: {
  568.                                 radius: 0,
  569.                                 hitRadius: 10,
  570.                                 hoverRadius: 5
  571.                             }
  572.                         },
  573.                         scales: {
  574.                             xAxes: [{
  575.                                 display: false,
  576.                                 ticks: {
  577.                                     display: false
  578.                                 },
  579.                                 gridLines: {
  580.                                     display: false
  581.                                 }
  582.                             }],
  583.                             yAxes: [{
  584.                                 display: false,
  585.                                 ticks: {
  586.                                     display: false,
  587.                                     beginAtZero: true,
  588.                                     userCallback: function (label, index, labels) {
  589.                                         if (Math.floor(label) === label) return label;
  590.                                     }
  591.                                 },
  592.                                 gridLines: {
  593.                                     display: false
  594.                                 }
  595.                             }]
  596.                         },
  597.                         layout: {
  598.                             padding: {
  599.                                 top: 5,
  600.                                 left: 0,
  601.                                 right: 0,
  602.                                 bottom: 0
  603.                             }
  604.                         },
  605.                         tooltips: {
  606.                             callbacks: {
  607.                                 label: function (tooltipItem, data) {
  608.                                     var dataType = data.datasets[tooltipItem.datasetIndex].dataType || '';
  609.                                     var label = tooltipItem.yLabel;
  610.                                     if (dataType == 'poolhashrate') label = getReadableHashRateString(
  611.                                         tooltipItem.yLabel) + '/sec';
  612.                                     else if (dataType == 'pooldiff') label = getReadableDiffString(
  613.                                         tooltipItem.yLabel);
  614.                                     else if (dataType == 'poolminers') label = (tooltipItem.yLabel) + ' ' +
  615.                                         'miner';
  616.                                     else label = formatNumber(tooltipItem.yLabel.toString(), ' ');
  617.                                     return ' ' + label;
  618.                                 }
  619.                             }
  620.                         }
  621.                     }
  622.                 });
  623.                 $chart.closest('.poolChart').show();
  624.             }
  625.         }
  626.     }
  627.  
  628.     // Get chart data
  629.     function getGraphData(rawData) {
  630.         var graphData = {
  631.             names: [],
  632.             values: []
  633.         };
  634.         if (rawData) {
  635.             for (var i = 0, xy; xy = rawData[i]; i++) {
  636.                 graphData.names.push(new Date(xy[0] * 1000).toLocaleString());
  637.                 graphData.values.push(xy[1]);
  638.             }
  639.         }
  640.         return graphData;
  641.     }
  642.  
  643.     // Ambil News
  644.  
  645.     $(document).ready(function () {
  646.         $.getJSON("https://admin-asiapool.club/api/news", function (data) {
  647.             var items = [];
  648.  
  649.             $.each(data, function (key, val) {
  650.                 items.push(
  651.                     `
  652.       <p>
  653.         <span class="label label-success">${ val.published }</span>
  654.         <span class="text-primary">
  655.           <a href="${ val.url }" target="_blank">${ val.name }</a>
  656.         </span>
  657.         ${ val.content }
  658.       </p>
  659.     `
  660.                 );
  661.             });
  662.  
  663.             $("<div/>", {
  664.                 "class": "news-list",
  665.                 html: items.join("")
  666.             }).appendTo(".scroll");
  667.         });
  668.     })
  669.  
  670.  
  671.  
  672.  
  673.     /**
  674.      * Miner statistics
  675.      **/
  676.     // Enable time ago on last submitted share
  677.     $('#yourLastShare').timeago();
  678.     // Load current miner statistics
  679.  
  680.     function fetchAddressStats(longpoll) {
  681.         var address = getCurrentAddress();
  682.  
  683.         xhrAddressPoll = $.ajax({
  684.             url: api + '/stats_address',
  685.             data: {
  686.                 address: address,
  687.                 longpoll: longpoll
  688.             },
  689.             dataType: 'json',
  690.             cache: 'false',
  691.             success: function (data) {
  692.                 if (!data.stats) {
  693.                     $('.yourStats, .yourWorkers, .userChart').hide();
  694.                     $('#addressError').text(data.error).show();
  695.                     docCookies.setItem('mining_address', '', Infinity);
  696.                     loadLiveStats(true);
  697.                     return;
  698.                 }
  699.                 $('#addressError').hide();
  700.                 if (data.stats.lastShare) {
  701.                     $('#yourLastShare').timeago('update', new Date(parseInt(data.stats.lastShare) * 1000).toISOString());
  702.                 } else {
  703.                     updateText('yourLastShare', 'Never');
  704.                 }
  705.                 updateText('yourHashrateHolder', (getReadableHashRateString(data.stats.hashrate) || '0 H') +
  706.                     '/sec');
  707.                 updateText('yourHashes', getReadableDiffString(data.stats.hashes || 0).toString());
  708.                 updateText('yourPaid', getReadableCoins(data.stats.paid));
  709.                 updateText('yourPendingBalance', getReadableCoins(data.stats.balance));
  710.  
  711.                 // Mining estimation coin
  712.  
  713.                 var profits = (data.stats.hashrate * 3600 / lastStats.network.difficulty * lastStats.lastblock
  714.                     .reward)
  715.                 var profits1 = (data.stats.hashrate * 86400 / lastStats.network.difficulty * lastStats.lastblock
  716.                     .reward)
  717.                 var profits2 = (data.stats.hashrate * 7 * 86400 / lastStats.network.difficulty * lastStats.lastblock
  718.                     .reward)
  719.                 var profits3 = (data.stats.hashrate * 30 * 86400 / lastStats.network.difficulty * lastStats
  720.                     .lastblock.reward)
  721.                 if (profits) {
  722.                     updateText('hourlycoin', getReadableCoins(profits));
  723.                     updateText('dailycoin', getReadableCoins(profits1));
  724.                     updateText('weeklycoin', getReadableCoins(profits2));
  725.                     updateText('monthlycoin', getReadableCoins(profits3));
  726.                 }
  727.  
  728.  
  729.                 var userRoundHashes = parseInt(data.stats.roundHashes || 0);
  730.                 var poolRoundHashes = parseInt(lastStats.pool.roundHashes || 0);
  731.                 var userRoundScore = parseFloat(data.stats.roundScore || 0);
  732.                 var poolRoundScore = parseFloat(lastStats.pool.roundScore || 0);
  733.                 var lastReward = parseFloat(lastStats.lastblock.reward || 0);
  734.  
  735.                 var poolFee = lastStats.config.fee;
  736.                 if (Object.keys(lastStats.config.donation).length) {
  737.                     var totalDonation = 0;
  738.                     for (var i in lastStats.config.donation) {
  739.                         totalDonation += lastStats.config.donation[i];
  740.                     }
  741.                     poolFee += totalDonation;
  742.                 }
  743.  
  744.                 var transferFee = lastStats.config.transferFee;
  745.                 var share_pct = userRoundHashes * 100 / poolRoundHashes;
  746.                 var score_pct = userRoundScore * 100 / poolRoundScore;
  747.  
  748.                 if (!lastStats.config.slushMiningEnabled) {
  749.                     $('#slush_round_info').hide();
  750.                 }
  751.  
  752.                 renderPayments(data.payments);
  753.  
  754.                 if (data.workers && data.workers.length > 0) {
  755.                    renderWorkers(data.workers);
  756.                     $('.yourWorkers').show();
  757.                 }
  758.  
  759.                 $('.yourStats').show();
  760.                 if (data.charts) {
  761.                     userChartsData2 = data.charts;
  762.                     if (!chartsInitialized2) {
  763.                         intervalChartsUpdate = setInterval(createCharts2, 60 * 1000);
  764.                         createCharts2();
  765.                         chartsInitialized2 = true;
  766.                     }
  767.                 }
  768.  
  769.                 fetchAddressStats(true);
  770.  
  771.                 $.ajax({
  772.                     url: 'https://tradeogre.com/api/v1/ticker/btc-tube',
  773.                     dataType: 'json',
  774.                     cache: 'false',
  775.                     success: function (data) {
  776.                         pbtc = data.price * profits;
  777.                         pbtc1 = data.price * profits2;
  778.                         pbtc2 = data.price * profits3;
  779.                         pbtc3 = data.price * profits4;
  780.  
  781.                         updateText('hourlycoinbtc', pbtc);
  782.                         updateText('dailycoinbtc', pbtc1);
  783.                         updateText('weeklycoinbtc', pbtc2);
  784.                         updateText('monthlycoinbtc', pbtc3);
  785.  
  786.                         $.ajax({
  787.                             url: 'https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=IDR',
  788.                            dataType: 'json',
  789.                            cache: 'false',
  790.                            success: function (data) {
  791.                                updateText('hourlycoinusd', data.IDR * pbtc);
  792.                                 updateText('dailycoinusd', data.IDR * pbtc1);
  793.                                 updateText('weeklycoinusd', data.IDR * pbtc2);
  794.                                 updateText('monthlycoinusd', data.IDR * pbtc3);
  795.                             }
  796.                         });
  797.  
  798.                         $.ajax({
  799.                             url: 'https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USD',
  800.                            dataType: 'json',
  801.                            cache: 'false',
  802.                            success: function (data) {
  803.                                updateText('hourlycoinusd', data.USD * pbtc);
  804.                                 updateText('dailycoinusd', data.USD * pbtc1);
  805.                                 updateText('weeklycoinusd', data.USD * pbtc2);
  806.                                 updateText('monthlycoinusd', data.USD * pbtc3);
  807.                             }
  808.                         });
  809.                     }
  810.                 });
  811.  
  812.  
  813.             },
  814.             error: function (e) {
  815.                 if (e.statusText === 'abort') return;
  816.                 $('#addressError').text('Connection error').show();
  817.  
  818.                 if (addressTimeout) clearTimeout(addressTimeout);
  819.                 addressTimeout = setTimeout(function () {
  820.                     fetchAddressStats(false);
  821.                 }, 2000);
  822.             }
  823.         });
  824.     }
  825.     // Click on lookup button
  826.     $('#lookUp').click(function () {
  827.         var address = $('#yourStatsInput').val().trim();
  828.  
  829.         if (getCurrentAddress() != address) {
  830.             docCookies.setItem('mining_address', address, Infinity);
  831.  
  832.             var urlWalletAddress = location.search.split('wallet=')[1] || 0;
  833.             if (urlWalletAddress) {
  834.                 window.location.href = "/#worker_stats";
  835.                 return;
  836.             } else {
  837.                 docCookies.setItem('mining_address', address, Infinity);
  838.                 loadLiveStats(true);
  839.             }
  840.         }
  841.         $('#addressError, .yourStats, .yourWorkers, .userChart').hide();
  842.         $('#workersReport_rows').empty();
  843.         $('#paymentsReport_rows').empty();
  844.         $('#lookUp > span:first-child').hide();
  845.         $('#lookUp > span:last-child').show();
  846.         if (xhrAddressPoll) xhrAddressPoll.abort();
  847.         if (addressTimeout) clearTimeout(addressTimeout);
  848.         $('#lookUp > span:last-child').hide();
  849.         $('#lookUp > span:first-child').show();
  850.  
  851.         if (!address) {
  852.             $('#yourStatsInput').focus();
  853.             return;
  854.         }
  855.  
  856.         fetchAddressStats(false);
  857.     });
  858.     // Lookup if current address is known
  859.     var address = getCurrentAddress();
  860.     if (address) {
  861.         $('#yourStatsInput').val(address);
  862.         $('#lookUp').click();
  863.     }
  864.     // Handler enter key on lookup address text field
  865.     $('#yourStatsInput').keyup(function (e) {
  866.         if (e.keyCode === 13)
  867.             $('#lookUp').click();
  868.     });
  869.     /**
  870.      * Charts
  871.      **/
  872.     // Create charts
  873.     function createCharts2() {
  874.         if (!userChartsData2) return;
  875.         var data = userChartsData2;
  876.         var graphData2 = {
  877.             userhashrate: getGraphData(data.hashrate),
  878.             userpayments: getGraphData(data.payments)
  879.         };
  880.         for (var graphType in graphData2) {
  881.             if (graphData2[graphType].values.length > 1) {
  882.                 var $chart = $('#chart_' + graphType);
  883.                 var bgcolor = null,
  884.                     bordercolor = null,
  885.                     borderwidth = null;
  886.                 var colorelem = $chart.siblings('a.chart-style');
  887.                 if (colorelem.length == 1) {
  888.                     bgcolor = colorelem.css('background-color');
  889.                     bordercolor = colorelem.css('border-left-color');
  890.                     borderwidth = parseFloat(colorelem.css('width'));
  891.                 }
  892.                 if (bgcolor === null) bgcolor = 'rgba(3, 169, 244, .4)';
  893.                 if (bordercolor === null) bordercolor = '#03a9f4';
  894.                 if (borderwidth === null || isNaN(borderwidth)) borderwidth = 1;
  895.                 var chartObj = new Chart(document.getElementById('chart_' + graphType), {
  896.                     type: 'line',
  897.                     data: {
  898.                         labels: graphData2[graphType].names,
  899.                         datasets: [{
  900.                             data: graphData2[graphType].values,
  901.                             dataType: graphType,
  902.                             fill: true,
  903.                             backgroundColor: bgcolor,
  904.                             borderColor: bordercolor,
  905.                             borderWidth: borderwidth
  906.                         }]
  907.                     },
  908.                     options: {
  909.                         animation: false,
  910.                         responsive: true,
  911.                         maintainAspectRatio: false,
  912.                         legend: {
  913.                             display: false
  914.                         },
  915.                         elements: {
  916.                             point: {
  917.                                 radius: 0,
  918.                                 hitRadius: 10,
  919.                                 hoverRadius: 5
  920.                             }
  921.                         },
  922.                         scales: {
  923.                             xAxes: [{
  924.                                 display: false,
  925.                                 ticks: {
  926.                                     display: false
  927.                                 },
  928.                                 gridLines: {
  929.                                     display: false
  930.                                 }
  931.                             }],
  932.                             yAxes: [{
  933.                                 display: false,
  934.                                 ticks: {
  935.                                     display: false,
  936.                                     beginAtZero: true,
  937.                                     userCallback: function (label, index, labels) {
  938.                                         if (Math.floor(label) === label) return label;
  939.                                     }
  940.                                 },
  941.                                 gridLines: {
  942.                                     display: false
  943.                                 }
  944.                             }]
  945.                         },
  946.                         layout: {
  947.                             padding: {
  948.                                 top: 10,
  949.                                 left: 0,
  950.                                 right: 0,
  951.                                 bottom: 0
  952.                             }
  953.                         },
  954.                         tooltips: {
  955.                             callbacks: {
  956.                                 label: function (tooltipItem, data) {
  957.                                     var dataType = data.datasets[tooltipItem.datasetIndex].dataType || '';
  958.                                     var label = tooltipItem.yLabel;
  959.                                     if (dataType == 'userhashrate') label = getReadableHashRateString(
  960.                                         tooltipItem.yLabel) + '/sec';
  961.                                     else if (dataType == 'userpayments') label = getReadableCoins(
  962.                                         tooltipItem.yLabel);
  963.                                     return ' ' + label;
  964.                                 }
  965.                             }
  966.                         }
  967.                     }
  968.                 });
  969.                 $chart.closest('.userChart').show();
  970.             }
  971.         }
  972.     }
  973.     // Get chart data
  974.     function getGraphData(rawData, fixValueToCoins) {
  975.         var graphData2 = {
  976.             names: [],
  977.             values: []
  978.         };
  979.  
  980.         if (rawData) {
  981.             for (var i = 0, xy; xy = rawData[i]; i++) {
  982.                 graphData2.names.push(new Date(xy[0] * 1000).toLocaleString());
  983.                 graphData2.values.push(xy[1]);
  984.             }
  985.         }
  986.  
  987.         return graphData2;
  988.     }
  989.     /**
  990.      * Workers report
  991.      **/
  992.  
  993.     // Get worker row id
  994.     function getWorkerRowId(workerName) {
  995.         var id = btoa(workerName);
  996.         id = id.replace(/=/, '');
  997.         return id;
  998.     }
  999.     // Get worker row element
  1000.     function getWorkerRowElement(worker, jsonString) {
  1001.         var row = document.createElement('tr');
  1002.         row.setAttribute('data-json', jsonString);
  1003.         row.setAttribute('data-name', worker.name);
  1004.         row.setAttribute('id', 'workerRow_' + getWorkerRowId(worker.name));
  1005.         row.innerHTML = getWorkerCells(worker);
  1006.         return row;
  1007.     }
  1008.     // Get worker cells
  1009.     function getWorkerCells(worker) {
  1010.         var hashrate = worker.hashrate ? worker.hashrate : 0;
  1011.         var hashrate1h = worker.hashrate_1h || 0;
  1012.         var hashrate6h = worker.hashrate_6h || 0;
  1013.         var hashrate24h = worker.hashrate_24h || 0;
  1014.         var lastShare = worker.lastShare ? worker.lastShare : 0;
  1015.         var hashes = getReadableDiffString(worker.hashes || 0).toString();
  1016.         var status = (hashrate <= 0) ? 'error' : 'ok';
  1017.        return '<td class="col1" data-sort="' + status + '"><i class="fa fa-' + (status == 'ok' ? 'check status-ok' :
  1018.                'times status-error') + '"></i></td>' +
  1019.             '<td class="col2" data-sort="' + (worker.name != 'undefined' ? worker.name : '') + '">' + (worker.name !=
  1020.                 'undefined' ? worker.name : '<em>Undefined</em>') + '</td>' +
  1021.             '<td class="col3" data-sort="' + hashrate + '">' + getReadableHashRateString(hashrate) + '/s</td>' +
  1022.             '<td class="col4 avghr" data-sort="' + hashrate1h + '">' + getReadableHashRateString(hashrate1h) +
  1023.             '/s</td>' +
  1024.             '<td class="col5 avghr" data-sort="' + hashrate6h + '">' + getReadableHashRateString(hashrate6h) +
  1025.             '/s</td>' +
  1026.             '<td class="col6 avghr" data-sort="' + hashrate24h + '">' + getReadableHashRateString(hashrate24h) +
  1027.             '/s</td>' +
  1028.             '<td class="col7 text-center" data-sort="' + lastShare + '">' + (lastShare ? $.timeago(new Date(parseInt(
  1029.                 lastShare) * 1000).toISOString()) : 'Never') + '</td>' +
  1030.             '<td class="col8 text-center" data-sort="' + hashes + '">' + hashes + '</td>';
  1031.     }
  1032.     // Handle sort on workers table
  1033.     $('#workersReport th.sort').on('click', sortTable);
  1034.     // Sort workers
  1035.     function sortWorkers(a, b) {
  1036.         var aName = a.name.toLowerCase();
  1037.         var bName = b.name.toLowerCase();
  1038.         return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
  1039.     }
  1040.     // Render workers list
  1041.     function renderWorkers(workersData) {
  1042.         workersData = workersData.sort(sortWorkers);
  1043.  
  1044.         var $workersRows = $('#workersReport_rows');
  1045.  
  1046.         for (var i = 0; i < workersData.length; i++) {
  1047.            var existingRow = document.getElementById('workerRow_' + getWorkerRowId(workersData[i].name));
  1048.            if (!existingRow) {
  1049.                $workersRows.empty();
  1050.                break;
  1051.            }
  1052.        }
  1053.        var have_avg_hr = false;
  1054.        for (var i = 0; i < workersData.length; i++) {
  1055.            var worker = workersData[i];
  1056.            if (Date.now() / 1000 - parseInt(worker.lastShare) > 2 * 86400) continue;
  1057.             if (!have_avg_hr && 'hashrate_1h' in worker) have_avg_hr = true;
  1058.             var workerJson = JSON.stringify(worker);
  1059.             var existingRow = document.getElementById('workerRow_' + getWorkerRowId(worker.name));
  1060.             if (existingRow && existingRow.getAttribute('data-json') !== workerJson) {
  1061.                $(existingRow).replaceWith(getWorkerRowElement(worker, workerJson));
  1062.             } else if (!existingRow) {
  1063.                 var workerElement = getWorkerRowElement(worker, workerJson);
  1064.                 $workersRows.append(workerElement);
  1065.             }
  1066.         }
  1067.         if (!have_avg_hr) $('#workersReport .avghr').hide();
  1068.         else $('#workersReport .avghr').show();
  1069.     }
  1070.     /**
  1071.      * Payments report
  1072.      **/
  1073.     // Parse payment data
  1074.     function parsePayment(time, serializedPayment) {
  1075.         var parts = serializedPayment.split(':');
  1076.         return {
  1077.             time: parseInt(time),
  1078.             hash: parts[0],
  1079.             amount: parts[1],
  1080.             fee: parts[2],
  1081.             mixin: parts[3],
  1082.             recipients: parts[4]
  1083.         };
  1084.     }
  1085.     // Get payment row element
  1086.     function getPaymentRowElement(payment, jsonString) {
  1087.         var row = document.createElement('tr');
  1088.         row.setAttribute('data-json', jsonString);
  1089.         row.setAttribute('data-time', payment.time);
  1090.         row.setAttribute('id', 'paymentRow' + payment.time);
  1091.         row.innerHTML = getPaymentCells(payment);
  1092.         return row;
  1093.     }
  1094.     // Get payment cells
  1095.     function getPaymentCells(payment) {
  1096.         return '<td class="col1">' + formatDate(payment.time) + '</td>' +
  1097.             '<td class="col2">' + formatPaymentLink(payment.hash) + '</td>' +
  1098.             '<td class="col3">' + getReadableCoins(payment.amount) + '</td>' +
  1099.             '<td class="col4">' + payment.mixin + '</td>';
  1100.     }
  1101.     // Get summary row element
  1102.     function getSummaryRowElement(summary, jsonString) {
  1103.         var row = document.createElement('tr');
  1104.         row.setAttribute('data-json', jsonString);
  1105.         row.setAttribute('data-date', summary.date);
  1106.         row.setAttribute('id', 'summaryRow' + summary.date);
  1107.         row.setAttribute('class', 'summary');
  1108.         row.innerHTML = getSummaryCells(summary);
  1109.         return row;
  1110.     }
  1111.     // Get summary cells
  1112.     function getSummaryCells(summary) {
  1113.         var text = getTranslation('paymentSummaryMulti') ? getTranslation('paymentSummaryMulti') :
  1114.             'On %DATE% you have received %AMOUNT% in %COUNT% payments';
  1115.         if (summary.count <= 1) text = getTranslation('paymentSummarySingle') ? getTranslation('paymentSummarySingle') :
  1116.            'On %DATE% you have received %AMOUNT%';
  1117.        text = text.replace(/%DATE%/g, summary.date);
  1118.        text = text.replace(/%COUNT%/g, summary.count);
  1119.        text = text.replace(/%AMOUNT%/g, getReadableCoins(summary.amount));
  1120.        return '<td colspan="4"><div class="alert notifys" style="color: #fff;background-color:#7388D9;"><i class="fa fa-money"></i> ' +
  1121.             text + '</div></td>';
  1122.     }
  1123.     // Render payments
  1124.     function renderPayments(paymentsResults) {
  1125.         var $paymentsRows = $('#paymentsReport_rows');
  1126.         var lastPaymentDate = null;
  1127.         var summaryData = {
  1128.             date: null,
  1129.             time: null,
  1130.             count: 0,
  1131.             amount: 0
  1132.         };
  1133.         for (var i = 0; i < paymentsResults.length; i += 2) {
  1134.            var payment = parsePayment(paymentsResults[i + 1], paymentsResults[i]);
  1135.            var paymentJson = JSON.stringify(payment);
  1136.            var paymentElement = getPaymentRowElement(payment, paymentJson);
  1137.            var paymentDate = new Date(parseInt(payment.time) * 1000).toLocaleDateString();
  1138.            if (!lastPaymentDate || lastPaymentDate && paymentDate != lastPaymentDate) {
  1139.                summaryData = {
  1140.                    date: paymentDate,
  1141.                    time: payment.time,
  1142.                    count: 0,
  1143.                    amount: 0
  1144.                };
  1145.            }
  1146.            var existingRow = document.getElementById('paymentRow' + payment.time);
  1147.            if (existingRow && existingRow.getAttribute('data-json') !== paymentJson) {
  1148.                $(existingRow).replaceWith(getPaymentRowElement(payment, paymentJson));
  1149.            } else if (!existingRow) {
  1150.                var inserted = false;
  1151.                var rows = $paymentsRows.children().get();
  1152.                for (var f = 0; f < rows.length; f++) {
  1153.                    var pTime = parseInt(rows[f].getAttribute('data-time'));
  1154.                    if (pTime && pTime < payment.time) {
  1155.                        inserted = true;
  1156.                        $(rows[f]).before(paymentElement);
  1157.                        break;
  1158.                    }
  1159.                }
  1160.                if (!inserted) {
  1161.                    $paymentsRows.append(paymentElement);
  1162.                }
  1163.            }
  1164.  
  1165.            summaryData.count++;
  1166.            summaryData.amount += parseInt(payment.amount);
  1167.  
  1168.            var summaryJson = JSON.stringify(summaryData);
  1169.            var summaryElement = getSummaryRowElement(summaryData, summaryJson);
  1170.            var existingSummary = document.getElementById('summaryRow' + summaryData.date);
  1171.            if (existingSummary && existingSummary.getAttribute('data-json') !== summaryJson) {
  1172.                $(existingSummary).replaceWith(summaryElement);
  1173.            } else if (!existingSummary) {
  1174.                var inserted = false;
  1175.                var rows = $paymentsRows.children().get();
  1176.                for (var f = 0; f < rows.length; f++) {
  1177.                    var pTime = parseInt(rows[f].getAttribute('data-time'));
  1178.                    if (pTime && pTime === summaryData.time) {
  1179.                        inserted = true;
  1180.                        $(rows[f]).before(summaryElement);
  1181.                        break;
  1182.                    }
  1183.                }
  1184.                if (!inserted) {
  1185.                    $paymentsRows.append(summaryElement);
  1186.                }
  1187.            }
  1188.            lastPaymentDate = paymentDate;
  1189.        }
  1190.    }
  1191.    // Load more payments button
  1192.    var xhrGetPayments;
  1193.    $('#loadMorePayments').click(function () {
  1194.        if (xhrGetPayments) xhrGetPayments.abort();
  1195.        xhrGetPayments = $.ajax({
  1196.            url: api + '/get_payments',
  1197.            data: {
  1198.                time: $('#paymentsReport_rows').children().last().data('time'),
  1199.                address: address
  1200.            },
  1201.            dataType: 'json',
  1202.            cache: 'false',
  1203.            success: function (data) {
  1204.                renderPayments(data);
  1205.            }
  1206.        });
  1207.    });
  1208.  
  1209.    /**
  1210.     * Hash Profitability Calculator
  1211.     **/
  1212.  
  1213.    // Automatically update profit calculation on key press
  1214.    $('#calcHashRate').keyup(calcEstimateProfit).change(calcEstimateProfit);
  1215.    // Click on button
  1216.    $('#calcHashUnits > li > a').click(function (e) {
  1217.         e.preventDefault();
  1218.         $('#calcHashUnit').text($(this).text()).data('mul', $(this).data('mul'));
  1219.         calcEstimateProfit();
  1220.     });
  1221.     // Calculate current estimation
  1222.     function calcEstimateProfit() {
  1223.         try {
  1224.             var rateUnit = Math.pow(1000, parseInt($('#calcHashUnit').data('mul')));
  1225.             var hashRate = parseFloat($('#calcHashRate').val()) * rateUnit;
  1226.             var profit = (hashRate * 86400 / lastStats.network.difficulty) * lastStats.lastblock.reward;
  1227.             if (profit) {
  1228.                 updateText('getcoin', getReadableCoins(profit));
  1229.                 updateText('getusd', (CoinPrice.USD * getReadableCoins(profit, 2, true)).toFixed(2));
  1230.                 updateText('getbtc', (CoinPrice.BTC * getReadableCoins(profit, 2, true)).toFixed(6));
  1231.                 return;
  1232.             }
  1233.         } catch (e) {}
  1234.         updateText('calcHashAmount1', '');
  1235.         updateText('calcHashAmount2', '');
  1236.     }
  1237.     var address = getCurrentAddress();
  1238.     if (address) {
  1239.         getPayoutLevel(address);
  1240.     }
  1241.     // Get current payout level
  1242.     function getPayoutLevel(address) {
  1243.         if (!address || address == '') return;
  1244.  
  1245.         $.ajax({
  1246.             url: api + '/get_miner_payout_level',
  1247.             data: {
  1248.                 address: address
  1249.             },
  1250.             dataType: 'json',
  1251.             cache: 'false'
  1252.         }).done(function (data) {
  1253.             updateText('yourPayoutRate', (data.level));
  1254.         });
  1255.     }
  1256. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement