added a few functions
[squirrelmail.git] / class / html.class
1 <?php
2 /**
3  * html.class
4  *
5  * Copyright (c) 2002 The SquirrelMail Project Team
6  * Licensed under the GNU GPL. For full terms see the file COPYING.
7  *
8  *
9  * This contains functions needed to generate html output.
10  *
11  * $Id$
12  */
13
14
15 class html {
16   var $tag, $text, $style, $class,  
17       $id, $html_el = array(), $javascript, $xtr_prop;
18
19   function html($tag='', $text='', $style ='', $class='', $id='',
20                   $xtr_prop = '', $javascript = '') {
21      $this->tag = $tag;
22      $this->text = $text;
23      $this->style = $style;
24      $this->class = $class;
25      $this->id = $id;
26      $this->xtr_prop = $xtr_prop;
27      $this->javascript = $javascript;
28   }
29   
30   function htmlAdd($el, $last=true) {
31      if ($last) {
32         $this->html_el[] = $el;
33      } else {
34         echo 'JOPPPEEE';
35         $new_html_el = array();
36         $new_html_el[] = $el;
37         foreach ($this->html_el as $html_el) {
38            $new_html_el[] = $html_el;
39         }
40         $this->html_el = $new_html_el;
41      }
42   }
43   
44   function AddChild($tag='', $text='', $style ='', $class='', $id='',
45                   $xtr_prop = '', $javascript = '') {
46      $el = new html ($tag, $text, $style, $class, $id, $xtr_prop, $javascript);
47      $this->htmlAdd($el);
48   }
49   
50   function FindId($id) {
51      $cnt = count($this->html_el);
52      $el = false;
53      if ($cnt) {
54         for ($i = 0 ; $i < $cnt; $i++) {
55             if ($this->html_el[$i]->id == $id) {
56                $ret = $this->html_el[$i];
57                return $ret;
58             } else if (count($this->html_el[$i]->html_el)) {
59                $el = $this->html_el[$i]->FindId($id);
60             }
61             if ($el) return $el;
62         }
63      }
64      return $el;
65   }     
66
67   function InsToId( $el, $id, $last=true) {
68      $html_el = &$this->FindId($id);
69      if ($html_el) {
70         $html_el->htmlAdd($el, $last);
71      }
72   }     
73   
74   function scriptAdd($script) {
75      $s = "\n".'<!--'."\n".
76           $script .
77           "\n".'// -->'."\n";
78      $el = new html ('script',$s,''.''.''.array('language' => 'JavaScript',
79                                                 'type' => 'text/javascript'));
80      $this->htmlAdd($el);
81   }
82   
83   function echoHtml( $usecss=false, $indent='') {
84     $tag = $this->tag;
85     $text = $this->text;
86     $class = $this->class;
87     $id = $this->id;
88     $style = $this->style;
89     $javascript = $this->javascript;
90     $xtr_prop = $this->xtr_prop;
91     if ($xtr_prop) {
92        $prop = '';
93        foreach ($xtr_prop as $k => $v) {
94           if (is_string($k)) {
95              $prop.=' '.$k.'="'.$v.'"';
96           } else {
97              $prop.=' '.$v;
98           }
99        }
100     }   
101     if ($javascript) {
102        $js = '';
103        foreach ($javascript as $k => $v) { /* here we put the onclick, onmouseover etc entries */
104           $js.=' '.$k.'="'.$v.'";';
105        }
106     }
107     if ($tag) {           
108        echo $indent . '<' . $tag;
109     } else {
110        echo $indent;
111     }
112     if ($class) {
113        echo ' class="'.$class.'"';
114     }  
115     if ($id) {
116        echo ' id="'.$id.'"';
117     }
118     if ($xtr_prop) {
119        echo ' '.$prop;
120     }
121     if ($style && !$usecss) {
122        echo ' style="'.$style.'"';  
123     }
124     if ($javascript) {
125        echo ' '.$js;
126     }
127     if ($tag) echo '>';
128     if ($text) {
129        if ($style && !$usecss) { /* if use css then fallback to stylesheet for layout */
130           foreach ($style as $k => $v) {
131             echo '<'.$k.'>';
132           }
133           echo $text;
134           foreach ($style as $k => $v) { /* if value of key value = true close the tag */
135             if ($v) {
136                echo '</'.$v.'>';
137             }   
138           }
139        } else {
140          echo $text;
141        }
142     }
143     $cnt = count($this->html_el);
144     if ($cnt) {
145        if ($style && !$usecss) {
146           foreach ($style as $k => $v) {
147             echo '<'.$k.'>';
148           }
149        }
150        echo "\n";
151        $indent.='  ';
152        for($i = 0;$i<$cnt;$i++) {
153           $el = $this->html_el[$i];
154           $el->echoHtml($usecss,$indent);
155        }
156        if ($style && !$usecss) {       
157           foreach ($style as $k => $v) { /* if value of key value = true close the tag */
158             if ($v) {
159                echo '</'.$v.'>';
160             }   
161           }
162        }
163     }
164     if ($tag) {
165        echo '</'.$tag.'>'."\n";
166     } else {
167        echo "\n";
168     }
169   }
170 }
171  
172
173 ?>