/[cvs]/nfo/php/libs/com.newsblob.phphtmllib/widgets/ActiveTab.inc
ViewVC logotype

Contents of /nfo/php/libs/com.newsblob.phphtmllib/widgets/ActiveTab.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Thu Jan 30 03:29:43 2003 UTC (21 years, 6 months ago) by jonen
Branch: MAIN
Branch point for: no_vendor_tag
Initial revision

1 <?php
2
3
4 class ActiveTab extends BaseWidget {
5
6
7 /**
8 * We have to code these here instead of
9 * the css because JS is used to change
10 * the colors. JS can't change a color
11 * that is defined in a css class. It only
12 * works on an inline style
13 */
14
15 /**
16 * The active tab's background color
17 *
18 */
19 var $_selected_background = "#eeeeee";
20
21 /**
22 * The hidden tab's background color
23 */
24 var $_hidden_background = "#e0e0e0";
25
26
27 function ActiveTab($width="100%", $height="300px") {
28 $this->set_width( $width );
29 $this->_height = $height;
30 }
31
32
33 function render($indent_level=1, $output_debug=0) {
34 $tabs = $this->build_tabs();
35
36 $span = 2 + (count($this->_data) *2 );
37
38 $td = new TDtag(array("colspan" => $span), $this->build_content() );
39 $tabs->add_row( $td );
40 $div = html_div("activetab", $tabs);
41 $div->set_style("width:".$this->get_width());
42 return $div->render($indent_level, $output_debug);
43 }
44
45 /**
46 * This function MUST be called AFTER ALL content
47 * has been added, in order for the js to work properly
48 *
49 * @return string
50 */
51 function get_javascript() {
52 $function = "function show_activetab(tab) {\n";
53
54 $function .= " var tabs = new Array();\n";
55
56 foreach( $this->_data as $tab ) {
57 $function .= " tabs['".$this->_tab_name($tab["title"])."'] = 1;\n";
58 }
59
60 $function .= " for (title in tabs ) {\n";
61 $function .= " obj = document.getElementById('div_'+title).style.visibility = 'hidden';\n";
62 $function .= " obj = document.getElementById('tab_'+title).style.borderBottom = '1px solid #a1a1a1';\n";
63 $function .= " obj = document.getElementById('tab_'+title).style.fontWeight = '';\n";
64 $function .= " obj = document.getElementById('tab_'+title).style.backgroundColor = '".$this->_hidden_background."';\n";
65 $function .= " }\n";
66
67 $function .= " // show the content of ips\n";
68 $function .= " obj = document.getElementById('div_'+tab).style.visibility = 'visible';\n";
69
70 $function .= " // draw the tab separator line\n";
71 $function .= " obj = document.getElementById('tab_'+tab).style.borderBottom = 'none';\n";
72 $function .= " obj = document.getElementById('tab_'+tab).style.fontWeight = 'bold';\n";
73 $function .= " obj = document.getElementById('tab_'+tab).style.backgroundColor = '".$this->_selected_background."';\n";
74
75 $function .= " // hide the content of the other tabs\n";
76 $function .= "}\n";
77 return $function;
78 }
79
80
81 /**
82 * Add a tab
83 *
84 * @param string - the title of the tab
85 * @param mixed - the conetnts for the tab
86 * @param boolean - should this tab be
87 * the default selected tab?
88 * @param int - the width of the tab in pixels
89 * defaults to 60
90 *
91 */
92 function add_tab( $title, $content, $selected=FALSE, $width=NULL) {
93 $this->_data[] = array("title" => $title,
94 "content" => $content,
95 "selected" => $selected,
96 "width" => $width);
97 }
98
99
100
101 function build_tabs() {
102 $table = html_table($this->get_width(), 0,0,0, "center");
103
104 $tr = new TRtag;
105
106 $tr->add( $this->_spacer_td() );
107
108
109 foreach( $this->_data as $tab) {
110 $tr->add( $this->_build_tab_td( $tab["title"],
111 $tab["selected"],
112 $tab["width"]) );
113 $tr->add( $this->_spacer_td() );
114 }
115 $tr->add( $this->_end_td() );
116
117 $table->add( $tr );
118 return $table;
119 }
120
121 function build_content() {
122 $div = html_div("content");
123 $div->set_class( "content" );
124 $div->set_style( "height:".$this->_height.";");
125
126
127 foreach ( $this->_data as $tab ) {
128 if ($tab["selected"]) {
129 $class = "content_visible";
130 } else {
131 $class = "content_hidden";
132 }
133 $tab_div = html_div($class, $tab["content"]);
134 $tab_div->set_id( "div_".$this->_tab_name( $tab["title"] ) );
135 $div->add( $tab_div );
136 }
137
138 return $div;
139 }
140
141 function _spacer_td() {
142 return html_td("spacer", NULL, "&nbsp;");
143 }
144
145 function _end_td() {
146 return html_td("end", NULL, "&nbsp;");
147 }
148
149
150 function _build_tab_td($title, $selected, $width) {
151 $td_class = "tab";
152 $link_class = "link";
153
154 if ($width == NULL) {
155 $width = "60px";
156 }
157
158 if (!strstr($width, "px")) {
159 $width .= "px";
160 }
161
162 if ($selected) {
163 $td_class .= "selected";
164 } else {
165 $td_class .= "hidden";
166 }
167 $func = "show_activetab('".$this->_tab_name($title)."');";
168 $link = html_a("javascript: ".$func, $title, "link");
169
170 $td = html_td($td_class, "", $link);
171 $td->set_id("tab_".$this->_tab_name($title));
172 $td->set_tag_attribute("onclick", "javascript: ".$func);
173 if ($selected) {
174 $style = "font-weight: bold;background-color: ".$this->_selected_background.";";
175 } else {
176 $style = "background-color: ".$this->_hidden_background.";";
177 }
178 $td->set_style($style."width:".$width);
179 return $td;
180 }
181
182 /**
183 * Thie method is used to change the selected tab's
184 * background color
185 */
186 function selected_background( $color ) {
187 $this->_selected_background = $color;
188 }
189
190 /**
191 * Thie method is used to change the hidden tab's
192 * background color
193 */
194 function hidden_background( $color ) {
195 $this->_hidden_background = $color;
196 }
197
198
199 function _tab_name( $title ) {
200 return str_replace(" ", "", strtolower($title));
201 }
202 }
203
204
205 class ActiveTabCSS extends CSSBuilder {
206 function user_setup() {
207 $this->add_entry(".activetab", "",
208 array("align" => "center") );
209
210 $this->add_entry(".activetab", ".spacer",
211 array("width" => "5px",
212 "border-bottom" => "1px solid #a1a1a1"));
213 $this->add_entry(".activetab", ".end",
214 array("border-bottom" => "1px solid #a1a1a1"));
215
216 $this->add_entry(".activetab", ".link:active,.link:hover,.link:link,.link:visited",
217 array("text-decoration" => "none",
218 "color" => "#000000"));
219
220 $this->add_entry(".activetab", ".tabhidden",
221 array("border" => "1px solid #999999",
222 "padding-left" => "5px",
223 "padding-right" => "5px",
224 "background-color" => "#eeeeee",
225 "text-align" => "center",
226 "white-space" => "nowrap",
227 "font-family" => "arial",
228 "font-size" => "10pt"));
229
230 $this->add_entry(".activetab", ".tabselected",
231 array("border-left" => "1px solid #999999",
232 "border-top" => "1px solid #999999",
233 "border-right" => "1px solid #999999",
234 "padding-left" => "5px",
235 "padding-right" => "5px",
236 "text-align" => "center",
237 "white-space" => "nowrap",
238 "font-family" => "arial",
239 "font-size" => "10pt"));
240
241 $this->add_entry(".activetab", ".content",
242 array("border-left" => "1px solid #a1a1a1",
243 "border-right" => "1px solid #a1a1a1",
244 "border-bottom" => "1px solid #a1a1a1",
245 "position" => "relative",
246 "z-index" => "100"));
247
248 $this->add_entry(".activetab", ".content_visible",
249 array("position" => "absolute",
250 "left" => "0px",
251 "top" => "0px",
252 "visibility" => "visible",
253 "z-index" => "50",
254 "padding" => "5px 5px 5px 5px"));
255
256 $this->add_entry(".activetab", ".content_hidden",
257 array("position" => "absolute",
258 "left" => "0px",
259 "top" => "0px",
260 "visibility" => "hidden",
261 "z-index" => "50",
262 "padding" => "5px 5px 5px 5px"));
263 }
264
265 }
266 ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed