// $Id: jquerymenu.js,v 1.6 2009/11/16 08:44:48 aaronhawkins Exp $ Drupal.behaviors.jquerymenu = function(context) { /* show and hide "edit this menu item buttons */ /*jqm_showit = function() { $(this).children('.jqm_link_edit').fadeIn(); } jqm_hideit = function() { $(this).children('.jqm_link_edit').fadeOut(); } $('ul.jquerymenu li').hover(jqm_showit, jqm_hideit);*/ /* sb patch */ /* init debugging - set debug = false to disable debugging */ var debug = false; if (debug) { $('body').append('
'); } jqm_debug = function(message) { /* debugging - quote this line too, when debugging is disabled (for performance only) */ if (debug) { $('#debug-trace-display').append("
"+message+"
"); // +"\n"); } } jqm_debug('Debug output:'); /* /debugging */ /* This method captures menu changes (i.e. menu items get folded and unfolded). All changes are stored in a cookie called "jqmState" (modify by changing variable "cookieName"). The cookie contains a list of all opened items. */ jqm_cookieName = 'jqmState'; jqm_getState = function() { var cookie = ""; if (document.cookie.length>0) { var c_start=document.cookie.indexOf(jqm_cookieName + "="); if (c_start!=-1) { c_start=c_start + jqm_cookieName.length+1 ; var c_end=document.cookie.indexOf(";",c_start); if (c_end==-1) c_end=document.cookie.length cookie = unescape(document.cookie.substring(c_start,c_end)); } } /* parse cookie */ var nodes = new Array(); if (cookie.length > 0) { nodes = cookie.split(','); } return nodes; } jqm_state = function(menuItemId, open) { /* sanitary code */ if (typeof(menuItemId) == "string") { menuItemId = new Number(menuItemId); } if (typeof(menuItemId) == "object") { menuItemId = $(menuItemId).attr('id'); } //if (typeof(menuItemId) != "number" && isNaN(menuItemId)) { if (!menuItemId || typeof(menuItemId) != "string" || menuItemId.length < 1) { jqm_debug('invalid menuItemId: '+menuItemId); return; } /* init */ jqm_debug("change jqm state for "+menuItemId+" to be opened: "+open); var cookieName = jqm_cookieName; //'jqmState'; var cookieExpireDate = new Date(); cookieExpireDate.setDate(cookieExpireDate.getDate() + 1); /* load cookie data */ var nodes = jqm_getState(); jqm_debug("old nodes: "+nodes); /* is node in already? */ var nodeIndex = -1; for (var x = 0; x < nodes.length && nodeIndex < 0; x++) { if (menuItemId == nodes[x]) { nodeIndex = x; } } if ((open && (nodeIndex >= 0)) || (!open && (nodeIndex < 0))) { /* nothing to do */ return; } if (open) { /* add node to storage */ nodes.push(menuItemId); } else { nodes.splice(nodeIndex, 1); } jqm_debug("new nodes: "+nodes); /* store cookie */ var cookie = cookieName + "=" + escape(nodes.join(',')) + "; path=/; expires=" + cookieExpireDate.toGMTString(); jqm_debug("new cookie "+cookie); document.cookie = cookie; } /* restore menu setting (i.e. folding of each item) based on the stored cookie */ jqm_restoreMenu = function() { var nodes = jqm_getCookie(); for (var x = 0; x < nodes.length && nodeIndex < 0; x++) { } } /* /sb patch */ var nodesToBeRestored = jqm_getState(); $('ul.jquerymenu:not(.jquerymenu-processed)', context).addClass('jquerymenu-processed').each(function(){ $(this).find("li.parent span.parent")/* sb patch */.each(function() { /* restore state */ momma = $(this).parent(); jqm_debug('r-test: '+ $(momma).attr("id") +' in '+ nodesToBeRestored.join() +' ? '+ jQuery.inArray($(momma).attr("id"), nodesToBeRestored)); if (jQuery.inArray($(momma).attr("id"), nodesToBeRestored) > -1) { jqm_debug('# restore '+$(momma).attr("id")); $($(this).siblings('ul').children()).show(); //$(momma).children('ul').slideDown('700'); $(momma).removeClass('closed').addClass('open'); $(this).removeClass('closed').addClass('open'); } })/* /sb patch */.click(function(){ momma = $(this).parent(); /* sb patch */ var toBeOpened = $(momma).hasClass('closed'); jqm_state($(momma).attr("id"), toBeOpened); /* /sb patch */ if (toBeOpened){ $($(this).siblings('ul').children()).hide().fadeIn('3000'); $(momma).children('ul').slideDown('700'); $(momma).removeClass('closed').addClass('open'); $(this).removeClass('closed').addClass('open'); jqm_state($(momma), true); } else{ $(momma).children('ul').slideUp('700'); $($(this).siblings('ul').children()).fadeOut('3000'); $(momma).removeClass('open').addClass('closed'); $(this).removeClass('open').addClass('closed'); jqm_state($(momma), false); } }); }); }