138 lines
3.9 KiB
JavaScript
138 lines
3.9 KiB
JavaScript
Event.observe(window,'load',initStatus);
|
|
|
|
var UPDATE_FREQUENCY = 5; // default number of seconds between updates if no cookie set
|
|
|
|
function initStatus(e) {
|
|
Event.observe('update','keyup',Updater.keyUp);
|
|
Updater.start();
|
|
}
|
|
var Updater = {
|
|
start: function () {
|
|
if (f = Cookie.getVar('update_frequency')) {
|
|
this.frequency = f;
|
|
} else {
|
|
this.frequency = UPDATE_FREQUENCY;
|
|
}
|
|
$('update').value = this.frequency;
|
|
new Ajax.Request('xml-rpc?method=stats',{method: 'get',onComplete: rsStats});
|
|
},
|
|
update: function () {
|
|
$('update_timer').style.width = 100 + 'px';
|
|
if (Updater.stop) {
|
|
return;
|
|
}
|
|
Updater.effect = new Effect.Scale('update_timer',0,{scaleY: false,duration: Updater.frequency,
|
|
afterFinish: function() {
|
|
new Ajax.Request('xml-rpc?method=stats',{method: 'get',onComplete: rsStats});
|
|
}});
|
|
},
|
|
keyUp: function (e) {
|
|
var val = $('update').value;
|
|
if (Updater.oldVal == val) {
|
|
return;
|
|
}
|
|
Updater.oldVal = val;
|
|
if (Updater.effect) {
|
|
Updater.effect.cancel();
|
|
}
|
|
if (('' == val) || /^\d+$/.test(val)) {
|
|
Cookie.setVar('update_frequency',val,30);
|
|
if ('' == val) {
|
|
Element.removeClassName('update','input_error');
|
|
return;
|
|
}
|
|
Updater.frequency = val;
|
|
Element.removeClassName('update','input_error');
|
|
Updater.update();
|
|
} else {
|
|
Element.addClassName('update','input_error');
|
|
}
|
|
}
|
|
}
|
|
function rsStats(request) {
|
|
['service','stat'].each(function (tag) {
|
|
$A(request.responseXML.getElementsByTagName(tag)).each(function (element) {
|
|
var node = $(Element.textContent(element.firstChild).toLowerCase().replace(/\ /,'_'));
|
|
node.replaceChild(document.createTextNode(Element.textContent(element.childNodes[1])),node.firstChild);
|
|
});
|
|
});
|
|
var thread = $A(request.responseXML.getElementsByTagName('thread'));
|
|
var threadTable = new Table('thread');
|
|
threadTable.removeTBodyRows();
|
|
var users = 0;
|
|
thread.each(function (element) {
|
|
users++;
|
|
row = [];
|
|
row.push(Element.textContent(element.childNodes[1]));
|
|
row.push(Element.textContent(element.childNodes[2]));
|
|
threadTable.addTbodyRow(row);
|
|
});
|
|
$('session_count').replaceChild(document.createTextNode(users + ' Connected Users'),$('session_count').firstChild);
|
|
Updater.update();
|
|
}
|
|
|
|
Table = Class.create();
|
|
Object.extend(Table.prototype,{
|
|
initialize: function (id) {
|
|
this.tbody = $(id).getElementsByTagName('tbody')[0];
|
|
},
|
|
removeTBodyRows: function () {
|
|
Element.removeChildren(this.tbody);
|
|
},
|
|
addTbodyRow: function (cells) {
|
|
var tr = document.createElement('tr');
|
|
cells.each(function (cell) {
|
|
var td = document.createElement('td');
|
|
td.appendChild(document.createTextNode(cell));
|
|
tr.appendChild(td);
|
|
});
|
|
this.tbody.appendChild(tr);
|
|
}
|
|
});
|
|
Object.extend(Element, {
|
|
removeChildren: function(element) {
|
|
while(element.hasChildNodes()) {
|
|
element.removeChild(element.firstChild);
|
|
}
|
|
},
|
|
textContent: function(node) {
|
|
if ((!node) || !node.hasChildNodes()) {
|
|
// Empty text node
|
|
return '';
|
|
} else {
|
|
if (node.textContent) {
|
|
// W3C ?
|
|
return node.textContent;
|
|
} else if (node.text) {
|
|
// IE
|
|
return node.text;
|
|
}
|
|
}
|
|
// We shouldn't end up here;
|
|
return '';
|
|
}
|
|
});
|
|
var Cookie = {
|
|
getVar: function(name) {
|
|
var cookie = document.cookie;
|
|
if (cookie.length > 0) {
|
|
cookie += ';';
|
|
}
|
|
re = new RegExp(name + '\=(.*?);' );
|
|
if (cookie.match(re)) {
|
|
return RegExp.$1;
|
|
} else {
|
|
return '';
|
|
}
|
|
},
|
|
setVar: function(name,value,days) {
|
|
days = days || 30;
|
|
var expire = new Date(new Date().getTime() + days*86400);
|
|
document.cookie = name + '=' + value +';expires=' + expire.toUTCString();
|
|
},
|
|
removeVar: function(name) {
|
|
var date = new Date(12);
|
|
document.cookie = name + '=;expires=' + date.toUTCString();
|
|
}
|
|
};
|