SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.1 KiB

/*
author: Bojan Mihelac <bojan@mihelac.org>
http://source.mihelac.org
*/
var treetable_rowstate = new Array();
var treetable_callbacks = new Array();
function treetable_hideRow(rowId) {
el = document.getElementById(rowId);
el.style.display = "none";
}
function treetable_showRow(rowId) {
el = document.getElementById(rowId);
el.style.display = "";
}
function treetable_hasChildren(rowId) {
res = document.getElementById(rowId + '_0');
return (res != null);
}
function treetable_getRowChildren(rowId) {
el = document.getElementById(rowId);
var arr = new Array();
i = 0;
while (true) {
childRowId = rowId + '_' + i;
childEl = document.getElementById(childRowId);
if (childEl) {
arr[i] = childRowId;
} else {
break;
}
i++;
}
return (arr);
}
function treetable_toggleRow(rowId, state, force) {
var rowChildren;
var i;
// open or close all children rows depend on current state
force = (force == null) ? 1 : force;
if (state == null) {
row_state = ((treetable_rowstate[rowId]) ? (treetable_rowstate[rowId]) : 1) * -1;
} else {
row_state = state;
}
rowChildren = treetable_getRowChildren(rowId);
if (rowChildren.length == 0) return (false);
for (i = 0; i < rowChildren.length; i++) {
if (row_state == -1) {
treetable_hideRow(rowChildren[i]);
treetable_toggleRow(rowChildren[i], row_state, -1);
} else {
if (force == 1 || treetable_rowstate[rowId] != -1) {
treetable_showRow(rowChildren[i]);
treetable_toggleRow(rowChildren[i], row_state, -1);
}
}
}
if (force == 1) {
treetable_rowstate[rowId] = row_state;
treetable_fireEventRowStateChanged(rowId, row_state);
}
return (true);
}
function treetable_fireEventRowStateChanged(rowId, state) {
if (treetable_callbacks['eventRowStateChanged']) {
callback = treetable_callbacks['eventRowStateChanged'] + "('" + rowId + "', " + state + ");";
eval(callback);
}
}
function treetable_collapseAll(tableId) {
table = document.getElementById(tableId);
rowChildren = table.getElementsByTagName('tr');
for (i = 0; i < rowChildren.length; i++) {
if (index = rowChildren[i].id.indexOf('_')) {
// do not hide root elements
if(index != rowChildren[i].id.lastIndexOf('_')) {
rowChildren[i].style.display = 'none';
}
if (treetable_hasChildren(rowChildren[i].id)) {
treetable_rowstate[rowChildren[i].id] = -1;
treetable_fireEventRowStateChanged(rowChildren[i].id, -1);
}
}
}
return (true);
}
function treetable_expandAll(tableId) {
table = document.getElementById(tableId);
rowChildren = table.getElementsByTagName('tr');
for (i = 0; i < rowChildren.length; i++) {
if (index = rowChildren[i].id.indexOf('_')) {
rowChildren[i].style.display = '';
if (treetable_hasChildren(rowChildren[i].id)) {
treetable_rowstate[rowChildren[i].id] = 1;
treetable_fireEventRowStateChanged(rowChildren[i].id, 1);
}
}
}
return (true);
}