Index: includes/menu.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/menu.inc,v retrieving revision 1.84 diff -u -r1.84 menu.inc --- includes/menu.inc 25 Aug 2005 21:14:16 -0000 1.84 +++ includes/menu.inc 6 Sep 2005 06:17:16 -0000 @@ -549,11 +549,16 @@ * * @param $pid * The parent id of the menu. + * @param $dynamic + * Boolean indicating whether the menu should be rendered for dynamic, interactive display. * * @ingroup themeable */ -function theme_menu_tree($pid = 1) { - if ($tree = menu_tree($pid)) { +function theme_menu_tree($pid = 1, $dynamic = NULL) { + if ($dynamic == NULL) { + $dynamic = theme_get_setting('dynamic_menus'); + } + if ($tree = menu_tree($pid, $dynamic)) { return "\n\n"; } } @@ -563,14 +568,17 @@ * * @param $pid * The parent id of the menu. + * @param $dynamic + * Boolean indicating whether the menu should be rendered for dynamic, interactive display. */ -function menu_tree($pid = 1) { +function menu_tree($pid = 1, $dynamic = FALSE) { $menu = menu_get_menu(); $output = ''; if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) { foreach ($menu['visible'][$pid]['children'] as $mid) { - $output .= theme('menu_item', $mid, menu_in_active_trail($mid) || ($menu['visible'][$mid]['type'] & MENU_EXPANDED) ? theme('menu_tree', $mid) : '', count($menu['visible'][$mid]['children']) == 0); + $state = count($menu['visible'][$mid]['children']) == 0 ? 'leaf' : ((menu_in_active_trail($mid) || ($menu['visible'][$mid]['type'] & MENU_EXPANDED)) ? 'expanded' : 'collapsed'); + $output .= theme('menu_item', $mid, $state, ((count($menu['visible'][$mid]['children']) > 0) && ($dynamic || ($state == 'expanded')) ? theme('menu_tree', $mid, $dynamic) : ''), $dynamic); } } @@ -582,15 +590,20 @@ * * @param $mid * The menu id of the item. + * @param $class + * A string containing the CSS class. * @param $children * A string containing any rendered child items of this menu. - * @param $leaf - * A boolean indicating whether this menu item is a leaf. + * @param $dynamic + * Boolean indicating whether the menu should be rendered for dynamic, interactive display. * * @ingroup themeable */ -function theme_menu_item($mid, $children = '', $leaf = TRUE) { - return '
  • '. menu_item_link($mid) . $children ."
  • \n"; +function theme_menu_item($mid, $class = 'leaf', $children = '', $dynamic = FALSE) { + if ($dynamic) { + drupal_add_js('misc/menu.js'); + } + return '
  • '. (($dynamic && (($class == 'collapsed') || ($class == 'expanded'))) ? '' : '') . menu_item_link($mid) . $children ."
  • \n"; } /** Index: includes/theme.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/theme.inc,v retrieving revision 1.256 diff -u -r1.256 theme.inc --- includes/theme.inc 28 Aug 2005 15:29:34 -0000 1.256 +++ includes/theme.inc 6 Sep 2005 16:15:30 -0000 @@ -219,6 +219,7 @@ 'logo_path' => '', 'default_favicon' => 1, 'favicon_path' => '', + 'dynamic_menus' => 0, 'toggle_logo' => 1, 'toggle_favicon' => 1, 'toggle_name' => 1, Index: misc/drupal.css =================================================================== RCS file: /cvs/drupal/drupal/misc/drupal.css,v retrieving revision 1.117 diff -u -r1.117 drupal.css --- misc/drupal.css 2 Sep 2005 19:18:14 -0000 1.117 +++ misc/drupal.css 6 Sep 2005 14:42:43 -0000 @@ -74,9 +74,23 @@ padding: 0.2em 0.5em 0 0; margin: 0; } +li.expanded ul { + display: block; +} +li.collapsed ul { + display: none; +} li a.active { color: #000; } +.menu-dynamic-target { + height: 7px; + width: 7px; + margin-left:-15px; + margin-right: 8px; + cursor: pointer; + cursor: hand; +} td.menu-disabled { background: #ccc; } Index: modules/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system.module,v retrieving revision 1.229 diff -u -r1.229 system.module --- modules/system.module 28 Aug 2005 18:17:47 -0000 1.229 +++ modules/system.module 6 Sep 2005 14:48:52 -0000 @@ -751,6 +751,13 @@ $form .= form_group(t('Shortcut icon settings'), $group); } + // Dynamic menus setting + if ((!$key) || in_array('dynamic_menus', $features)) { + $group = t('Menu navigation can feature dynamic tree menus, which users can click to expand or collapse.'); + $group .= form_checkbox(t('Use dynamic menus.'), "$var][dynamic_menus", 1, $settings['dynamic_menus'], ''); + $form .= form_group(t('Dynamic menus'), $group); + } + // System wide only settings. if (!$key) { // Menu settings Index: themes/engines/phptemplate/phptemplate.engine =================================================================== RCS file: /cvs/drupal/drupal/themes/engines/phptemplate/phptemplate.engine,v retrieving revision 1.15 diff -u -r1.15 phptemplate.engine --- themes/engines/phptemplate/phptemplate.engine 4 Sep 2005 13:52:08 -0000 1.15 +++ themes/engines/phptemplate/phptemplate.engine 6 Sep 2005 14:43:06 -0000 @@ -121,6 +121,7 @@ function phptemplate_features() { return array( 'logo', + 'dynamic_menus', 'toggle_comment_user_picture', 'toggle_favicon', 'toggle_mission',