contract and expand menus based on the previous state

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Nospam

    contract and expand menus based on the previous state

    I don't know what it is I am doing wrong, I am trying to get the menus to
    either expand or contract based on their previous states, i.e if already
    expanded if clicked again contract, and if contracted, expand, so far it
    doesn't work for the about and services link(but works for the expand all
    and contract all links), any help would be greatly appreciated:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>Welcom e </title>
    <link rel="stylesheet " type="text/css"
    href="style.css " />
    <script type="text/javascript" src="simpletree menu.js">
    </script>
    </head>


    <div id="wrapper">

    <div id="header">
    </div>

    <table id="table">
    <tr>
    <td id="empty"></td>

    <td rowspan="2" id="content">


    </td>

    </tr>

    <tr>
    <td id="menu">
    Sidebar
    <h4>Menu</h4>

    <a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
    All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
    'contact')">Con tract All</a>

    <ul id="treemenu1" class="treeview ">
    <li>Home</li>


    <li><a href="javascrip t:ddtreemenu.fl atten('treemenu 1about',
    'contact')">Abo ut</a>
    <ul id="treemenu1ab out">
    <li>History</li>
    <li>Job opportunities</li>
    </ul>
    </li>


    <li><a href="javascrip t:ddtreemenu.fl atten('treemenu 1services',
    'contact')">Ser vices</a>
    <ul id="treemenu1se rvices">
    <li>Virtual assistants</li>
    <li>Website design and promotion
    <ul>
    <li>Website design</li>
    <li>Search engine optimisation</li>
    <li>Website promotion </li>
    <liWebsite hosting</li>
    </ul>
    </li>

    </ul>
    </li>

    <li>Faq</li>
    <li>Contact</li>
    </ul>
    </td>
    </tr>

    </table>



    </div>

    </div>
    </body>
    </html>


  • Good Man

    #2
    Re: contract and expand menus based on the previous state

    "Nospam" <nospam@home.co mwrote in
    news:YJybi.1212 $aF6.888@newsfe 1-gui.ntli.net:
    I don't know what it is I am doing wrong, I am trying to get the menus
    to either expand or contract based on their previous states, i.e if
    already expanded if clicked again contract, and if contracted, expand,
    so far it doesn't work for the about and services link(but works for
    the expand all and contract all links), any help would be greatly
    appreciated:
    its awfully hard to debug your javascript problem if you don't post any
    javascript.

    Comment

    • Nospam

      #3
      Re: contract and expand menus based on the previous state

      The javascript in simpletreemenu is:

      var persisteduls=ne w Object()
      var ddtreemenu=new Object()


      ddtreemenu.clos efolder="/includes/closed.gif" //set image path to "closed"
      folder image
      ddtreemenu.open folder="/includes/open.gif" //set image path to "open" folder
      image


      //////////No need to edit beyond here///////////////////////////


      ddtreemenu.crea teTree=function (treeid, enablepersist, persistdays){
      var ultags=document .getElementById (treeid).getEle mentsByTagName( "ul")
      if (typeof persisteduls[treeid]=="undefined" )
      persisteduls[treeid]=(enablepersist ==true &&
      ddtreemenu.getC ookie(treeid)!= "")? ddtreemenu.getC ookie(treeid).s plit(",") :
      ""
      for (var i=0; i<ultags.length ; i++)
      ddtreemenu.buil dSubTree(treeid , ultags[i], i)
      if (enablepersist= =true){ //if enable persist feature
      var durationdays=(t ypeof persistdays=="u ndefined")? 1 :
      parseInt(persis tdays)
      ddtreemenu.dota sk(window, function(){ddtr eemenu.remember state(treeid,
      durationdays)}, "unload") //save opened UL indexes on body unload



      }
      }


      ddtreemenu.buil dSubTree=functi on(treeid, ulelement, index){
      ulelement.paren tNode.className ="submenu"
      if (typeof persisteduls[treeid]=="object"){ //if cookie exists
      (persisteduls[treeid] is an array versus "" string)
      if (ddtreemenu.sea rcharray(persis teduls[treeid], index)){
      ulelement.setAt tribute("rel", "open")
      ulelement.style .display="block "
      ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .openfolder+")"

      }


      else
      ulelement.setAt tribute("rel", "closed")

      } //end cookie persist code


      else if (ulelement.getA ttribute("rel") ==null ||
      ulelement.getAt tribute("rel")= =false) //if no cookie and UL has NO rel
      attribute explicted added by user
      ulelement.setAt tribute("rel", "closed")
      else if (ulelement.getA ttribute("rel") =="open") //else if no cookie and this
      UL has an explicit rel value of "open"
      ddtreemenu.expa ndSubTree(treei d, ulelement) //expand this UL plus all parent
      ULs (so the most inner UL is revealed!)
      ulelement.paren tNode.onclick=f unction(e){
      var submenu=this.ge tElementsByTagN ame("ul")[0]
      if (submenu.getAtt ribute("rel")== "closed"){
      submenu.style.d isplay="block"
      submenu.setAttr ibute("rel", "open")
      ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .openfolder+")"

      }


      else if (submenu.getAtt ribute("rel")== "open"){
      submenu.style.d isplay="none"
      submenu.setAttr ibute("rel", "closed")
      ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .closefolder+") ­
      "

      }


      ddtreemenu.prev entpropagate(e)

      }


      ulelement.oncli ck=function(e){
      ddtreemenu.prev entpropagate(e)


      }
      }


      ddtreemenu.expa ndSubTree=funct ion(treeid, ulelement){ //expand a UL element
      and any of its parent ULs
      var rootnode=docume nt.getElementBy Id(treeid)
      var currentnode=ule lement
      currentnode.sty le.display="blo ck"
      currentnode.par entNode.style.b ackgroundImage= "url("+ddtreeme nu.openfolder+" ­
      )
      "
      while (currentnode!=r ootnode){
      if (currentnode.ta gName=="UL"){ //if parent node is a UL, expand it too
      currentnode.sty le.display="blo ck"
      currentnode.set Attribute("rel" , "open") //indicate it's open
      currentnode.par entNode.style.b ackgroundImage= "url("+ddtreeme nu.openfolder+" ­
      )
      "

      }


      currentnode=cur rentnode.parent Node


      }
      }


      ddtreemenu.flat ten=function(tr eeid, action){ //expand or contract all UL
      elements
      var ultags=document .getElementById (treeid).getEle mentsByTagName( "ul")
      for (var i=0; i<ultags.length ; i++){
      ultags[i].style.display= (action=="expan d")? "block" : "none"
      var relvalue=(actio n=="expand")? "open" : "closed"
      ultags[i].setAttribute(" rel", relvalue)
      ultags[i].parentNode.sty le.backgroundIm age=(action=="e xpand")?
      "url("+ddtreeme nu.openfolder+" )" : "url("+ddtreeme nu.closefolder+ ")"


      }
      }


      ddtreemenu.reme mberstate=funct ion(treeid, durationdays){ //store index of
      opened ULs relative to other ULs in Tree into cookie
      var ultags=document .getElementById (treeid).getEle mentsByTagName( "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.setC ookie(treeid, openuls.join(", "), durationdays) //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.getC ookie=function( Name){ //get cookie value
      var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target
      name/value pair
      if (document.cooki e.match(re)) //if cookie found
      return document.cookie .match(re)[0].split("=")[1] //return its value
      return ""



      }


      ddtreemenu.setC ookie=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=expir eDate.setDate(e xpireDate.getDa te()+parseInt(d ays))
      document.cookie = name+"="+value+ "; expires="+expir eDate.toGMTStri ng()+";
      path=/";


      }


      ddtreemenu.sear charray=functio n(thearray, value){ //searches an array for
      the entered value. If found, delete value from array
      var isfound=false
      for (var i=0; i<thearray.leng th; i++){
      if (thearray[i]==value){
      isfound=true
      thearray.shift( ) //delete this element from array for efficiency sake
      break


      }
      }
      return isfound
      }


      ddtreemenu.prev entpropagate=fu nction(e){ //prevent action from bubbling
      upwards
      if (typeof e!="undefined" )
      e.stopPropagati on()
      else
      event.cancelBub ble=true


      }


      ddtreemenu.dota sk=function(tar get, functionref, tasktype){ //assign a
      function to execute to an event handler (ie: onunload)
      var tasktype=(windo w.addEventListe ner)? tasktype : "on"+taskty pe
      if (target.addEven tListener)
      target.addEvent Listener(taskty pe, functionref, false)
      else if (target.attachE vent)
      target.attachEv ent(tasktype, functionref)


      Comment

      • Randy Webb

        #4
        Re: contract and expand menus based on the previous state

        Nospam said the following on 6/16/2007 3:02 PM:
        The javascript in simpletreemenu is:
        Is there a question in there anywhere or are you just posting code for
        the fun of it?

        --
        Randy
        Chance Favors The Prepared Mind
        comp.lang.javas cript FAQ - http://jibbering.com/faq/index.html
        Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/

        Comment

        • Nospam

          #5
          Re: contract and expand menus based on the previous state

          >Is there a question in there anywhere or are you just posting code for
          >the fun of it?
          Trying to get a menu to cotnract and expand using a javascript template. I
          don't know what it is I am doing wrong, I am trying to get the menus to
          either expand or contract based on their previous states, i.e if already
          expanded if clicked again contract, and if contracted, expand, so far it
          doesn't work for the about and services link(but works for the expand all
          and contract all links), any help would be greatly appreciated:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
          "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
          <title>Welcom e </title>
          <link rel="stylesheet " type="text/css"
          href="style.css " />
          <script type="text/javascript" src="simpletree menu.js">
          </script>
          </head>


          <div id="wrapper">

          <div id="header">
          </div>

          <table id="table">
          <tr>
          <td id="empty"></td>

          <td rowspan="2" id="content">


          </td>

          </tr>

          <tr>
          <td id="menu">
          Sidebar
          <h4>Menu</h4>

          <a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
          All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
          'contact')">Con tract All</a>

          <ul id="treemenu1" class="treeview ">
          <li>Home</li>


          <li><a href="javascrip t:ddtreemenu.fl atten('treemenu 1about',
          'contact')">Abo ut</a>
          <ul id="treemenu1ab out">
          <li>History</li>
          <li>Job opportunities</li>
          </ul>
          </li>


          <li><a href="javascrip t:ddtreemenu.fl atten('treemenu 1services',
          'contact')">Ser vices</a>
          <ul id="treemenu1se rvices">
          <li>Virtual assistants</li>
          <li>Website design and promotion
          <ul>
          <li>Website design</li>
          <li>Search engine optimisation</li>
          <li>Website promotion </li>
          <liWebsite hosting</li>
          </ul>
          </li>

          </ul>
          </li>

          <li>Faq</li>
          <li>Contact</li>
          </ul>
          </td>
          </tr>

          </table>



          </div>

          </div>
          </body>
          </html>

          This is the javascript for simpletreemenu:
          var persisteduls=ne w Object()
          var ddtreemenu=new Object()


          ddtreemenu.clos efolder="/includes/closed.gif" //set image path to "closed"
          folder image
          ddtreemenu.open folder="/includes/open.gif" //set image path to "open" folder
          image


          //////////No need to edit beyond here///////////////////////////


          ddtreemenu.crea teTree=function (treeid, enablepersist, persistdays){
          var ultags=document .getElementById (treeid).getEle mentsByTagName( "ul")
          if (typeof persisteduls[treeid]=="undefined" )
          persisteduls[treeid]=(enablepersist ==true &&
          ddtreemenu.getC ookie(treeid)!= "")? ddtreemenu.getC ookie(treeid).s plit(",") :
          ""
          for (var i=0; i<ultags.length ; i++)
          ddtreemenu.buil dSubTree(treeid , ultags[i], i)
          if (enablepersist= =true){ //if enable persist feature
          var durationdays=(t ypeof persistdays=="u ndefined")? 1 :
          parseInt(persis tdays)
          ddtreemenu.dota sk(window, function(){ddtr eemenu.remember state(treeid,
          durationdays)}, "unload") //save opened UL indexes on body unload



          }
          }


          ddtreemenu.buil dSubTree=functi on(treeid, ulelement, index){
          ulelement.paren tNode.className ="submenu"
          if (typeof persisteduls[treeid]=="object"){ //if cookie exists
          (persisteduls[treeid] is an array versus "" string)
          if (ddtreemenu.sea rcharray(persis teduls[treeid], index)){
          ulelement.setAt tribute("rel", "open")
          ulelement.style .display="block "
          ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .openfolder+")"

          }


          else
          ulelement.setAt tribute("rel", "closed")

          } //end cookie persist code


          else if (ulelement.getA ttribute("rel") ==null ||
          ulelement.getAt tribute("rel")= =false) //if no cookie and UL has NO rel
          attribute explicted added by user
          ulelement.setAt tribute("rel", "closed")
          else if (ulelement.getA ttribute("rel") =="open") //else if no cookie and this
          UL has an explicit rel value of "open"
          ddtreemenu.expa ndSubTree(treei d, ulelement) //expand this UL plus all parent
          ULs (so the most inner UL is revealed!)
          ulelement.paren tNode.onclick=f unction(e){
          var submenu=this.ge tElementsByTagN ame("ul")[0]
          if (submenu.getAtt ribute("rel")== "closed"){
          submenu.style.d isplay="block"
          submenu.setAttr ibute("rel", "open")
          ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .openfolder+")"

          }


          else if (submenu.getAtt ribute("rel")== "open"){
          submenu.style.d isplay="none"
          submenu.setAttr ibute("rel", "closed")
          ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .closefolder+") ­
          "

          }


          ddtreemenu.prev entpropagate(e)

          }


          ulelement.oncli ck=function(e){
          ddtreemenu.prev entpropagate(e)


          }
          }


          ddtreemenu.expa ndSubTree=funct ion(treeid, ulelement){ //expand a UL element
          and any of its parent ULs
          var rootnode=docume nt.getElementBy Id(treeid)
          var currentnode=ule lement
          currentnode.sty le.display="blo ck"
          currentnode.par entNode.style.b ackgroundImage= "url("+ddtreeme nu.openfolder+" ­
          )
          "
          while (currentnode!=r ootnode){
          if (currentnode.ta gName=="UL"){ //if parent node is a UL, expand it too
          currentnode.sty le.display="blo ck"
          currentnode.set Attribute("rel" , "open") //indicate it's open
          currentnode.par entNode.style.b ackgroundImage= "url("+ddtreeme nu.openfolder+" ­
          )
          "

          }


          currentnode=cur rentnode.parent Node


          }
          }


          ddtreemenu.flat ten=function(tr eeid, action){ //expand or contract all UL
          elements
          var ultags=document .getElementById (treeid).getEle mentsByTagName( "ul")
          for (var i=0; i<ultags.length ; i++){
          ultags[i].style.display= (action=="expan d")? "block" : "none"
          var relvalue=(actio n=="expand")? "open" : "closed"
          ultags[i].setAttribute(" rel", relvalue)
          ultags[i].parentNode.sty le.backgroundIm age=(action=="e xpand")?
          "url("+ddtreeme nu.openfolder+" )" : "url("+ddtreeme nu.closefolder+ ")"


          }
          }


          ddtreemenu.reme mberstate=funct ion(treeid, durationdays){ //store index of
          opened ULs relative to other ULs in Tree into cookie
          var ultags=document .getElementById (treeid).getEle mentsByTagName( "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.setC ookie(treeid, openuls.join(", "), durationdays) //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.getC ookie=function( Name){ //get cookie value
          var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target
          name/value pair
          if (document.cooki e.match(re)) //if cookie found
          return document.cookie .match(re)[0].split("=")[1] //return its value
          return ""



          }


          ddtreemenu.setC ookie=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=expir eDate.setDate(e xpireDate.getDa te()+parseInt(d ays))
          document.cookie = name+"="+value+ "; expires="+expir eDate.toGMTStri ng()+";
          path=/";


          }


          ddtreemenu.sear charray=functio n(thearray, value){ //searches an array for
          the entered value. If found, delete value from array
          var isfound=false
          for (var i=0; i<thearray.leng th; i++){
          if (thearray[i]==value){
          isfound=true
          thearray.shift( ) //delete this element from array for efficiency sake
          break


          }
          }
          return isfound
          }


          ddtreemenu.prev entpropagate=fu nction(e){ //prevent action from bubbling
          upwards
          if (typeof e!="undefined" )
          e.stopPropagati on()
          else
          event.cancelBub ble=true


          }


          ddtreemenu.dota sk=function(tar get, functionref, tasktype){ //assign a
          function to execute to an event handler (ie: onunload)
          var tasktype=(windo w.addEventListe ner)? tasktype : "on"+taskty pe
          if (target.addEven tListener)
          target.addEvent Listener(taskty pe, functionref, false)
          else if (target.attachE vent)
          target.attachEv ent(tasktype, functionref)



          Comment

          • dmark@cinsoft.net

            #6
            Re: contract and expand menus based on the previous state

            On Jun 18, 8:27 am, "Nospam" <nos...@home.co mwrote:
            Is there a question in there anywhere or are you just posting code for
            the fun of it?
            >
            Trying to get a menu to cotnract and expand using a javascript template. I
            You are persistent aren't you.
            don't know what it is I am doing wrong, I am trying to get the menus to
            either expand or contract based on their previous states, i.e if already
            expanded if clicked again contract, and if contracted, expand, so far it
            doesn't work for the about and services link(but works for the expand all
            and contract all links), any help would be greatly appreciated:
            >
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
            <html>
            <head>
            <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
            <title>Welcom e </title>
            <link rel="stylesheet " type="text/css"
            href="style.css " />
            <script type="text/javascript" src="simpletree menu.js">
            </script>
            </head>
            >
            <div id="wrapper">
            >
            <div id="header">
            </div>
            >
            <table id="table">
            <tr>
            <td id="empty"></td>
            >
            <td rowspan="2" id="content">
            >
            </td>
            >
            </tr>
            >
            <tr>
            <td id="menu">
            Sidebar
            <h4>Menu</h4>
            >
            <a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
            All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
            'contact')">Con tract All</a>
            A word of advice: if you are going to create anchors with the JS
            protocol, you need to create them with script.
            >
            <ul id="treemenu1" class="treeview ">
            <li>Home</li>
            >
            <li><a href="javascrip t:ddtreemenu.fl atten('treemenu 1about',
            'contact')">Abo ut</a>
            <ul id="treemenu1ab out">
            <li>History</li>
            <li>Job opportunities</li>
            </ul>
            </li>
            >
            <li><a href="javascrip t:ddtreemenu.fl atten('treemenu 1services',
            'contact')">Ser vices</a>
            <ul id="treemenu1se rvices">
            <li>Virtual assistants</li>
            <li>Website design and promotion
            <ul>
            <li>Website design</li>
            <li>Search engine optimisation</li>
            <li>Website promotion </li>
            <liWebsite hosting</li>
            </ul>
            </li>
            >
            </ul>
            </li>
            >
            <li>Faq</li>
            <li>Contact</li>
            </ul>
            </td>
            </tr>
            >
            </table>
            >
            </div>
            >
            </div>
            </body>
            </html>
            >
            This is the javascript for simpletreemenu:
            So where did you get this thing and why don't you ask the people
            responsible for it?
            var persisteduls=ne w Object()
            var ddtreemenu=new Object()
            >
            ddtreemenu.clos efolder="/includes/closed.gif" //set image path to "closed"
            folder image
            ddtreemenu.open folder="/includes/open.gif" //set image path to "open" folder
            image
            >
            //////////No need to edit beyond here///////////////////////////
            >
            ddtreemenu.crea teTree=function (treeid, enablepersist, persistdays){
            var ultags=document .getElementById (treeid).getEle mentsByTagName( "ul")
            if (typeof persisteduls[treeid]=="undefined" )
            persisteduls[treeid]=(enablepersist ==true &&
            ddtreemenu.getC ookie(treeid)!= "")? ddtreemenu.getC ookie(treeid).s plit(",") :
            ""
            for (var i=0; i<ultags.length ; i++)
            ddtreemenu.buil dSubTree(treeid , ultags[i], i)
            if (enablepersist= =true){ //if enable persist feature
            var durationdays=(t ypeof persistdays=="u ndefined")? 1 :
            parseInt(persis tdays)
            ddtreemenu.dota sk(window, function(){ddtr eemenu.remember state(treeid,
            durationdays)}, "unload") //save opened UL indexes on body unload
            >
            }
            }
            >
            ddtreemenu.buil dSubTree=functi on(treeid, ulelement, index){
            ulelement.paren tNode.className ="submenu"
            if (typeof persisteduls[treeid]=="object"){ //if cookie exists
            (persisteduls[treeid] is an array versus "" string)
            if (ddtreemenu.sea rcharray(persis teduls[treeid], index)){
            ulelement.setAt tribute("rel", "open")
            ulelement.style .display="block "
            ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .openfolder+")"
            >
            }
            >
            else
            ulelement.setAt tribute("rel", "closed")
            >
            } //end cookie persist code
            >
            else if (ulelement.getA ttribute("rel") ==null ||
            ulelement.getAt tribute("rel")= =false) //if no cookie and UL has NO rel
            attribute explicted added by user
            ulelement.setAt tribute("rel", "closed")
            else if (ulelement.getA ttribute("rel") =="open") //else if no cookie and this
            UL has an explicit rel value of "open"
            ddtreemenu.expa ndSubTree(treei d, ulelement) //expand this UL plus all parent
            ULs (so the most inner UL is revealed!)
            ulelement.paren tNode.onclick=f unction(e){
            var submenu=this.ge tElementsByTagN ame("ul")[0]
            if (submenu.getAtt ribute("rel")== "closed"){
            submenu.style.d isplay="block"
            submenu.setAttr ibute("rel", "open")
            ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .openfolder+")"
            >
            }
            >
            else if (submenu.getAtt ribute("rel")== "open"){
            submenu.style.d isplay="none"
            submenu.setAttr ibute("rel", "closed")
            ulelement.paren tNode.style.bac kgroundImage="u rl("+ddtreemenu .closefolder+") ­­
            "
            >
            }
            >
            ddtreemenu.prev entpropagate(e)
            >
            }
            >
            ulelement.oncli ck=function(e){
            ddtreemenu.prev entpropagate(e)
            >
            }
            }
            >
            ddtreemenu.expa ndSubTree=funct ion(treeid, ulelement){ //expand a UL element
            and any of its parent ULs
            var rootnode=docume nt.getElementBy Id(treeid)
            var currentnode=ule lement
            currentnode.sty le.display="blo ck"
            currentnode.par entNode.style.b ackgroundImage= "url("+ddtreeme nu.openfolder+" ­­
            )
            "
            while (currentnode!=r ootnode){
            if (currentnode.ta gName=="UL"){ //if parent node is a UL, expand it too
            currentnode.sty le.display="blo ck"
            currentnode.set Attribute("rel" , "open") //indicate it's open
            currentnode.par entNode.style.b ackgroundImage= "url("+ddtreeme nu.openfolder+" ­­
            )
            "
            >
            }
            >
            currentnode=cur rentnode.parent Node
            >
            }
            }
            >
            ddtreemenu.flat ten=function(tr eeid, action){ //expand or contract all UL
            elements
            var ultags=document .getElementById (treeid).getEle mentsByTagName( "ul")
            for (var i=0; i<ultags.length ; i++){
            ultags[i].style.display= (action=="expan d")? "block" : "none"
            var relvalue=(actio n=="expand")? "open" : "closed"
            ultags[i].setAttribute(" rel", relvalue)
            ultags[i].parentNode.sty le.backgroundIm age=(action=="e xpand")?
            "url("+ddtreeme nu.openfolder+" )" : "url("+ddtreeme nu.closefolder+ ")"
            >
            }
            }
            >
            ddtreemenu.reme mberstate=funct ion(treeid, durationdays){ //store index of
            opened ULs relative to other ULs in Tree into cookie
            var ultags=document .getElementById (treeid).getEle mentsByTagName( "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.setC ookie(treeid, openuls.join(", "), durationdays) //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.getC ookie=function( Name){ //get cookie value
            var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target
            name/value pair
            if (document.cooki e.match(re)) //if cookie found
            return document.cookie .match(re)[0].split("=")[1] //return its value
            return ""
            >
            }
            >
            ddtreemenu.setC ookie=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=expir eDate.setDate(e xpireDate.getDa te()+parseInt(d ays))
            document.cookie = name+"="+value+ "; expires="+expir eDate.toGMTStri ng()+";
            path=/";
            >
            }
            >
            ddtreemenu.sear charray=functio n(thearray, value){ //searches an array for
            the entered value. If found, delete value from array
            var isfound=false
            for (var i=0; i<thearray.leng th; i++){
            if (thearray[i]==value){
            isfound=true
            thearray.shift( ) //delete this element from array for efficiency sake
            break
            >
            >
            >
            }
            }
            return isfound
            }
            >
            ddtreemenu.prev entpropagate=fu nction(e){ //prevent action from bubbling
            upwards
            if (typeof e!="undefined" )
            e.stopPropagati on()
            else
            event.cancelBub ble=true
            >
            }
            >
            ddtreemenu.dota sk=function(tar get, functionref, tasktype){ //assign a
            function to execute to an event handler (ie: onunload)
            var tasktype=(windo w.addEventListe ner)? tasktype : "on"+taskty pe
            if (target.addEven tListener)
            target.addEvent Listener(taskty pe, functionref, false)
            else if (target.attachE vent)
            target.attachEv ent(tasktype, functionref)
            This blob of script isn't helpful. Again, try the author(s) and be
            sure to tell them what the specific problem is.

            Comment

            • -Lost

              #7
              Re: contract and expand menus based on the previous state

              dmark@cinsoft.n et wrote:
              ><a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
              >All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
              >'contact')">Co ntract All</a>
              >
              A word of advice: if you are going to create anchors with the JS
              protocol, you need to create them with script.
              Explain that. As is, you're wrong.

              --
              -Lost
              Remove the extra words to reply by e-mail. Don't e-mail me. I am
              kidding. No I am not.

              Comment

              • Randy Webb

                #8
                Re: contract and expand menus based on the previous state

                -Lost said the following on 6/20/2007 12:37 AM:
                dmark@cinsoft.n et wrote:
                >><a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
                >>All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
                >>'contact')">C ontract All</a>
                >>
                >A word of advice: if you are going to create anchors with the JS
                >protocol, you need to create them with script.
                >
                Explain that. As is, you're wrong.
                Actually, the advice is solid. It is just based on a bad premise. While
                it is bad form/error-prone to use the javascript: protocol , it good
                advice to suggest creating it with JS. Although, if all you want is the
                onclick event, use a button that is created with JS.

                --
                Randy
                Chance Favors The Prepared Mind
                comp.lang.javas cript FAQ - http://jibbering.com/faq/index.html
                Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/

                Comment

                • -Lost

                  #9
                  Re: contract and expand menus based on the previous state

                  Randy Webb wrote:
                  -Lost said the following on 6/20/2007 12:37 AM:
                  >dmark@cinsoft.n et wrote:
                  >>><a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
                  >>>All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
                  >>>'contact')"> Contract All</a>
                  >>>
                  >>A word of advice: if you are going to create anchors with the JS
                  >>protocol, you need to create them with script.
                  >>
                  >Explain that. As is, you're wrong.
                  >
                  Actually, the advice is solid. It is just based on a bad premise. While
                  it is bad form/error-prone to use the javascript: protocol , it good
                  advice to suggest creating it with JS. Although, if all you want is the
                  onclick event, use a button that is created with JS.
                  Oh. Why is that then? I don't understand why the link or the BUTTON
                  has to be created with JavaScript.

                  --
                  -Lost
                  Remove the extra words to reply by e-mail. Don't e-mail me. I am
                  kidding. No I am not.

                  Comment

                  • Randy Webb

                    #10
                    Re: contract and expand menus based on the previous state

                    -Lost said the following on 6/20/2007 1:29 AM:
                    Randy Webb wrote:
                    >-Lost said the following on 6/20/2007 12:37 AM:
                    >>dmark@cinsoft.n et wrote:
                    >>>><a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
                    >>>>All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
                    >>>>'contact')" >Contract All</a>
                    >>>>
                    >>>A word of advice: if you are going to create anchors with the JS
                    >>>protocol, you need to create them with script.
                    >>>
                    >>Explain that. As is, you're wrong.
                    >>
                    >Actually, the advice is solid. It is just based on a bad premise.
                    >While it is bad form/error-prone to use the javascript: protocol , it
                    >good advice to suggest creating it with JS. Although, if all you want
                    >is the onclick event, use a button that is created with JS.
                    >
                    Oh. Why is that then? I don't understand why the link or the BUTTON
                    has to be created with JavaScript.
                    >
                    If the only purpose of a link/button is for the JS crowd, and you create
                    it with JS, then the non-JS people never see it. The only time it shows
                    on the page - or even exists - is if it is needed. Perfect degradation :-)

                    --
                    Randy
                    Chance Favors The Prepared Mind
                    comp.lang.javas cript FAQ - http://jibbering.com/faq/index.html
                    Javascript Best Practices - http://www.JavascriptToolbox.com/bestpractices/

                    Comment

                    • -Lost

                      #11
                      Re: contract and expand menus based on the previous state

                      Randy Webb wrote:
                      -Lost said the following on 6/20/2007 1:29 AM:
                      >Randy Webb wrote:
                      >>-Lost said the following on 6/20/2007 12:37 AM:
                      >>>dmark@cinsoft.n et wrote:
                      >>>>><a href="javascrip t:ddtreemenu.fl atten('treemenu 1', 'expand')">Expa nd
                      >>>>>All</a| <a href="javascrip t:ddtreemenu.fl atten('treemenu 1',
                      >>>>>'contact') ">Contract All</a>
                      >>>>>
                      >>>>A word of advice: if you are going to create anchors with the JS
                      >>>>protocol, you need to create them with script.
                      >>>>
                      >>>Explain that. As is, you're wrong.
                      >>>
                      >>Actually, the advice is solid. It is just based on a bad premise.
                      >>While it is bad form/error-prone to use the javascript: protocol , it
                      >>good advice to suggest creating it with JS. Although, if all you want
                      >>is the onclick event, use a button that is created with JS.
                      >>
                      >Oh. Why is that then? I don't understand why the link or the BUTTON
                      >has to be created with JavaScript.
                      >>
                      >
                      If the only purpose of a link/button is for the JS crowd, and you create
                      it with JS, then the non-JS people never see it. The only time it shows
                      on the page - or even exists - is if it is needed. Perfect degradation :-)
                      Ah, OK. Thanks. That totally eluded me, but now that I see it, it
                      makes perfect sense.

                      --
                      -Lost
                      Remove the extra words to reply by e-mail. Don't e-mail me. I am
                      kidding. No I am not.

                      Comment

                      • Nospam

                        #12
                        Re: contract and expand menus based on the previous state

                        I still can't find a solution to my problem, the contract and expand menus
                        don't work on sub menus only on the main contract all, and expand all
                        javascript, can anyone see anything in the code, or something I am missing
                        to get it to expand and contract for each sub menus?


                        Comment

                        Working...