'select',
'#title' => t('Select the menu to list'),
'#default_value' => variable_get('jquery_drawer', 'navigation:0'),
'#options' => menu_parent_options(menu_get_menus(), 0),
);
return $form;
case 'save':
variable_set('jquery_drawer', $edit['jquery_drawer']);
break;
case 'view':
$menu = explode(':', variable_get('jquery_drawer', 'navigation:0'));
$block['content'] = theme('jquery_drawer', $menu[0], $menu[1]);
return $block;
}
}
/**
* Implementation of hook_theme();
*/
function jquery_drawer_theme() {
return array(
'jquery_drawer' => array(
'arguments' => array(
'menu' => NULL,
'parent' => NULL,
),
),
'jquery_drawer_javascript' => array(
'arguments' => array(),
),
'jquery_drawer_css' => array(
'arguments' => array(),
),
'jquery_drawer_link' => array(
'arguments' => array(),
),
);
}
/**
* Generate the menu.
*/
function theme_jquery_drawer($menu_name, $mlid) {
$item_class = "jquery-drawer-menu-item";
$sub_item_class = "jquery-drawer-sub-menu-item";
// Find menu item in the menu tree
$menu_tree = menu_tree_all_data($menu_name);
$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) {
$menu = $menu_item['below'];
break 2;
}
else {
if ($menu_item["link"]['mlid'] == $menu_link['p'. $i]) {
$menu_tree = $menu_item['below'];
break;
}
}
}
}
}
else {
$menu = $menu_tree;
}
// Don't display anything if the selected menu has no children
if (!$menu) {
return;
}
// 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']) {
$trail[] = $value['mlid'];
}
}
// Restore active menu trail
menu_set_active_menu_name($active_menu_name);
// Build the menus
$output = jquery_drawer_build($menu);
return $output;
}
/**
* Build the Drawer.
*
* @ingroup themeable
*/
function jquery_drawer_build($menu) {
$output = '
';
$output .= implode((array) module_invoke_all('jquery_drawer_build'));
foreach ($menu as $menu_item) {
if ($menu_item['link']['hidden'] == 0) {
$output .= theme('jquery_drawer_link', $menu_item['link']);
}
}
$output .= '
';
$output .= '';
$output .= '
';
return $output;
}
/**
* Recursively build the menu.
*
* @ingroup themeable
*/
function jquery_drawer_show_items($menu) {
global $_jquery_drawer_id;
if ($_jquery_drawer_id == NULL) {
$output = '';
$output .= implode((array) module_invoke_all('jquery_drawer_build'));
$_jquery_drawer_id = 0;
}
else {
$output = '';
}
foreach ($menu as $menu_item) {
if ($menu_item['link']['hidden'] == 0) {
$output .= '- ';
if ($menu_item['below'] !== FALSE && jquery_drawer_has_unhidden_submenu($menu_item['below'])) {
$output .= $menu_item['link']['title'];
$_jquery_drawer_id++;
$output .= jquery_drawer_build($menu_item['below']);
}
else {
$output .= theme('jquery_drawer_link', $menu_item['link']);
}
$output .= '
';
}
}
$output .= '
';
return $output;
}
/**
* Check whether a menu has at least one unhidden submenu.
*/
function jquery_drawer_has_unhidden_submenu($menu = FALSE) {
if ($menu == FALSE) {
return FALSE;
}
foreach ($menu as $menu_item) {
if ($menu_item['link']['hidden'] == 0) {
return TRUE;
}
}
return FALSE;
}
/**
* jQuery Drawer Javascript theme function.
*
* @ingroup themeable
*/
function theme_jquery_drawer_javascript() {
drupal_add_js(drupal_get_path('module', 'jquery_drawer') .'/jquery_drawer/drw/scripts.js');
}
/**
* jQuery Drawer CSS theme function.
*
* @ingroup themeable
*/
function theme_jquery_drawer_css() {
drupal_add_css(drupal_get_path('module', 'jquery_drawer') .'/jquery_drawer/drw/styles.css');
drupal_add_css(drupal_get_path('module', 'jquery_drawer') .'/jquery_drawer.css');
}
/**
* jQuery Drawer Link theme function.
*
* @ingroup themeable
*/
function theme_jquery_drawer_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
$link['attributes']['rel'] = 'drw';
$output = '- ';
$output .= l($link['title'], $link['href'], array('attributes' => array('rel' => 'drw')));
$output .= '
';
return $output;
}