View difference between Paste ID: C0WLbbmN and Wq23EqwH
SHOW: | | - or go back to the newest paste.
1
<?php
2
3
/*
4
<------------------------------------------------------->
5-
						GTAG v2						
5+
6-
	------------------------------------------------
6+
7-
 		   by Deji - http://gtag.gtagaming.com		
7+
8
	$Author			= Deji
9
	
10
	> Desc
11
		Generates and processes HTML code displayed on the browser.
12
		This is even more awful than raw HTML. I'd use templates instead.
13
 
14
<------------------------------------------------------->
15
*/
16
17
if(defined('HTML_API_SCRIPT')) exit();
18
define('HTML_API_SCRIPT', __FILE__);
19
20
define('HTML_3_2', 1);
21
define('HTML4', 2);
22
define('XHTML', 3);
23
24
class html
25
{
26
	private		$output					= "";
27
}
28
29
class html_tag extends html
30
{
31
	protected	$content				= "";
32
	protected	$tagname				= "";
33
	protected	$required_attributes	= array();
34
	protected	$attributes				= array();
35
	protected	$standard_attributes	= array();
36
	protected	$event_attributes		= array();
37
	
38
	function __construct($name)
39
	{
40
		$this->tagname = $name;
41
	}
42
	
43
	function __clone()
44
	{
45
		/*foreach($this->content as &$v)
46
		{
47
			if(is_object($v)) $v = clone $v;
48
		}*/
49
	}
50
	
51
	public function build()
52
	{
53
		$this->output .= "<". $this->tagname;
54
		
55
		// Add attributes in order of importance :)
56
		$this->build_attributes($this->required_attributes);
57
		$this->build_attributes($this->attributes);
58
		$this->build_attributes($this->standard_attributes);
59
		$this->build_attributes($this->event_attributes);
60
		
61
		// Add any content.
62
		if($this->is_tag_self_closing()) $this->output .= " />";
63
		else $this->output .= ">". $this->build_content($this->content) ."</{$this->tagname}>";
64
		return $this->output;
65
	}
66
	
67
	private function build_attributes(&$attributes)
68
	{
69
		if(sizeof($attributes))
70
		{
71
			foreach($attributes as $k => &$v)
72
			{
73
				$this->output .= " {$k}=\"{$v}\"";
74
			}
75
		}
76
	}
77
	
78
	private function build_content(&$content)
79
	{
80
		if(is_array($content))
81
		{
82
			$html = '';
83
			foreach($content as &$v)
84
			{
85
				if(is_array($v)) $html .= $this->build_content($v);
86
				elseif(is_object($v)) $html .= $v->build();
87
				else $html .= $v;
88
			}
89
			return $html;
90
		}
91
		elseif(is_object($content)) return $content->build();
92
		else return $content;
93
	}
94
	
95
	public function set_content($v)
96
	{
97
		$this->content = array();
98
		if($this->is_tag_self_closing()) return FALSE;
99
		if(func_num_args() > 1) $v = func_get_args();
100
		if(is_array($v))
101
		{
102
			foreach($v as &$a)
103
			{
104
				$this->add_content($a);
105
			}
106
		}
107
		else $this->content[] = $v;
108
	}
109
	
110
	public function add_content($v)
111
	{
112
		if($this->is_tag_self_closing()) return FALSE;		// no sir, this element can't contain anything
113
		if(func_num_args() > 1) $v = func_get_args();
114
		if(is_array($v))
115
		{
116
			foreach($v as &$a)
117
			{
118
				$this->add_content($a);
119
			}
120
		}
121
		else $this->content[] = $v;
122
	}
123
	
124
	public function add_class($v)
125
	{
126
		$a = $this->get_attr_class();
127
		if($a != '') $a .= " ";
128
		$this->set_attr_class($a ."{$v}");
129
	}
130
	
131
	function set_attr_class($v)					{$this->set_attribute('class', $v);}
132
	function set_attr_name($v)					{$this->set_attribute('name', $v);}
133
	function set_attr_selected($v)				{$this->set_attribute('selected', $v);}
134
	function set_attr_value($v)					{$this->set_attribute('value', $v);}
135
	function set_attr_id($v)					{$this->set_standard_attribute('id', $v);}
136
	function set_attr_style($v)					{$this->set_standard_attribute('style', $v);}
137
	function set_attr_title($v)					{$this->set_standard_attribute('title', $v);}
138
	
139
	function onchange($v)						{$this->set_event_attribute('onchange', $v);}
140
	function onclick($v)						{$this->set_event_attribute('onclick', $v);}
141
	function ondblclick($v)						{$this->set_event_attribute('ondblclick', $v);}
142
	function onmousedown($v)					{$this->set_event_attribute('onmousedown', $v);}
143
	function onmousemove($v)					{$this->set_event_attribute('onmousemove', $v);}
144
	function onmouseout($v)						{$this->set_event_attribute('onmouseout', $v);}
145
	function onmouseover($v)					{$this->set_event_attribute('onmouseover', $v);}
146
	function onmouseup($v)						{$this->set_event_attribute('onmouseup', $v);}
147
	function onkeydown($v)						{$this->set_event_attribute('onkeydown', $v);}
148
	function onkeypress($v)						{$this->set_event_attribute('onkeypress', $v);}
149
	function onkeyup($v)						{$this->set_event_attribute('onkeyup', $v);}
150
	
151
	function set_required_attribute($k, $v)		{$this->required_attributes[$k] = $v;}
152
	function set_attribute($k, $v)				{$this->attributes[$k] = $v;}
153
	function set_standard_attribute($k, $v)		{$this->standard_attributes[$k] = $v;}
154
	function set_event_attribute($k, $v)		{$this->event_attributes[$k] = $v;}
155
	
156
	function get_attr_class()					{return $this->get_attribute('class');}
157
	function get_attr_name()					{return $this->get_attribute('name');}
158
	function get_attr_selected()				{return $this->get_attribute('selected');}
159
	function get_attr_value()					{return $this->get_attribute('value');}
160
	function get_attr_id()						{return $this->get_standard_attribute('id');}
161
	function get_attr_style()					{return $this->get_standard_attribute('style');}
162
	function get_attr_title()					{return $this->get_standard_attribute('title');}
163
	
164
	function get_required_attribute($k)			{return isset($this->required_attributes[$k]) ? $this->required_attributes[$k] : FALSE;}
165
	function get_attribute($k)					{return isset($this->attributes[$k]) ? $this->attributes[$k] : FALSE;}
166
	function get_standard_attribute($k)			{return isset($this->standard_attributes[$k]) ? $this->standard_attributes[$k] : FALSE;}
167
	function get_event_attribute($k)			{return isset($this->event_attributes[$k]) ? $this->event_attributes[$k] : FALSE;}
168
	
169
	function clear_attr_selected()				{$this->clear_attribute('selected');}
170
	
171
	function clear_required_attribute($k)		{if(isset($this->required_attributes[$k])) unset($this->required_attributes[$k]);}
172
	function clear_attribute($k)				{if(isset($this->attributes[$k])) unset($this->attributes[$k]);}
173
	function clear_standard_attribute($k)		{if(isset($this->standard_attributes[$k])) unset($this->standard_attributes[$k]);}
174
	function clear_event_attribute($k)			{if(isset($this->event_attributes[$k])) unset($this->event_attributes[$k]);}
175
	
176
	function clear_all_attributes()
177
	{
178
		$this->required_attributes = array();
179
		$this->attributes = array();
180
		$this->standard_attributes = array();
181
		$this->event_attributes = array();
182
	}
183
	
184
	/********************************************************************************************/
185
	// Determines whether the tag should be closed on opening (XHTML style '/>')
186
	/********************************************************************************************/
187
	
188
	function is_tag_self_closing()
189
	{
190
		switch($this->tagname)
191
		{
192
			case 'area':
193
			case 'base':
194
			case 'basefont':
195
			case 'br':
196
			case 'hr':
197
			case 'input':
198
			case 'img':
199
			case 'link':
200
			case 'meta':
201
				return TRUE;
202
			default:
203
				return FALSE;
204
		}
205
	}
206
}
207
208
class html_tag_div extends html_tag
209
{
210
	function __construct($content = '')
211
	{
212
		if($content != '') $this->set_content($content);
213
		parent::__construct("div");
214
	}
215
}
216
217
class html_tag_span extends html_tag
218
{
219
	function __construct($content = '')
220
	{
221
		if($content != '') $this->set_content($content);
222
		parent::__construct("span");
223
	}
224
}
225
226
class html_tag_header extends html_tag
227
{
228
	function __construct($size, $content = '')
229
	{
230
		if($content != '') $this->set_content($content);
231
		if($size < 1 || $size > 7) $size = 1;
232
		parent::__construct("h{$size}");
233
	}
234
}
235
236
class html_tag_paragraph extends html_tag
237
{
238
	function __construct($content = '')
239
	{
240
		if($content != '') $this->set_content($content);
241
		parent::__construct("p");
242
	}
243
}
244
245
class html_tag_a extends html_tag
246
{
247
	function __construct($href = '', $content = '')
248
	{
249
		$this->set_required_attribute('href', $href);
250
		if($content != '') $this->set_content($content);
251
		parent::__construct("a");
252
	}
253
}
254
255
class html_tag_img extends html_tag
256
{
257
	function __construct($src = '', $alt = '')
258
	{
259
		$this->set_attr_src($src);
260
		$this->set_attr_alt($alt);
261
		parent::__construct("img");
262
	}
263
	
264
	function set_attr_src($v)					{$this->set_required_attribute('src', $v);}
265
	function get_attr_src()						{return $this->get_required_attribute('src');}
266
	function set_attr_alt($v)					{$this->set_required_attribute('alt', $v);}
267
	function get_attr_alt()						{return $this->get_required_attribute('alt');}
268
	function set_attr_width($v)					{$this->set_attribute('width', $v);}
269
	function get_attr_width()					{return $this->get_attribute('width');}
270
	function set_attr_height($v)				{$this->set_attribute('height', $v);}
271
	function get_attr_height()					{return $this->get_attribute('height');}
272
}
273
274
class html_tag_linebreak extends html_tag
275
{
276
	function __construct()
277
	{
278
		parent::__construct("br");
279
	}
280
}
281
282
class html_tag_form extends html_tag
283
{
284
	function __construct($action = '', $method = 'get')
285
	{
286
		$this->set_attr_action($action);
287
		if($method != 'get') $this->set_attr_method('post');
288
		parent::__construct('form');
289
	}
290
	
291
	function set_attr_action($v)				{$this->set_required_attribute('action', $v);}
292
	function get_attr_action($v)				{return $this->get_required_attribute('action');}
293
	function set_attr_method($v)				{$this->set_attribute('method', $v);}
294
	function get_attr_method($v)				{return $this->get_attribute('method');}
295
	function set_attr_enctype($v)				{$this->set_standard_attribute('enctype', $v);}
296
	function get_attr_enctype($v)				{return $this->set_standard_attribute('enctype');}
297
	
298
	function onreset($v)						{$this->set_event_attribute('onreset', $v);}
299
	function onsubmit($v)						{$this->set_event_attribute('onsubmit', $v);}
300
}
301
302
class html_tag_fieldset extends html_tag
303
{
304
	private		$legend;
305
	
306
	function __construct($legend = '')
307
	{
308
		if($legend != '') $this->legend = new html_tag_legend($legend);
309
		parent::__construct('fieldset');
310
	}
311
	
312
	public function get_legend()
313
	{
314
		return $this->legend ? $this->legend : FALSE;
315
	}
316
}
317
318
class html_tag_input extends html_tag
319
{
320
	function __construct($type = '')
321
	{
322
		if($type != '') $this->set_attribute('type', $type);
323
		parent::__construct('input');
324
	}
325
	
326
	public function set_attr_checked($checked = 1)
327
	{
328
		if($checked) $this->set_attribute('checked', 'checked');
329
		else $this->clear_attribute('checked');
330
	}
331
	
332
	function set_attr_alt($v)					{$this->set_required_attribute('alt', $v);}
333
	function get_attr_alt($v)					{return $this->get_required_attribute('alt');}
334
	function set_attr_src($v)					{$this->set_required_attribute('src', $v);}
335
	function get_attr_src($v)					{return $this->get_required_attribute('src');}
336
}
337
338
class html_tag_legend extends html_tag
339
{
340
	function __construct($text = '')
341
	{
342
		if($text != '') $this->set_content($text);
343
		parent::__construct('legend');
344
	}
345
}
346
347
class html_tag_select extends html_tag
348
{
349
	private		$options				= array();
350
	
351
	function __construct()
352
	{
353
		if(func_num_args())
354
		{
355
			$v = func_get_args();
356
			$this->add_option($v);
357
		}
358
		parent::__construct('select');
359
	}
360
	
361
	public function build()
362
	{
363
		foreach($this->options as &$opt)
364
		{
365
			$this->add_content($opt->build());
366
		}
367
		return parent::build();
368
	}
369
	
370
	public function add_option(&$option)
371
	{
372
		if(is_array($option))
373
		{
374
			foreach($option as $opt) $this->add_option($opt);
375
		}
376
		else $this->options[] = $option;
377
	}
378
	
379
	public function set_selected_option($i)
380
	{
381
		foreach($this->options as $k => &$opt) $opt->set_selected($k == $i);
382
	}
383
	
384
	public function set_selected_option_value($v)
385
	{
386
		foreach($this->options as $k => &$opt) $opt->set_selected($opt->get_attr_value() == $v);
387
	}
388
}
389
390
class html_tag_option extends html_tag
391
{
392
	function __construct($content='', $value='')
393
	{
394
		parent::__construct('option');
395
		if($value != '') $this->set_attr_value($value);
396
		if($content != '') $this->set_content($content);
397
	}
398
	
399
	public function set_selected($b)
400
	{
401
		if($b) $this->set_attr_selected('selected');
402
		else $this->clear_attr_selected();
403
	}
404
}
405
406
class html_tag_table extends html_tag
407
{
408
	private 	$thead = array();
409
	private 	$tbody = array();
410
	private 	$tfoot = array();
411
	
412
	function __construct($tbody=array(), $thead=array(), $tfoot=array())
413
	{
414
		parent::__construct('table');
415
		foreach($tbody as &$row) $this->tbody[] = $row;
416
		foreach($thead as &$row) $this->thead[] = $row;
417
		foreach($tfoot as &$row) $this->tfoot[] = $row;
418
	}
419
	
420
	public function add_header_row($cols = array())
421
	{
422
		$this->thead[] = new html_tag_tr($cols);
423
	}
424
	
425
	public function add_footer_row($cols = array())
426
	{
427
		$this->tfoot[] = new html_tag_tr($cols);
428
	}
429
	
430
	public function add_row($cols = array())
431
	{
432
		$this->tbody[] = new html_tag_tr($cols);
433
	}
434
	
435
	public function build()
436
	{
437
		if($this->thead)
438
		{
439
			$this->add_content('<thead>');
440
			foreach($this->thead as &$row)
441
			{
442
				$this->add_content($row->build());
443
			}
444
			$this->add_content('</thead>');
445
		}
446
		if($this->tfoot)
447
		{
448
			$this->add_content('<tfoot>');
449
			foreach($this->tfoot as &$row)
450
			{
451
				$this->add_content($row->build());
452
			}
453
			$this->add_content('</tfoot>');
454
		}
455
		if($this->tbody)
456
		{
457
			$this->add_content('<tbody>');
458
			foreach($this->tbody as &$row)
459
			{
460
				$this->add_content($row->build());
461
			}
462
			$this->add_content('</tbody');
463
		}
464
		return parent::build();
465
	}
466
}
467
468
class html_tag_tr extends html_tag
469
{
470
	private		$cols	= array();
471
472
	function __construct(&$cols = array())
473
	{
474
		foreach($cols as &$col) $this->cols[] = $col;
475
		parent::__construct('tr');
476
	}
477
	
478
	public function build()
479
	{
480
		foreach($this->cols as &$col)
481
		{
482
			if(is_object($col)) $this->add_content($col->build());
483
			else $this->add_content($col);
484
		}
485
		return parent::build();
486
	}
487
}
488
489
class html_tag_table_cell extends html_tag
490
{
491
	private		$cols	= array();
492
493
	function __construct($content='', $header=0)
494
	{
495
		if($header) parent::__construct('th');
496
		else parent::__construct('td');
497
		if($content != '') $this->set_content($content);
498
	}
499
	
500
	function set_attr_colspan($v)				{$this->set_attribute('colspan', $v);}
501
	function get_attr_colspan()					{return $this->get_attribute('colspan');}
502
}
503
504
class html_tag_td extends html_tag_table_cell
505
{
506
	function __construct($content='')
507
	{
508
		parent::__construct($content, 0);
509
	}
510
}
511
512
class html_tag_th extends html_tag_table_cell
513
{
514
	function __construct($content='')
515
	{
516
		parent::__construct($content, 1);
517
	}
518
}
519
520
?>