385 lines
10 KiB
JavaScript
Executable File
385 lines
10 KiB
JavaScript
Executable File
|
|
/* COOKIES */
|
|
|
|
var editModus = '';
|
|
var Plugins = new Array();
|
|
var PageAge = -1;
|
|
var PageTimer;
|
|
var PlugDispState=[]; // state 1=visible, 0=hidden
|
|
var blockStyle = "block"
|
|
var alias = '/dashboard'
|
|
|
|
var Cookies = {
|
|
init: function () {
|
|
var allCookies = document.cookie.split('; ');
|
|
for (var i=0;i<allCookies.length;i++) {
|
|
var cookiePair = allCookies[i].split('=');
|
|
this[cookiePair[0]] = cookiePair[1];
|
|
}
|
|
},
|
|
create: function (name,value,days) {
|
|
if (days) {
|
|
var date = new Date();
|
|
date.setTime(date.getTime()+(days*24*60*60*1000));
|
|
var expires = "; expires="+date.toGMTString();
|
|
}
|
|
else var expires = "";
|
|
document.cookie = name+"="+value+expires+"; path=/";
|
|
this[name] = value;
|
|
},
|
|
erase: function (name) {
|
|
this.create(name,'',-1);
|
|
this[name] = undefined;
|
|
}
|
|
};
|
|
Cookies.init();
|
|
|
|
function notXMLHttpRequest(x) {
|
|
//log('notXMLHttpRequest 1');
|
|
r = x
|
|
if (x instanceof XMLHttpRequest) {
|
|
r = evalJSONRequest(x);
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function hide(element) {
|
|
getElement(element).style.display = 'None';
|
|
}
|
|
|
|
function unhide(element) {
|
|
getElement(element).style.display = blockStyle;
|
|
}
|
|
|
|
var Session = {
|
|
init: function(hostName) {
|
|
this.menuserver = hostName;
|
|
this.username = this.getUserId();
|
|
},
|
|
userid: function() {
|
|
return this.username+'@'+this.menuserver;
|
|
},
|
|
|
|
saveUserId: function(value) {
|
|
Cookies.create('userId', value, 300);
|
|
},
|
|
|
|
getUserId: function() {
|
|
return Cookies['userId'];
|
|
},
|
|
loadDispState: function() {
|
|
PlugDispState = [];
|
|
var states = Cookies['dispState'];
|
|
if (states) {
|
|
var slist = states.split('&');
|
|
for (i in slist) {
|
|
kv = slist[i].split(':');
|
|
PlugDispState[kv[0]]=kv[1];
|
|
}
|
|
}
|
|
},
|
|
saveDispState: function() {
|
|
var state = '';
|
|
for (k in PlugDispState) {
|
|
var v = PlugDispState[k];
|
|
state = state + k + ':' + v + '&';
|
|
}
|
|
Cookies.create('dispState', state, 300);
|
|
|
|
},
|
|
getDispState: function(plugin) {
|
|
return PlugDispState[plugin]+0;
|
|
},
|
|
setDispStateOff: function(plugin) {
|
|
PlugDispState[plugin]=0;
|
|
Session.saveDispState();
|
|
},
|
|
setDispStateOn: function(plugin) {
|
|
PlugDispState[plugin]=1;
|
|
Session.saveDispState();
|
|
}
|
|
|
|
}
|
|
|
|
var Ajax = {
|
|
ajaxFailed: function(err) {
|
|
// alert('Cannot fetch data from server, try again...');
|
|
Page.showServerError();
|
|
},
|
|
|
|
getConfig: function(userId, callback) {
|
|
// do a call to the server for the config for username@menuserver
|
|
//log('ajax: get menu as html');
|
|
var d = loadJSONDoc(alias+'/loadconfig?mode=html&userId=' + userId);
|
|
d.addCallbacks(callback, this.ajaxFailed);
|
|
},
|
|
|
|
getConfigAsText: function(userId, callback) {
|
|
// do a call to the server for the config for username@menuserver
|
|
var d = loadJSONDoc(alias+'/loadconfig?mode=text&userId=' + userId);
|
|
d.addCallbacks(callback, this.ajaxFailed);
|
|
},
|
|
|
|
saveMenuFromText: function(userId, menu, callback) {
|
|
var content = queryString({mode:'text',userId:userId, menu:menu})
|
|
var d = doXHR(alias+'/savemenu', {method:'POST', sendContent:content, headers:{"Content-Type":"application/x-www-form-urlencoded"}});
|
|
d.addCallbacks(callback, this.ajaxFailed);
|
|
},
|
|
|
|
savePlugsFromText: function(userId, plugs, callback) {
|
|
//log('Ajax.savePlugsFromText')
|
|
var content = queryString({mode:'text',userId:userId, plugs:plugs})
|
|
var d = doXHR(alias+'/saveplugs', {method:'POST', sendContent:content, headers:{"Content-Type":"application/x-www-form-urlencoded"}});
|
|
d.addCallbacks(callback, this.ajaxFailed);
|
|
},
|
|
|
|
loadPlugin: function(userId, pluginName, parameters, callbackFunction) {
|
|
// do a call to the server for the config for username@menuserver
|
|
//log('ajax: get pluginbody for ' + pluginName);
|
|
var d = loadJSONDoc(alias+'/loadPlugin?plugin='+pluginName+'¶meters='+urlEncode(parameters)+'&userId=' + Session.userid());
|
|
d.addCallbacks(callbackFunction, this.ajaxFailed);
|
|
//log(' cbtostr: '+callback.toString());
|
|
}
|
|
}
|
|
|
|
|
|
var Page = {
|
|
start: function(hostName) {
|
|
Session.init(hostName);
|
|
connect('username', 'onchange', this, 'userNameChanged');
|
|
//log('Page.start');
|
|
EditArea.init(this);
|
|
getElement('username').value = Session.username;
|
|
Session.loadDispState();
|
|
Ajax.getConfig(Session.userid(), this.redrawPage);
|
|
},
|
|
|
|
userNameChanged: function() {
|
|
Session.saveUserId(getElement('username').value); // stored in cookie
|
|
Ajax.getConfig(Session.userid(), Page.redrawPage);
|
|
},
|
|
|
|
redrawPage: function(transport) {
|
|
Page.redrawMenu(transport);
|
|
Page.redrawPlugs(transport);
|
|
},
|
|
|
|
redrawMenu: function(transport) {
|
|
Page.hideServerError();
|
|
//log('Page.redrawMenu ');
|
|
transport = notXMLHttpRequest(transport);
|
|
//getElement('menu3').innerHTML = transport.menu;
|
|
},
|
|
|
|
redrawPlugs: function(transport) {
|
|
Page.hideServerError();
|
|
transport = notXMLHttpRequest(transport);
|
|
log('Page.redrawPlugs'+transport.plugs);
|
|
Plugins = [];
|
|
var html = '';
|
|
var column = 1;
|
|
var plist = transport.plugs.split('\n');
|
|
var nr = 0;
|
|
for (i in plist) {
|
|
var plug = plist[i].replace(/^\s+|\s+$/g,"");
|
|
log('running along plist ' + plug);
|
|
if (plug.length<10) {
|
|
getElement('column'+column).innerHTML = html;
|
|
html = '';
|
|
column = column + 1;
|
|
} else {
|
|
if (plug[0]!='#') {
|
|
p = new Plugin(nr, plug);
|
|
Plugins[nr]=p;
|
|
html = html + '<div id="plugin'+nr+'" class="plugindiv"></div>';
|
|
nr += 1;
|
|
}
|
|
}
|
|
}
|
|
//log('Page - end of redraw');
|
|
// reset
|
|
Page.refreshPlugins();
|
|
},
|
|
|
|
refreshPlugins: function() {
|
|
//log('Page.refreshPlugins age='+PageAge);
|
|
PageAge += 1;
|
|
PageTimer = callLater(60, Page.refreshPlugins);
|
|
//log('triggered ....' + PageAge);
|
|
for (p in Plugins) {
|
|
Plugins[p].refresh(PageAge);
|
|
}
|
|
},
|
|
|
|
editMenu: function() {
|
|
EditArea.edit('m');
|
|
},
|
|
|
|
editMenuItem: function() {
|
|
EditArea.edit();
|
|
},
|
|
|
|
editPlugins: function() {
|
|
EditArea.edit('p');
|
|
},
|
|
|
|
showServerError: function() {
|
|
getElement('servererror').style.display = blockStyle;
|
|
},
|
|
|
|
hideServerError: function() {
|
|
getElement('servererror').style.display = 'None';
|
|
}
|
|
};
|
|
|
|
var EditArea = {
|
|
init: function(caller) {
|
|
this.page=caller
|
|
connect('savemenu', 'onclick', EditArea, 'save');
|
|
connect('saveexitmenu', 'onclick', EditArea, 'saveExit');
|
|
connect('closemenu', 'onclick', EditArea, 'hide');
|
|
},
|
|
|
|
edit: function(modus) {
|
|
editModus = modus
|
|
getElement('editarea').style.display = blockStyle;
|
|
if (editModus=='m') {
|
|
Ajax.getConfigAsText(Session.userid(), EditArea.redrawMenu);
|
|
}
|
|
if (editModus=='p') {
|
|
Ajax.getConfigAsText(Session.userid(), EditArea.redrawPlugs);
|
|
}
|
|
},
|
|
|
|
save: function() {
|
|
menu = getElement('menulines').value;
|
|
getElement('editarea').style.display = blockStyle;
|
|
if (editModus=='m') {
|
|
//log('Editarea.save: saving menu');
|
|
Ajax.saveMenuFromText(Session.userid(), getElement('menulines').value, Page.redrawMenu);
|
|
}
|
|
if (editModus=='p') {
|
|
//log('Editarea.save: saving plugins');
|
|
if (PageTimer) {
|
|
PageTimer.cancel;
|
|
}
|
|
PageAge=-1;
|
|
Ajax.savePlugsFromText(Session.userid(), getElement('menulines').value, Page.redrawPlugs);
|
|
}
|
|
},
|
|
|
|
saveExit: function() {
|
|
this.save();
|
|
this.hide();
|
|
},
|
|
|
|
hide: function() {
|
|
getElement('editarea').style.display = 'None';
|
|
},
|
|
|
|
redrawMenu: function(transport) {
|
|
Page.hideServerError();
|
|
//Page.redrawMenu(transport);
|
|
getElement('menulines').value = transport.menu;
|
|
},
|
|
|
|
redrawPlugs: function(transport) {
|
|
Page.hideServerError();
|
|
//Page.redrawPlugs(transport);
|
|
getElement('menulines').value = transport.plugs;
|
|
}
|
|
|
|
};
|
|
|
|
var EditPage = {
|
|
start: function(hostName) {
|
|
Session.init(hostName);
|
|
//log('start page');
|
|
EditArea.init(this);
|
|
Ajax.getConfig(Session.userid(), this.redrawPage);
|
|
},
|
|
|
|
redrawPage: function(transport) {
|
|
Page.hideServerError();
|
|
//log('ep: redraw page');
|
|
transport = notXMLHttpRequest(transport);
|
|
EditPage.redrawMenu(transport);
|
|
EditArea.edit();
|
|
},
|
|
|
|
redrawMenu: function(transport) {
|
|
Page.hideServerError();
|
|
//log('ep: redraw menu');
|
|
transport = notXMLHttpRequest(transport);
|
|
//log('redrawPage: ' + transport.menu);
|
|
//alert(transport);
|
|
getElement('menu3').innerHTML = transport.menu;
|
|
}
|
|
}
|
|
|
|
|
|
/********************* plugin object *********************/
|
|
function Plugin(nr, initstring) { // Define super class
|
|
// set divname, name, serverquery and timer
|
|
this.nr = nr;
|
|
this.divname = 'plugin' + nr;
|
|
// the initstrig should look like:
|
|
// <name>:<functionname>([<param1>[, param2 ..]]),<refreshrate in minutes>
|
|
var objRegExp = /^(\w+):.*$/;
|
|
this.title = initstring.replace(objRegExp, "$1");
|
|
objRegExp = /^\w*:(\w+)\(.*$/;
|
|
this.func = initstring.replace(objRegExp, "$1");
|
|
objRegExp = /^[^(]+\(([^)]*).*$/;
|
|
this.params = initstring.replace(objRegExp, "$1");
|
|
//log(this.params);
|
|
objRegExp = /.+\),(\d+)$/;
|
|
this.refreshrate = parseInt(initstring.replace(objRegExp, "$1"));
|
|
|
|
this.nextrefreshage = 0;
|
|
//log('created plugin '+this.title + ', '+this.func);
|
|
}
|
|
|
|
Plugin.prototype.refresh = function(age) { // Define Method
|
|
//log(' Refresh ' + this.divname );
|
|
if (age >= this.nextrefreshage) {
|
|
//log(' Refresh 2 ' + this.divname );
|
|
this.nextrefreshage += this.refreshrate;
|
|
Ajax.loadPlugin(Session.userid, this.func, this.params, bind(this.redraw, this))
|
|
}
|
|
}
|
|
|
|
Plugin.prototype.redraw = function(transport) { // Define Method
|
|
//log('redraw '+this.nr);
|
|
Page.hideServerError();
|
|
var body = '<div id="plugbody'+this.nr+'" class="plugbody">'+transport.plugin+'</div>';
|
|
var header = '<a class="plugheader" href="javascript:Plugins['+this.nr+'].toggle();"><img id="toggle'+this.nr+'" src=alias+"/static/icon_minus.gif"/></a>'
|
|
var html = '<table class="big"><tr><td class="plugtitle">'+this.title+'</td><td class="plugheader">'+header+'</td></tr><td class="plugbody" colspan="2">'+body+'</td></table>';
|
|
getElement(this.divname).innerHTML = html;
|
|
this.setDispState(Session.getDispState(this.title));
|
|
|
|
//log('REDRAW');
|
|
}
|
|
|
|
Plugin.prototype.toggle = function() { // Define Method
|
|
var button = getElement('toggle'+this.nr).src;
|
|
// could be a plus or a minus button
|
|
if (button.indexOf('minus')>=0) {
|
|
this.setDispState(0);
|
|
} else {
|
|
this.setDispState(1);
|
|
}
|
|
}
|
|
|
|
Plugin.prototype.setDispState = function(state) { // Define Method
|
|
var div = 'plugbody'+this.nr;
|
|
if (state == 0) {
|
|
hide(div);
|
|
getElement('toggle'+this.nr).src=alias+"/static/icon_plus.gif";
|
|
Session.setDispStateOff(this.title);
|
|
} else {
|
|
unhide(div);
|
|
getElement('toggle'+this.nr).src=alias+"/static/icon_minus.gif";
|
|
Session.setDispStateOn(this.title);
|
|
}
|
|
}
|