webui/files/usr/lib/kagera/webui/scripts/kagera.js

246 řádky
6.7 KiB
JavaScript

function getRequest() {
var req;
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
return req;
}
function initMenu() {
this.menu = document.getElementById("mainmenu");
this.submenus = this.menu.getElementsByTagName("div");
this.oneSmOnly = 3;
this.collapseMenu = function(submenu) {
var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
var moveBy = Math.round(4 * submenu.getElementsByTagName("a").length);
var mainInstance = this;
var intId = setInterval(function() {
var curHeight = submenu.offsetHeight;
var newHeight = curHeight - moveBy;
if(newHeight > minHeight) {
submenu.style.height = newHeight + "px";
} else {
clearInterval(intId);
submenu.style.height = "";
submenu.className = "collapsed";
mainInstance.memorize();
}
}, 30);
};
this.collapseOthers = function(submenu) {
if(!multimenu) {
for(var i = 0; i < this.submenus.length; i++) {
if(this.submenus[i] != submenu && this.submenus[i].className != "collapsed") {
this.collapseMenu(this.submenus[i]);
}
}
}
};
this.expandMenu = function(submenu) {
var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
var links = submenu.getElementsByTagName("a");
for(var i = 0; i < links.length; i++) {
fullHeight += links[i].offsetHeight;
}
var moveBy = Math.round(4 * links.length);
var mainInstance = this;
var intId = setInterval(function() {
var curHeight = submenu.offsetHeight;
var newHeight = curHeight + moveBy;
if(newHeight < fullHeight) {
submenu.style.height = newHeight + "px";
} else {
clearInterval(intId);
submenu.style.height= "";
submenu.className = "navbox";
mainInstance.memorize();
}
}, 30);
this.collapseOthers(submenu);
};
this.init = function() {
var mainInstance = this;
for(var i = 0; i < this.submenus.length; i++) {
this.submenus[i].getElementsByTagName("span")[0].onclick = function() {
if(this.parentNode.className == "collapsed") {
mainInstance.expandMenu(this.parentNode);
} else {
mainInstance.collapseMenu(this.parentNode);
}
};
}
var links = this.menu.getElementsByTagName("a");
links[0].className = "active";
for(var i = 0; i < links.length; i++) {
if(links[i].href == document.location.href) {
links[0].className = "";
links[i].className = "active";
break;
}
}
var regex = new RegExp("kagera_" + encodeURIComponent("mainmenu") + "=([01]+)");
var match = regex.exec(document.cookie);
if(match) {
var states = match[1].split("");
for(var i = 0; i < states.length; i++) {
this.submenus[i].className = (states[i] == 0 ? "collapsed" : "navbox");
}
} else if(!multimenu) {
this.collapseOthers(this.submenus[0]);
}
};
this.memorize = function() {
var states = new Array();
for(var i = 0; i < this.submenus.length; i++) {
states.push(this.submenus[i].className == "collapsed" ? 0 : 1);
var d = new Date();
d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000));
document.cookie = "kagera_" + encodeURIComponent("mainmenu") + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/";
}
};
}
function initTips() {
var help = document.getElementById("help")
if(help) {
var abbrs = document.getElementsByTagName("abbr");
var tips = help.getElementsByTagName("div");
var mouseX, mouseY;
document.onmousemove = function(e) {
mouseX = (window.Event) ? e.pageX : event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
mouseY = (window.Event) ? e.pageY : event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
};
for(var i = 0; i < abbrs.length; i++) {
abbrs[i].onclick = function() {
for(var a = 0; a < tips.length; a++) {
if("s" + tips[a].id == this.id) {
tips[a].style.left = mouseX + "px";
tips[a].style.top = (mouseY - (tips[a].offsetHeight + 3)) + "px";
tips[a].style.visibility = "visible";
break;
}
}
};
abbrs[i].onmouseout = function() {
for(var a = 0; a < tips.length; a++) {
if("s" + tips[a].id == this.id) {
tips[a].style.visibility = "hidden";
break;
}
}
};
}
}
}
function logout() {
window.location.href="index.sh?option=logout";
}
function reboot(ask) {
var boot = true;
if(ask) {
var answer = confirm(sysmsg[6]);
if(!answer) {
boot = false;
}
}
if(boot) {
toggleMsg(sysmsg[5]);
statefunc = function() {
window.location.href="index.sh?option=overview";
}
testcon = function() {
runRequest("GET", document.location.href, "&refresh=1", statefunc, false);
}
runCommand("reboot", statefunc, true);
setInterval("testcon()", 5000);
}
}
function refreshData(func) {
statefunc = function(req) {
document.getElementById("content").innerHTML = req.responseText;
var target = document.getElementById("content");
var scripts = target.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
eval(scripts[i].innerHTML);
}
if(typeof func == "function") {
func();
}
}
runRequest("GET", document.location.href, "&refresh=1", statefunc, false);
}
function runCommand(params, statefunc, noreload) {
runRequest("POST", document.location.href + "&refresh=1&runcommand=1", "commands=" + params, statefunc, noreload);
}
function runRequest(method, url, params, statefunc, noreload) {
var req = getRequest();
if(req) {
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
if(req.responseText != "") {
statefunc(req);
} else if(!noreload) {
location.reload(true);
}
}
}
if(method == "POST") {
req.open("POST", url, true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send(params);
} else {
req.open("GET", url + params, true);
req.send();
}
}
return req;
}
function switchView(outid, swval) {
sw = document.getElementById(outid);
for(var i = 0; i < sw.children.length; i++) {
if(sw.children[i].id == swval) {
sw.children[i].style.display = "block";
} else {
sw.children[i].style.display = "none";
}
}
}
function toggleMsg(msg) {
dimbox = document.getElementById("dim");
msgbox = document.getElementById("msg");
if(msg) {
document.body.style.overflow = "hidden";
msgbox.innerHTML = msgtxt + "&nbsp;&nbsp;" + msg;
dimbox.style.display = "inline";
msgbox.style.display = "inline";
} else {
msgbox.style.display = "none";
dimbox.style.display = "none";
document.body.style.overflow = "auto";
}
}
window.onload = function() {
msgtxt = document.getElementById("msg").innerHTML;
mainmenu = new initMenu();
mainmenu.init();
initTips();
if(typeof initModule == "function") {
initModule();
}
}