Initial Commit
This commit is contained in:
165
database/php/pear/PHP/UML/Output/HtmlNew/$resources/treeview.js
Normal file
165
database/php/pear/PHP/UML/Output/HtmlNew/$resources/treeview.js
Normal file
@@ -0,0 +1,165 @@
|
||||
Array.prototype.indexOf = IndexOf;
|
||||
//Finds the index of an item in an array
|
||||
function IndexOf(item) {
|
||||
for (var i=0; i < this.length; i++) {
|
||||
if (this[i] == item) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
var toggler = {
|
||||
//CSS class names
|
||||
states: Array('Collapsed','Expanded'),
|
||||
//Caption
|
||||
statesLib: Array('Collapse', 'Expand'),
|
||||
//Current state
|
||||
curState: 1,
|
||||
//Name of the cookie that stores the current state between pages
|
||||
cookieName: 'apiTreeviewState',
|
||||
//Sets all the elements to a new state, and updates the current state variable
|
||||
toggleAll: function(treeId, btnId)
|
||||
{
|
||||
this.curState = 1-this.curState;
|
||||
this.toggleAllTree(treeId, this.curState)
|
||||
var btn = document.getElementById(btnId);
|
||||
btn.innerHTML = this.statesLib[1-this.curState]+' all';
|
||||
setCookie(this.cookieName, this.curState);
|
||||
},
|
||||
//Sets all the elements to a given state
|
||||
toggleAllTree: function(treeId, stateId)
|
||||
{
|
||||
var tree = document.getElementById(treeId);
|
||||
if(!tree) return;
|
||||
var treeElements = tree.getElementsByTagName('li');
|
||||
for (var i=0; i<treeElements.length; i++) {
|
||||
this.replaceInClass(treeElements[i], this.states[stateId], this.states[1-stateId]);
|
||||
}
|
||||
},
|
||||
//Sets the element to the firstClass given, in place of the second
|
||||
replaceInClass: function(element, firstClass, secondClass)
|
||||
{
|
||||
var classes = element.className.split(" ");
|
||||
var firstClassIndex = classes.indexOf(firstClass);
|
||||
var secondClassIndex = classes.indexOf(secondClass);
|
||||
|
||||
if (secondClassIndex>-1) {
|
||||
classes[secondClassIndex] = firstClass;
|
||||
}
|
||||
|
||||
element.className = classes.join(" ");
|
||||
},
|
||||
//Toggles between two classes
|
||||
toggleClass: function(element, firstClass, secondClass, event)
|
||||
{
|
||||
event.cancelBubble = true;
|
||||
|
||||
var classes = element.className.split(" ");
|
||||
var firstClassIndex = classes.indexOf(firstClass);
|
||||
var secondClassIndex = classes.indexOf(secondClass);
|
||||
|
||||
if (firstClassIndex == -1 && secondClassIndex == -1) {
|
||||
classes[classes.length] = firstClass;
|
||||
}
|
||||
else if (firstClassIndex != -1) {
|
||||
classes[firstClassIndex] = secondClass;
|
||||
}
|
||||
else {
|
||||
classes[secondClassIndex] = firstClass;
|
||||
}
|
||||
element.className = classes.join(" ");
|
||||
},
|
||||
|
||||
//Toggle event handler for each expandable/collapsable node
|
||||
toggleNodeStateHandler: function(event)
|
||||
{
|
||||
toggler.toggleClass(this, toggler.states[0], toggler.states[1], (event==null) ? window.event : event);
|
||||
},
|
||||
|
||||
//Prevents the onclick event from bubbling up
|
||||
preventBubbleHandler: function(event)
|
||||
{
|
||||
if (!event)
|
||||
event = window.event;
|
||||
event.cancelBubble = true;
|
||||
},
|
||||
|
||||
//Adds the relevant onclick handlers for the nodes in the tree view
|
||||
setupTreeView: function(treeId)
|
||||
{
|
||||
var tree = document.getElementById(treeId);
|
||||
if(!tree) return;
|
||||
var treeElements = tree.getElementsByTagName("li");
|
||||
|
||||
for (var i=0; i<treeElements.length; i++) {
|
||||
if (treeElements[i].getElementsByTagName("ul").length>0) {
|
||||
treeElements[i].onclick = toggler.toggleNodeStateHandler;
|
||||
}
|
||||
else {
|
||||
treeElements[i].onclick = toggler.preventBubbleHandler;
|
||||
}
|
||||
}
|
||||
|
||||
var h = window.location.hash;
|
||||
if(h!='') {
|
||||
var s = document.getElementById(h.substring(1));
|
||||
if(s) {
|
||||
this.replaceInClass(s, this.states[1], this.states[0]);
|
||||
}
|
||||
}
|
||||
},
|
||||
backToMemorizedState: function(treeId, btnId)
|
||||
{
|
||||
var x = getCookie(this.cookieName);
|
||||
if (x==0 || x==1) {
|
||||
this.curState = x;
|
||||
var btn = document.getElementById(btnId);
|
||||
btn.innerHTML = this.statesLib[1-this.curState]+' all';
|
||||
this.toggleAllTree(treeId, this.curState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function setCookie(name, value, expires, path, domain, secure)
|
||||
{
|
||||
var today = new Date();
|
||||
today.setTime( today.getTime() );
|
||||
if (expires) {
|
||||
expires = expires*1000*60*60*24;
|
||||
}
|
||||
var expires_date = new Date(today.getTime() + (expires) );
|
||||
document.cookie = name + "=" +escape(value) +
|
||||
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
|
||||
( ( path ) ? ";path=" + path : "" ) +
|
||||
( ( domain ) ? ";domain=" + domain : "" ) +
|
||||
( ( secure ) ? ";secure" : "" );
|
||||
}
|
||||
|
||||
|
||||
function getCookie(check_name)
|
||||
{
|
||||
var a_all_cookies = document.cookie.split(';');
|
||||
var a_temp_cookie = '';
|
||||
var cookie_name = '';
|
||||
var cookie_value = '';
|
||||
var b_cookie_found = false;
|
||||
|
||||
for (i=0; i<a_all_cookies.length; i++) {
|
||||
a_temp_cookie = a_all_cookies[i].split( '=' );
|
||||
cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
|
||||
if (cookie_name == check_name){
|
||||
b_cookie_found = true;
|
||||
if (a_temp_cookie.length>1) {
|
||||
cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
|
||||
}
|
||||
return cookie_value;
|
||||
break;
|
||||
}
|
||||
a_temp_cookie = null;
|
||||
cookie_name = '';
|
||||
}
|
||||
if (!b_cookie_found) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user