//------------------------------------------------------------
// OpenWriteToLayer
// Initialise le support d'écriture sur le layer du doc
// Paramètres :
// objDoc : objet de type Document
// idLayer : identifiant du layer
//------------------------------------------------------------
function OpenWriteToLayer(objDoc, idLayer)
{
if( objDoc.all )
{
objDoc.all[idLayer].innerHTML = "";
return;
}
if( objDoc.layers )
{
objDoc.layers[idLayer].clear();
return;
}
else
{
var objLayer = objDoc.getElementById(idLayer);
objLayer.innerHTML = "";
}
}
//------------------------------------------------------------
// WriteToLayer
// Ecrit le code html sur le layer du doc
// Paramètres :
// objDoc : objet de type Document
// idLayer : identifiant du layer
//------------------------------------------------------------
function WriteToLayer(objDoc, idLayer, strHtml)
{
if( objDoc.all )
{
objDoc.all[idLayer].innerHTML = objDoc.all[idLayer].innerHTML + strHtml;
return;
}
if( objDoc.layers )
{
objDoc.layers[idLayer].write(strHtml);
return;
}
else
{
var objLayer = objDoc.getElementById(idLayer);
objLayer.innerHTML = objLayer.innerHTML + strHtml;
}
}
//------------------------------------------------------------
// CloseWriteToLayer
// Ferme le contexte d'écriture sur le layer du doc
// Paramètres :
// objDoc : objet de type Document
// idLayer : identifiant du layer
//------------------------------------------------------------
function CloseWriteToLayer(objDoc, idLayer)
{
if( objDoc.layers )
objDoc.layers[idLayer].close();
}
//------------------------------------------------------------
// GetTxtHtml
// Retourne le code html d'un texte éventuellement cliquable
// Paramètres :
// strClassLink : nom de la classe CSS si url
// strClassTxt : nom de la classe CSS si Txt
// strTxt : texte affiché
// strUrl : url du lien, peut être vide
//------------------------------------------------------------
function GetTxtHtml(strClassLink, strClassTxt, strTxt, strUrl, strTarget)
{
if( strClassLink != "" )
strClassLink = " class=\"" + strClassLink + "\" ";
if( strClassTxt != "" )
strClassTxt = " class=\"" + strClassTxt + "\" ";
if( strTarget != "" )
strTarget = " target=\"" + strTarget + "\" ";
var strHtml = "";
if( strTxt != "" )
{
if( strUrl != "" )
strHtml = " " + strTxt + "";
else
strHtml = " " + strTxt + "";;
}
return strHtml;
}
//------------------------------------------------------------
// GetImgHtml
// Retourne le code html d'une image éventuellement cliquable
// Paramètres :
// strSrc : url de l'image
// strUrl : url du lien sur l'image, peut être vide.
//------------------------------------------------------------
function GetImgHtml(strSrc, strUrl, strName, strTitle)
{
var strHtml = "";
if( !strTitle )
strTitle = "";
else
strTitle = " title=\"" + strTitle + "\"";
if( !strName )
strName = "";
else
strName = " name=\"" + strName + "\"";
if( strSrc != "" )
{
strHtml = "
";
if( strUrl != "" )
strHtml = "" + strHtml + "";
}
return strHtml;
}
//------------------------------------------------------------
// GetTableDebHtml et GetTableFinHtml
// Retourne le code html du tableau contenant la ligne d'arbre
// Paramètres :
// lg : largeur du tableau contenant l'arbre
// iNiv : niveau d'arborescence à afficher
// inter : largeur en pixel d'un intervalle de niveau
//------------------------------------------------------------
function GetTableDebHtml(lg, iNiv, inter)
{
var iLgTab = 0;
if( iNiv > 0 )
iLgTab = inter*iNiv;
var iLgTxt = lg - iLgTab;
var strHtml = "
" +
" | " +
"";
return strHtml;
}
function GetTableFinHtml()
{
var strHtml = " |
\n";
return strHtml;
}
//--------------------------------------------------------------------------------
// class TreeNodeFolder
//--------------------------------------------------------------------------------
TreeNodeFolder.prototype.constructor = TreeNodeFolder;
function TreeNodeFolder(objTreeview, idFolder, strLib, iNiv, iDroitLink, iDroitAction, strUrlTxt, strTarget)
{
// Definition des attributs
this.objTreeview = objTreeview;
this.id = idFolder;
this.idFolder = idFolder.substr(1);
this.strLib = strLib;
this.iDroitAction = iDroitAction;
this.iDroitLink = iDroitLink;
this.iNiv = iNiv;
this.bOpen = true;
if( iNiv>this.objTreeview.iNivOpen )
this.bOpen = false;
this.strUrlTxt = strUrlTxt;
this.strTarget = strTarget;
this.objTreeNodeParent = null;
this.objTreeNodeFolders = new Array();
this.iNbFolders = 0;
this.strHtml = "";
}
TreeNodeFolder.prototype.SetParent = function(objTreeNodeFolderParent)
{
this.objTreeNodeParent = objTreeNodeFolderParent;
this.objTreeNodeParent.AddFolder(this);
this.iNiv = objTreeNodeFolderParent.iNiv + 1;
this.strHtml = "";
}
TreeNodeFolder.prototype.CanOpenFolder = function()
{
// retourne vrai si le noeud peut être ouvert
// un noeud est ouvrable s'il possède des feuilles ou un sous-arbre
if( this.iNbFolders == 0 ) return false;
return true;
}
TreeNodeFolder.prototype.AddFolder = function(objTreeNodeFolder)
{
this.objTreeNodeFolders[objTreeNodeFolder.id] = objTreeNodeFolder;
this.iNbFolders++;
}
TreeNodeFolder.prototype.SetImageRoll = function(bOn)
{
if( this.objTreeview.imgNodeFolderSelect != "" )
{
if( bOn == true )
MM_swapImage("imgFolder" + this.id, "", this.objTreeview.imgNodeFolderSelect, 1);
else
MM_swapImgRestore();
}
}
TreeNodeFolder.prototype.Draw = function()
{
if( this.objTreeNodeParent != null )
if( this.iNiv != this.objTreeNodeParent.iNiv + 1 )
{
this.iNiv = this.objTreeNodeParent.iNiv + 1;
this.strHtml = "";
}
var strHtml = this.strHtml;
if( strHtml == "" )
{
// affichage de la ligne
// determine l'icone à afficher
var imgNodeFolder = "";
var urlNodeFolder = "";
if( this.iDroitAction == 2 && this.objTreeview.imgNodeFolder != "" )
{
imgNodeFolder = this.objTreeview.imgNodeFolder;
urlNodeFolder = "#";
}
var strImgIcone = this.objTreeview.imgNode;
var strUrlIcone = "";
var strTitle = "";
if( this.CanOpenFolder() == true )
{
if( this.bOpen == true )
{
strImgIcone = this.objTreeview.imgNodeOpen;
strUrlIcone = "javascript:"+this.objTreeview.strNameObj+".CloseNode('" + this.id + "');";
strTitle = "Fermer";
}
else
{
strImgIcone = this.objTreeview.imgNodeClose;
strUrlIcone = "javascript:"+this.objTreeview.strNameObj+".OpenNode('" + this.id + "');";
strTitle = "Ouvrir";
}
}
var strUrlTxt = "";
if( this.iDroitLink == 2 )
{
if( this.objTreeview.bFolderNameLink == true )
strUrlTxt = "javascript:onTreeviewFolderNameClick(" + this.idFolder.toString() + ")";
else
strUrlTxt = this.strUrlTxt;
}
var strClass = "";
var bChild = false;
for(iTNF in this.objTreeNodeFolders)
{
bChild = true;
break;
}
if( this.iNiv=="0" ) strClass = "ArboPlan0Bold";
else if( this.iNiv=="1" ) strClass = "ArboPlan0Bold";
else if( this.iNiv=="2" ) {
if( bChild ) strClass = "ArboPlan1Bold";
else strClass = "ArboPlan2";
} else if( this.iNiv=="3" ) {
if( bChild ) strClass = "ArboPlan2Bold";
else strClass = "ArboPlan2";
} else strClass = "ArboPlan2";
strHtml = GetTableDebHtml(this.objTreeview.iTabLg, this.iNiv, 16);
strHtml += GetImgHtml(strImgIcone, strUrlIcone, "", strTitle);
strHtml += GetImgHtml(imgNodeFolder, urlNodeFolder, "imgFolder" + this.id);
strHtml += GetTxtHtml(strClass, strClass, this.strLib, strUrlTxt, this.strTarget, this.iNiv);
strHtml += GetTableFinHtml();
this.strHtml = strHtml;
}
if( this.bOpen == true )
{
// affichage des fils
for(iTNF in this.objTreeNodeFolders)
strHtml += this.objTreeNodeFolders[iTNF].Draw();
}
return strHtml;
}
//--------------------------------------------------------------------------------
// class Treeview
//--------------------------------------------------------------------------------
Treeview.prototype.constructor = Treeview;
function Treeview(objDoc, idLayer, iNivOpen)
{
//Definition des attributs
this.objDoc = objDoc;
this.idLayer = idLayer;
this.strNameObj = "objTreeview" ;
this.bViewHeader = true ;
// représente la racine du treeview
this.objTreeNodeRoot = null;
// contient tous les noeuds du treeview
this.objTreeNodeFolders = new Array();
// largeur du tableau contenant le treeview
this.iTabLg = 500;
// class CSS appliquée sur le lien d'un texte folder
this.classLinkFolder = "";
// class CSS appliquée sur le texte folder
this.classTextFolder = "";
// class CSS appliquée sur le lien d'un texte doc
this.classLinkDoc = "";
// class CSS appliquée sur le texte doc
this.classTextDoc = "";
// class CSS appliquée sur les liens action2
this.classLinkAction = "";
// img noeud ouvert
this.imgNodeOpen = "";
// img noeud fermé
this.imgNodeClose = "";
// img noeud sans sous-arbre
this.imgNode = "";
// img associée à un folder
this.imgNodeFolder = "";
// img roll d'un doc sélectionné
this.imgNodeDocSelect = "";
// img roll d'un folder sélectionné
this.imgNodeFolderSelect = "";
// flag qui indique si le texte folder est cliquable ou non
// si oui, la fonction onTreeviewFolderNameClick(idFolder) est appelée. Cette fonction est à générer.
this.bFolderNameLink = false;
// flag qui indique si le texte doc est cliquable ou non
// si oui, la fonction onTreeviewDocNameClick(idDoc) est appelée. Cette fonction est à générer.
this.bDocNameLink = false;
// url de la page demandant la confirmation du déplacement
this.urlConfirm = "";
// niveau à ouvrir par défaut
this.iNivOpen = iNivOpen;
// flag à vrai pour afficher les feuilles, à faux pour les noeuds uniquement
this.bCanShowHideNode = false;
this.bShowNode = false;
this.strNodeName = "feuille";
// mémorisation pour les déplacements de doc entre folder
this.idFolderSrc = "";
this.idDocCut = "";
}
Treeview.prototype.AddFolder = function(idFolder, idFolderParent, strLib, iNiv, iDroitLink, iDroitAction, strUrlTxt, strTarget)
{
var oTnf = new TreeNodeFolder(this, idFolder, strLib, iNiv, iDroitLink, iDroitAction, strUrlTxt, strTarget);
if( this.objTreeNodeRoot == null )
{
this.objTreeNodeRoot = oTnf;
this.objTreeNodeFolders[idFolder] = oTnf;
}
else
{
this.objTreeNodeFolders[idFolder] = oTnf;
if( this.objTreeNodeFolders[idFolderParent] )
oTnf.SetParent(this.objTreeNodeFolders[idFolderParent]);
// sinon on n'ajoute pas le noeud
}
}
Treeview.prototype.Draw = function()
{
OpenWriteToLayer(this.objDoc, this.idLayer);
if( this.objTreeNodeRoot != null )
{
WriteToLayer(this.objDoc, this.idLayer, this.objTreeNodeRoot.Draw());
}
CloseWriteToLayer(this.objDoc, this.idLayer);
}
Treeview.prototype.OpenNode = function(idNodeFolder)
{
this.objTreeNodeFolders[idNodeFolder].bOpen = true;
this.objTreeNodeFolders[idNodeFolder].strHtml = "";
this.Draw();
}
Treeview.prototype.CloseNode = function(idNodeFolder)
{
this.objTreeNodeFolders[idNodeFolder].bOpen = false;
this.objTreeNodeFolders[idNodeFolder].strHtml = "";
this.Draw();
}
Treeview.prototype.OpenAll = function()
{
for(iTNF in this.objTreeNodeFolders)
{
this.objTreeNodeFolders[iTNF].bOpen = true;
this.objTreeNodeFolders[iTNF].strHtml = "";
}
this.Draw();
}
Treeview.prototype.CloseAll = function()
{
for(iTNF in this.objTreeNodeFolders)
{
this.objTreeNodeFolders[iTNF].bOpen = false;
this.objTreeNodeFolders[iTNF].strHtml = "";
}
this.objTreeNodeRoot.bOpen = true;
this.Draw();
}
Treeview.prototype.ShowHideNode = function()
{
this.bShowNode = !this.bShowNode;
this.Draw();
}