// Form submit function
function submitForm(formId, module, script) {
var form = document.getElementById(formId);
var request = new XMLHttpRequest();
var response;
// Loader animation
formLoading(formId)
// Send request
request.open(form.method, '/' + module + '/scripts.php?script=' + script);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send(encodeFormData(new FormData(form)));
// Get response
request.onload = function (progressEvent) {
response = request.responseText;
// If response is url, redirect
if (isURL(response)) {
window.location.assign(response);
} else {
// Else, replace inner html of form
form.innerHTML = response;
}
}
}
// Loading form
function formLoading(id) {
var form = document.getElementById(id);
var classes = form.className;
form.className = classes + ' display-container';
var loader = '
';
loader += '
';
loader += '
';
form.insertAdjacentHTML('beforeend', loader);
}
// Encode form data
function encodeFormData(fd) {
var s = '';
function encode(s) { return encodeURIComponent(s).replace(/%20/g, '+'); }
for (var pair of fd.entries()) {
if (typeof pair[1] == 'string') {
s += (s ? '&' : '') + encode(pair[0]) + '=' + encode(pair[1]);
}
}
return s;
}
// Check if string is url
function isURL(string) {
let url;
try {
url = new URL(string);
} catch (_) {
return false;
}
return url.protocol === "http:" || url.protocol === "https:";
}
// myModal
function myModal(id) {
var element = document.getElementById(id);
var classes = element.className;
if (classes.indexOf('hide') > -1) {
element.className = classes.replace('hide', 'show');
}
if (classes.indexOf('show') > -1) {
element.className = classes.replace('show', 'hide');
}
}
// Menu scripts and sidebar
if(document.getElementById('main-navigation') != null) {
window.addEventListener("load", scrollMenu);
window.addEventListener("resize", resizeMenu);
window.addEventListener("scroll", scrollMenu);
// Menu toggle for the className .menu-toggle
var menuToggle = document.getElementById('main-navigation').getElementsByClassName('menu-toggle');
if (menuToggle.length >= 1) {
menuToggle[0].addEventListener("click", toggleMenu);
}
}
// Menu function to add shadow on scroll
function scrollMenu(x) {
x = x || null;
// Variables of menu and window
var menu = document.getElementById('main-navigation');
var menuHeight = document.getElementById('main-navigation').offsetHeight;
var scrolledY = window.scrollY;
var screenWidth = document.getElementsByTagName('body')[0].clientWidth;
// Sidebar max height
if(document.getElementsByTagName('sidebar').length == 1) {
if(screenWidth >= 801) {
document.getElementsByTagName('sidebar')[0].style.maxHeight = (window.innerHeight - menuHeight) + 'px';
} else {
document.getElementsByTagName('sidebar')[0].style.maxHeight = 'none';
}
}
if (scrolledY > 0 || x === true) {
// Fixed
menu.classList.add('fixed');
document.body.style.marginTop = menuHeight + 'px';
menu.classList.add('shadow-bottom');
// Handle sidebar
if(document.getElementsByTagName('sidebar').length == 1) {
var sidebar = document.getElementsByTagName('sidebar')[0];
if(screenWidth >= 801) {
var footerHeight = 0;
var top = 0;
if(document.getElementsByTagName('footer').length == 1) {
footerHeight = document.getElementsByTagName('footer')[0].offsetHeight;
var footerRect = document.getElementsByTagName('footer')[0].getBoundingClientRect();
if(footerRect.top <= (menuHeight + sidebar.offsetHeight)) {
top = footerRect.top - (menuHeight + sidebar.offsetHeight);
}
}
sidebar.style.top = top + 'px';
sidebar.style.position = 'fixed';
sidebar.style.marginTop = menuHeight + 'px';
} else {
sidebar.style.top = '0';
sidebar.style.position = 'relative';
sidebar.style.marginTop = '0';
}
}
} else {
menu.classList.remove('shadow-bottom');
}
// Hide toggle menu on mobile
if(screenWidth >= 993) {
var menuToggle = document.getElementById('mobile-toggle-menu');
var classes = menuToggle.className;
if (classes.indexOf('show') >= -1) {
menuToggle.className = classes.replace('show', 'hide');
}
}
}
// Hide toggle menu on resize and handle top margin
function resizeMenu() {
var menuToggle = document.getElementById('mobile-toggle-menu');
var classes = menuToggle.className;
if (classes.indexOf('show') >= -1) {
menuToggle.className = classes.replace('show', 'hide');
}
scrollMenu(true);
}
function toggleMenu() {
var menu = document.getElementById('main-navigation');
var menuHeight = document.getElementById('mobile-menu').offsetHeight;
menu.classList.add('fixed');
document.body.style.marginTop = menuHeight + 'px';
menu.classList.add('shadow-bottom');
myModal('mobile-toggle-menu');
}