You are here

function theme_panels_tabs_style_render_region in Panels Tabs 7.2

Same name and namespace in other branches
  1. 6 plugins/styles/tabs.inc \theme_panels_tabs_style_render_region()
  2. 7 plugins/styles/tabs.inc \theme_panels_tabs_style_render_region()

Render callback.

File

plugins/styles/tabs.inc, line 21
Definition of the 'Tabs' panel style.

Code

function theme_panels_tabs_style_render_region($vars) {
  $display = $vars['display'];
  $region_id = $vars['region_id'];
  $owner_id = $vars['owner_id'];
  $panes = $vars['panes'];
  $settings = $vars['settings'];
  $tab_id = 'tabs-';
  $pattern = isset($settings['panel_tab_id_pattern']) ? $settings['panel_tab_id_pattern'] : 'region';
  if ($pattern == 'random') {
    $tab_id .= md5($owner_id . $region_id . REQUEST_TIME . rand());
  }
  else {
    $tab_id .= $owner_id . '-' . $region_id;
  }
  $tab_class = '';
  if (!empty($settings['region_class'])) {
    $tab_class = ' class="' . check_plain($settings['region_class']) . '"';
  }
  $region_title = '';
  if (!empty($settings['region_title'])) {
    $title_element = isset($settings['region_title_tag']) ? $settings['region_title_tag'] : 'none';
    $context = isset($vars['renderer']->display_context) ? $vars['renderer']->display_context : $display->context;
    $title_text = check_plain(ctools_context_keyword_substitute($settings['region_title'], array(), $context));
    if ($title_element != 'none') {
      $region_title = '<' . $title_element . '>' . $title_text . '</' . $title_element . '>';
    }
    else {
      $region_title = $title_text;
    }
  }
  $element = array(
    '#prefix' => '<div id="' . $tab_id . '"' . $tab_class . '>' . $region_title,
    '#suffix' => '</div>',
    '#attached' => array(
      'library' => array(
        array(
          'system',
          'ui.tabs',
        ),
      ),
      'js' => array(
        drupal_get_path('module', 'panels_tabs') . '/js/panels_tabs.js' => array(
          'type' => 'file',
        ),
      ),
    ),
  );
  $js_settings = array();
  $js_settings['panelsTabs']['tabsID'][] = $tab_id;
  $element['#attached']['js'][] = array(
    'type' => 'setting',
    'data' => $js_settings,
  );

  // Get the pane titles.
  $items = array();
  $delta = 1;
  if (isset($display->panels[$region_id])) {
    foreach ($display->panels[$region_id] as $pane_id) {

      // Make sure the pane exists.
      if (!empty($panes[$pane_id])) {
        $title = panels_tabs_pane_titles($display->did, $pane_id);
        $title = $title ? $title : t('Tab @delta', array(
          '@delta' => $delta,
        ));
        $items[] = '<a href="#' . $tab_id . '-' . $delta . '">' . $title . '</a>';
        $delta++;
      }
    }
  }
  if ($delta === 1) {

    // No tabs to show, the tabs wrapper must not be rendered.
    return '';
  }
  $element['tabs_title'] = array(
    '#theme' => 'item_list',
    '#items' => $items,
  );
  $delta = 1;
  foreach ($panes as $pane_id => $item) {
    $element['tabs_content'][$pane_id] = array(
      '#prefix' => '<div id="' . $tab_id . '-' . $delta . '">',
      '#suffix' => '</div>',
      '#markup' => $item,
    );
    $delta++;
  }
  return drupal_render($element);
}