www.webdeveloper.com
Results 1 to 2 of 2

Thread: Help with Persistence Cookie

Hybrid View

  1. #1
    Join Date
    Jun 2005
    Posts
    7

    Exclamation Menu Tree Persistence Cookie

    I'm working on a menu that is basically a javascript enabled collapsing tree. It uses a cookie to remember which nav items you have open so that when you go to another page and come back, the ones that were open are still open.

    I would like to change the cookie so that it remembers which nav items you had open from page to page, so that whenever you go to a new page the same menu items you just had open are still open.

    here is the code:


    javascript-

    Code:
    <script language="JavaScript1.2">
    
    var head="display:''"
    img1=new Image()
    img1.src="fold.gif"
    img2=new Image()
    img2.src="open.gif"
    
    var ns6=document.getElementById&&!document.all
    var ie4=document.all&&navigator.userAgent.indexOf("Opera")==-1
    
    function checkcontained(e){
    var iscontained=0
    cur=ns6? e.target : event.srcElement
    i=0
    if (cur.id=="foldheader")
    iscontained=1
    else
    while (ns6&&cur.parentNode||(ie4&&cur.parentElement)){
    if (cur.id=="foldheader"||cur.id=="foldinglist"){
    iscontained=(cur.id=="foldheader")? 1 : 0
    break
    }
    cur=ns6? cur.parentNode : cur.parentElement
    }
    
    if (iscontained){
    var foldercontent=ns6? cur.nextSibling.nextSibling : cur.all.tags("UL")[0]
    if (foldercontent.style.display=="none"){
    foldercontent.style.display=""
    cur.style.listStyleImage="url(open.gif)"
    }
    else{
    foldercontent.style.display="none"
    cur.style.listStyleImage="url(fold.gif)"
    }
    }
    }
    
    if (ie4||ns6)
    document.onclick=checkcontained
    
    
    </script>
    HTML-

    Code:
    <ul>
       <li id="foldheader">News</li>
       <ul id="foldinglist" style="display:none" style=&{head};>
          <li><a href="http://www.cnn.com">CNN</a></li>
          <li><a href="http://www.abcnews.com">ABC News</a></li>
          <li><a href="http://www.news.bbc.co.uk">BBC News</a></li>
       </ul>
    
       <li id="foldheader">Webmaster</li>
       <ul id="foldinglist" style="display:none" style=&{head};>
          <li><a href="http://www.dynamicdrive.com">Dynamic Drive</a></li>
          <li><a href="http://www.javascriptkit.com">JavaScript Kit</a></li>
          <li><a href="http://www.freewarejava.com">Freewarejava.com</a></li>
       </ul>
    
       <li id="foldheader">Nested Example</li>
       <ul id="foldinglist" style="display:none" style=&{head};>
          <li><a href="http://www.dynamicdrive.com">outer 1</a></li>
          <li><a href="http://www.dynamicdrive.com">outer 2</a></li>
          <li id="foldheader">Nested</li>
          <ul id="foldinglist" style="display:none" style=&{head};>
             <li><a href="http://www.dynamicdrive.com">nested 1</a></li>
             <li><a href="http://www.dynamicdrive.com">nested 2</a></li>
          </ul>
          <li><a href="http://www.dynamicdrive.com">outer 3</a></li>
          <li><a href="http://www.dynamicdrive.com">outer 4</a></li>
       </ul>
    </ul>
    Cookie-

    Code:
    <script language="JavaScript1.2">
    <!--
    
    function get_cookie(Name) {
    //Get cookie routine by Shelley Powers 
      var search = Name + "="
      var returnvalue = "";
      if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(search)
        // if cookie exists
        if (offset != -1) { 
          offset += search.length
          // set index of beginning of value
          end = document.cookie.indexOf(";", offset);
          // set index of end of cookie value
          if (end == -1) end = document.cookie.length;
          returnvalue=unescape(document.cookie.substring(offset, end))
          }
       }
      return returnvalue;
    }
    
    var foldercontentarray=new Array()
    var c=0
    
    if (ns6){
    for (i=0;i<document.getElementsByTagName("UL").length;i++){
    if (document.getElementsByTagName("UL")[i].id=="foldinglist"){
    foldercontentarray[c]=document.getElementsByTagName("UL")[i]
    c++
    }
    }
    }
    
    if (get_cookie(window.location.pathname) != ''){
      var openresults=get_cookie(window.location.pathname).split(" ")
      for (i=0 ; i < openresults.length ; i++){
        if (ns6){
        foldercontentarray[openresults[i]].style.display=''
        foldercontentarray[openresults[i]].previousSibling.previousSibling.style.listStyleImage="url(open.gif)"
        }
        else{
        foldinglist[openresults[i]].style.display=''
        document.all[foldinglist[openresults[i]].sourceIndex -1].style.listStyleImage="url(open.gif)"
        }
      }
    }
    
    if (ns6||ie4){
    var nodelength=ns6? c-1 : foldinglist.length-1
    var nodes=new Array(nodelength)
    var openones=''
    }
    
    function checkit(){
      for (i=0 ; i <= nodelength ; i++){
        if ((ns6&&foldercontentarray[i].style.display=='')||(ie4&&foldinglist[i].style.display==''))
           openones=openones + " " + i
      }
      document.cookie=window.location.pathname+"="+openones
    }
    
    if (ns6||ie4)
    window.onunload=checkit
    //-->
    </script>
    Last edited by unurban; 06-15-2005 at 01:39 PM.

  2. #2
    Join Date
    Jun 2005
    Posts
    7
    *bump*

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

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



Recent Articles