menuExpandable.js
上传用户:huijianzhu
上传日期:2009-11-25
资源大小:9825k
文件大小:6k
源码类别:

电子政务应用

开发平台:

Java

  1. /*
  2.  * menuExpandable2.js - implements an expandable menu based on a HTML list
  3.  * Author: Dave Lindquist (dave@gazingus.org)
  4.  */
  5. if (!document.getElementById) {
  6.     document.getElementById = function() { return null; }
  7. }
  8. var menuCookie = "menusToExpand";
  9. var itemCookie = "itemToHighlight";
  10. function initializeMenu(menuId, actuatorId) {
  11.     var menu = document.getElementById(menuId);
  12.     var actuator = document.getElementById(actuatorId);
  13.     if (menu == null || actuator == null) return;
  14.     //if (window.opera) return; // I'm too tired
  15.     
  16.     actuator.parentNode.style.backgroundImage = "url(images/plus.gif)";
  17.     actuator.onclick = function() {
  18.         var display = menu.style.display;
  19.         this.parentNode.style.backgroundImage =
  20.             (display == "block") ? "url(images/plus.gif)" : "url(images/minus.gif)";
  21.         menu.style.display = (display == "block") ? "none" : "block";
  22.         
  23.         // Begin custom code for remembering expanded menus with cookies
  24.         var menusToExpand = getCookie(menuCookie);
  25.         if (menu.style.display == "block") {
  26.             // set a cookie to keep the menu expanded
  27.             if (menusToExpand == null) {
  28.                 setCookie(menuCookie,menuId);
  29.             } else if (menusToExpand.indexOf(menuId) == -1) {
  30.                 setCookie(menuCookie,menusToExpand+","+menuId);
  31.             }
  32.         } else {
  33.             // remove it from the expanded cookie list
  34.             if (menusToExpand.indexOf(menuId) != -1) {
  35.                 // check for comma after menu
  36.                 if (menusToExpand.indexOf(menuId+",") != -1) {
  37.                     menusToExpand = menusToExpand.replace(menuId+",","");
  38.                 } else {
  39.                     menusToExpand = menusToExpand.replace(menuId,"");
  40.                 }
  41.                 if (menusToExpand == "") {
  42.                     deleteCookie(menuCookie);
  43.                 } else {
  44.                     setCookie(menuCookie,menusToExpand);
  45.                 }
  46.             }
  47.         }
  48.         // End custom code
  49.         
  50.         return false;
  51.     }
  52. }
  53. // This function loops through all the <ul>'s in the document and
  54. // initializes the menus for them if they have menu classes
  55. function initializeMenus() {
  56.     var menu = document.getElementById("menuDiv");
  57.     if (menu == null) {
  58.         return;
  59.     }
  60.     var links = menu.getElementsByTagName("a");
  61.     var lists = document.getElementsByTagName("ul");
  62.     var actuators = new Array();
  63.     var nonActuators = new Array();
  64.     // build an array of actuators
  65.     for (i=0; i < links.length; i++) {
  66.         if (links[i].className == "actuator") {
  67.             actuators[actuators.length] = links[i];
  68.         } else {
  69.             nonActuators[nonActuators.length] = links[i];
  70.         }
  71.     }
  72.     var menus = new Array();
  73.     // build an array of menus
  74.     for (i=0; i < lists.length; i++) {
  75.         if (lists[i].className == "menu" || lists[i].className == "submenu") {
  76.             menus[menus.length] = lists[i];
  77.         }
  78.     }
  79.     // initialize actuators and menus (number should be the same)
  80.     for (i=0; i < actuators.length; i++) {
  81.         initializeMenu(menus[i].id, actuators[i].id);
  82.     }
  83.     
  84.     // Begin custom code to remember last item clicked (with cookies)
  85.     // add an onclick event to set a cookie on the non-actuators
  86.     for (i=0; i < nonActuators.length; i++) {
  87.         nonActuators[i].onclick=function() {
  88.             setCookie(itemCookie,this.href);
  89.         }
  90.     }
  91.     // user must have cookies enabled for this to work
  92.     expandMenus();
  93. }
  94. function openMenu(menuId) {
  95.     var menu = document.getElementById(menuId);
  96.     var actuatorId = menuId.substring(0, menuId.indexOf("Menu")) + "Actuator";
  97.     var actuator = document.getElementById(actuatorId);
  98.     if (menu != null) {
  99.         var display = menu.style.display;
  100.         menu.parentNode.style.backgroundImage = "url(images/minus.gif)";
  101.         menu.style.display = (display == "block") ? "none" : "block";
  102.     }
  103. }
  104. function expandMenus() {
  105.     var menusToExpand = getCookie(menuCookie);
  106.     if (menusToExpand != null) {
  107.         // if more than one menu has been menusToExpanded,
  108.         // create an array of menusToExpanded menus
  109.         if (menusToExpand.indexOf(",") != -1) {
  110.             menuArray = menusToExpand.split(",");
  111.             for (var i=0; i < menuArray.length; i++) {
  112.                 openMenu(menuArray[i]);
  113.             }
  114.          } else {
  115.             openMenu(menusToExpand);
  116.          }
  117.     }
  118.     var itemToHighlight = getCookie(itemCookie);
  119.     var links = document.getElementsByTagName("a");
  120.     // add an onclick event to set a cookie on the non-actuators
  121.     for (i=0; i < links.length; i++) {
  122.         if (links[i].href == itemToHighlight) {
  123.             links[i].className += " highlight";
  124.         }
  125.     }
  126. }
  127. // =========================================================================
  128. //                          Cookie functions 
  129. // =========================================================================
  130. /* This function is used to set cookies */
  131. function setCookie(name,value,expires,path,domain,secure) {
  132.   document.cookie = name + "=" + escape (value) +
  133.     ((expires) ? "; expires=" + expires.toGMTString() : "") +
  134.     ((path) ? "; path=" + path : "") +
  135.     ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
  136. }
  137. /* This function is used to get cookies */
  138. function getCookie(name) {
  139. var prefix = name + "=" 
  140. var start = document.cookie.indexOf(prefix) 
  141. if (start==-1) {
  142. return null;
  143. }
  144. var end = document.cookie.indexOf(";", start+prefix.length) 
  145. if (end==-1) {
  146. end=document.cookie.length;
  147. }
  148. var value=document.cookie.substring(start+prefix.length, end) 
  149. return unescape(value);
  150. }
  151. /* This function is used to delete cookies */
  152. function deleteCookie(name,path,domain) {
  153.   if (getCookie(name)) {
  154.     document.cookie = name + "=" +
  155.       ((path) ? "; path=" + path : "") +
  156.       ((domain) ? "; domain=" + domain : "") +
  157.       "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  158.   }
  159. }