diff -uP dynamic_persistent_menu.orig/dynamic_persistent_menu.js dynamic_persistent_menu/dynamic_persistent_menu.js
--- dynamic_persistent_menu.orig/dynamic_persistent_menu.js 2009-12-08 02:15:57.000000000 +0530
+++ dynamic_persistent_menu/dynamic_persistent_menu.js 2010-03-01 13:25:24.000000000 +0530
@@ -1,60 +1,111 @@
-var overMenu;
-var overStatus = 1;
+// $Id: dynamic_persistent_menu.js,v 1.2 2010-03-01 06:17:41 dileep Exp $
+
+/**
+ * @file dynamic_persistent_menu.js
+ * The Javascript code for Dynamic Persistent Menu
+ */
+var overMenu=new Array();
+var settings_id;
+var overStatus = 1;
+//TODO Single overStatus for multiple menus supported by the module? Probably needs array.
-$(document).ready(function()
-{
+/**
+ * Initialize the module's JS functions
+ */
+Drupal.behaviors.dynamic_persistent_menu = function() {
+ // Set the default overMenu
+ //alert(DynamicPersistentMenu['menus']);
+ //settings_id = dynamic_persistent_menu_menu_settings_index(overMenu);
+ //overMenu = DynamicPersistentMenu.menus[settings_id]['over'];
+ var boolStatus=new Array();
+ for (var i in DynamicPersistentMenu.menus) {
+ boolStatus[i]=0;
+ }
+ //overMenu= 'dynamic-persistent-menu-menu'+DynamicPersistentMenu.menus[1]['over'];
+ // alert(overMenu);
+ // Set mouseover function to show current submenu, hide previous submenu, if any.
$(".dynamic-persistent-menu-menu-item").mouseover(
- function ()
- {
- overStatus = 1 ;
- subMenu = dynamic_persistent_menu_get_sub_menu(overMenu);
-
- if (overMenu)
- {
- $('#' + subMenu).hide();
- $('#' + overMenu).removeClass('dynamic-persistent-menu-children-active');
- }
-
- overMenu = this.id;
- subMenu = dynamic_persistent_menu_get_sub_menu(overMenu);
- $('#' + subMenu).show();
- $('#' + this.id).addClass('dynamic-persistent-menu-children-active')
+ function () {
+ overStatus = 1 ;
+ //var parentId=$(this).parent().attr("id");
+ settings_id = dynamic_persistent_menu_menu_settings_index($(this));
+
+ if(boolStatus[settings_id]==0) {
+ overMenu[settings_id]= 'dynamic-persistent-menu-menu'+DynamicPersistentMenu.menus[settings_id]['over'];
+ //alert(overMenu);
+ boolStatus[settings_id]=1;
+ }
+ // If there was a previous menu which received a mouseover, hide the submenu.
+ if (overMenu[settings_id]) {
+ subMenu = dynamic_persistent_menu_get_sub_menu(overMenu[settings_id]);
+ $('#' + subMenu).hide();
+ $('#' + overMenu[settings_id]).removeClass('dynamic-persistent-menu-children-active');
+ }
+ // Show the submenu of the current menu.
+ overMenu[settings_id] = this.id;
+ subMenu = dynamic_persistent_menu_get_sub_menu(overMenu[settings_id]);
+ $('#' + subMenu).show();
+ $('#' + this.id).addClass('dynamic-persistent-menu-children-active');
}
- ).mouseout(
- dynamic_persistent_menu_set_timeout
- );
+ ).mouseout(
+ function() {
+ // Set timeout for the hide function
+ dynamic_persistent_menu_set_timeout(settings_id);
+ }
+ );
- $(".dynamic-persistent-menu-sub-menu").mouseover(
- function()
- {
- if (dynamic_persistent_menu_get_sub_menu(overMenu) == this.id)
- {
- overStatus = 1;
- }
- }
- ).mouseout(
-dynamic_persistent_menu_set_timeout
- )
-});
+ // Set mouseover function to keep overStatus as long as mouse is over the current menu.
+ $(".dynamic-persistent-menu-sub-menu").mouseover(
+ function() {
+ if (dynamic_persistent_menu_get_sub_menu(overMenu[settings_id]) == this.id) {
+ overStatus = 1;
+ }
+ }
+ ).mouseout(
+ function() {
+ dynamic_persistent_menu_set_timeout(settings_id);
+ }
+ );
+};
-function dynamic_persistent_menu_get_sub_menu(menu_id)
-{
+/**
+ * Get the id of the submenu of a menu, given its id.
+ */
+function dynamic_persistent_menu_get_sub_menu(menu_id) {
return menu_id.replace('dynamic-persistent-menu-menu','dynamic-persistent-menu-sub-menu');
}
-function dynamic_persistent_menu_reset()
-{
- if (!overStatus)
- {
- $('#' + dynamic_persistent_menu_get_sub_menu(overMenu)).hide();
- $('#' + overMenu).removeClass('dynamic-persistent-menu-children-active');
- overMenu = overMenuDefault;
- $('#' + dynamic_persistent_menu_get_sub_menu(overMenu)).show();
+/**
+ * Get the index of the settings array for a given menu.
+ */
+function dynamic_persistent_menu_menu_settings_index(menu_id) {
+ id = menu_id.parent().attr('id').replace('dynamic-persistent-menu-', '');
+ return Number(id);
+}
+
+/**
+ * Reset all submenus and the corresponding statuses.
+ */
+function dynamic_persistent_menu_reset() {
+ // Hide menu's only if the mouse is not over one of the submenus
+ if (!overStatus) {
+ // This can be avoided if the menus array index is the actual menu id itself.
+ // settings_id = dynamic_persistent_menu_menu_settings_index(overMenu);
+ $('#' + dynamic_persistent_menu_get_sub_menu(overMenu[settings_id])).hide();
+ $('#' + overMenu[settings_id]).removeClass('dynamic-persistent-menu-children-active');
+ //TODO - Use drupal settings array instead of custom settings.
+ overMenu[settings_id] = DynamicPersistentMenu.menus[settings_id]['default'];
+ $('#' + dynamic_persistent_menu_get_sub_menu(overMenu[settings_id])).show();
}
}
-function dynamic_persistent_menu_set_timeout()
-{
+/**
+ * Call timeout function.
+ */
+function dynamic_persistent_menu_set_timeout(settings_id) {
+ //settings_id = dynamic_persistent_menu_menu_settings_index(overMenu);
+ //TODO - Use drupal settings array instead of custom settings.
+ subMenuTimeout = DynamicPersistentMenu.menus[settings_id]['timeout'];
overStatus = 0 ;
- setTimeout( 'dynamic_persistent_menu_reset()' , subMenuTimeout );
-}
\ No newline at end of file
+ setTimeout('dynamic_persistent_menu_reset()', subMenuTimeout);
+}
diff -uP dynamic_persistent_menu.orig/dynamic_persistent_menu.module dynamic_persistent_menu/dynamic_persistent_menu.module
--- dynamic_persistent_menu.orig/dynamic_persistent_menu.module 2009-12-08 02:15:57.000000000 +0530
+++ dynamic_persistent_menu/dynamic_persistent_menu.module 2010-03-01 13:25:24.000000000 +0530
@@ -1,5 +1,5 @@
root);
$block['content'] = theme('dynamic_persistent_menu', $delta, $params[0], $params[1], $dpm->timeout);
return $block;
@@ -129,7 +128,7 @@
*/
function dynamic_persistent_menu_setting_base_form($dpm = NULL) {
- $options = menu_parent_options(menu_get_menus(), 0);
+ $options = menu_parent_options(menu_get_menus(), 0);
$form['dpmid'] = array(
'#type' => 'hidden',
'#value' => $dpm->dpmid
@@ -150,7 +149,7 @@
return $form;
}
-function dynamic_persistent_menu_load($dpmid) {
+function dynamic_persistent_menu_load($dpmid) {
$result = db_query('SELECT dpmid, root, timeout FROM {dynamic_persistent_menu} WHERE dpmid=%d', $dpmid);
return db_fetch_object($result);
@@ -164,10 +163,9 @@
* Theme functions
*/
-function theme_dynamic_persistent_menu($id, $menu_name, $mlid, $timeout) {
- static $settings;
-
- if (!isset($settings)) {
+function theme_dynamic_persistent_menu($id, $menu_name, $mlid, $timeout) {
+ static $settings;
+ if (!isset($settings)) {
$settings = array(
"menus" => array()
);
@@ -181,9 +179,8 @@
// Find menu item in the menu tree
$menu_tree = menu_tree_all_data($menu_name);
- $menu_link = menu_link_load($mlid);
-
- if ($mlid != 0) {
+ $menu_link = menu_link_load($mlid);
+ if ($mlid != 0) {
for ($i=1; $i<10; $i++) {
foreach($menu_tree as $menu_item) {
if ($menu_item["link"]['mlid'] == $mlid) {
@@ -207,37 +204,105 @@
if (!$menu) {
return;
- }
-
+ }
+ $menu_active=menu_set_active_trail();
+ /*foreach ($menu_active [1] as $key => $value) {
+ print "Key: $key; Value: $value
\n";
+ }*/
+ if(count ($menu_active) > 1) {
+ $result = db_query("SELECT * FROM {menu_links} WHERE menu_name='%s' AND link_path='%s'",$menu_name,$menu_active[1]['href']);
+ if($row=db_fetch_object($result)) {
+ if($row->plid !=0) {
+ $trail[] = $row->plid;
+ }
+ else {
+ $trail[] = $row->mlid;
+ }
+ //$active_menu=$row->menu_name;
+ //print $active_menu;
+ }
+ }
+ /*foreach ($a[1] as $key => $value) {
+ print "Key: $key; Value: $value
\n";
+ }*/
// Backup active menu trail and set a new one
-
- $active_menu_name = menu_get_active_menu_name();
- menu_set_active_menu_name($menu_name);
-
- // Build table of mlid in the active trail
-
- foreach (menu_set_active_trail() as $value) {
- if ($value['mlid']) {
+ $active_menu_name = menu_get_active_menu_name();
+ menu_set_active_menu_name($menu_name);
+ /*$a=menu_set_active_trail();
+ foreach ($a[1] as $key => $value) {
+ print "Key: $key; Value: $value
\n";
+ }*/
+ /*$result = db_query('SELECT dpmid, root, timeout FROM {dynamic_persistent_menu}');
+ while ($row=db_fetch_object($result)) {
+ $arrroot=explode(":",$row->root);
+ print $arrroot[0]."=====".$menu_name."
";
+ if($arrroot[0]==$menu_name) {
+
+ }
+ }*/
+
+
+ //print $arrroot[0];
+
+
+
+ // Build table of mlid in the active trail
+
+ //print $a;
+ /* foreach ($menu as $key => $value) {
+ print "Key: $key; Value: $value
\n";
+ }*/
+ //print count (menu_set_active_trail())."
";
+
+ /*$bool_active_trail=TRUE;
+ if (count (menu_set_active_trail()) == 1) {
+ //print ("dileep");
+ $a=menu_tree_all_data($menu_name);
+ foreach ($a as $b) {
+ $first_mid = $b['link']['mlid'];
+ break;
+ }
+ $bool_active_trail=FALSE;
+ }
+ else if (count (menu_set_active_trail()) >1) {
+ $control_menu=menu_set_active_trail();
+ if (!$control_menu[1]['mlid']) {
+ $a=menu_tree_all_data($menu_name);
+ foreach ($a as $b) {
+ $first_mid = $b['link']['mlid'];
+ break;
+ }
+ $bool_active_trail=FALSE;
+ }
+
+ }*/
+ // print count (menu_set_active_trail());
+ /* foreach (menu_set_active_trail() as $value) {
+ if ($value['mlid']) {
$trail[] = $value['mlid'];
- }
- }
-
- // Restore active menu trail
+ }
+ }*/
+ // Restore active menu trail
menu_set_active_menu_name($active_menu_name);
// Build the menus
- $output = '