Commit | Line | Data |
---|---|---|
cea5b93a RK |
1 | <?php |
2 | /* ***** BEGIN LICENSE BLOCK ***** | |
3 | * | |
4 | * The contents of this file are subject to Austrian copyright reegulations | |
5 | * ("Urheberrecht"); you may not use this file except in compliance with | |
6 | * those laws. | |
7 | * This contents and any derived work, if it gets distributed in any way, | |
8 | * is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, | |
9 | * either express or implied. | |
10 | * | |
11 | * The Original Code is KaiRo's extended DOM document classes. | |
12 | * | |
13 | * The Initial Developer of the Original Code is | |
14 | * KaiRo - Robert Kaiser. | |
15 | * Portions created by the Initial Developer are Copyright (C) 2010 | |
16 | * the Initial Developer. All Rights Reserved. | |
17 | * | |
18 | * Contributor(s): Robert Kaiser <kairo@kairo.at> | |
19 | * | |
20 | * ***** END LICENSE BLOCK ***** */ | |
21 | ||
22 | class ExtendedDocument extends DOMDocument { | |
23 | // ExtendedDocument PHP class | |
24 | // this extends the general PHP DOM Document class to simplify some usual constructs | |
25 | // | |
26 | // function __construct([$version], [$encoding]) | |
27 | // CONSTRUCTOR | |
28 | // construct a new DOM Document that uses our element definitions | |
29 | // | |
ae41c41b RK |
30 | // private $xmheader |
31 | // the default XML header | |
32 | // | |
33 | // private $xhtmldtype | |
34 | // the XHTML doctype to use by default | |
35 | // | |
cea5b93a RK |
36 | // function appendElement($name, [$value]) |
37 | // appends a DOMDocument::createElement() as a child of this document (see there for params) | |
38 | // returns the new child | |
39 | // | |
40 | // function appendElementXML($name, $xmldata) | |
41 | // appends a DOMDocument::createElement() with the given name as a child of this document, | |
42 | // with an ExtendedDocument::createXMLFragment() of the given XML data inside | |
43 | // returns the new child | |
44 | // | |
45 | // function appendLink($target, [$value]) | |
46 | // appends an ExtendedDocument::createElementLink() as a child of this document (see there for params) | |
47 | // returns the new child | |
48 | // | |
ae41c41b RK |
49 | // function appendFormDiv($action, $method, $name) |
50 | // appends an ExtendedDocument::createElementForm() as a child of this document (see there for params) | |
51 | // returns an HTML <div> that is a child of the new child | |
52 | // | |
53 | // function appendInputHidden($name, $value) | |
54 | // appends an ExtendedDocument::createElementInputHidden() as a child of this document (see there for params) | |
55 | // returns the new child | |
56 | // | |
57 | // function appendInputText($name, $maxlength, $size, [$id], [$value]) | |
58 | // appends an ExtendedDocument::createElementInputText() as a child of this document (see there for params) | |
59 | // returns the new child | |
60 | // | |
61 | // function appendInputRadio($name, $id, $value, $checked) | |
62 | // appends an ExtendedDocument::createElementInputRadio() as a child of this document (see there for params) | |
63 | // returns the new child | |
64 | // | |
65 | // function appendInputCheckbox($name, $id, $value, $checked) | |
66 | // appends an ExtendedDocument::createElementInputCheckbox() as a child of this document (see there for params) | |
67 | // returns the new child | |
68 | // | |
69 | // function appendInputSubmit($value) | |
70 | // appends an ExtendedDocument::createElementInputSubmit() as a child of this document (see there for params) | |
71 | // returns the new child | |
72 | // | |
73 | // function appendLabel($for_id, $value) | |
74 | // appends an ExtendedDocument::createElementLabel() as a child of this document (see there for params) | |
75 | // returns the new child | |
76 | // | |
cea5b93a RK |
77 | // function appendText($text) |
78 | // appends a DOMDocument::createTextNode() as a child of this document (see there for params) | |
79 | // returns the new child | |
80 | // | |
ae41c41b RK |
81 | // function appendHTMLMarkup($htmldata, [$parentNode]) |
82 | // appends a representation of the HTML data as children of the given parent node, by default this document | |
83 | // NO return value! | |
84 | // | |
85 | // function appendXMLMarkup($xmldata, [$parentNode]) | |
86 | // appends a representation of the XML data as children of the given parent node, by default this document | |
cea5b93a RK |
87 | // NO return value! |
88 | // | |
89 | // function appendJSElement($jsdata) | |
90 | // appends an ExtendedDocument::createElementJS() as a child of this document (see there for params) | |
91 | // NO return value! | |
92 | // | |
cea5b93a RK |
93 | // function createElementLink($target, [$value]) |
94 | // returns an ExtendedElement that is an HTML <a> with the given target (href) and (optional) value | |
95 | // | |
ae41c41b RK |
96 | // function createElementForm($action, $method, $name) |
97 | // returns an ExtendedElement that is an HTML <div> that is a child of an HTML <form> | |
98 | // with the given action, method, and name | |
99 | // | |
100 | // function createElementInputHidden($name, $value) | |
101 | // returns an ExtendedElement that is an HTML <input> of type 'hidden' with the given name and value | |
102 | // | |
103 | // function createElementInputText($name, $maxlength, $size, [$id], [$value]) | |
104 | // returns an ExtendedElement that is an HTML <input> of type 'text' with the given name, maxlength, size, | |
105 | // and optionally id and value | |
106 | // | |
107 | // function createElementInputRadio($name, $id, $value, $checked) | |
108 | // returns an ExtendedElement that is an HTML <input> of type 'radio' with the given name, id, value and | |
109 | // checked state | |
110 | // | |
111 | // function createElementInputCheckbox($name, $id, $value, $checked) | |
112 | // returns an ExtendedElement that is an HTML <input> of type 'checkbox' with the given name, id, value and | |
113 | // checked state | |
114 | // | |
115 | // function createElementInputSubmit($value) | |
116 | // returns an ExtendedElement that is an HTML <input> of type 'submit' with the given name and value | |
117 | // | |
118 | // function createElementLabel($for_id, $value) | |
119 | // returns an ExtendedElement that is an HTML <label> with the given 'for' and value | |
cea5b93a RK |
120 | // |
121 | // function createElementJS($jsdata) | |
122 | // returns an ExtendedElement that is an HTML <script> of JavaScript type with the JS data inside | |
123 | ||
124 | function __construct($version = '1.0', $encoding = 'utf-8') { | |
125 | // make sure the default DOMDocument constructor runs | |
126 | parent::__construct($version, $encoding); | |
127 | $this->registerNodeClass('DOMElement', 'ExtendedElement'); | |
128 | } | |
129 | ||
130 | function appendElement($name, $value = '') { | |
131 | return $this->appendChild($this->createElement($name, $value)); | |
132 | } | |
133 | function appendElementXML($name, $xmldata) { | |
134 | $aelem = $this->appendChild($this->createElement($name)); | |
ae41c41b RK |
135 | $aelem->appendXMLMarkup($xmldata); |
136 | //$aelem->appendChild($this->createXMLFragment($xmldata)); | |
cea5b93a RK |
137 | return $aelem; |
138 | } | |
139 | function appendLink($target, $value = '') { | |
140 | return $this->appendChild($this->createElementLink($target, $value)); | |
141 | } | |
ae41c41b RK |
142 | function appendFormDiv($action, $method, $name) { |
143 | $formelem = $this->appendChild($this->createElementForm($action, $method, $name)); | |
144 | return $formelem->appendElement('div'); | |
145 | } | |
146 | function appendInputHidden($name, $value) { | |
147 | return $this->appendChild($this->createElementInputHidden($name, $value)); | |
148 | } | |
149 | function appendInputText($name, $maxlength, $size, $id = null, $value = null) { | |
150 | return $this->appendChild($this->createElementInputText($name, $maxlength, $size, $id, $value)); | |
151 | } | |
152 | function appendInputRadio($name, $id, $value, $checked) { | |
153 | return $this->appendChild($this->createElementInputRadio($name, $id, $value, $checked)); | |
154 | } | |
155 | function appendInputCheckbox($name, $id, $value, $checked) { | |
156 | return $this->appendChild($this->createElementInputCheckbox($name, $id, $value, $checked)); | |
157 | } | |
158 | function appendInputSubmit($value) { | |
159 | return $this->appendChild($this->createElementInputSubmit($value)); | |
160 | } | |
161 | function appendLabel($for_id, $value) { | |
162 | return $this->appendChild($this->createElementLabel($for_id, $value)); | |
163 | } | |
cea5b93a RK |
164 | function appendText($text) { |
165 | return $this->appendChild($this->createTextNode($text)); | |
166 | } | |
cea5b93a RK |
167 | function appendJSElement($jsdata) { |
168 | $this->appendChild($this->createElementJS($jsdata)); | |
169 | } | |
170 | ||
ae41c41b RK |
171 | function appendHTMLMarkup($htmldata, $parentNode = null) { |
172 | if (is_null($parentNode)) { $parentNode =& $this; } | |
173 | // XXX: just a workaround for now! | |
174 | $parentNode->appendChild($this->createCDATASection($htmldata)); | |
175 | } | |
176 | ||
177 | function appendXMLMarkup($xmldata, $parentNode = null) { | |
178 | if (is_null($parentNode)) { $parentNode =& $this; } | |
179 | $tmpdoc = new ExtendedDocument; | |
180 | $tmpxml = '<?xml version="1.0" encoding="utf-8"?>'."\n"; | |
181 | $tmpxml .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'."\n"; | |
182 | $tmpxml .= '<root>'.$xmldata.'</root>'; | |
183 | $tmpdoc->loadXML($tmpxml); | |
184 | foreach ($tmpdoc->getElementsByTagName('root')->item(0)->childNodes as $child) { | |
185 | $parentNode->appendChild($this->importNode($child, true)); | |
186 | } | |
cea5b93a RK |
187 | } |
188 | ||
189 | function createElementLink($target, $value = '') { | |
190 | $link = $this->createElement('a', $value); | |
191 | $link->setAttribute('href', $target); | |
192 | return $link; | |
193 | } | |
194 | ||
ae41c41b RK |
195 | function createElementForm($action, $method, $name) { |
196 | $formelem = $this->createElement('form'); | |
197 | $formelem->setAttribute('action', $action); | |
198 | $formelem->setAttribute('method', $method); | |
199 | $formelem->setAttribute('name', $name); | |
200 | return $formelem; | |
201 | } | |
202 | ||
203 | function createElementInputHidden($name, $value) { | |
204 | $hidden = $this->createElement('input'); | |
205 | $hidden->setAttribute('type', 'hidden'); | |
206 | $hidden->setAttribute('name', $name); | |
207 | $hidden->setAttribute('value', $value); | |
208 | return $hidden; | |
209 | } | |
210 | ||
211 | function createElementInputText($name, $maxlength, $size, $id = null, $value = null) { | |
212 | $txfield = $this->createElement('input'); | |
213 | $txfield->setAttribute('type', 'text'); | |
214 | if (!is_null($id)) { $txfield->setAttribute('id', $id); } | |
215 | $txfield->setAttribute('name', $name); | |
216 | $txfield->setAttribute('maxlength', $maxlength); | |
217 | $txfield->setAttribute('size', $size); | |
218 | if (!is_null($value)) { $txfield->setAttribute('value', $value); } | |
219 | return $txfield; | |
220 | } | |
221 | ||
222 | function createElementInputRadio($name, $id, $value, $checked) { | |
223 | $radio = $this->createElement('input'); | |
224 | $radio->setAttribute('type', 'radio'); | |
225 | $radio->setAttribute('name', $name); | |
226 | $radio->setAttribute('id', $id); | |
227 | $radio->setAttribute('value', $value); | |
228 | if ($checked) { $radio->setAttribute('checked', ''); } | |
229 | return $radio; | |
230 | } | |
231 | ||
232 | function createElementInputCheckbox($name, $id, $value, $checked) { | |
233 | $cbox = $this->createElement('input'); | |
234 | $cbox->setAttribute('type', 'checkbox'); | |
235 | $cbox->setAttribute('name', $name); | |
236 | $cbox->setAttribute('id', $id); | |
237 | $cbox->setAttribute('value', $value); | |
238 | if ($checked) { $cbox->setAttribute('checked', ''); } | |
239 | return $cbox; | |
240 | } | |
241 | ||
242 | function createElementInputSubmit($value) { | |
243 | $submitbtn = $this->createElement('input'); | |
244 | $submitbtn->setAttribute('type', 'submit'); | |
245 | $submitbtn->setAttribute('value', $value); | |
246 | return $submitbtn; | |
247 | } | |
248 | ||
249 | function createElementLabel($for_id, $value) { | |
250 | $label = $this->createElement('label', $value); | |
251 | $label->setAttribute('for', $for_id); | |
252 | return $label; | |
cea5b93a RK |
253 | } |
254 | ||
255 | function createElementJS($jsdata) { | |
256 | $jselem = $this->createElement('script'); | |
257 | $jselem->setAttribute('type', 'text/javascript'); | |
258 | $jselem->appendChild($this->createCDATASection($jsdata)); | |
259 | return $jselem; | |
260 | } | |
261 | } | |
262 | ||
263 | class ExtendedElement extends DOMElement { | |
264 | // ExtendedElement PHP class | |
265 | // this extends the general PHP DOM Element class to simplify some usual constructs | |
266 | // | |
267 | // function appendElement($name, [$value]) | |
268 | // appends a DOMDocument::createElement() as a child of this element (see there for params) | |
269 | // returns the new child | |
270 | // | |
271 | // function appendElementXML($name, $xmldata) | |
272 | // appends a DOMDocument::createElement() with the given name as a child of this element, | |
273 | // with an ExtendedDocument::createXMLFragment() of the given XML data inside | |
274 | // returns the new child | |
275 | // | |
276 | // function appendLink($target, [$value]) | |
277 | // appends an ExtendedDocument::createElementLink() as a child of this element (see there for params) | |
278 | // returns the new child | |
279 | // | |
ae41c41b RK |
280 | // function appendFormDiv($action, $method, $name) |
281 | // appends an ExtendedDocument::createElementForm() as a child of this element (see there for params) | |
282 | // returns an HTML <div> that is a child of the new child | |
283 | // | |
284 | // function appendInputHidden($name, $value) | |
285 | // appends an ExtendedDocument::createElementInputHidden() as a child of this element (see there for params) | |
286 | // returns the new child | |
287 | // | |
288 | // function appendInputText($name, $maxlength, $size, [$id], [$value]) | |
289 | // appends an ExtendedDocument::createElementInputText() as a child of this element (see there for params) | |
290 | // returns the new child | |
291 | // | |
292 | // function appendInputRadio($name, $id, $value, $checked) | |
293 | // appends an ExtendedDocument::createElementInputRadio() as a child of this element (see there for params) | |
294 | // returns the new child | |
295 | // | |
296 | // function appendInputCheckbox($name, $id, $value, $checked) | |
297 | // appends an ExtendedDocument::createElementInputCheckbox() as a child of this element (see there for params) | |
298 | // returns the new child | |
299 | // | |
300 | // function appendInputSubmit($value) | |
301 | // appends an ExtendedDocument::createElementInputSubmit() as a child of this element (see there for params) | |
302 | // returns the new child | |
303 | // | |
304 | // function appendLabel($for_id, $value) | |
305 | // appends an ExtendedDocument::createElementLabel() as a child of this element (see there for params) | |
306 | // returns the new child | |
307 | // | |
cea5b93a RK |
308 | // function appendText($text) |
309 | // appends a DOMDocument::createTextNode() as a child of this element (see there for params) | |
310 | // returns the new child | |
311 | // | |
ae41c41b RK |
312 | // function appendHTMLMarkup($htmldata) |
313 | // appends a representation of the HTML data as children of this element | |
314 | // NO return value! | |
315 | // | |
316 | // function appendXMLMarkup($xmldata) | |
317 | // appends a representation of the XML data as children of this element | |
cea5b93a RK |
318 | // NO return value! |
319 | // | |
320 | // function appendJSElement($jsdata) | |
321 | // appends an ExtendedDocument::createElementJS() as a child of this element (see there for params) | |
322 | // NO return value! | |
323 | ||
324 | function appendElement($name, $value = '') { | |
325 | return $this->appendChild($this->ownerDocument->createElement($name, $value)); | |
326 | } | |
327 | function appendElementXML($name, $xmldata) { | |
328 | $aelem = $this->appendChild($this->ownerDocument->createElement($name)); | |
ae41c41b | 329 | $aelem->appendXMLMarkup($xmldata); |
cea5b93a RK |
330 | return $aelem; |
331 | } | |
332 | function appendLink($target, $value = '') { | |
333 | return $this->appendChild($this->ownerDocument->createElementLink($target, $value)); | |
334 | } | |
ae41c41b RK |
335 | function appendFormDiv($action, $method, $name) { |
336 | $formelem = $this->appendChild($this->ownerDocument->createElementForm($action, $method, $name)); | |
337 | return $formelem->appendElement('div'); | |
338 | } | |
339 | function appendInputHidden($name, $value) { | |
340 | return $this->appendChild($this->ownerDocument->createElementInputHidden($name, $value)); | |
341 | } | |
342 | function appendInputText($name, $maxlength, $size, $id = null, $value = null) { | |
343 | return $this->appendChild($this->ownerDocument->createElementInputText($name, $maxlength, $size, $id, $value)); | |
344 | } | |
345 | function appendInputRadio($name, $id, $value, $checked) { | |
346 | return $this->appendChild($this->ownerDocument->createElementInputRadio($name, $id, $value, $checked)); | |
347 | } | |
348 | function appendInputCheckbox($name, $id, $value, $checked) { | |
349 | return $this->appendChild($this->ownerDocument->createElementInputCheckbox($name, $id, $value, $checked)); | |
350 | } | |
351 | function appendInputSubmit($value) { | |
352 | return $this->appendChild($this->ownerDocument->createElementInputSubmit($value)); | |
353 | } | |
354 | function appendLabel($for_id, $value) { | |
355 | return $this->appendChild($this->ownerDocument->createElementLabel($for_id, $value)); | |
356 | } | |
cea5b93a RK |
357 | function appendText($text) { |
358 | return $this->appendChild($this->ownerDocument->createTextNode($text)); | |
359 | } | |
ae41c41b RK |
360 | function appendHTMLMarkup($htmldata) { |
361 | $this->ownerDocument->appendHTMLMarkup($htmldata, $this); | |
362 | } | |
363 | function appendXMLMarkup($xmldata) { | |
364 | $this->ownerDocument->appendXMLMarkup($xmldata, $this); | |
cea5b93a RK |
365 | } |
366 | function appendJSElement($jsdata) { | |
367 | $this->appendChild($this->ownerDocument->createElementJS($jsdata)); | |
368 | } | |
369 | } | |
370 | ?> |