Advertisement
Guest User

Untitled

a guest
May 30th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var persisteduls=new Object()
  2. var ddtreemenu=new Object()
  3.  
  4. ddtreemenu.closefolder="plugins/roles_tree/lib/plus_box.png?>" //set image path to "closed" folder image
  5. ddtreemenu.openfolder="plugins/roles_tree/lib/minus_box.png?>" //set image path to "open" folder image
  6.  
  7. //////////No need to edit beyond here///////////////////////////
  8.  
  9. ddtreemenu.createTree=function(treeid, enablepersist, persistdays){
  10.     var ultags=document.getElementById(treeid).getElementsByTagName("ul")
  11.     if (typeof persisteduls[treeid]=="undefined")
  12.         persisteduls[treeid]=(enablepersist==true && ddtreemenu.getCookie(treeid)!="")? ddtreemenu.getCookie(treeid).split(",") : ""
  13.     for (var i=0; i<ultags.length; i++)
  14.         ddtreemenu.buildSubTree(treeid, ultags[i], i)
  15.     if (enablepersist==true){ //if enable persist feature
  16.         var durationdays=(typeof persistdays=="undefined")? 1 : parseInt(persistdays)
  17.         ddtreemenu.dotask(window, function(){
  18.             ddtreemenu.rememberstate(treeid, durationdays)
  19.             }, "unload") //save opened UL indexes on body unload
  20.     }
  21. }
  22.  
  23. ddtreemenu.buildSubTree=function(treeid, ulelement, index){
  24.     ulelement.parentNode.className="submenu"
  25.     if (typeof persisteduls[treeid]=="object"){ //if cookie exists (persisteduls[treeid] is an array versus "" string)
  26.         if (ddtreemenu.searcharray(persisteduls[treeid], index)){
  27.             ulelement.setAttribute("rel", "open")
  28.             ulelement.style.display="block"
  29.             ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
  30.         }
  31.         else
  32.             ulelement.setAttribute("rel", "closed")
  33.     } //end cookie persist code
  34.     else if (ulelement.getAttribute("rel")==null || ulelement.getAttribute("rel")==false) //if no cookie and UL has NO rel attribute explicted added by user
  35.         ulelement.setAttribute("rel", "closed")
  36.     else if (ulelement.getAttribute("rel")=="open") //else if no cookie and this UL has an explicit rel value of "open"
  37.         ddtreemenu.expandSubTree(treeid, ulelement) //expand this UL plus all parent ULs (so the most inner UL is revealed!)
  38.     ulelement.parentNode.onclick=function(e){
  39.         var submenu=this.getElementsByTagName("ul")[0]
  40.         if (submenu.getAttribute("rel")=="closed"){
  41.             submenu.style.display="block"
  42.             submenu.setAttribute("rel", "open")
  43.             ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
  44.         }
  45.         else if (submenu.getAttribute("rel")=="open"){
  46.             submenu.style.display="none"
  47.             submenu.setAttribute("rel", "closed")
  48.             ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.closefolder+")"
  49.         }
  50.         ddtreemenu.preventpropagate(e)
  51.     }
  52.     ulelement.onclick=function(e){
  53.         ddtreemenu.preventpropagate(e)
  54.     }
  55. }
  56.  
  57. ddtreemenu.expandSubTree=function(treeid, ulelement){ //expand a UL element and any of its parent ULs
  58.     var rootnode=document.getElementById(treeid)
  59.     var currentnode=ulelement
  60.     currentnode.style.display="block"
  61.     currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
  62.     while (currentnode!=rootnode){
  63.         if (currentnode.tagName=="UL"){ //if parent node is a UL, expand it too
  64.             currentnode.style.display="block"
  65.             currentnode.setAttribute("rel", "open") //indicate it's open
  66.             currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
  67.         }
  68.         currentnode=currentnode.parentNode
  69.     }
  70. }
  71.  
  72. ddtreemenu.flatten=function(treeid, action){ //expand or contract all UL elements
  73.     var ultags=document.getElementById(treeid).getElementsByTagName("ul")
  74.     for (var i=0; i<ultags.length; i++){
  75.         ultags[i].style.display=(action=="expand")? "block" : "none"
  76.         var relvalue=(action=="expand")? "open" : "closed"
  77.         ultags[i].setAttribute("rel", relvalue)
  78.         ultags[i].parentNode.style.backgroundImage=(action=="expand")? "url("+ddtreemenu.openfolder+")" : "url("+ddtreemenu.closefolder+")"
  79.     }
  80. }
  81.  
  82. ddtreemenu.rememberstate=function(treeid, durationdays){ //store index of opened ULs relative to other ULs in Tree into cookie
  83.     var ultags=document.getElementById(treeid).getElementsByTagName("ul")
  84.     var openuls=new Array()
  85.     for (var i=0; i<ultags.length; i++){
  86.         if (ultags[i].getAttribute("rel")=="open")
  87.             openuls[openuls.length]=i //save the index of the opened UL (relative to the entire list of ULs) as an array element
  88.     }
  89.     if (openuls.length==0) //if there are no opened ULs to save/persist
  90.         openuls[0]="none open" //set array value to string to simply indicate all ULs should persist with state being closed
  91.     ddtreemenu.setCookie(treeid, openuls.join(","), durationdays) //populate cookie with value treeid=1,2,3 etc (where 1,2... are the indexes of the opened ULs)
  92. }
  93.  
  94. ////A few utility functions below//////////////////////
  95.  
  96. ddtreemenu.getCookie=function(Name){ //get cookie value
  97.     var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
  98.     if (document.cookie.match(re)) //if cookie found
  99.         return document.cookie.match(re)[0].split("=")[1] //return its value
  100.     return ""
  101. }
  102.  
  103. ddtreemenu.setCookie=function(name, value, days){ //set cookei value
  104.     var expireDate = new Date()
  105.     //set "expstring" to either future or past date, to set or delete cookie, respectively
  106.     var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days))
  107.     document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/";
  108. }
  109.  
  110. ddtreemenu.searcharray=function(thearray, value){ //searches an array for the entered value. If found, delete value from array
  111.     var isfound=false
  112.     for (var i=0; i<thearray.length; i++){
  113.         if (thearray[i]==value){
  114.             isfound=true
  115.             thearray.shift() //delete this element from array for efficiency sake
  116.             break
  117.         }
  118.     }
  119.     return isfound
  120. }
  121.  
  122. ddtreemenu.preventpropagate=function(e){ //prevent action from bubbling upwards
  123.     if (typeof e!="undefined")
  124.         e.stopPropagation()
  125.     else
  126.         event.cancelBubble=true
  127. }
  128.  
  129. ddtreemenu.dotask=function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
  130.     var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
  131.     if (target.addEventListener)
  132.         target.addEventListener(tasktype, functionref, false)
  133.     else if (target.attachEvent)
  134.         target.attachEvent(tasktype, functionref)
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement