/** * $Id: dhtml_menu.js,v 1.15 2008/06/23 12:15:07 arancaytar Exp $ * @author: Bruno Massa http://drupal.org/user/67164 * @file slideshow_creator.js * The main Javacript for this module */ Drupal.dhtmlMenu = {}; var dhtmlRun = false; /** * Initialize the module's JS functions */ Drupal.behaviors.dhtmlMenu = function(context) { // Do not run this function more than once. if (dhtmlRun) return; else dhtmlRun = true; // Get the Cookie's data var cookievalue = Drupal.dhtmlMenu.cookieGet(); // If there is any menus that should be expanded, // do it now if (cookievalue != '') { var cookieList = cookievalue.split(','); for (var i = 0; i < cookieList.length; i++) { if (!document.getElementById(cookieList[i])) { cookieList.splice(i, 1); } else { submenu = document.getElementById(cookieList[i]); menu = document.getElementById('menu-' + cookieList[i]); $(menu).removeClass('collapsed').addClass('expanded'); $(submenu).removeClass('sub-collapsed').addClass('sub-expanded'); $(submenu).show(); $(submenu).css('display', 'block'); } } } // Add jQuery effects (click and double click) to all menu items $('ul.menu li[@class!="leaf"] > a').each(function() { if ($(this).siblings('div.submenu').length > 0) { $(this) .css({display: 'block', zIndex: 2}) .dblclick(function(e) { window.location = this.href; }) .click(function(e) { id = $(this).parents()[0].id.replace('menu-', ''); Drupal.dhtmlMenu.switchMenu(id, $(this).parents()[0]); return false; }); } }); } /** * Grabs the cookie data. * * @return * String. A list, separated by comma, of all menu IDs * that should be expanded. */ Drupal.dhtmlMenu.cookieGet = function() { var string = 'dhtml_menu='; var returnvalue = ''; // If there is a previous instance of this cookie if (document.cookie.length > 0) { // Get the number of characters that have the list of values // from 'dhtml_menu' index. offset = document.cookie.indexOf(string); // If its positive, there is a list! if (offset != -1) { offset += string.length; var end = document.cookie.indexOf(';', offset); if (end == -1) { end = document.cookie.length; } // Get a list of all values that are saved on 'dhtml_menu=' returnvalue = unescape(document.cookie.substring(offset, end)); } } return returnvalue; } /** * Saves the states of the menus. */ Drupal.dhtmlMenu.cookieSet = function() { var menus = ''; // Get a list of menu IDs, saparated by comma $('div.submenu').each(function(i) { if ($(this).hasClass('sub-expanded')) { if (menus != '') { menus += ','; } menus += this.id; } }); // Save this values on the cookie document.cookie = 'dhtml_menu=' + escape(menus) + ';path=/'; } /** * Hide all submenus */ Drupal.dhtmlMenu.hideSiblings = function(parent_menu) { $(parent_menu).siblings('.expanded').each(function() { id = $(this).attr('id').replace('menu-', ''); Drupal.dhtmlMenu.switchMenu(id, this); }); }; /** * Changes the state of a submenu from open to close. * * @param submenu * String. The submenu ID (including the "#") * @param parent_menu * String. The parent item ID (including the "#") */ Drupal.dhtmlMenu.switchMenu = function(submenu, parent_menu) { submenu = document.getElementById(submenu); // First, see if the menu is already expanded or collapsed, // and perform the opposing effect if($(parent_menu).is('.expanded')) { // If the user wants the Fading effects, use it, // otherwise, simply make the menu disapear if (Drupal.settings.dhtmlMenu_useEffects) { $(submenu).hide('fast'); } else { $(submenu).css('display', 'none'); } // Set the parent menu item as collapsed $(parent_menu).removeClass('expanded').addClass('collapsed'); $(submenu).removeClass('sub-expanded').addClass('sub-collapsed'); } else { if (Drupal.settings.dhtmlMenu_hideSiblings) { Drupal.dhtmlMenu.hideSiblings(parent_menu); } // If the user wants the Fading effects, use it, // otherwise, simply make the menu apear if (Drupal.settings.dhtmlMenu_useEffects) { $(submenu).show('fast'); } else { $(submenu).css('display', 'block'); } $(parent_menu).removeClass('collapsed').addClass('expanded'); $(submenu).removeClass('sub-collapsed').addClass('sub-expanded'); } // After all changes, save the current state // of the menus, so other pages will load and use // this new layout Drupal.dhtmlMenu.cookieSet(); }