diff sites/all/modules/quicktabs/plugins/QuickQuicktabs.inc @ 2:b74b41bb73f0

-- Google analytics module
author danieleb <danielebarchiesi@me.com>
date Thu, 22 Aug 2013 17:22:54 +0100
parents
children a75ead649730
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sites/all/modules/quicktabs/plugins/QuickQuicktabs.inc	Thu Aug 22 17:22:54 2013 +0100
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * Renders the content using the original Quicktabs mechanism of previous versions.
+ * Includes support for ajax rendered content.
+ */
+class QuickQuicktabs extends QuickRenderer {
+  
+  public function render() {
+    $quickset = $this->quickset;
+    
+    $render_array = array();
+
+    $active_tab = $quickset->getActiveTab();
+    if ($tabs = $this->build_tablinks($active_tab)) {
+      $render_array['#attached'] = $this->add_attached();
+
+      $qt_name = $quickset->getName();
+      $settings = $quickset->getSettings();
+      $contents = $quickset->getContents();
+
+      $render_array['content'] = array(
+        '#theme' => 'qt_quicktabs',
+        '#options' => array('attributes' => array(
+          'id' => 'quicktabs-' . $qt_name,
+          'class' => 'quicktabs-wrapper quicktabs-style-' . drupal_strtolower($settings['style']),
+        )),
+        'tabs' => array('#theme' => 'qt_quicktabs_tabset', '#options' => array('active' => $active_tab, 'style' => drupal_strtolower($settings['style'])), 'tablinks' => $tabs),
+        // The main content area, each quicktab container needs a unique id.
+        'container' => array(
+          '#prefix' => '<div id="quicktabs-container-' . $qt_name .'" class="quicktabs_main quicktabs-style-' . drupal_strtolower($settings['style']) .'">',
+          '#suffix' => '</div>',
+          'divs' => array(),
+        ),
+      );
+
+      // If in ajax mode, we'll only be rendering one tab, otherwise all of them.
+      $tabs_to_render = $settings['ajax'] ? array($active_tab => $contents[$active_tab]) : $contents;
+      foreach ($tabs_to_render as $key => $tab) {
+        if (!empty($tab)) {
+          $attribs = array(
+            'id' => 'quicktabs-tabpage-'. $qt_name . '-'. $key,
+            'class' => array('quicktabs-tabpage', ($active_tab == $key ? '' : 'quicktabs-hide')),
+          );
+          $render_array['content']['container']['divs'][] = array(
+            '#prefix' => '<div '. drupal_attributes($attribs) .'>',
+            '#suffix' => '</div>',
+            'content' => $tab->render(),
+          );
+        }
+      }
+    }
+    return $render_array;
+  }
+
+  /**
+   * Build the actual tab links, with appropriate href, title and attributes.
+   * 
+   * @param $active_tab The index of the active tab.
+   */
+  protected function build_tablinks($active_tab) {
+    $quickset = $this->quickset;
+    $settings = $quickset->getSettings();
+    $tabs = array();
+    foreach ($quickset->getContents() as $i => $tab) {
+      if (!empty($tab)) {
+        $tablink = array(
+          '#type' => 'link',
+          '#title' => $quickset->translateString($tab->getTitle(), 'tab', $i),
+          '#href' =>  $_GET['q'],
+          '#options' => $this->construct_link_options($i),
+        );
+        if ($settings['ajax']) {
+          $tab_settings = $tab->getSettings();
+          $ajax_keys = $tab->getAjaxKeys();
+          $ajax_args = array();
+          foreach ($ajax_keys as $key) {
+            $ajax_args[] = $tab_settings[$key];
+          }
+          $ajax_path = $quickset->getAjaxPath($i, $tab->getType());
+          $ajax_href = $ajax_path . '/'. implode('/', $ajax_args);
+          $tablink['#ajax'] = array(
+            'progress' => array('message' => '', 'type' => 'throbber'),
+            'path' => $ajax_href,
+          );
+        }
+        $tabs[$i] = $tablink;
+      }
+    }
+    return $tabs;
+  }
+
+  /**
+   * Add any necessary js, css and libraries for the render array.
+   */
+  protected function add_attached() {
+    $attached = array(
+      'css' => array(
+        array('data' => drupal_get_path('module', 'quicktabs') .'/css/quicktabs.css'),
+      ),
+      'js' => array(
+        array('data' => drupal_get_path('module', 'quicktabs') . '/js/quicktabs.js'),
+        array('data' => 'misc/progress.js', 'weight' => JS_LIBRARY),
+      ),
+    );
+    $settings = $this->quickset->getSettings();
+    // Add the custom style css if a custom style has been set.
+    $style_css = quicktabs_get_css($settings['style']);
+    if (!empty($style_css)) {
+      $attached['css'][] = $style_css;
+    }
+    // Prepare a tab_settings array for passing the tab info to our JavaScript.
+    $tab_settings = array();
+    foreach ($this->quickset->getContents() as $i => $content) {
+      if (!empty($content)) {
+        $tab_settings[$i] = $content->getSettings();
+      }
+    }
+    // Add our JS settings
+    $javascript = drupal_add_js();
+    foreach ($javascript['settings']['data'] as $key => $settings) {
+      if (key($settings) == 'quicktabs') {
+        $qtkey = $key;
+        break;
+      }
+    }
+    $name = $this->quickset->getName();
+    if (!isset($qtkey) || (isset($javascript['settings']['data'][$qtkey]['quicktabs'])
+      && !array_key_exists('qt_' . $name, $javascript['settings']['data'][$qtkey]['quicktabs']))) {
+      $quicktabs_array = array_merge(array('name' => $name, 'tabs' => $tab_settings), $settings);
+      $attached['js'][] = array('data' => array('quicktabs' => array('qt_' . $name => $quicktabs_array)), 'type' => 'setting');
+    }
+    return $attached;
+  }
+  
+  /**
+   * Helper function to construct link options for tab links.
+   */
+  protected function construct_link_options($tabkey) {
+    $qt_name = $this->quickset->getName();
+    $id = 'quicktabs-tab-' . implode('-', array($qt_name, $tabkey));
+  
+    // Need to construct the correct querystring for the tab links.
+    $query = drupal_get_query_parameters(NULL, array("qt-$qt_name", 'q', 'page'));
+    $query["qt-{$qt_name}"] = $tabkey;
+  
+    $link_options = array(
+      'attributes' => array(
+        'id' => $id,
+      ),
+      'query' => $query,
+      'fragment' => 'qt-' . $qt_name,
+    );
+    return $link_options;
+  }
+}
\ No newline at end of file