Panel/themes/AdminLTE/dist/js/main.js
2025-09-11 13:29:15 -04:00

1513 lines
43 KiB
JavaScript

$(document).ready(function()
{
/* *** Initializations *** */
toastr.options = {
"debug": false,
"positionClass": "toast-bottom-right",
"onclick": null,
"fadeIn": 300,
"fadeOut": 1000,
"timeOut": 5000,
"extendedTimeOut": 1000,
"progressBar": true,
toastClass: 'elevation-4',
}
bsCustomFileInput.init();
var d = new Date();
/* *** Cutting Title *** */
var headTitle = document.getElementsByTagName("title")[0].innerHTML;
if(headTitle.includes("["))
{
headTitle = headTitle.substring(0, headTitle.lastIndexOf(" [") + 1);
}
// $('.brand-text').text(headTitle);
/* *** Replacements *** */
$('a.btn').each(function()
{
// Remove all "<<" from Links
var thisText = $(this).text();
if(thisText.includes("<"))
{
$(this).text(thisText.substring(thisText.lastIndexOf("<") + 1, thisText.length).trim()).prepend('<i class="fas fa-angle-double-left mr-1"></i>');
}
});
$('input[type="submit"]').each(function()
{
// Remove all "<<" from Buttons
var thisValue = $(this).val();
if(thisValue.includes("<"))
{
$(this).val(thisValue.substring(thisValue.lastIndexOf("<") + 1, thisValue.length).trim());
}
});
$('img[src="modules/addonsmanager/loading.gif"]').replaceWith('<i class="fas fa-spinner fa-spin loadinggif"></i>');
$('img[src="images/online.png"], img[src$="icon_online.gif"]').replaceWith('<i class="fa fa-circle text-success"></i>');
$('img[src="images/offline.png"], img[src$="icon_offline.gif"]').replaceWith('<i class="fa fa-circle text-danger"></i>');
$('img[src="images/magnifglass.png"]').replaceWith('<i class="fas fa-search"></i>');
$('[src="modules/administration/images/remove.gif"]').attr('src', 'themes/AdminLTE/dist/img/remove-icon.png').css('max-width', '1rem').css('margin-bottom', '-2px').addClass('mx-1');
/* *** Menu: Tickets Num *** */
if($('script[src="js/modules/tickets_global.js"]').length)
{
$('script[src="js/modules/tickets_global.js"]').remove();
$.getJSON("home.php?m=tickets&p=notifications&type=cleared", function(data)
{
if(data['notificationCount'] > 0)
{
$('.nav-link[href="?m=tickets"]').append('<span class="badge badge-danger right">' + data['notificationCount'] + '</span>');
}
});
}
/* *** Messages *** */
var allMessages = ''
var errMessages = ''
// error messages
if($('.failure:not(#errorHeader), .ticketError').length > 0)
{
// only replace failure message if main has class X
if($('.main').hasClass('game-monitor'))
{
$(".failure:not(#errorHeader), .ticketError").each(function ()
{
var failureText = $(this).text().trim();
if(failureText !== "" && isNaN(failureText))
{
$(this).replaceWith('<div class="callout callout-danger">'+$(this).text().trim()+'</div>');
}
});
}else
{
var errt = [];
$(".failure:not(#errorHeader), .ticketError").each(function ()
{
var failureText = $(this).text().trim();
if(failureText !== "" && isNaN(failureText))
{
errt.push(failureText);
}
});
if(errt.length > 0)
{
if(errt.length > 1)
{
errMessages = '<ul><li>'+errt.join("</li><li>")+'</li></ul>';
}else
{
errMessages = '<p>'+errt[0]+'</p>';
}
allMessages += '<div class="callout callout-danger col-12">'+errMessages+'</div>';
}
}
}
// refresh message
if($('#refresh-manual').length > 0)
{
allMessages += '<div class="callout callout-info col-12">'+$('#refresh-manual').html()+'</div>';
}
// remove old error holders
$('.failure, .ticketErrorHolder, #refresh-manual').remove();
/* *** Invalid Image replacement *** */
$('.main img, .main input[type="image"]').error(function()
{
$(this).unbind("error").attr("src", "themes/AdminLTE/dist/img/image_not_found.png").attr("style", "max-width:250px;").removeAttr('height');
});
/* *** Theme Changer *** */
$('#themeChanger').change(function()
{
themeChanger($(this).val(), true);
});
/* *** Login Page Mod *** */
if(location.pathname.substring(location.pathname.length-1) == "/" || location.pathname.substring(location.pathname.length-9) == "index.php")
{
// get recaptcha
if ($('.g-recaptcha').length > 0)
{
var recaptcha_pubkey = $('.g-recaptcha').attr('data-sitekey');
var recaptcha = "<div class='text-center' style='margin-bottom:10px'><script src='//www.google.com/recaptcha/api.js'></script><div style='display: inline-block;' class='g-recaptcha' data-sitekey='"+recaptcha_pubkey+"' data-theme='dark'></div></div>";
}
else
{
var recaptcha = "";
}
// login form mod
if($('form[name="login_form"]').length > 0)
{
// clear possible storage vars
clearLocalStorageItems();
$('select[name=lang]').addClass('form-control');
var title = $('.main h4').text();
var lang = $('[name="login_form"] tr:nth-child(1) td:first-child').text().replace(':', '');
var user = $('[name="login_form"] tr:nth-child(2) td:first-child').text().replace(':', '');
var pass = $('[name="login_form"] tr:nth-child(3) td:first-child').text().replace(':', '');
var forgot = $('[href="?m=lostpwd"]').text();
var lbtn = $('[name="login"]').val();
var langinput = $('[name="lang"]').parent('td').html();
if($('[href="?m=register&p=form"]').length > 0)
{
var bottomLinks = '\
<p class="mb-1">\
<a href="?m=lostpwd">'+forgot+'</a>\
</p>\
<p class="mb-0">\
<a href="?m=register&p=form">'+$('[href="?m=register&p=form"] > span').text()+'</a>\
</p>\
';
}
else
{
var bottomLinks = '\
<p class="mb-0">\
<a href="?m=lostpwd">'+forgot+'</a>\
</p>\
';
}
new_form = '\
<form action="index.php" name="login_form" method="post" class="form-group">\
<div class="input-group mb-3">\
<input type="text" name="ulogin" id="ulogin" class="form-control" placeholder="'+user+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-envelope"></span>\
</div>\
</div>\
</div>\
<div class="input-group mb-3">\
<input type="password" name="upassword" class="form-control" placeholder="'+pass+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-lock"></span>\
</div>\
</div>\
</div>\
<div class="input-group mb-3">\
'+langinput+'\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-language"></span>\
</div>\
</div>\
</div>\
'+recaptcha+'\
<div class="row">\
<div class="col-12">\
<input type="submit" name="login" class="btn btn-primary btn-block" value="'+lbtn+'" \>\
</div>\
</div>\
</form>\
'+bottomLinks+'\
';
$('select[name=lang] > option:first-child').replaceWith('<option value="-" selected="selected">'+lang+'</option>');
}
// *** Lost Password Form ***
if(window.location.href.indexOf('?m=lostpwd') > -1)
{
var title = $('.content-header h2').text();
if($('.main form').length==0)
{
// *** Error Message ***
var err = $('.main strong').text();
var err_msg = [];
$('.main p').each(function()
{
err_msg.push($(this).html());
});
var thisErrOut = '';
if(allMessages=='')
{
thisErrOut = '<div class="callout callout-info"><strong>'+err+'</strong><ul><li>'+err_msg.join("</li><li>")+'</li></ul></div>';
}
new_form = '\
' + thisErrOut + '\
<p class="mb-0">\
<a href="?m=lostpwd">Back</a>\
</p>\
';
}
else
{
var alert = "";
if ($('.main td > p').length > 0)
{
var alertClass = 'success';
if($('.main td > p').attr('style')=='color: red;')
{
var alertClass = 'danger';
}
var errt = [];
$('.main td > p').each(function()
{
errt.push($(this).text());
});
if(errt)
{
var alert = '<div class="row"><div class="callout callout-'+alertClass+' col-12"><ul><li>'+errt.join("</li><li>")+'</li></ul></div></div>';
}
}
var email = $('.main label[for="email_address"]').text();
var lbtn = $('td > [type="submit"]').val();
var bbtn = $('[action="index.php"] > input[type="submit"]').val();
new_form = '\
'+alert+'\
<form action="?m=lostpwd" method="post" class="form-group">\
<div class="input-group mb-3">\
<input type="text" name="email_address" class="form-control" placeholder="Email">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-envelope"></span>\
</div>\
</div>\
</div>\
<div class="row">\
<div class="col-12">\
<input type="submit" class="btn btn-primary btn-block submit-button" value="'+lbtn+'" \>\
</div>\
</div>\
</form>\
<p class="mb-0">\
<a href="?">'+bbtn+'</a>\
</p>\
';
}
}
// register form mod
if($('form[action^="?m=register"]').length > 0)
{
var title = $('.main h2').text();
var user = $('[name="loginForm"] label[for="login_name"]').text().replace(':', '');
var pass = $('[name="loginForm"] label[for="users_passwd"]').text().replace(':', '');
var vpass = $('[name="loginForm"] label[for="users_cpasswd"]').text().replace(':', '');
var fname = $('[name="loginForm"] label[for="users_fname"]').text().replace(':', '');
var lname = $('[name="loginForm"] label[for="users_lname"]').text().replace(':', '');
var email = $('[name="loginForm"] label[for="users_email"]').text().replace(':', '');
var ucv = $('[name="users_comment"]').val();
var sbtn = $('[name="Submit"]').val();
var errout = "";
if($('.main > table').length > 0)
{
var errt = [];
$(".main > table tr").each(function ()
{
var tdtxt = $(this).find('td').text();
if(!tdtxt.includes('<img'))
{
errt.push(tdtxt);
}
})
}
if(errt)
{
errout = '<div class="callout callout-danger col-12"><ul><li>'+errt.join("</li><li>")+'</li></ul></div>';
}
new_form = '\
' + errout + '\
<form action="?m=register&p=exec" name="loginForm" method="post" class="form-group">\
<div class="input-group mb-3">\
<input type="text" name="login_name" id="login_name" class="form-control" placeholder="'+user+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-user"></span>\
</div>\
</div>\
</div>\
<div class="input-group mb-3">\
<input type="password" name="users_passwd" id="users_passwd" class="form-control" placeholder="'+pass+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-lock"></span>\
</div>\
</div>\
</div>\
<div class="input-group mb-3">\
<input type="password" name="users_cpasswd" id="users_cpasswd" class="form-control" placeholder="'+vpass+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-lock"></span>\
</div>\
</div>\
</div>\
<div class="input-group mb-3">\
<input type="text" name="users_fname" id="users_fname" class="form-control" placeholder="'+fname+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-user"></span>\
</div>\
</div>\
</div>\
<div class="input-group mb-3">\
<input type="text" name="users_lname" id="users_lname" class="form-control" placeholder="'+lname+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-user"></span>\
</div>\
</div>\
</div>\
<div class="input-group mb-3">\
<input type="text" name="users_email" id="users_email" class="form-control" placeholder="'+email+'">\
<div class="input-group-append">\
<div class="input-group-text">\
<span class="fas fa-envelope"></span>\
</div>\
</div>\
</div>\
<input type="hidden" name="users_comment" value="'+ucv+'" class="form-control">\
'+recaptcha+'\
<div class="row">\
<div class="col-12">\
<input type="submit" name="Submit" class="btn btn-primary btn-block" value="'+sbtn+'" \>\
</div>\
</div>\
</form>\
';
}
var lbm = ''
if(title !== undefined)
{
if (title.length > 0)
{
lbm = '<p class="login-box-msg">' + title + '</p>';
}
}
var boxClass = 'login-box';
var headerContent = '\
<!--<h1>' + headTitle + '</h1>-->\
<img src="themes/AdminLTE/dist/img/ogp_logo_dark.svg" class="brand-image">\
';
if(new_form !== undefined)
{
$('body').addClass('login-page');
}
if(allMessages && !errMessages && new_form === undefined)
{
var new_form = '<h1 class="text-center"><i class="fas fa-spinner fa-spin"></i></h1>'
}
else if(new_form === undefined)
{
boxClass = 'col-md-8 col-12 main';
headerContent = '<h4>' + $('.main > h2').text() + '</h4>';
$('body').removeClass('login-page');
$('.main > h2').remove();
var new_form = $('.main').html();
}
// menu links
var allLinks = [];
$('.menu a').each(function()
{
allLinks.push('<li class="nav-item d-sm-inline-block"><a class="nav-link" href="'+$(this).attr('href')+'">'+$(this).find('span').text()+'</a></li>');
});
// Maintenance Hook
$.ajax({
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=check&v=maintenance',
dataType: 'json',
success: function(data)
{
if(data['maintenance_mode'] > 0)
{
toastr.info(data['maintenance_message'], data['maintenance_title'], {
"timeOut": 0,
"extendedTimeOut": 0,
"preventDuplicates": true,
"disableTimeOut" : true,
"closeButton": true,
});
toastr.error('', langConsts['OGP_LANG_maintenance_mode_on'], {
"timeOut": 0,
"extendedTimeOut": 0,
"preventDuplicates": true,
"disableTimeOut" : true,
"closeButton": true,
});
}
}
});
var new_body = '\
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">\
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">\
<span class="navbar-toggler-icon"></span>\
</button>\
<div class="collapse navbar-collapse" id="navbarSupportedContent">\
<ul class="navbar-nav mr-auto">\
'+allLinks.join(' ')+'\
</ul>\
</div>\
</nav>\
<div class="mx-auto mt-3 ' + boxClass + '">\
' + allMessages + '\
<div class="card card-outline card-primary">\
<div class="card-header text-center">\
' + headerContent + '\
</div>\
<div class="card-body">\
' + lbm + '\
' + new_form + '\
</div>\
</div>\
</div>\
';
// apply new body
var preLoader = $('.preloader');
$('body').empty().html(preLoader);
$('body').append(new_body);
// navbar toggler z-index hook
$('.navbar-toggler').click(function()
{
console.log("css: " + $(this).parent('.navbar').css('z-index'));
if($(this).parent('.navbar').css('z-index') == 'auto')
{
$(this).parent('.navbar').css('z-index', 9999);
}else
{
$(this).parent('.navbar').css('z-index', '');
}
});
}
else
{
/* *** Messages Replacement *** */
$('section.content > .container-fluid').prepend(allMessages);
/* *** Remove CSS Files *** */
$('link[href="css/global.css"]').remove();
$('link[href="js/bootstrap/css/bootstrap-combined.min.css"]').remove();
/* *** Removing Chars from Links *** */
$('a:not(.user_menu_link), a span').each(function(){
$(this).html($(this).html().replace('[','').replace(']',''));
});
/* *** Table Styles *** */
$('table:not(".online_servers")').each(function()
{
$(this).addClass('table table-striped table-sm').removeAttr('style').wrap('<div class="table-responsive"></div>');
// add top border none for first row if table has no head
if($(this).find('th').length==0)
{
$(this).find('tr').first().find('td').css('border-top', 'none');
}
});
$('table .first_row > td').each(function()
{
$(this).replaceWith('<th>'+$(this).html()+'</th>');
});
/* *** Root Links to Buttons *** */
$('section > div > a').addClass('btn btn-primary');
/* *** Add Header to Content *** */
// var currentTitle = $('section > div > h2').first();
var currentTitle = $('.main > h2').first();
if(currentTitle.length)
{
var addHeader = ' \
<div class="content-header pb-0"> \
<div class="container-fluid"> \
<div class="row mb-2"> \
<div class="col-12"> \
<h1 class="m-0">' + $(currentTitle).text() + '</h1> \
</div> \
</div> \
</div> \
</div> \
';
$(currentTitle).remove();
$('body > .wrapper > .content-wrapper').prepend(addHeader);
}
/* *** Forms *** */
var buttons = $('button:not(".btn-tool"), input[type="button"], input[type="submit"], input[type="SUBMIT"], input[type="reset"], [href^="?m=gamemanager&p=update&update=refresh"], .main [href="?m=modulemanager&p=update"], .main [href="?m=simple-billing&p=shop"], .main [href^="home.php?m=TS3Admin&changevServer"], .main [href^="?m=gamemanager&p=game_monitor&home_id="], .serverIdToggle, .main [href="?m=settings&p=api_hosts"]');
$(buttons).addClass('btn btn-sm btn-primary');
var inputs = $('input, textarea, select').not('input[type=button], input[type="submit"], input[type="SUBMIT"], input[type=reset], input[type=radio], input[type=checkbox], input[type=image], input[type="file"]');
$(inputs).addClass('form-control').removeAttr('style');
/* *** Remove unwanted fixed Styles *** */
$('[style]').css('width', '').css('float', '');
$('.clear').remove();
$('pre').removeAttr('style');
/* *** MENU *** */
// original menu is nested in divs. remove them
var menu = $('.menu > ul').html();
$('.menu-bg').remove();
$('.nav-sidebar').html(menu);
$('.menu ul[id^=submenu] span').each(function()
{
var img_url = $(this).attr('data-icon_path');
$(this).before("<img src='"+img_url+"'/>");
});
// tree class for all ul elements
$('.nav-sidebar ul').removeAttr('id').addClass('nav').addClass('nav-treeview');
$('.nav-sidebar li').each(function()
{
var tli = $(this);
// item class for all li elements
$(tli).addClass('nav-item');
// check if element has submenu and add dropdown icon
if($(tli).has('ul').length)
{
$(tli).children('a').children('span').append('<i class="right text-sm fas fa-angle-left"></i>');
}
// check all nav links and add active/selected state
$(tli).find('a').each(function()
{
// links need nav-link class
var ta = $(this);
$(ta).addClass('nav-link text-truncate');
// check if current link has classes
var thisClass = $(ta).attr('class');
if(thisClass !== undefined)
{
// check if a class contains selected to set the element active/open
if(thisClass.includes('selected'))
{
$(tli).addClass('menu-open');
$(ta).addClass('active');
}
}
});
// Replace all span with paragraphs
$(tli).find('span').each(function()
{
// check if span has img attribute and add it before paragraph
var checkImage = $(this).attr('data-icon_path');
if(checkImage !== undefined)
{
$(this).replaceWith('<img class="nav-icon" src="'+checkImage+'"/><p>' + $(this).html() + '</p>');
}else
{
$(this).replaceWith('<p>' + $(this).html() + '</p>');
}
});
});
// Add Default Icon to each Link
$('.nav-sidebar .nav-link').each(function()
{
// check if link contains paragraph
if($(this).find('p').length==0)
{
// fix missing paragraph
$(this).html('<p>'+$(this).html()+'</p>');
}
// check if nav-link has icon missing
if($(this).find('img').length==0)
{
if($(this).parents('.nav-item').hasClass('osIcon'))
{
// add OS icon
if($(this).parents('.osIcon').attr('class').includes('linux'))
{
$(this).prepend('<i class="nav-icon text-sm fab fa-linux"></i>');
}else
{
$(this).prepend('<i class="nav-icon text-sm fab fa-windows"></i>');
}
}else
{
// Add Default Icon
$(this).prepend('<i class="nav-icon text-sm fas fa-angle-double-right"></i>');
}
}
});
// Add Submenu Icon to all Submenus
$('.nav-sidebar .nav-treeview').each(function()
{
if($(this).has('ul').length)
{
$(this).children('li').children('a').children('p').append('<i class="right fas fa-angle-left"></i>');
}
});
// Only follow Link when Menu is open
$('.nav-sidebar .nav-item > a').click(function(e)
{
if($(this).parent('li').hasClass('menu-open'))
{
e.stopPropagation();
// e.preventDefault();
window.location = $(this).attr('href');
}
});
// Remove User Element and update top User Area
var userNavItem = $('.nav-sidebar [href^="?m=user_admin&p=edit_user&user_id"]').parent('.nav-item');
var userProfileLink = $(userNavItem).children('a').attr('href');
var userId = new URLSearchParams(userProfileLink).get('user_id');
var setUserAvatar = 'themes/AdminLTE/dist/img/default-avatar.png';
if(userId)
{
if(!localStorage.getItem('avatar_' + userId))
{
var d = new Date();
// set loading avatar
setUserAvatar = 'themes/AdminLTE/dist/img/spinner.gif';
$('.user-panel > .image > img').attr('src', setUserAvatar + "?t=" + d.getTime()).removeClass('elevation-2');
// load avatar from db
$.ajax({
cache: false,
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=user&p=getavatar&userid=' + userId,
success: function(avatar)
{
var d = new Date();
// set avatar cache
localStorage.setItem('avatar_' + userId, avatar);
// set user avatar
$('.user-panel > .image > img').attr('src', avatar + "?t=" + d.getTime()).addClass('elevation-2');
// set user avatar variable
setUserAvatar = avatar;
}
});
}else
{
// set user avatar variable
setUserAvatar = localStorage.getItem('avatar_' + userId);
}
}
// set user avatar and link
$('.user-panel > .image > img').attr('src', setUserAvatar + "?t=" + d.getTime());
$('.user-panel > .info > a').text($(userNavItem).children('a').children('p').text()).attr('href', userProfileLink);
// check if user contains additional submenus
if($(userNavItem).find('.nav').find('.nav-item:not(:last-of-type)').length > 0)
{
$(userNavItem).find('.nav').find('.nav-item:not(:last-of-type)').each(function()
{
$('.main-sidebar .nav-sidebar').append('<li class="' + $(this).attr('class') + '">' + $(this).html() + '</li>');
});
}
// remove old user menu item
$(userNavItem).remove();
/* *** add missing menu highlights *** */
var checkMenuLinks = ['?m=subusers', '?m=user_admin&p=show_groups'];
checkMenuLinks.forEach((url, index) => {
if(window.location.href.indexOf(url) > -1)
{
$('.main-sidebar .nav-sidebar [href^="' + url + '"]').addClass('active');
}
});
// menu higlight fix for theme settings
if(window.location.href.indexOf('?m=settings&p=themes') > -1)
{
$('.main-sidebar .nav-sidebar [href="?m=settings"]').removeClass('active');
}
// menu higlight fix for mysql admin
if(window.location.href.indexOf('?m=mysql&p=edit') > -1)
{
$('.main-sidebar .nav-sidebar [href="?m=mysql&p=mysql_admin"]').addClass('active').parent('.nav-item').parent('.nav').parent('.nav-item').addClass('menu-open');
}
// menu higlight fix for gameserver
if(window.location.href.indexOf('admin')==-1 && window.location.href.indexOf('m=user_games')==-1 && window.location.href.indexOf('m=config_games')==-1 && window.location.href.indexOf('m=fast_download')==-1)
{
if(window.location.href.indexOf('home_id-mod_id-ip-port') > -1 || window.location.href.indexOf('home_cfg_id') > -1 || window.location.href.indexOf('&home_id') > -1)
{
// specific server (can also be logs etc)
if(window.location.href.indexOf('home_id-mod_id-ip-port') > -1)
{
var uri = window.location.href.substring(window.location.href.indexOf('home_id-mod_id-ip-port='));
// check if uri contains other parameters
if(uri.includes('&'))
{
// cut uri before next parameter
uri = uri.substring(0, uri.lastIndexOf("&"));
}
uri = 'href$="'+uri+'"';
}
// all servers by config
else if(window.location.href.indexOf('home_cfg_id') > -1)
{
var uri = window.location.href.substring(window.location.href.indexOf('?'));
uri = 'href$="'+uri+'"';
}
// specific server by home_id
else if(window.location.href.indexOf('home_id') > -1)
{
const urlParams = new URLSearchParams(window.location.search);
var homeId = urlParams.get('home_id');
var uri = '?m=gamemanager&p=game_monitor&home_id-mod_id-ip-port='+homeId+'-';
uri = 'href^="'+uri+'"';
}
$('.nav-sidebar .active').removeClass('active');
$('.nav-sidebar .nav-link['+uri+']').addClass('active');
if(window.location.href.indexOf('home_id-mod_id-ip-port') > -1 || window.location.href.indexOf('home_cfg_id') > -1 || window.location.href.indexOf('home_id') > -1)
{
$('.nav-sidebar .nav-link['+uri+']').parents('.nav-item').addClass('menu-open');
}
}
}
/* *** Pagination *** */
$('#pagination').each(function()
{
// remove empty paginations
if($(this).html().length==0)
{
$(this).remove();
}else
{
$(this).replaceWith('<ul class="pagination justify-content-center mt-3 mb-0">'+$(this).html()+'</ul>');
var pm = $('.pagination');
var ps = $(pm).find('[class$="_paginationStart"]');
var pp = $(pm).find('[class$="_paginationPages"]');
var pe = $(pm).find('[class$="_paginationEnd"]');
if($(ps).length)
{
$(ps).find('a').each(function()
{
var tl = $(this).attr('href');
var tc = $(this).text();
$(pm).append('<li class="page-item"><a class="page-link" href="'+tl+'">'+tc+'</a></li>');
});
if($(ps).find('span').length)
{
$(pm).append('<li class="page-item"><a class="page-link">...</a></li>');
}
$(ps).remove();
}
$(pp).find('a').each(function()
{
var tl = $(this).attr('href');
var tc = $(this).text().replace('[','').replace(']','');
if($(this).is('[class$="_currentPageLink"]'))
{
$(pm).append('<li class="page-item active"><a class="page-link" href="'+tl+'">'+tc+'</a></li>');
}else
{
$(pm).append('<li class="page-item"><a class="page-link" href="'+tl+'">'+tc+'</a></li>');
}
});
$(pp).remove();
if($(pe).length)
{
if($(pe).find('span').length)
{
$(pm).append('<li class="page-item"><a class="page-link">...</a></li>');
}
$(pe).find('a').each(function()
{
var tl = $(this).attr('href');
var tc = $(this).text();
$(pm).append('<li class="page-item"><a class="page-link" href="'+tl+'">'+tc+'</a></li>');
});
$(pe).remove();
}
}
});
/* *** Message Replacement *** */
var msgReplBodySkip = ['services', 'simple-billing'];
var skipMsgRepl = false;
for(i = 0; i < msgReplBodySkip.length; i++)
{
if($('.main').hasClass(msgReplBodySkip[i]))
{
skipMsgRepl = true;
}
}
$('.success, .warning, .error, #refresh-manual').each(function()
{
if(!$('.main').hasClass('services'))
{
if($(this).hasClass('success'))
{
var thisClass = 'success';
}
else if($(this).hasClass('warning'))
{
var thisClass = 'warning';
}
else if($(this).hasClass('error'))
{
var thisClass = 'error';
}
else if($(this).is('#refresh-manual'))
{
var thisClass = 'info';
}
if(!skipMsgRepl)
{
$(this).replaceWith('<div class="callout callout-'+thisClass+'"><p>'+$(this).html()+'</p></div>');
}else
{
$(this).addClass('text-' + thisClass);
}
}
});
/* *** Footer Mod *** */
$('.main-footer .OGPVersionArea').addClass('d-none');
$('.main-footer a').attr('target', '_blank').addClass('text-dark');
$('.main-footer .footer').html($('.main-footer .footer').html().replace("Theme - ", "Theme for OGP by <a href='https://www.ondsen.ch' target='_blank' class='text-dark'>oNdsen</a> - "))
$('.main-footer .footer.center').removeClass('center');
$('.main-footer .OGPVersionArea .version').remove()
$('.main-footer .OGPVersionArea').removeClass('inline-block').addClass('d-inline-block');
$('.main-footer .footer > br').last().remove()
}
/* *** Get Theme Settings *** */
// check if theme cache is set
if(!localStorage.getItem('theme'))
{
// load theme settings from db
$.ajax({
cache: false,
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=theme',
dataType: 'json',
success: function(theme)
{
// create theme cache
localStorage.setItem('theme', theme);
// change theme
themeChanger(theme);
}
});
}else
{
// change theme
themeChanger(localStorage.getItem('theme'));
}
// fill theme changer options
var themeOptions = ['dark','light','mixed']
themeOptions.forEach(function(t)
{
if(localStorage.getItem('theme')==t)
{
$('#themeChanger').append('<option selected>' + t + '</option>');
}else
{
$('#themeChanger').append('<option>' + t + '</option>');
}
});
/* *** Get ThemeNavWidth Setting *** */
if(!localStorage.getItem('themeNavWidth'))
{
// load themeNavWidth settings from db
$.ajax({
cache: false,
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=themeNavWidth',
dataType: 'json',
success: function(themeNavWidth)
{
// create themeNavWidth cache
localStorage.setItem('themeNavWidth', themeNavWidth);
// set themeNavWidth
setNavWidth(themeNavWidth);
}
});
}else
{
// set themeNavWidth
setNavWidth(localStorage.getItem('themeNavWidth'));
}
/* *** Get Theme Logo Settings *** */
// check if theme logo cache is set
if(!localStorage.getItem('themeLogo'))
{
// load themeLogo settings from db
$.ajax({
cache: false,
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=themeLogo',
dataType: 'json',
success: function(themeLogo)
{
if(themeLogo!='0')
{
// create themeLogo cache
localStorage.setItem('themeLogo', themeLogo);
var d = new Date();
// set themeLogo
$('img.brand-image').attr('src', localStorage.getItem('themeLogo') + "?" + d.getTime());
}
}
});
}else
{
// check if file exists and then apply themeLogo
$.get(localStorage.getItem('themeLogo')).done(function()
{
var d = new Date();
// set themeLogo
$('img.brand-image').attr('src', localStorage.getItem('themeLogo') + "?" + d.getTime());
});
}
/* *** Get themeServerstats Setting *** */
if(!localStorage.getItem('themeServerstats'))
{
// load themeServerstats settings from db
$.ajax({
cache: false,
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=themeServerstats',
success: function(themeServerstats)
{
// create themeServerstats cache
localStorage.setItem('themeServerstats', themeServerstats);
}
});
}
/* *** Avatar Upload *** */
$('input[type=file]#userAvatar').change(function()
{
var userId = new URLSearchParams(userProfileLink).get('user_id');
$(this).simpleUpload('themes/AdminLTE/dist/php/settings.php?m=user&p=setavatar&userid=' + userId, {
allowedExts: ["jpg", "jpeg", "jpe", "jif", "jfif", "jfi", "png", "gif"],
allowedTypes: ["image/pjpeg", "image/jpeg", "image/png", "image/x-png", "image/gif", "image/x-gif"],
maxFileSize: 5242880, // 5mb in bytes
limit: 1,
start: function()
{
toastr.info('Avatar Upload initiated');
},
success: function(data)
{
var jsonData = $.parseJSON(data);
if(jsonData['code']=="success")
{
$.ajax({
url: jsonData['data'],
type: 'HEAD',
error: function()
{
toastr.error('Error: Uploaded File not found');
},
success: function()
{
var d = new Date();
// overwrite avatar cache
localStorage.setItem('avatar_' + userId, jsonData['data']);
// launch success toastr
toastr.success('Successfully uploaded new Avatar');
// set user avatar
$('.user-panel > .image > img').attr('src', jsonData['data'] + "?t=" + d.getTime());
}
});
}else
{
toastr.error(jsonData['data']);
}
},
error: function(error)
{
toastr.error('Error: ' + error);
}
});
});
/* *** File Style Hack *** */
$.fn.input_file_styling = function()
{
var totalFileInputs = 1
$('.main input[type="file"]').each(function()
{
if($(this).parent().hasClass('custom-file')==false)
{
if(!$(this).is('[id]'))
{
// add id to element
$(this).attr('id', 'file-'+totalFileInputs);
}
$(this).css('display', 'none').wrap('<div class="custom-file" style="width:200px">');
$(this).parent('.custom-file').append('<label class="custom-file-label" for="'+$(this).attr('id')+'">Select file</label>');
}
totalFileInputs++;
});
// label text fix
$(document).on('change', ':file', function()
{
numFiles = $(this).get(0).files ? $(this).get(0).files.length : 1,
label = $(this).val().replace(/\\/g, '/').replace(/.*\//, '');
$(this).next('label').text(label);
});
}
// Init Call of the Function
$.fn.input_file_styling();
// Restyle after Adding a File Input
$('#add_file_attachment').click(function()
{
setTimeout($.fn.input_file_styling, 1);
});
/* *** Tooltip Replacement *** */
$('.main .image-tip').each(function()
{
$(this).attr('data-toggle', 'tooltip').attr('data-html', 'true').attr('title', $(this).find('.tip').html()).html('<i class="far fa-question-circle"></i>');
});
// init tooltips
$('[data-toggle="tooltip"]').tooltip();
});
$(window).load(function()
{
$('tr, td, div:not([class*="nicEdit"])').css("background-color", "");
$('div:not([class*="nicEdit"], #refreshed-0)').css("border", "").css("height", "");
$('input').css("width", "");
if($.trim($("div").text()) == "")
{
$(this).remove();
}
$('.main-footer .versionInfo').click(function()
{
$('.OGPVersionArea, .OGPVersionArea .version, .OGPVersionArea .versionNumber').removeClass('d-none').removeClass('hide');
// add blink class to versionNumber
$('.OGPVersionArea .versionNumber').addClass('shortblink');
// remove after 4 seconds
setTimeout(function(){
$('.OGPVersionArea .versionNumber').removeClass('shortblink');
}, 4000);
var copy = copyToClipboard($('.OGPVersionArea .versionNumber'));
toastr.info('"' + copy + '" ' + $('.OGPVersionArea .copyVersionResult').attr('lang'));
});
// circular notifications
if($('body > #notification').length > 0)
{
var noteMsg = $('body > #notification').html().split("<br>");
$('body > #notification').remove();
$('.content > .container-fluid').prepend('\
<div class="row">\
<div class="col-12">\
<div class="callout callout-info">\
<h5>' + noteMsg[0] + '</h5>\
<p>' + noteMsg[1] + '</p>\
</div>\
</div>\
</div>\
');
}
// content to cards mod
if(window.location.href.indexOf('m=dsi&p=admin_dsi') > -1 || window.location.href.indexOf('?m=administration&p=main') > -1)
{
$('.main').removeClass('main');
$('section.content > .container-fluid > .row > div').addClass('main');
var fillBox = false
$('.main .card-body > *').each(function()
{
if($(this).is('h2'))
{
// add new box
$('.main').append('\
<div class="card">\
<div class="card-header">\
<h5 class="card-title">' + $(this).text() + '</h5>\
</div>\
<div class="card-body">\
</div>\
</div>\
');
// remove title
$(this).remove();
// set fillBox to true, so content filling can start
fillBox = true
}else
{
if(fillBox)
{
// append this object to newest card
$('.main > .card:last-child > .card-body').append($(this));
}
}
});
}
// auto scroll down all logs
if($('.content pre').length>0)
{
// $('.content pre').scrollTop($('.content pre')[0].scrollHeight);
$('.content pre').each(function()
{
$(this).scrollTop($(this)[0].scrollHeight);
});
}
/* *** End of JS - Check if .main is empty to remove Element *** */
if($('.main').length > 0)
{
if($('.main').html().trim().length==0)
{
$('.main').parent('.card').remove();
}
}
});
/* *** menu sidebar hover hack because firefox doesnt support nested pseudo classes *** */
$(document).on('collapsed.lte.pushmenu', function()
{
$('body.sidebar-collapse .main-sidebar').hover(function()
{
$(this).addClass('hover');
}, function()
{
$(this).removeClass('hover');
});
});
function themeChanger(changeTo, save = false)
{
if(changeTo=='dark')
{
$('body').removeClass('light-mode mixed-mode').addClass('dark-mode');
$('nav.main-header').removeClass('navbar-light').addClass('navbar-dark');
$('aside.main-sidebar').removeClass('sidebar-light-primary').addClass('sidebar-dark-primary');
$('aside.control-sidebar').removeClass('control-sidebar-light').addClass('control-sidebar-dark');
if(!localStorage.getItem('themeLogo'))
{
$('img.brand-image').attr('src', 'themes/AdminLTE/dist/img/ogp_logo_dark.svg');
}
$('link[href*="jquery-ui.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.min.dark.css');
$('link[href*="jquery-ui.structure.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.structure.min.dark.css');
$('link[href*="jquery-ui.theme.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.theme.min.dark.css');
if(save)
{
$.ajax({
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=theme&v=dark',
dataType: 'json',
success: function(data)
{
toastr.success('Successfully saved theme to dark');
localStorage.setItem('theme', 'dark');
}
});
}
}
else if(changeTo=='light')
{
$('body').removeClass('dark-mode mixed-mode').addClass('light-mode');
$('nav.main-header').removeClass('navbar-dark').addClass('navbar-light');
$('aside.main-sidebar').removeClass('sidebar-dark-primary').addClass('sidebar-light-primary');
$('aside.control-sidebar').removeClass('control-sidebar-dark').addClass('control-sidebar-light');
if(!localStorage.getItem('themeLogo'))
{
$('img.brand-image').attr('src', 'themes/AdminLTE/dist/img/ogp_logo_light.svg');
}
$('link[href*="jquery-ui.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.min.light.css');
$('link[href*="jquery-ui.structure.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.structure.min.light.css');
$('link[href*="jquery-ui.theme.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.theme.min.light.css');
if(save)
{
$.ajax({
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=theme&v=light',
dataType: 'json',
success: function(data)
{
toastr.success('Successfully saved theme to light');
localStorage.setItem('theme', 'light');
}
});
}
}
else if(changeTo=='mixed')
{
$('body').removeClass('dark-mode').addClass('light-mode mixed-mode');
$('nav.main-header').removeClass('navbar-light').addClass('navbar-dark');
$('aside.main-sidebar').removeClass('sidebar-light-primary').addClass('sidebar-dark-primary');
$('aside.control-sidebar').removeClass('control-sidebar-dark').addClass('control-sidebar-light');
if(!localStorage.getItem('themeLogo'))
{
$('img.brand-image').attr('src', 'themes/AdminLTE/dist/img/ogp_logo_dark.svg');
}
$('link[href*="jquery-ui.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.min.light.css');
$('link[href*="jquery-ui.structure.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.structure.min.light.css');
$('link[href*="jquery-ui.theme.min"]').attr('href', 'themes/AdminLTE/plugins/jquery-ui/jquery-ui.theme.min.light.css');
if(save)
{
$.ajax({
async: true,
type: 'GET',
url: 'themes/AdminLTE/dist/php/settings.php?m=global&p=theme&v=mixed',
dataType: 'json',
success: function(data)
{
toastr.success('Successfully saved theme to mixed');
localStorage.setItem('theme', 'mixed');
}
});
}
}
// ace editor dark skin
if($('.ace_editor').length > 0)
{
if(changeTo=='dark')
{
$.getScript('modules/litefm/ace/theme-tomorrow_night.js', function(data, textStatus, jqxhr)
{
$('.ace_editor').removeClass('ace-tomorrow').addClass('ace-tomorrow-night');
});
}
else if(changeTo=='light')
{
$('.ace_editor').removeClass('ace-tomorrow-night').addClass('ace-tomorrow');
}
}
}
function setNavWidth(width)
{
// only set if wider than 250px (default) and smaller than 350px (max)
if(width>250 && width<=350)
{
// avoid dual set
if($('style[id="themeNavWidth"]').length>0)
{
$('style[id="themeNavWidth"]').remove();
}
// add custom width style to body
$('body').prepend('\
<style id="themeNavWidth">\
.main-sidebar,\
.layout-navbar-fixed .wrapper .brand-link,\
.layout-navbar-fixed .wrapper .main-sidebar:hover .brand-link,\
.layout-fixed .brand-link {\
width: '+width+'px;\
}\
@media (min-width: 768px) {\
body:not(.sidebar-mini-md):not(.sidebar-mini-xs):not(.layout-top-nav) .content-wrapper,\
body:not(.sidebar-mini-md):not(.sidebar-mini-xs):not(.layout-top-nav) .main-footer,\
body:not(.sidebar-mini-md):not(.sidebar-mini-xs):not(.layout-top-nav) .main-header {\
margin-left: '+width+'px;\
}\
}\
@media (max-width: 991.98px) {\
body:not(.sidebar-mini-md):not(.sidebar-mini-xs):not(.layout-top-nav) .content-wrapper,\
body:not(.sidebar-mini-md):not(.sidebar-mini-xs):not(.layout-top-nav) .main-footer,\
body:not(.sidebar-mini-md):not(.sidebar-mini-xs):not(.layout-top-nav) .main-header {\
margin-left: 0;\
}\
}\
@media (min-width: 992px) {\
.sidebar-mini.sidebar-collapse .main-sidebar:not(.sidebar-no-expand):hover,\
.sidebar-mini.sidebar-collapse .main-sidebar:not(.sidebar-no-expand).sidebar-focused,\
.sidebar-mini.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link {\
width: '+width+'px;\
}\
}\
.sidebar-collapse .main-sidebar,\
.sidebar-collapse .main-sidebar::before {\
margin-left: -'+width+'px;\
}\
.sidebar-mini:not(.sidebar-collapse) .main-sidebar .nav-link,\
.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-child-indent .nav-link {\
width: calc('+width+'px - 0.5rem * 2);\
}\
.sidebar-mini:not(.sidebar-collapse) .main-sidebar .nav-child-indent .nav-treeview .nav-link {\
width: calc('+width+'px - 0.5rem * 2 - 1rem);\
}\
.sidebar-mini:not(.sidebar-collapse) .main-sidebar .nav-child-indent .nav-treeview .nav-treeview .nav-link {\
width: calc('+width+'px - 0.5rem * 2 - 2rem);\
}\
.brand-image {\
max-width: calc('+width+'px - 2rem) !important;\
max-height: 33px;\
}\
</style>\
');
}else
{
// remove possible themeNavWidth style
if($('style[id="themeNavWidth"]').length>0)
{
$('style[id="themeNavWidth"]').remove();
}
$('body').prepend('\
<style>\
.brand-image {\
max-width: calc(250px - 2rem) !important;\
}\
</style>\
');
}
}
function copyToClipboard(node)
{
var elementText = $(node).text().replace(/\s/g, "");
var $temp = $("<input>");
$("body").append($temp);
$temp.val(elementText).select();
document.execCommand("copy");
$temp.remove();
return elementText;
}
function clearLocalStorageItems()
{
// loop trough all localStorage Items
Object.keys(localStorage).forEach(function(key)
{
// remove item
localStorage.removeItem(key);
});
}
function reloadBodyScripts()
{
console.log("reloaded body scripts");
// check if main contains script containers or script includes and reload them at the end
$('.main').find('script').each(function()
{
if(this.hasAttribute('src')===false)
{
// script content
$('body').append('<script>' + $(this).html() + '</script>');
}
else {
// script include
$('body').append('<script src="' + $(this).attr('src') + '"></script>');
}
$(this).remove();
});
}