You are here

function _menu_minipanels_include in Menu Minipanels 6

Same name and namespace in other branches
  1. 7 menu_minipanels.module \_menu_minipanels_include()

When a minipanel menu item is detected by our theme interception functions this function is used to add the appropriate configuration javascript and minipanel output.

The javascript is added to the closure by drupal when hook_footer is called. The minipanel output is added to closure. See @menu_minipanels_footer

Parameters

$minipanel_name The name of the minipanel that is to show:

$menu_config The configuration array for qtip, as configued in menu: item edit

2 calls to _menu_minipanels_include()
menu_minipanels_prepare_links in ./menu_minipanels.module
Ensure that we capture any mini panel menus. This is run on every page load. See @menu_minipanels_init().
menu_minipanels_theme_menu_item_link in ./menu_minipanels.module
This replacement theme function adds minipanels support to theme_links() without disturbing themes that may also implement this theme function.

File

./menu_minipanels.module, line 452
Allows an administrator to specify a minipanel to be associated with a Drupal menu item. When that menu item is hovered or clicked (as per config), the minipanel content will be shown using the qTip javascript library.

Code

function _menu_minipanels_include($minipanel_name, $menu_config) {
  $mlid = $menu_config['mlid'];

  // The same panel/mlid may be added multiple times, if the same menu is added
  // to a page more than once, i.e. the primary links, plus primary links also
  // added as a block.
  static $added = array();
  if (!isset($added[$mlid])) {
    $added[$mlid] = TRUE;
  }
  else {
    return _menu_minipanels_link_class_name($mlid);
  }

  // qTip interprets the absence of the 'position' array element as 'false'.
  // specifying 'false' doesn't work.
  if ($menu_config['position']['target'] == 'element') {
    unset($menu_config['position']['target']);
  }

  // qTip interprets the absence of the 'tip' array element as "don't display
  // a tip". Specifying 'false' doesn't work.
  if ($menu_config['style']['tip'] == 'none') {
    unset($menu_config['style']['tip']);
  }

  // Remove blank values.
  if (isset($menu_config['hide']['effect']['length']) && $menu_config['hide']['effect']['length'] == '') {
    unset($menu_config['hide']['effect']['length']);
  }
  if (isset($menu_config['hide']['effect']['delay']) && $menu_config['hide']['effect']['delay'] == '') {
    unset($menu_config['hide']['effect']['delay']);
  }
  if (isset($menu_config['show']['effect']['delay']) && $menu_config['show']['effect']['delay'] == '') {
    unset($menu_config['show']['effect']['delay']);
  }
  if (isset($menu_config['show']['effect']['length']) && $menu_config['show']['effect']['length'] == '') {
    unset($menu_config['show']['effect']['length']);
  }
  if (isset($menu_config['style']['border']['color']) && $menu_config['style']['border']['color'] == '') {
    unset($menu_config['style']['border']['color']);
  }
  if (isset($menu_config['style']['border']['radius']) && $menu_config['style']['border']['radius'] == '') {
    unset($menu_config['style']['border']['radius']);
  }
  if (isset($menu_config['style']['border']['width']) && $menu_config['style']['border']['width'] == '') {
    unset($menu_config['style']['border']['width']);
  }
  if (isset($menu_config['style']['border']) && empty($menu_config['style']['border'])) {
    unset($menu_config['style']['border']);
  }
  if (isset($menu_config['style']['width']['max']) && $menu_config['style']['width']['max'] == '') {
    unset($menu_config['style']['width']['max']);
  }
  if (isset($menu_config['style']['width']['min']) && $menu_config['style']['width']['min'] == '') {
    unset($menu_config['style']['width']['min']);
  }
  if (isset($menu_config['style']['width']) && empty($menu_config['style']['width'])) {
    unset($menu_config['style']['width']);
  }
  if (isset($menu_config['position']['container']) && empty($menu_config['position']['container'])) {
    unset($menu_config['position']['container']);
  }

  // Must have all both for this to work correctly.
  if (isset($menu_config['position']['adjust']['x']) && empty($menu_config['position']['adjust']['x']) || isset($menu_config['position']['adjust']['y']) && empty($menu_config['position']['adjust']['y'])) {
    unset($menu_config['position']['adjust']['x']);
    unset($menu_config['position']['adjust']['y']);
  }
  else {

    // Qtip expects an integer to compute position.
    settype($menu_config['position']['adjust']['x'], 'int');
    settype($menu_config['position']['adjust']['y'], 'int');
  }
  if (empty($menu_config['position']['adjust'])) {
    unset($menu_config['position']['adjust']);
  }
  $settings = array(
    'menuMinipanels' => array(
      'panels' => array(
        'panel_' . $mlid => $menu_config,
      ),
    ),
  );
  drupal_add_js($settings, 'setting');

  // Load the necessary style JS file.
  module_invoke_all('menu_minipanels_style', $menu_config);
  menu_minipanels_panels($mlid, $minipanel_name);
  return _menu_minipanels_link_class_name($mlid);
}