~spreadubuntu/spreadubuntu/devel-drupal6

« back to all changes in this revision

Viewing changes to modules/views/includes/tabs.inc

  • Committer: ruben
  • Date: 2009-06-08 09:38:49 UTC
  • Revision ID: ruben@captive-20090608093849-s1qtsyctv2vwp1x1
SpreadUbuntu moving to Drupal6. Based on ubuntu-drupal theme and adding our modules

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
// $Id: tabs.inc,v 1.7 2008/05/27 23:49:37 merlinofchaos Exp $
 
3
/**
 
4
 * @file
 
5
 *
 
6
 * Classes and theme functions for rendering javascript UI tabs.
 
7
 */
 
8
 
 
9
/**
 
10
 * Contain a set of tabs as well as the ability to render them.
 
11
 *
 
12
 * There are three 'areas' of a tabset.
 
13
 * - title: The clickable link to display the tab area. These are always visible.
 
14
 * - body: The actual HTML body of the tab. Only one body is visible at a time.
 
15
 * - extra: An optional decorative area around the tabs.
 
16
 */
 
17
class views_tabset {
 
18
  var $tabs = array();
 
19
  var $extra = '';
 
20
  var $selected = NULL;
 
21
 
 
22
  /**
 
23
   * Add a tab to the tabset.
 
24
   *
 
25
   * @param $name
 
26
   *   The name of the tab; this is the internal identifier and must be
 
27
   *   unique within the tabset.
 
28
   * @param $title
 
29
   *   If given, this will be the visible title of the tab. This can also
 
30
   *   be set via $tabset->set(). This will be the link to click on to
 
31
   *   view the tab.
 
32
   * @param $body
 
33
   *   If given, this is the body of the tab itself. It will display
 
34
   *   when the tab title is clicked on.
 
35
   */
 
36
  function add($name, $title = '', $body = '') {
 
37
    if (is_object($name) && is_subclass_of($name, 'views_tab')) {
 
38
      $this->add_tab($name);
 
39
    }
 
40
    elseif (is_array($name)) {
 
41
      foreach ($name as $real_tab) {
 
42
        $this->add($real_tab);
 
43
      }
 
44
    }
 
45
    else {
 
46
      $this->add_tab(new views_tab($name, $title, $body));
 
47
    }
 
48
  }
 
49
 
 
50
  /**
 
51
   * Add a fully realized tab object to the tabset.
 
52
   *
 
53
   * @param $tab
 
54
   *   A fully populated views_tab object.
 
55
   */
 
56
  function add_tab($tab) {
 
57
    $this->tabs[$tab->name] = $tab;
 
58
  }
 
59
 
 
60
  /**
 
61
   * Set the values of a tab.
 
62
   *
 
63
   * @param $name
 
64
   *   The unique identifier of the tab to set.
 
65
   * @param $title
 
66
   *   The title of the tab; this will be clickable.
 
67
   * @param $body
 
68
   *   The HTML body of the tab.
 
69
   */
 
70
  function set($name, $title, $body = NULL) {
 
71
    if (empty($this->tabs[$name])) {
 
72
      return $this->add($name, $title, $body);
 
73
    }
 
74
    $this->tabs[$name]->title = $title;
 
75
    if (isset($body)) {
 
76
      $this->tabs[$name]->body = $body;
 
77
    }
 
78
  }
 
79
 
 
80
  /**
 
81
   * Set the body of a tab.
 
82
   */
 
83
  function set_body($name, $body) {
 
84
    if (empty($this->tabs[$name])) {
 
85
      return $this->add($name, '', $body);
 
86
    }
 
87
    $this->tabs[$name]->body = $body;
 
88
  }
 
89
 
 
90
  /**
 
91
   * Add text to the 'extra' region of the tabset.
 
92
   */
 
93
  function add_extra($text) {
 
94
    $this->extra .= $text;
 
95
  }
 
96
 
 
97
  /**
 
98
   * Remove a tab.
 
99
   *
 
100
   * @param $tab
 
101
   *   May be the name of the tab or a views_tab object.
 
102
   */
 
103
  function remove($tab) {
 
104
    if (is_string($tab)) {
 
105
      unset($this->tabs[$tab]);
 
106
    }
 
107
    else {
 
108
      unset($this->tabs[$tab->name]);
 
109
    }
 
110
  }
 
111
 
 
112
  /**
 
113
   * Control which tab will be selected when it is rendered.
 
114
   */
 
115
  function set_selected($name) {
 
116
    $this->selected = $name;
 
117
  }
 
118
 
 
119
  /**
 
120
   * Output the HTML for the tabs.
 
121
   *
 
122
   * @return
 
123
   *   HTML representation of the tabs.
 
124
   */
 
125
  function render() {
 
126
    views_add_js('tabs');
 
127
    views_add_css('views-tabs');
 
128
 
 
129
    if (empty($this->selected)) {
 
130
      $keys = array_keys($this->tabs);
 
131
      $this->selected = array_shift($keys);
 
132
    }
 
133
 
 
134
    drupal_alter('views_tabset', $this);
 
135
    return theme('views_tabset', $this->tabs, $this->extra, $this->selected);
 
136
  }
 
137
}
 
138
 
 
139
/**
 
140
 * An object to represent an individual tab within a tabset.
 
141
 */
 
142
class views_tab {
 
143
  var $title;
 
144
  var $body;
 
145
  var $name;
 
146
 
 
147
  /**
 
148
   * Construct a new tab.
 
149
   */
 
150
  function views_tab($name, $title, $body = NULL) {
 
151
    $this->name = $name;
 
152
    $this->title = $title;
 
153
    $this->body = $body;
 
154
  }
 
155
 
 
156
  /**
 
157
   * Generate HTML output for a tab.
 
158
   */
 
159
  function render() {
 
160
    return theme('views_tab', $this->body);
 
161
  }
 
162
}
 
163
 
 
164
/**
 
165
 * Render a tabset.
 
166
 *
 
167
 * @todo Turn this into a template.
 
168
 */
 
169
function theme_views_tabset($tabs, $extra = NULL, $selected = NULL) {
 
170
  $link_output = "<div class=\"views-tabs\"><ul id=\"views-tabset\">\n";
 
171
  $tab_output = "<div class=\"views-tab-area\">\n";
 
172
 
 
173
  foreach ($tabs as $name => $tab) {
 
174
    $link_output .= '<li' . ($name == $selected ? ' class="active"': '') . '><a href="#views-tab-' . $tab->name . '" id="views-tab-title-' . $tab->name . '">' . check_plain($tab->title) . '</a></li>' . "\n";
 
175
    $tab_output .= '<div id="views-tab-' . $tab->name . '" class="views-tab">' . $tab->render() . "</div>\n";
 
176
  }
 
177
  $link_output .= "</ul>\n";
 
178
 
 
179
  if ($extra) {
 
180
    $link_output .= "<div class=\"extra\">$extra</div>\n";
 
181
  }
 
182
 
 
183
  $link_output .= "</div>\n";
 
184
  $tab_output .= "</div>\n";
 
185
  return '<div class="views-tabset clear-block">' . $link_output . $tab_output . '</div>';
 
186
}
 
187
 
 
188
/**
 
189
 * Theme a simple tab.
 
190
 */
 
191
function theme_views_tab($body) {
 
192
  return $body;
 
193
}