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

Annotation of /nfo/php/libs/com.newsblob.phphtmllib/ContainerClass.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (hide annotations)
Sat Feb 22 20:55:22 2003 UTC (21 years, 4 months ago) by jonen
Branch: MAIN
Changes since 1.1: +49 -64 lines
+ updated whole lib to version 2.2.1 (new FormProcessing since 2.2.0!)

1 jonen 1.1 <?php
2    
3     /**
4     * Holds the Container class.
5     *
6 jonen 1.2 * $Id: ContainerClass.inc,v 1.15 2003/02/20 23:23:42 hemna Exp $
7 jonen 1.1 *
8     * @author Walter A. Boring IV <waboring@buildabetterweb.com>
9     * @package phpHtmlLib
10     *
11     * @copyright LGPL - See LICENCE
12     *
13     */
14    
15    
16     /**
17     * This class is nothing more then a
18     * container widget. It lets you
19     * push data into it, and it will
20     * render each item indented properly
21     * so it works with the rest of the libs.
22     *
23     * This is helpfull when you have a function
24     * that wants to return multiple Tag Objects
25     * or widgets. Just wrap them in this container
26     * and they will all get rendered with the
27     * current indentation level.
28     *
29     * Base Class for phpHtmlLib
30     *
31     * @link http://phphtmllib.sourceforge.net
32     *
33     * @author Walter A. Boring IV <waboring@buildabetterweb.com>
34     * @package phpHtmlLib
35     *
36     */
37    
38     class Container {
39    
40    
41     /**
42     * Tag content as a stack
43     * ie <span> content here </span>
44     * @var array
45     * @access private
46     */
47     var $_content = array();
48    
49     /**
50     * This keeps track of how much content
51     * data has been pushed into the content
52     * portion of the tag.
53     *
54     * @var int
55     * @access private
56     */
57     var $_data_count = 0;
58    
59     /**
60 jonen 1.2 * The flags that tell us
61     * how to render the tag
62     * its contents, and the close
63 jonen 1.1 */
64 jonen 1.2 var $_flags = _NEWLINEAFTERCONTENT;
65 jonen 1.1
66    
67     /**
68     * The constructor.
69     *
70     * This lets you pass in data
71     * that you want automatically
72     * added to the container. This
73     * works in the same manner as
74     * the push() method.
75     */
76     function Container() {
77     //We do the adding to the content var
78     //here instead of calling $this->push()
79     //to save some cpu cycles.
80     $num = func_num_args();
81     for ($i=0;$i<$num;$i++) {
82     $arg = func_get_arg($i);
83     array_push($this->_content, $arg);
84     }
85 jonen 1.2 $this->_data_count += $num;
86    
87     //set the flag bitmask
88     $this->_set_flags();
89 jonen 1.1 }
90    
91    
92     /**
93     * This function is compatible with the
94     * rest of the phpHtmllib API spec.
95     * It just walks through each of the
96     * class' data and renders it with the
97     * appropriate indentation.
98     *
99     * @param int - the indentation level for
100     * the container.
101     * @param int - the output debug flag to
102     * maintain compatibility w/ the API.
103     *
104     * @return string the raw html output.
105     */
106 jonen 1.2 function render($indent_level=0, $output_debug=0) {
107 jonen 1.1 $html = '';
108 jonen 1.2
109     for ($x=0; $x<=$this->_data_count-1; $x++) {
110     $item = &$this->_content[$x];
111 jonen 1.1 if (method_exists($item, "render") ) {
112 jonen 1.2 if (($this->_flags & _COLLAPSE) && method_exists($item, "set_collapse")) {
113 jonen 1.1 $item->set_collapse(TRUE, FALSE);
114     }
115     $html .= $item->render($indent_level, $output_debug);
116     } else {
117 jonen 1.2 if ($this->_flags & _COLLAPSE) {
118 jonen 1.1 $html .= $item;
119     } else {
120     $indent = $this->_render_indent($indent_level, $output_debug);
121     $html .= $indent.$item;
122 jonen 1.2 if ($this->_flags & _NEWLINEAFTERCONTENT) {
123 jonen 1.1 $html .= "\n";
124     }
125     }
126     }
127     }
128 jonen 1.2 if ($this->_flags & _COLLAPSE) {
129 jonen 1.1 $indent = $this->_render_indent($indent_level, $output_debug);
130 jonen 1.2 if ($this->_flags & _NEWLINEAFTERCONTENT) {
131 jonen 1.1 if ($output_debug) {
132     $html = $indent . $html . "<br>\n";
133     } else {
134     $html = $indent . $html . "\n";
135     }
136     } else {
137     $html = $indent . $html;
138     }
139    
140     }
141     return $html;
142     }
143    
144    
145    
146     /***************************/
147     /* DATA specific functions */
148     /***************************/
149    
150     /**
151     * Same as add().
152     * NOTE: only exists for 1.1.x compatibility
153     *
154     * @deprecated
155     * @param mixed $content - either string, or tag object.
156     * @access public
157     */
158     function push( ) {
159     $args = func_get_args();
160     call_user_func_array( array(&$this, "add"), $args);
161     }
162    
163     /**
164     * add content onto content stack
165     *
166     * adds content to tag as a FIFO.
167     * You can have n number of parameters.
168     * each one will get added in succession to the content.
169     * @param mixed $content - either string, or tag object.
170     * @access public
171     */
172     function add( ) {
173     $args = func_get_args();
174     $num = 0;
175     foreach( $args as $arg ) {
176     $this->_content[] = $arg;
177     $num++;
178     }
179     //keep track of how much data we have added.
180     $this->_data_count += $num;
181     }
182    
183    
184     /**
185     * Same as add_reference
186     * NOTE : only exists for compatibility with 1.1.x
187     *
188     * @deprecated
189     *
190     * @access public
191     * @param mixed - a reference to some variable.
192     */
193     function push_reference( &$content ) {
194     $this->add_reference( $content );
195     }
196    
197     /**
198     * Add content onto content stack
199     * so you can change the item later.
200     *
201     * adds content to tag as a FIFO
202     * You can only add 1 element at a time, and
203     * it will be added as a reference. So you can't do
204     * push_reference("something");, since "something" is a
205     * static.
206     *
207     * @access public
208     *
209     * @param mixed $content - either string, or tag object.
210     * the tag object gets stored as a
211     * reference to the original, so you
212     * can push it, then modify it later.
213     */
214     function add_reference( &$content ) {
215     $this->_content[] = &$content;
216     $this->_data_count++;
217     }
218    
219    
220     /**
221     * destroy existing content and start with new content.
222     *
223     * @access public
224     * @param mixed $content can be tag object, or raw (string).
225     */
226     function reset_content( ) {
227     $this->_content = array();
228     $this->_data_count = 0;
229 jonen 1.2 $args = func_get_args();
230     call_user_func_array( array(&$this, "add"), $args);
231 jonen 1.1 }
232    
233     /**
234     * counts the number of content objects
235     *
236     * @access public
237     * @return int
238     */
239     function count_content( ) {
240 jonen 1.2 return $this->_data_count;
241     }
242    
243    
244     /**
245     * This method is used to set the bitmask
246     * flags for this tag. It tells the
247     * class how to render the tag.
248     *
249     * NOTE: the child class can override this
250     * to set the options
251     */
252     function _set_flags() {
253     $this->_flags = _NEWLINEAFTERCONTENT | _INDENT;
254 jonen 1.1 }
255    
256    
257     /**
258     * function to set the indent flag
259     *
260     * @access public
261     * @param boolean $flag TRUE or FALSE
262     */
263     function set_indent_flag( $flag ) {
264 jonen 1.2 if ($flag) {
265     $this->_flags |= _INDENT;
266     } else {
267     $this->_flags &= ~_INDENT;
268     }
269 jonen 1.1 }
270    
271    
272     /**
273     * This flag gets the current value
274     * of the indent flag
275     *
276     * @access public
277     *
278     * @return boolean
279     */
280     function get_indent_flag() {
281 jonen 1.2 return $this->_flags & _INDENT;
282 jonen 1.1 }
283    
284    
285     /**
286     * This function turns on the collapse flag
287     *
288     * @access public
289     *
290     * @param boolean - the collapse flag
291     * @param boolean - the indent flag
292     * DEFAULT: TRUE;
293     */
294     function set_collapse($collapse=TRUE, $indent=TRUE) {
295 jonen 1.2 if ($collapse) {
296     $this->_flags |= _COLLAPSE;
297     } else {
298     $this->_flags &= ~_COLLAPSE;
299     }
300 jonen 1.1
301     if (!$indent) {
302     $this->set_indent_flag($indent);
303 jonen 1.2 $this->_flags &= ~_NEWLINEAFTERCONTENT;
304 jonen 1.1 }
305     }
306    
307    
308    
309     /**
310     * returns leading indent for tag
311     *
312     * @access private
313     *
314     * @param int the indentation level for this tag.
315     * @return string
316     */
317     function _render_indent($indent_level, $debug_flag=0) {
318     $indent = "";
319     if ( $debug_flag && $indent_level > 0) {
320     $indent_level *=2;
321     }
322 jonen 1.2 if ( ($this->_flags & _INDENT) && $indent_level > 0) {
323     $indent = str_repeat(_INDENT_STR, $indent_level);
324 jonen 1.1 }
325     if ( $debug_flag && $indent_level > 0) {
326 jonen 1.2 $indent = str_replace(_INDENT_STR, "&nbsp;", $indent);
327 jonen 1.1 }
328     return $indent;
329     }
330     }
331     ?>

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