$(document).ready(function() { // remove old js $('script[src="js/modules/dashboard.js"]').remove(); // image replacements $('img[src$="game_monitor.png"]').replaceWith('

'); $('img[src$="support.png"]').replaceWith('

'); // head sections $('.column').each(function() { if(!$(this).parent('div').hasClass('row')) { $(this).parent('div').addClass('row').removeAttr('style'); } var columnContent = $(this).html(); if($(this).hasClass('one_two')) { $(this).replaceWith("
" + columnContent + "
"); } else if($(this).hasClass('one_fourth')) { $(this).replaceWith("
" + columnContent + "
"); } else { $(this).replaceWith("
" + columnContent + "
"); } }); // dragbox / bloc to card conversion $('.dragbox, .bloc').each(function() { var isCollapsed = false var collapseBtn = 'fa-minus'; var thisContent = $(this).find('.dragbox-content'); if($(thisContent).length > 0) { // check if dragbox has attribute "style" if(typeof $(thisContent).attr('style') !== 'undefined' && $(thisContent).attr('style') !== false) { // check if dragbox has style "display:none" if($(thisContent).attr('style').indexOf("display:none") >= 0) { isCollapsed = true var collapseBtn = 'fa-plus'; } } $(thisContent).removeClass('dragbox-content').addClass('card-body').removeAttr('style'); // check if dragbox is a link if(typeof $(thisContent).attr('onclick') !== 'undefined' && $(thisContent).attr('onclick') !== false) { // add cursor pointer style $(thisContent).css('cursor', 'pointer'); // check if link is external to change event to window.open (new window) var thisURL = $(thisContent).attr('onclick').replace("location.href='", "").replace("'", ""); if(thisURL.includes("://")) { $(thisContent).attr("onclick", "window.open('"+thisURL+"')"); } } } if(isCollapsed) { $(this).attr('class', '').addClass('card collapsed-card'); }else { $(this).attr('class', '').addClass('card'); } var boxTitle = $(this).find('h4').text(); $(this).find('h4').replaceWith("\
\

" + boxTitle + "

\
\ \
\
"); }); // padding fix $('.online_servers').parent('.card-body').addClass('p-2'); // remove old refresh elements $('.row > [id^="refreshed-"]').remove(); // hide elements before data refresh mod $('.main > .row > h0, .main > .row > br, .main > .row > #column4').addClass('d-none'); /* *** Data Refresh Mod *** */ if($('.container-fluid h0').last().length) { // get columnsettings $.get('themes/AdminLTE/dist/php/settings.php?m=dashboard&p=columnsettings', function(columnsettings){ // build server status card var serverStatusTitle = $('.container-fluid h0').last().text(); var serverSelectTitle = $('.container-fluid #column4 h3').text(); var serverSelectForm = $('.container-fluid #column4 center').html(); $('.container-fluid h0').last().remove(); $('.container-fluid #column4').remove(); // add new sections $('.content > .container-fluid').append("\
\
\
\
\
\
\
"); // add cards to new sections // console.log(columnsettings); Object.keys(columnsettings).forEach(function(key) { item = columnsettings[key]['item'] section = columnsettings[key]['section'] collapsed = columnsettings[key]['collapsed'] if(item=='item6') { $('#' + section).append(createCard(item, serverSelectTitle, serverSelectForm, collapsed)); } else if(item=='item7') { $('#' + section).append(createCard(item, serverStatusTitle, '', true, collapsed)); } else { $('#' + section).append(createCard(item, '', '', true, collapsed)); } }) // define regexes var axrgx = /jQuery\.ajax\(\{(.*?)\}\)\;(.*?)\}\)\;/sg; // get all ajax definitions var urlrgx = /url\: \"(.*?)\"/m; // get url from ajax object var destrgx = /\$\(\'(.*?)\'\)\.html/; // get destination from ajax object // get complete js content var embjs = $('.main > script:not([src])').html(); $('.main > script:not([src])').remove(); var refreshDashboardServerInterval; var aradded = []; if(axrgx.test(embjs)) { embjs.match(axrgx).forEach((element, index) => { var url = element.match(urlrgx)[1]; var dest = element.match(destrgx)[1]; if(!aradded.includes(url)) { if(url.toLowerCase().indexOf("remote_server_id") >= 0) { aradded.push(url); function refreshDashboardServerStats() { jQuery.ajax({ url: url, cache: false, // beforeSend: function(xhr) // { // $('a').click(function() // { // xhr.abort(); // enableCallbacks = false; // }); // }, success: function(data, textStatus) { // if (!enableCallbacks) return; updateServerStats(data); } }); } if (!refreshDashboardServerInterval) { refreshDashboardServerStats(); var refreshDashboardServerInterval = setInterval(function() { refreshDashboardServerStats(); }, 10000); } } } }); } // clear intervals on link follow $('a:not([data-widget="control-sidebar"]):not([data-widget="pushmenu"])').click(function() { if(typeof refreshServerInterval !== 'undefined') { clearInterval(refreshServerInterval); refreshServerInterval = null; } }); // Make the dashboard widgets sortable Using jquery UI var topItems = ['item1','item2','item3','item4','item5']; $('.connectedSortable').sortable( { placeholder: 'sort-highlight', connectWith: '.connectedSortable', handle: '.card-header', forcePlaceholderSize: true, zIndex: 999999, stop: function(event, ui){ // check if element is on a valid location if(topItems.includes($(ui['item'][0]).attr('id'))) { // item is in top row - check if its in .main card if($(ui['item'][0]).parents('.main').length==1) { updateNewWidgetData(); }else { toastr.warning('Top Elements only in Top Region allowed', 'Warning'); event.preventDefault(); } }else { if($(ui['item'][0]).parents('.main').length==0) { updateNewWidgetData(); }else { toastr.warning('Bottom Elements only in Bottom Region allowed', 'Warning'); event.preventDefault(); } } } }); $('.connectedSortable .card-header').css('cursor', 'move'); // update widget data when collapsing card $('[data-card-widget="collapse"]').click(function() { setTimeout(function() { updateNewWidgetData(); }, 1000); }) // loading var loading = '\
\
\ Loading...\
\
'; $('[id^=refreshed]').html(loading); } ); } // initial load (load faster on startup) animateProgressBars(); }); $(window).load(function () { //welcome title if($(".main > div:not(.row)").length) { $(".main > div:not(.row)").addClass('card-body').wrap('
'); $(".main .welcome-card").prependTo('section.content > .container-fluid'); } }); // $.fn.inlineStyle = function(prop) // { // var thisProb = this.prop("style")[$.camelCase(prop)]; // if(thisProb !== undefined || thisProb!='') // { // return thisProb; // } // else // { // return false; // } // }; function updateNewWidgetData() { var items = []; $('section.connectedSortable').each(function() { var columnId = $(this).attr('id'); $(this).find('.card').each(function(order) { var collapsed = 0; if($(this).hasClass('collapsed-card')) { collapsed = 1; } //Create Item object for current panel var item = { id: $(this).attr('id'), collapsed: collapsed, order : order, column: columnId }; //Push item object into items array items.push(item); }); }); //Assign items array to sortorder JSON variable var sortorder = {items: items}; var successOrderChange = true; //Pass sortorder variable to server using ajax to save state (OGP sections) $.post('home.php?m=dashboard&p=updateWidgets', 'data='+$.toJSON(sortorder), function(response) { var checkRespone = $(response).filter('section.content'); if(response.indexOf("success") < 0) { successOrderChange = false; // toastr.error('Failed to update widget order'); }else { // toastr.success('Successfully update widget order'); } }); //Pass sortorder variable to server using ajax to save state (Theme sections) $.post('themes/AdminLTE/dist/php/settings.php?m=dashboard&p=updatecolumnsettings', 'data='+$.toJSON(sortorder), function(response) { var checkRespone = $(response).filter('section.content'); if(response.indexOf("success") < 0) { successOrderChange = false; // toastr.error('Failed to update widget order'); }else { // toastr.success('Successfully update widget order'); } }); if(successOrderChange) { toastr.success('Successfully update widget order'); }else { toastr.error('Failed to update widget order'); } } function createCard(id, title, body, refresh = false, collapsed = 0) { var addBody = '' var collapsedClass = '' var maximize = '' if(refresh) { addBody = " id='refreshed'" } if(collapsed==1) { collapsedClass = ' collapsed-card' } //add maximize button if(id=='item8') { maximize = ''; } return "\
\
\

" + title + "

\
\ " + maximize + "\ \
\
\
\ " + body + "\
\
\ "; } function updateServerStats(html) { var dataOut = ''; var brExp = //i; // System Uptime var data = clone(html); var sysUptime = $(data).filter('#column4:nth-child(1)'); if($(sysUptime).length > 0) { var sysUptimeTitle = $(sysUptime).find('h4').html(); var sysUptimeContent = ''; var sysUptimeSplit = $(sysUptime).find('b').html().split(brExp); $.each(sysUptimeSplit, function(i, element) { sysUptimeContent += '

'+element.trim()+'

'; }); $('#item9 .card-title').text(sysUptimeTitle); $('#item9 .card-body').html(sysUptimeContent); } // CPU Usage var data = clone(html); var cpu = $(data).filter('#column4:nth-child(2)'); if($(cpu).length > 0) { var progressCPU = ''; var cpuTitle = $(cpu).find('h4').text(); $(cpu).find('.dragbox-content').children('b').each(function() { var cpuName = $(this).text().split(':')[0].trim(); var cpuLoad = $(this).text().split(':')[1].trim().split(' ')[0].trim(); var cpuLoad = $(this).text().split(':')[1].trim().split(' ')[0].trim(); progressCPU += '\
\ '+cpuName+'\ '+cpuLoad+' % / 100 %\
\
\
\
\ '; }); dataOut += progressCPU } // RAM Usage var data = clone(html); var ram = $(data).filter('#column4:nth-child(3)'); if($(ram).length > 0) { var ramTitle = $(ram).find('h4').text(); var ram = $(ram).find('.dragbox-content').html(); var ramUsageSplit = ram.split(':')[1].split(' '); var ramUsage = ramUsageSplit[1] + ' ' + ramUsageSplit[2]; var ramTotal = ramUsageSplit[4] + ' ' + ramUsageSplit[5].split('<')[0]; var ramPerc = $(ram).find('.progress-bar').attr('data'); var progressRam = '\
\ '+ramTitle+'\ '+ramUsage+' / '+ramTotal+'\
\
\
\
\ '; dataOut += progressRam } // Storage Space var data = clone(html); var storage = $(data).filter('#column4:nth-child(4)'); if($(storage).length > 0) { var spaceTitle = $(storage).find('h4').text(); var storage = $(storage).find('.dragbox-content').html(); var storagelines = storage.split(brExp); var spaceTotal = storagelines[0].split(':')[1].trim(); var spaceUsed = storagelines[1].split(':')[1].trim().split('(')[0].trim(); var spaceUsedPerc = storagelines[1].match(/\((.*?)\)/)[1]; var spaceFree = storagelines[2].split(':')[2].trim().split('<')[0].trim(); var progressStorage = '\
\ '+spaceTitle+'\ '+spaceUsed+' / '+spaceTotal+'\
\
\
\
\ '; dataOut += progressStorage } // put all informations into card $('#item7 .card-body').html(dataOut); // Process Monitor var procMonTitle = $(data).filter('#column4:nth-child(5)').find('h4').text(); var procMonContent = $(data).filter('#column4:nth-child(5)').find('.dragbox-content').html(); $('#item8 .card-title').text(procMonTitle); $('#item8 .card-body').html(procMonContent); } function clone(obj) { if (null == obj || "object" != typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; } return copy; } function animateProgressBars() { // image replacement $('img[src$="magnifglass.png"]').replaceWith(''); // online servers $('#item2 .card-body > br').remove(); $('#item2 .card-body > center br').replaceWith(' '); $('.currently-online').addClass('table table-striped table-sm'); $('.currently-online td').removeAttr('style'); $('.currently-online > tbody > tr:first-of-type > td').replaceWith(''+$('.currently-online > tbody > tr:first-of-type td').text()+''); if(localStorage.getItem('themeServerstats')=='remove') { $('.online_servers [id^=refreshed]').each(function() { var thisLink = $(this).find('.name').find('a').attr('href'); $(this).addClass('btn btn-sm btn-primary').attr('onclick', 'location.href=\''+thisLink+'\''); }); }else { if($('#item2 .card-body').length>0) { if(!$('#item2 .card-body').hasClass('onlineServers')) { $('#item2 .card-body').addClass('onlineServers p-2'); } // get server satistics, update title and remove statistics if($('#item2 .card-body').find('center').length>0) { var serverStats = $('#item2 .card-body').find('center').text(); const serversRegex = / (\d*?)\/(\d*?) /m; if(serversRegex.test(serverStats)) { $('#item2 .card-title').append(' (' + serverStats.match(serversRegex)[1] + '/' + serverStats.match(serversRegex)[2] + ' ' + langConsts['OGP_LANG_server'] + ')'); $('#item2 .card-body').find('center').remove(); } } if($('.onlineServers').data('init')===undefined) { $('.onlineServers').attr('data-init', 'load'); if($('#item2 .onlineServers > p').length>0) { $('#item2 .onlineServers > p').addClass('px-2'); } var loading = '\
\
\
\ Loading...\
\
\
'; // add loader if($('#item2 .onlineServers > b').length>0) { $('#item2 .onlineServers > b').replaceWith(loading); }else { $('.onlineServers').prepend(loading); } if(localStorage.getItem('themeServerstats')=='activate') { // initial load serverlist loadServerList(); // setInterval for ServerList Refresh setInterval(function() { loadServerList(); }, 60000); } } } if($('table.online_servers').length>0) { // remove old table $('table.online_servers').remove(); } } } function loadServerList() { // initial load serverlist $.ajax({ cache: false, async: true, type: 'GET', url: 'themes/AdminLTE/dist/php/settings.php?m=dashboard&p=listservers', success: function(html) { // update server boxes $('.listServers').html(html); // init tooltips $('[data-toggle="tooltip"]').tooltip(); } }); }