Results 1 to 6 of 6

Thread: Simple Tree Menu

  1. #1
    Join Date
    May 2007
    Posts
    32
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Simple Tree Menu

    1) Script Title:

    2) Script URL (on DD): http://www.dynamicdrive.com/dynamicindex1/navigate1.htm

    3) Describe problem:
    i want to use the tree menu (Simple Tree Menu #1 (persist enabled) which you can see it's source from bellow link:
    http://www.dynamicdrive.com/dynamicindex1/navigate1.htm

    i have 4 menu and each menu have 3 submenu. i want to close the 3 menus when i open the menu 1 and if i open the menu 2 , by default the menu 1 closed.

    please help me in this issue?

  2. #2
    Join Date
    Dec 2008
    Location
    Portsmouth, UK
    Posts
    1,891
    Thanks
    2
    Thanked 441 Times in 435 Posts

    Default

    Code:
    var persisteduls=new Object()
    var ddtreemenu=new Object()
    var alltreemenu=[];
    
    ddtreemenu.closefolder="closed.gif" //set image path to "closed" folder image
    ddtreemenu.openfolder="open.gif" //set image path to "open" folder image
    
    //////////No need to edit beyond here///////////////////////////
    
    ddtreemenu.createTree=function(treeid, enablepersist, persistdays){
    alltreemenu.push(treeid);
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    if (typeof persisteduls[treeid]=="undefined")
    persisteduls[treeid]=(enablepersist==true && ddtreemenu.getCookie(treeid)!="")? ddtreemenu.getCookie(treeid).split(",") : ""
    for (var i=0; i<ultags.length; i++)
    ddtreemenu.buildSubTree(treeid, ultags[i], i)
    if (enablepersist==true){ //if enable persist feature
     ddtreemenu.days=(typeof persistdays=="undefined")? 1 : parseInt(persistdays)
    }
    }
    
    ddtreemenu.buildSubTree=function(treeid, ulelement, index){
    ulelement.parentNode.className="submenu"
    if (typeof persisteduls[treeid]=="object"){ //if cookie exists (persisteduls[treeid] is an array versus "" string)
    if (ddtreemenu.searcharray(persisteduls[treeid], index)){
    ulelement.setAttribute("rel", "open")
    ulelement.style.display="block"
    ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    }
    else
    ulelement.setAttribute("rel", "closed")
    } //end cookie persist code
    else if (ulelement.getAttribute("rel")==null || ulelement.getAttribute("rel")==false) //if no cookie and UL has NO rel attribute explicted added by user
    ulelement.setAttribute("rel", "closed")
    else if (ulelement.getAttribute("rel")=="open") //else if no cookie and this UL has an explicit rel value of "open"
    ddtreemenu.expandSubTree(treeid, ulelement) //expand this UL plus all parent ULs (so the most inner UL is revealed!)
    ulelement.parentNode.onclick=function(e){
    var submenu=this.getElementsByTagName("ul")[0]
    if (submenu.getAttribute("rel")=="closed"){
      ddtreemenu.all(treeid);
    
    submenu.style.display="block"
    submenu.setAttribute("rel", "open")
    ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    }
    else if (submenu.getAttribute("rel")=="open"){
    submenu.style.display="none"
    submenu.setAttribute("rel", "closed")
    ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.closefolder+")"
    }
    ddtreemenu.preventpropagate(e)
    }
        ddtreemenu.rememberstate();
    ulelement.onclick=function(e){
    ddtreemenu.preventpropagate(e)
    }
    }
    
    ddtreemenu.expandSubTree=function(treeid, ulelement){ //expand a UL element and any of its parent ULs
    var rootnode=document.getElementById(treeid)
    var currentnode=ulelement
    currentnode.style.display="block"
    currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    while (currentnode!=rootnode){
    if (currentnode.tagName=="UL"){ //if parent node is a UL, expand it too
    currentnode.style.display="block"
    currentnode.setAttribute("rel", "open") //indicate it's open
    currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
    }
    currentnode=currentnode.parentNode
    }
        ddtreemenu.rememberstate();
    }
    
    ddtreemenu.flatten=function(treeid, action){ //expand or contract all UL elements
     if (action=="expand"){
      ddtreemenu.all(treeid);
     }
    var ultags=document.getElementById(treeid).getElementsByTagName("ul")
    for (var i=0; i<ultags.length; i++){
    ultags[i].style.display=(action=="expand")? "block" : "none"
    var relvalue=(action=="expand")? "open" : "closed"
    ultags[i].setAttribute("rel", relvalue)
    ultags[i].parentNode.style.backgroundImage=(action=="expand")? "url("+ddtreemenu.openfolder+")" : "url("+ddtreemenu.closefolder+")"
    }
        ddtreemenu.rememberstate();
    }
    
    ddtreemenu.all=function(treeid){ //expand or contract all UL elements
      for (var z0=0;z0<alltreemenu.length;z0++){
       if (alltreemenu[z0]!=treeid){
        ddtreemenu.flatten(alltreemenu[z0], 'contact');
       }
      }
    
    
    }
    
    ddtreemenu.rememberstate=function(){ //store index of opened ULs relative to other ULs in Tree into cookie
     if (ddtreemenu.days){ //if enable persist feature
      for (var z0=0;z0<alltreemenu.length;z0++){
       var ultags=document.getElementById(alltreemenu[z0]).getElementsByTagName("ul")
       var openuls=new Array()
       for (var i=0; i<ultags.length; i++){
        if (ultags[i].getAttribute("rel")=="open")
         openuls[openuls.length]=i //save the index of the opened UL (relative to the entire list of ULs) as an array element
       }
       if (openuls.length==0) //if there are no opened ULs to save/persist
        openuls[0]="none open" //set array value to string to simply indicate all ULs should persist with state being closed
        ddtreemenu.setCookie(alltreemenu[z0], openuls.join(","), ddtreemenu.days) //populate cookie with value treeid=1,2,3 etc (where 1,2... are the indexes of the opened ULs)
      }
     }
    }
    ////A few utility functions below//////////////////////
    
    ddtreemenu.getCookie=function(Name){ //get cookie value
    var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
    if (document.cookie.match(re)) //if cookie found
    return document.cookie.match(re)[0].split("=")[1] //return its value
    return ""
    }
    
    ddtreemenu.setCookie=function(name, value, days){ //set cookei value
    var expireDate = new Date()
    //set "expstring" to either future or past date, to set or delete cookie, respectively
    var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days))
    document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/";
    }
    
    ddtreemenu.searcharray=function(thearray, value){ //searches an array for the entered value. If found, delete value from array
    var isfound=false
    for (var i=0; i<thearray.length; i++){
    if (thearray[i]==value){
    isfound=true
    thearray.shift() //delete this element from array for efficiency sake
    break
    }
    }
    return isfound
    }
    
    ddtreemenu.preventpropagate=function(e){ //prevent action from bubbling upwards
    if (typeof e!="undefined")
    e.stopPropagation()
    else
    event.cancelBubble=true
    }
    
    ddtreemenu.dotask=function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
    var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
    if (target.addEventListener)
    target.addEventListener(tasktype, functionref, false)
    else if (target.attachEvent)
    target.attachEvent(tasktype, functionref)
    }
    Vic
    God Loves You and will never love you less.
    http://www.vicsjavascripts.org/Home.htm
    If my post has been useful please donate to http://www.operationsmile.org.uk/

  3. #3
    Join Date
    May 2007
    Posts
    32
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default thanks

    thanks for your prompt response but unfortunately it doesn't work properly. it shows an error when i click on each menu.

  4. #4
    Join Date
    Dec 2008
    Location
    Portsmouth, UK
    Posts
    1,891
    Thanks
    2
    Thanked 441 Times in 435 Posts

    Default

    Vic
    God Loves You and will never love you less.
    http://www.vicsjavascripts.org/Home.htm
    If my post has been useful please donate to http://www.operationsmile.org.uk/

  5. #5
    Join Date
    May 2007
    Posts
    32
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    i couldn't open the link. it doesn't work for me. can you help me in another way?

  6. #6
    Join Date
    May 2007
    Posts
    32
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default

    i can see the link. i want to do this just in Simple Tree Menu #1 (persist enabled). when i click on folder 1, the folder 2 get close automatically. also OVERHAND .

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •