telosys
Blame | Last modification | View Log | RSS feed
/* GLOBAL VARIABLES */
var TELOSYS_TREE_SELECTED = null;
var TELOSYS_TREE_SELECTED_MOVED = false;
var TELOSYS_MOUSE_IS_DOWN = false ;
/* END GLOBAL VARIABLES */
function fwkGetTreeDragAndDropContent() {
var sID = "fwkTelosysTreeDragAndDrop";
var e = document.getElementById(sID);
if ( e == null )
{
e = document.createElement("UL");
e.id = sID;
e.className = "tree";
e.style.position = "absolute";
e.style.whiteSpace = "nowrap" ;
//e.style.backgroundColor = "#DDDDDD";
e.style.left = 0 ;
e.style.top = 0 ;
e.style.width = "20px" ;
e.style.height = "auto" ;
e.style.marginTop = 0 ;
e.style.marginLeft = 0 ;
e.style.paddingLeft = 0 ;
if (typeof e.style.MozOpacity!="undefined") e.style.MozOpacity=0.7; //Firefox
if (typeof e.style.filter!="undefined") e.style.filter="alpha(opacity=50)";
if (typeof e.style.opacity!="undefined") e.style.opacity=0.7;
document.body.appendChild(e);
}
return e ;
}
// Open or close one node and fire click
function fwkTreeOpenCloseNode(target) {
if (target.nodeName=="LI") {
if (target.className=="closed") {
target.className="opened";
var uls = target.getElementsByTagName('ul');
if (uls!=null && uls.length>0) {
uls[0].style.display = "block";
}
} else if (target.className=="opened") {
target.className="closed";
var uls = target.getElementsByTagName('ul');
if (uls!=null && uls.length>0) { // v 0.9.9 ( or -> and )
uls[0].style.display = "none";
}
}
var act = target.getAttribute("action");
if (act!=null)
eval(act);
}
}
// Move one node in the tree
function fwkTreeDropSelection(liSrc, liTarget) {
if (liSrc!=null && liTarget!=null && liSrc!=liTarget) {
var uls = liTarget.getElementsByTagName('ul');
if (uls==null || uls.length==0) {
var newUlTarget = document.createElement('ul');
newUlTarget.appendChild(liSrc);
liTarget.appendChild(newUlTarget);
liTarget.className="opened"
} else {
uls[0].appendChild(liSrc);
}
}
}
// MouseDown event on the tree : prepare for DRAG
function fwkTreeMouseDown(evt) {
TELOSYS_MOUSE_IS_DOWN = true ;
if (!evt)
var evt = window.event;
var target = evt.target || evt.srcElement;
if (target!=null && target.nodeName=="LI") {
TELOSYS_TREE_SELECTED = target;
TELOSYS_TREE_SELECTED_MOVED = false;
document.onmousemove = fwkTreeMouseMove;
document.onmouseup = fwkTreeMouseUp;
}
}
// MouseMove event on the tree
function fwkTreeMouseMove(evt) {
if (!evt)
var evt = window.event;
if ( TELOSYS_MOUSE_IS_DOWN )
{
if (TELOSYS_TREE_SELECTED != null)
{
var drag = fwkGetTreeDragAndDropContent();
if (!TELOSYS_TREE_SELECTED_MOVED)
{
// First move after selection : Init the drag content and show it
if ( drag.firstChild )
{
drag.removeChild(drag.firstChild);
}
drag.appendChild(TELOSYS_TREE_SELECTED.cloneNode(true));
TELOSYS_TREE_SELECTED_MOVED = true;
drag.style.display = "block";
}
drag.style.left = evt.clientX+5;
drag.style.top = evt.clientY+5;
}
}
}
// MouseUp event on the tree : DROP or CLICK
function fwkTreeMouseUp(evt) {
TELOSYS_MOUSE_IS_DOWN = false ;
if (!evt)
var evt = window.event;
var target = evt.target || evt.srcElement;
if (target!=null && TELOSYS_TREE_SELECTED!=null) {
if (TELOSYS_TREE_SELECTED_MOVED) {
// DROP
var drag = fwkGetTreeDragAndDropContent();
drag.removeChild(drag.lastChild);
drag.style.display = "none";
if ( fwkTreeTargetIsOK(target) )
{
if (target.className=="closed" || target.className=="opened") {
fwkTreeDropSelection(TELOSYS_TREE_SELECTED, target);
} else if (target.className=="leaf") {
target.parentNode.insertBefore(TELOSYS_TREE_SELECTED, target);
}
}
} else {
// CLICK
fwkTreeOpenCloseNode(target);
}
document.onmousemove = null ;
document.onmouseup = null ;
TELOSYS_TREE_SELECTED = null;
TELOSYS_TREE_SELECTED_MOVED = false;
}
}
function fwkTreeTargetIsOK(target)
{
if (target.nodeName!="LI" ) return false ;
if (target== TELOSYS_TREE_SELECTED) return false ;
// Do not drop in a child of the current selected node
if ( TELOSYS_TREE_SELECTED.firstChild != null ) // has children
{
var n = target ;
while ( n.parentNode != null )
{
if ( n.parentNode == TELOSYS_TREE_SELECTED )
{
return false ;
}
n = n.parentNode ;
if ( n.treeviewroot ) // ( the UL root tag of the treeview )
return n.drop ; // DROP enabled ? see init function
}
}
return true ;
}
//-----------------------------------------------------------
// Init TREE ( enable Drag and Drop )
//-----------------------------------------------------------
// Tree initialisation = fire events, disable text selection and init node style
function fwkTreeInitTree(id){
var tree = document.getElementById(id);
if ( tree != null ) {
tree.treeviewroot = true ;
tree.drag = true ;
tree.drop = true ;
//tree.onmousemove = fwkTreeMouseMove;
tree.onmousedown = fwkTreeMouseDown;
//document.onmouseup = fwkTreeMouseUp;
}
}
//-----------------------------------------------------------
// Init TREE ( No Drag and Drop )
//-----------------------------------------------------------
function fwkTreeOnClick(evt) {
if (!evt)
var evt = window.event;
var target = evt.target || evt.srcElement;
fwkTreeOpenCloseNode(target);
}
function fwkTreeInitTreeNoDND(id){ // NO Drag and Drop
var tree = document.getElementById(id);
if ( tree != null ) {
tree.treeviewroot = true ;
tree.drag = false ;
tree.drop = false ;
tree.onclick = fwkTreeOnClick;
}
}