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.
112 lines
2.6 KiB
112 lines
2.6 KiB
2 years ago
|
/*
|
||
|
DynAPI Distribution
|
||
|
Explorer Component
|
||
|
|
||
|
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
|
||
|
|
||
|
Requires: StyleManager, ExplorerStyle (Optional)
|
||
|
*/
|
||
|
|
||
|
function Explorer(x,y,w,h,style) { // Explorer Tree object
|
||
|
this.DynLayer = DynLayer;
|
||
|
this.DynLayer(null,x,y,w,h);
|
||
|
this.allLeaves = [];
|
||
|
this.root = new Explorer.Leave(this,this+"Root");
|
||
|
this.currentPos = 0;
|
||
|
this.currentUrl = "";
|
||
|
|
||
|
this.onCreate(Explorer.CreateEvent);
|
||
|
this.setStyle(style||'Explorer');
|
||
|
};
|
||
|
// Create Event
|
||
|
Explorer.CreateEvent = function() {
|
||
|
this.init();
|
||
|
this.renderStyle();
|
||
|
};
|
||
|
// Prototype
|
||
|
var p = dynapi.setPrototype('Explorer','DynLayer');
|
||
|
p.addLeave = function(id,text,parent,icon,icon_sel,url,css,cssSel) {
|
||
|
parent=(parent&&(parent!="0"))? parent:this.root.toString();
|
||
|
new Explorer.Leave(this,id,text,parent,icon,icon_sel,url,css,cssSel);
|
||
|
};
|
||
|
p.fold = function(id) {
|
||
|
this.allLeaves[id].open = false;
|
||
|
this.renderStyle();
|
||
|
return false;
|
||
|
};
|
||
|
p.unfold = function(id) {
|
||
|
this.allLeaves[id].open = true;
|
||
|
this.renderStyle();
|
||
|
return false;
|
||
|
};
|
||
|
p.setCurrent = function(id) {
|
||
|
this.lastPos = this.currentPos; // set last position
|
||
|
this.currentPos = id;
|
||
|
this.currentUrl = this.allLeaves[id].url;
|
||
|
this.renderStyle();
|
||
|
this.invokeEvent("select");
|
||
|
return false;
|
||
|
};
|
||
|
p.unfoldTo = function(id) {
|
||
|
this.allLeaves[this.firstOne].unfoldTo(id);
|
||
|
this.currentPos = id;
|
||
|
};
|
||
|
p.getHierarchy = function(leave){
|
||
|
var h = {};
|
||
|
h[leave.id]=b;
|
||
|
while (leave.parent) {
|
||
|
h[leave.parent]=true;
|
||
|
leave = this.allLeaves[leave.parent];
|
||
|
}
|
||
|
return h;
|
||
|
};
|
||
|
p.init = function() {
|
||
|
var i,el,pat;
|
||
|
for(i in this.allLeaves) {
|
||
|
el = this.allLeaves[i];
|
||
|
pat = el.parent;
|
||
|
//DQ Änderung: wenn parent nicht existiert
|
||
|
//vorher: if(pat) {
|
||
|
if(pat && this.allLeaves[pat]) {
|
||
|
this.allLeaves[pat].children[this.allLeaves[pat].children.length] = el;
|
||
|
this.allLeaves[pat].count++;
|
||
|
}
|
||
|
}
|
||
|
this.initiated = true;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
// This object represents a leave in our content tree. Notice that it is not dynlayer-inherited
|
||
|
Explorer.Leave = function(tree,id,text,parent,icon,icon_sel,url,css,cssSel) {
|
||
|
var style = tree.style;
|
||
|
// internal
|
||
|
this.id = id;
|
||
|
this.tree = tree;
|
||
|
this.icon = icon;
|
||
|
this.icon_sel = icon_sel||icon;
|
||
|
this.url = url;
|
||
|
this.text = text||"";
|
||
|
this.parent = parent;
|
||
|
this.children = [];
|
||
|
this.count = 0;
|
||
|
this.css = css;
|
||
|
this.cssSel = cssSel;
|
||
|
// state
|
||
|
this.open = false;
|
||
|
// init
|
||
|
this.tree.allLeaves[this.id] = this;
|
||
|
};
|
||
|
p = Explorer.Leave.prototype;
|
||
|
p.unfoldTo = function(c) {
|
||
|
this.open = false;
|
||
|
for(var i in this.children) if(this.children[i].unfoldTo(c)) this.open = true;
|
||
|
return this.open || (this.id == c);
|
||
|
};
|
||
|
p.toString = function() {
|
||
|
return this.id
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|