This fixes Bug #0000652 - IE8 needs forced blank, other browser are still fine
[ipfire-2.x.git] / html / html / themes / ipfire / include / functions.pl
1 #!/usr/bin/perl
2 ###############################################################################
3 #                                                                             #
4 # IPFire.org - A linux based firewall                                         #
5 # Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
6 #                                                                             #
7 # This program is free software: you can redistribute it and/or modify        #
8 # it under the terms of the GNU General Public License as published by        #
9 # the Free Software Foundation, either version 3 of the License, or           #
10 # (at your option) any later version.                                         #
11 #                                                                             #
12 # This program is distributed in the hope that it will be useful,             #
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of              #
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
15 # GNU General Public License for more details.                                #
16 #                                                                             #
17 # You should have received a copy of the GNU General Public License           #
18 # along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
19 #                                                                             #
20 ###############################################################################
21
22 sub showmenu() {
23     print <<EOF
24                 <div id="menu">
25                         <ul>
26 EOF
27 ;
28     foreach my $k1 ( sort keys %$menu ) {
29         if (! $menu->{$k1}{'enabled'}) {
30             next;
31         }
32         my $link = getlink($menu->{$k1});
33         if ($link eq '') {
34             next;
35         }
36         if (! is_menu_visible($link)) {
37             next;
38         }
39         if ($menu->{$k1}->{'selected'}) {
40             print "<li><a href=\"$link\" class=\"active\">$menu->{$k1}{'caption'}</a></li>";
41         } else {
42             print "<li><a href=\"$link\">$menu->{$k1}{'caption'}</a></li>";
43         }
44     }
45     print <<EOF
46                         </ul>
47                 </div>
48 EOF
49 ;    
50 }
51
52 sub getselected($) {
53     my $root = shift;
54     if (!$root) {
55         return 0;
56     }
57
58     foreach my $item (%$root) {
59         if ($root->{$item}{'selected'}) {
60             return $root->{$item};
61         }
62     }
63 }
64
65 sub showsubsection($$) {
66     my $root = shift;
67
68     if (! $root) {
69         return;
70     }
71     my $selected = getselected($root);
72     if (! $selected) {
73         return;
74     }
75     my $submenus = $selected->{'subMenu'};
76     if (! $submenus) {
77         return;
78     }
79
80     print <<EOF
81         <h4><span>Side</span>menu</h4>
82         <ul class="links">
83 EOF
84 ;
85     foreach my $item (sort keys %$submenus) {
86         my $hash = $submenus->{$item};
87         if (! $hash->{'enabled'}) {
88             next;
89         }
90         my $link = getlink($hash);
91         if ($link eq '') {
92             next;
93         }
94         if (! is_menu_visible($link)) {
95             next;
96         }
97         if ($hash->{'selected'}) {
98             print '<li class="selected">';
99         } else {
100             print '<li>';
101         }
102
103         print "<a href=\"$link\">$hash->{'caption'}</a></li>";
104     }
105
106     print <<EOF
107         </ul>
108 EOF
109 ;
110 }
111
112
113 sub showsubsubsection($) {
114     my $root = shift;
115     if (!$root) {
116         return;
117     }
118     my $selected = getselected($root);
119     if (! $selected) {
120         return
121     }
122     if (! $selected->{'subMenu'}) {
123         return
124     }
125
126     showsubsection($selected->{'subMenu'}, 'menu-subtop');
127 }
128
129 sub openpage {
130     my $title = shift;
131     my $boh = shift;
132     my $extrahead = shift;
133
134     @URI=split ('\?',  $ENV{'REQUEST_URI'} );
135     &General::readhash("${swroot}/main/settings", \%settings);
136     &genmenu();
137
138     my $h2 = gettitle($menu);
139
140     $title = "IPFire - $title";
141     if ($settings{'WINDOWWITHHOSTNAME'} eq 'on') {
142         $title =  "$settings{'HOSTNAME'}.$settings{'DOMAINNAME'} - $title"; 
143     }
144
145     print <<END
146 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
147
148 <html>
149   <head>
150   <title>$title</title>
151
152     $extrahead
153     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
154 END
155 ;
156     if ($settings{'FX'} ne 'off') {
157     print <<END
158     <meta http-equiv="Page-Enter" content="blendTrans(Duration=0.5,Transition=12)" />
159     <meta http-equiv="Page-Exit" content="blendTrans(Duration=0.5,Transition=12)" />
160 END
161 ;
162     }
163     print <<END
164     <link rel="shortcut icon" href="/favicon.ico" />
165     <link rel="stylesheet" type="text/css" href="/themes/ipfire/include/style.css" />
166     <script language="javascript" type="text/javascript">
167       
168         function swapVisibility(id) {
169             el = document.getElementById(id);
170             if(el.style.display != 'block') {
171                 el.style.display = 'block'
172             }
173             else {
174                 el.style.display = 'none'
175             }
176         }
177     </script>
178 END
179 ;
180 if ($settings{'SPEED'} ne 'off') {
181 print <<END
182     <script type="text/javascript" src="/include/jquery-1.2.6.min.js"></script>
183     <script type="text/javascript">
184         var t_current;
185         var t_last;
186         var rxb_current;
187         var rxb_last;
188         var txb_current;
189         var txb_last;
190         function refreshInetInfo() {
191                 \$.ajax({
192                         url: '/cgi-bin/speed.cgi',
193                         success: function(xml){
194                         t_current = new Date();
195                         var t_diff = t_current - t_last;
196                         t_last = t_current;
197
198                         rxb_current = \$("rxb",xml).text();
199                         var rxb_diff = rxb_current - rxb_last;
200                         rxb_last = rxb_current;
201
202                         var rx_kbs = rxb_diff/t_diff;
203                         rx_kbs = Math.round(rx_kbs*10)/10;
204
205                         txb_current = \$("txb",xml).text();
206                         var txb_diff = txb_current - txb_last;
207                         txb_last = txb_current;
208
209                         var tx_kbs = txb_diff/t_diff;
210                         tx_kbs = Math.round(tx_kbs*10)/10;
211
212                         \$("#rx_kbs").text(rx_kbs + ' kb/s');
213                         \$("#tx_kbs").text(tx_kbs + ' kb/s');
214                         }
215                 });
216                 window.setTimeout("refreshInetInfo()", 3000);
217         }
218         \$(document).ready(function(){
219                 refreshInetInfo();
220         });
221     </script>
222   </head>
223   <body>
224 END
225 ;
226 }
227 else {
228 print "</head><body>";}
229 print <<END
230 <!-- IPFIRE HEADER -->
231
232 <div id="header">
233
234         <div id="header_inner" class="fixed">
235
236                 <div id="logo">
237 END
238 ;
239     if ($settings{'WINDOWWITHHOSTNAME'} eq 'on') {
240         print "<h1><span>$settings{'HOSTNAME'}.$settings{'DOMAINNAME'}</span></h1><br />"; 
241     } else {
242                                 print "<h1><span>IPFire</span></h1><br />";
243                 }
244                 print <<END
245                         <h2>$h2</h2>
246                 </div>
247
248 END
249 ;
250         &showmenu();
251
252 print <<END     
253         </div>
254 </div>
255
256 <div id="main">
257         <div id="main_inner" class="fixed">
258                 <div id="primaryContent_2columns">
259                         <div id="columnA_2columns">
260 END
261 ;
262 }
263
264 sub openpagewithoutmenu {
265     my $title = shift;
266     my $boh = shift;
267     my $extrahead = shift;
268
269     @URI=split ('\?',  $ENV{'REQUEST_URI'} );
270     &General::readhash("${swroot}/main/settings", \%settings);
271     &genmenu();
272
273     my $h2 = gettitle($menu);
274
275     $title = "IPFire - $title";
276     if ($settings{'WINDOWWITHHOSTNAME'} eq 'on') {
277         $title =  "$settings{'HOSTNAME'}.$settings{'DOMAINNAME'} - $title"; 
278     }
279
280     print <<END
281 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
282
283 <html>
284   <head>
285   <title>$title</title>
286
287     $extrahead
288     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
289 END
290 ;
291     if ($settings{'FX'} ne 'off') {
292     print <<END
293     <meta http-equiv="Page-Enter" content="blendTrans(Duration=0.5,Transition=12)" />
294     <meta http-equiv="Page-Exit" content="blendTrans(Duration=0.5,Transition=12)" />
295 END
296 ;
297     }
298     print <<END
299     <link rel="shortcut icon" href="/favicon.ico" />
300     <link rel="stylesheet" type="text/css" href="/include/style.css" />
301     <script language="javascript" type="text/javascript">
302       
303         function swapVisibility(id) {
304             el = document.getElementById(id);
305             if(el.style.display != 'block') {
306                 el.style.display = 'block'
307             }
308             else {
309                 el.style.display = 'none'
310             }
311         }
312     </script>
313
314   </head>
315   <body>
316 <!-- IPFIRE HEADER -->
317
318 <div id="header">
319
320         <div id="header_inner" class="fixed">
321
322                 <div id="logo">
323                         <h1><span>IPFire</span></h1>
324                         <h2>$h2</h2>
325                 </div>  
326         </div>
327 </div>
328
329 <div id="main">
330         <div id="main_inner" class="fixed">
331                 <div id="primaryContent_2columns">
332                         <div id="columnA_2columns">
333 END
334 ;
335 }
336
337 sub closepage () {
338     my $status = &connectionstatus();
339     $uptime = `/usr/bin/uptime`;
340         
341     print <<END
342                         </div>
343                 </div>
344
345                 <div id="secondaryContent_2columns">
346                 
347                         <div id="columnC_2columns">
348 END
349 ;
350     &showsubsection($menu);
351     &showsubsubsection($menu);
352
353         print <<END                     
354                         </div>
355                 </div>
356
357                 <br class="clear" />    
358                 <div id="footer" class="fixed">
359                         <b>Status:</b> $status <b>Uptime:</b>$uptime
360 END
361 ;
362 if ($settings{'SPEED'} ne 'off') {
363 print <<END                        
364                         <br />
365                                 <b>$Lang::tr{'bandwidth usage'}:</b>
366                                 $Lang::tr{'incoming'}: <span id="rx_kbs"></span>&nbsp;$Lang::tr{'outgoing'}: <span id="tx_kbs"></span>
367
368 END
369 ;
370 }
371 print <<END
372                 </div>
373         </div>
374 </div>
375 </body>
376 </html>
377 END
378 ;
379 }
380
381 sub openbigbox
382 {
383 }
384
385 sub closebigbox
386 {
387 }
388
389 sub openbox
390 {
391         $width = $_[0];
392         $align = $_[1];
393         $caption = $_[2];
394
395         print <<END
396 <!-- openbox -->
397         <div class="post" align="$align">
398 END
399 ;
400
401         if ($caption) { print "<h3>$caption</h3>\n"; } else { print "&nbsp;"; }
402 }
403
404 sub closebox
405 {
406         print <<END
407         </div>
408         <br class="clear" />
409         <!-- closebox -->
410 END
411 ;
412 }
413
414 1;