Index: includes/menu.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/menu.inc,v retrieving revision 1.77 diff -u -F^f -r1.77 menu.inc --- includes/menu.inc 21 Feb 2005 19:47:44 -0000 1.77 +++ includes/menu.inc 24 Feb 2005 08:50:15 -0000 @@ -468,7 +468,7 @@ function menu_get_active_breadcrumb() { $trail = _menu_get_active_trail(); foreach ($trail as $mid) { if ($menu['items'][$mid]['type'] & MENU_VISIBLE_IN_BREADCRUMB) { - $links[] = theme('menu_item', $mid); + $links[] = menu_item_link($mid); } } @@ -545,28 +545,32 @@ function menu_rebuild() { } /** - * Returns a rendered menu tree. + * Generate the HTML for a menu tree. + * + * @param $pid + * The parent id of the menu. * * @ingroup themeable */ -function theme_menu_tree($pid = 1, $all = FALSE) { +function theme_menu_tree($pid = 1) { + if ($tree = menu_tree($pid)) { + return "\n\n"; + } +} + +/** + * Returns a rendered menu tree. + * + * @param $pid + * The parent id of the menu. + */ +function menu_tree($pid = 1) { $menu = menu_get_menu(); $output = ''; if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) { - foreach ($menu['visible'][$pid]['children'] as $mid) { - $style = (count($menu['visible'][$mid]['children']) ? ((menu_in_active_trail($mid) || ($menu['visible'][$mid]['type'] & MENU_EXPANDED)) ? 'expanded' : 'collapsed') : 'leaf'); - $output .= "
  • "; - $output .= theme('menu_item', $mid); - if ($all || menu_in_active_trail($mid) || ($menu['visible'][$mid]['type'] & MENU_EXPANDED)) { - $output .= theme('menu_tree', $mid); - } - $output .= "
  • \n"; - } - - if ($output != '') { - $output = "\n\n"; + $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); } } @@ -574,14 +578,42 @@ function theme_menu_tree($pid = 1, $all } /** - * Generate the HTML representing a given menu item ID. + * Generate the HTML output for a single menu item. * * @param $mid - * The menu ID to render. + * The menu id of the item. + * @param $children + * A string containing any rendered child items of this menu. + * @param $leaf + * A boolean indicating whether this menu item is a leaf. + * + * @ingroup themeable + */ +function theme_menu_item($mid, $children = '', $leaf = TRUE) { + return '
  • '. menu_item_link($mid) . $children ."
  • \n"; +} + +/** + * Generate the HTML representing a given menu item ID. + * + * @param $item + * The menu item to render. + * @param $link_mid + * The menu item which should be used to find the correct path. * * @ingroup themeable */ -function theme_menu_item($mid) { +function theme_menu_item_link($item, $link_item) { + return l($item['title'], $link_item['path'], array_key_exists('description', $item) ? array('title' => $items['description']) : array()); +} + +/** + * Returns the rendered link to a menu item. + * + * @param $mid + * The menu item id to render. + */ +function menu_item_link($mid) { $menu = menu_get_menu(); $link_mid = $mid; @@ -589,7 +621,7 @@ function theme_menu_item($mid) { $link_mid = $menu['items'][$link_mid]['pid']; } - return l($menu['items'][$mid]['title'], $menu['items'][$link_mid]['path'], array_key_exists('description', $menu['items'][$mid]) ? array("title" => $menu['items'][$mid]['description']) : array()); + return theme('menu_item_link', $menu['items'][$mid], $menu['items'][$link_mid]); } /** @@ -599,24 +631,49 @@ function theme_menu_item($mid) { * @ingroup themeable */ function theme_menu_local_tasks() { + $output = ''; + + if ($primary = menu_primary_local_tasks()) { + $output .= "\n"; + } + if ($secondary = menu_secondary_local_tasks()) { + $output .= "\n"; + } + + return $output; +} + +/** + * Returns the rendered HTML of the primary local tasks. + */ +function menu_primary_local_tasks() { $local_tasks = menu_get_local_tasks(); $pid = menu_get_active_nontask_item(); $output = ''; if (count($local_tasks[$pid]['children'])) { - $output .= "\n"; + } + + return $output; +} +/** + * Returns the rendered HTML of the secondary local tasks. + */ +function menu_secondary_local_tasks() { + $local_tasks = menu_get_local_tasks(); + $pid = menu_get_active_nontask_item(); + $output = ''; + + if (count($local_tasks[$pid]['children'])) { foreach ($local_tasks[$pid]['children'] as $mid) { if (menu_in_active_trail($mid) && count($local_tasks[$mid]['children']) > 1) { - $output .= "\n"; } } } @@ -631,15 +688,17 @@ function theme_menu_local_tasks() { * The menu ID to render. * @param $active * Whether this tab or a subtab is the active menu item. + * @param $primary + * Whether this tab is a primary tab or a subtab. * * @ingroup themeable */ -function theme_menu_local_task($mid, $active) { +function theme_menu_local_task($mid, $active, $primary) { if ($active) { - return '
  • '. theme('menu_item', $mid) ."
  • \n"; + return '
  • '. menu_item_link($mid) ."
  • \n"; } else { - return '
  • '. theme('menu_item', $mid) ."
  • \n"; + return '
  • '. menu_item_link($mid) ."
  • \n"; } }