danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2
|
danielebarchiesi@2
|
3 /**
|
danielebarchiesi@2
|
4 * Renders the content using the jQuery UI Tabs widget.
|
danielebarchiesi@2
|
5 */
|
danielebarchiesi@2
|
6 class QuickUiTabs extends QuickRenderer {
|
danielebarchiesi@2
|
7
|
danielebarchiesi@2
|
8 public static function optionsForm($qt) {
|
danielebarchiesi@2
|
9 $form = array();
|
danielebarchiesi@2
|
10 $form['history'] = array(
|
danielebarchiesi@2
|
11 '#type' => 'checkbox',
|
danielebarchiesi@2
|
12 '#title' => 'History',
|
danielebarchiesi@2
|
13 '#description' => t('Store tab state in the URL allowing for browser back / forward and bookmarks.'),
|
danielebarchiesi@2
|
14 '#default_value' => (isset($qt->renderer) && $qt->renderer == 'ui_tabs' && isset($qt->options['history']) && $qt->options['history']),
|
danielebarchiesi@2
|
15 );
|
danielebarchiesi@2
|
16 return $form;
|
danielebarchiesi@2
|
17 }
|
danielebarchiesi@2
|
18
|
danielebarchiesi@2
|
19 public function render() {
|
danielebarchiesi@2
|
20 $quickset = $this->quickset;
|
danielebarchiesi@2
|
21
|
danielebarchiesi@2
|
22 $active_tab = $quickset->getActiveTab();
|
danielebarchiesi@2
|
23 $tabs = $this->build_tablinks($active_tab);
|
danielebarchiesi@2
|
24 $qt_name = $quickset->getName();
|
danielebarchiesi@2
|
25 $render_array = array(
|
danielebarchiesi@2
|
26 '#attached' => $this->add_attached(),
|
danielebarchiesi@2
|
27 'content' => array(
|
danielebarchiesi@2
|
28 '#theme' => 'qt_ui_tabs',
|
danielebarchiesi@2
|
29 '#options' => array('attributes' => array(
|
danielebarchiesi@2
|
30 'id' => 'quicktabs-' . $qt_name,
|
danielebarchiesi@2
|
31 'class' => 'quicktabs-ui-wrapper',
|
danielebarchiesi@2
|
32 )),
|
danielebarchiesi@2
|
33 'tabs' => array('#theme' => 'qt_ui_tabs_tabset', '#options' => array('active' => $active_tab), 'tablinks' => $tabs),
|
danielebarchiesi@2
|
34 'divs' => array(),
|
danielebarchiesi@2
|
35 ),
|
danielebarchiesi@2
|
36 );
|
danielebarchiesi@2
|
37 foreach ($quickset->getContents() as $key => $tab) {
|
danielebarchiesi@2
|
38 if (!empty($tab)) {
|
danielebarchiesi@2
|
39 $attribs = array(
|
danielebarchiesi@2
|
40 'id' => 'qt-'. $qt_name .'-ui-tabs' . ($key+1),
|
danielebarchiesi@2
|
41 );
|
danielebarchiesi@2
|
42 $render_array['content']['divs'][] = array(
|
danielebarchiesi@2
|
43 '#prefix' => '<div '. drupal_attributes($attribs) .'>',
|
danielebarchiesi@2
|
44 '#suffix' => '</div>',
|
danielebarchiesi@2
|
45 'content' => $tab->render(),
|
danielebarchiesi@2
|
46 );
|
danielebarchiesi@2
|
47 }
|
danielebarchiesi@2
|
48 }
|
danielebarchiesi@2
|
49 return $render_array;
|
danielebarchiesi@2
|
50 }
|
danielebarchiesi@2
|
51
|
danielebarchiesi@2
|
52
|
danielebarchiesi@2
|
53 /**
|
danielebarchiesi@2
|
54 * Build the actual tab links, with appropriate href, title and attributes.
|
danielebarchiesi@2
|
55 *
|
danielebarchiesi@2
|
56 * @param $active_tab The index of the active tab.
|
danielebarchiesi@2
|
57 */
|
danielebarchiesi@2
|
58 protected function build_tablinks($active_tab) {
|
danielebarchiesi@2
|
59 $tabs = array();
|
danielebarchiesi@2
|
60 $qt_name = $this->quickset->getName();
|
danielebarchiesi@2
|
61 foreach ($this->quickset->getContents() as $i => $tab) {
|
danielebarchiesi@2
|
62 if (!empty($tab)) {
|
danielebarchiesi@2
|
63 // If we use l() here or a render array of type 'link', the '#' symbol will
|
danielebarchiesi@2
|
64 // be escaped. Sad panda is sad.
|
danielebarchiesi@2
|
65 $href = '#qt-'. $qt_name .'-ui-tabs' . ($i+1);
|
danielebarchiesi@2
|
66 $tablink = array(
|
danielebarchiesi@2
|
67 '#markup' => '<a href="'. $href .'">'. check_plain($this->quickset->translateString($tab->getTitle(), 'tab', $i)) .'</a>',
|
danielebarchiesi@2
|
68 );
|
danielebarchiesi@2
|
69 $tabs[$i] = $tablink;
|
danielebarchiesi@2
|
70 }
|
danielebarchiesi@2
|
71 }
|
danielebarchiesi@2
|
72 return $tabs;
|
danielebarchiesi@2
|
73 }
|
danielebarchiesi@2
|
74
|
danielebarchiesi@2
|
75 /**
|
danielebarchiesi@2
|
76 * Add any necessary js, css and libraries for the render array.
|
danielebarchiesi@2
|
77 */
|
danielebarchiesi@2
|
78 protected function add_attached() {
|
danielebarchiesi@2
|
79 $active_tab = $this->quickset->getActiveTab();
|
danielebarchiesi@2
|
80 $settings = $this->quickset->getSettings();
|
danielebarchiesi@2
|
81 $options = $settings['options'];
|
danielebarchiesi@2
|
82
|
danielebarchiesi@2
|
83 $attached = array(
|
danielebarchiesi@2
|
84 'library' => array(
|
danielebarchiesi@2
|
85 array('system', 'ui.tabs'),
|
danielebarchiesi@2
|
86 array('system', 'jquery.bbq'),
|
danielebarchiesi@2
|
87 ),
|
danielebarchiesi@2
|
88 'js' => array(
|
danielebarchiesi@2
|
89 array('data' => drupal_get_path('module', 'quicktabs') . '/js/qt_ui_tabs.js', 'weight' => JS_DEFAULT + 1),
|
danielebarchiesi@2
|
90 ),
|
danielebarchiesi@2
|
91 );
|
danielebarchiesi@2
|
92
|
danielebarchiesi@2
|
93 $javascript = drupal_add_js();
|
danielebarchiesi@2
|
94 foreach ($javascript['settings']['data'] as $key => $settings) {
|
danielebarchiesi@2
|
95 if (key($settings) == 'quicktabs') {
|
danielebarchiesi@2
|
96 $qtkey = $key;
|
danielebarchiesi@2
|
97 break;
|
danielebarchiesi@2
|
98 }
|
danielebarchiesi@2
|
99 }
|
danielebarchiesi@2
|
100
|
danielebarchiesi@2
|
101 if ($options['history']) {
|
danielebarchiesi@2
|
102 $attached['library'][] = array('system', 'jquery.bbq');
|
danielebarchiesi@2
|
103 $attached['js'][] = array('data' => drupal_get_path('module', 'quicktabs') . '/js/quicktabs_bbq.js', 'weight' => JS_DEFAULT);
|
danielebarchiesi@2
|
104 }
|
danielebarchiesi@2
|
105
|
danielebarchiesi@2
|
106 $name = $this->quickset->getName();
|
danielebarchiesi@2
|
107 if (!isset($qtkey) || !array_key_exists('qt_' . $name, $javascript['settings']['data'][$qtkey]['quicktabs'])) {
|
danielebarchiesi@2
|
108 $quicktabs_array = array('name' => $name, 'active_tab' => $this->quickset->getActiveTab(), 'history' => $options['history']);
|
danielebarchiesi@2
|
109 $attached['js'][] = array('data' => array('quicktabs' => array('qt_'. $name => $quicktabs_array)), 'type' => 'setting');
|
danielebarchiesi@2
|
110 }
|
danielebarchiesi@2
|
111 return $attached;
|
danielebarchiesi@2
|
112 }
|
danielebarchiesi@2
|
113 }
|