ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilTinyMCE.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2016 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once 'Services/RTE/classes/class.ilRTE.php';
5
15class ilTinyMCE extends ilRTE
16{
17 protected $mode = 'textareas';
18 protected $version = ''; // set default version here
19 protected $vd = ''; // version directory suffix
20
21 protected static $renderedToGlobalTemplate = false;
22
26 protected $styleselect = false;
27
33
37 public function __construct($a_version = '')
38 {
39 if (!$a_version) {
40 $a_version = '3.5.11';
41 }
42
43 parent::__construct($a_version);
44
45 switch ($a_version) {
46 case '3.4.7':
47 case '3.5.11':
48 $this->version = $a_version;
49 $this->vd = '_' . str_replace('.', '_', $a_version);
50 break;
51
52 default:
53 // unknown/unsupported version?
54 break;
55 }
56
57 $this->plugins = array(
58 'xhtmlxtras',
59 'style',
60 'layer',
61 'table',
62 'save',
63 'advhr',
64 'advlink',
65 'emotions',
66 'iespell',
67 'insertdatetime',
68 'preview',
69 'searchreplace',
70 'print',
71 'contextmenu',
72 'paste',
73 'directionality',
74 'fullscreen',
75 'nonbreaking',
76 'noneditable',
77 'style'
78 );
79
80 $this->setStyleSelect(false);
82 }
83
87 protected function addInternalTinyMCEImageManager()
88 {
89 if (!$this->client_init->readVariable('tinymce', 'use_advanced_img_mng')) {
90 parent::addPlugin('ilimgupload');
91 parent::addButton('ilimgupload');
92 parent::removePlugin('ibrowser');
93 parent::removePlugin('image');
94
95 $this->disableButtons(array(
96 'ibrowser',
97 'image'
98 ));
99
100 $this->setRemoveImgContextMenuItem(true);
101 } else {
102 parent::addPlugin('ibrowser');
103 parent::removePlugin('ilimgupload');
104 $this->disableButtons('ilimgupload');
105
106 $this->setRemoveImgContextMenuItem(false);
107 }
108 }
109
113 protected function handleImagePluginsBeforeRendering(array $tags)
114 {
115 if (!in_array('img', $tags)) {
116 $this->setRemoveImgContextMenuItem(true);
117 parent::removePlugin('ilimgupload');
118 parent::removePlugin('ibrowser');
119 parent::removePlugin('image');
120 $this->disableButtons(array(
121 'ibrowser',
122 'image',
123 'ilimgupload'
124 ));
125 }
126 }
127
131 protected function handleIliasImageManagerAdded()
132 {
134 }
135
137 {
138 if (!$this->client_init->readVariable('tinymce', 'use_advanced_img_mng')) {
139 parent::removePlugin('ilimgupload');
140 $this->disableButtons('ilimgupload');
141 } else {
142 parent::removePlugin('ibrowser');
143 $this->disableButtons('ibrowser');
144 }
145 }
146
150 public function addPlugin($a_plugin_name)
151 {
152 if (self::ILIAS_IMG_MANAGER_PLUGIN == $a_plugin_name) {
154 } else {
155 parent::addPlugin($a_plugin_name);
156 }
157 }
158
162 public function removePlugin($a_plugin_name)
163 {
164 if (self::ILIAS_IMG_MANAGER_PLUGIN == $a_plugin_name) {
166 } else {
167 parent::removePlugin($a_plugin_name);
168 }
169 }
170
174 public function addRTESupport($obj_id, $obj_type, $a_module = "", $allowFormElements = false, $cfg_template = null, $hide_switch = false)
175 {
176 if ($this->browser->isMobile()) {
178 } else {
180 }
181
182 include_once "./Services/UICore/classes/class.ilTemplate.php";
184 $tpl = new ilTemplate(($cfg_template === null ? "tpl.tinymce.js" : $cfg_template), true, true, "Services/RTE");
188 if ($allowFormElements) {
189 $tpl->touchBlock("formelements");
190 }
191 if ($this->getInitialWidth() !== null && $tpl->blockExists('initial_width')) {
192 $tpl->setCurrentBlock("initial_width");
193 $tpl->setVariable('INITIAL_WIDTH', $this->getInitialWidth());
194 $tpl->parseCurrentBlock();
195 }
196 $tpl->setCurrentBlock("tinymce");
197 include_once "./Services/Object/classes/class.ilObject.php";
198 $tpl->setVariable("OBJ_ID", $obj_id);
199 $tpl->setVariable("OBJ_TYPE", $obj_type);
200 $tpl->setVariable("CLIENT_ID", CLIENT_ID);
201 $tpl->setVariable("SESSION_ID", $_COOKIE[session_name()]);
202 $tpl->setVariable("BLOCKFORMATS", $this->_buildAdvancedBlockformatsFromHTMLTags($tags));
203 $tpl->setVariable("VALID_ELEMENTS", $this->_getValidElementsFromHTMLTags($tags));
204
205 $buttons_1 = $this->_buildAdvancedButtonsFromHTMLTags(1, $tags);
206 $buttons_2 = $this->_buildAdvancedButtonsFromHTMLTags(2, $tags)
207 . ',' . $this->_buildAdvancedTableButtonsFromHTMLTags($tags)
208 . ($this->getStyleSelect() ? ',styleselect' : '');
209 $buttons_3 = $this->_buildAdvancedButtonsFromHTMLTags(3, $tags);
210 $tpl->setVariable('BUTTONS_1', self::removeRedundantSeparators($buttons_1));
211 $tpl->setVariable('BUTTONS_2', self::removeRedundantSeparators($buttons_2));
212 $tpl->setVariable('BUTTONS_3', self::removeRedundantSeparators($buttons_3));
213
214 $tpl->setVariable("ADDITIONAL_PLUGINS", join(",", $this->plugins));
215 include_once "./Services/Utilities/classes/class.ilUtil.php";
216 //$tpl->setVariable("STYLESHEET_LOCATION", $this->getContentCSS());
217 $tpl->setVariable("STYLESHEET_LOCATION", ilUtil::getNewContentStyleSheetLocation() . "," . ilUtil::getStyleSheetLocation("output", "delos.css") . ", ./Services/RTE/css/tiny.css");
218 $tpl->setVariable("LANG", $this->_getEditorLanguage());
219
220 if ($this->getRTERootBlockElement() !== null) {
221 $tpl->setVariable('FORCED_ROOT_BLOCK', $this->getRTERootBlockElement());
222 }
223
224 $tpl->parseCurrentBlock();
225
226 if (!self::$renderedToGlobalTemplate) {
227 $this->tpl->addJavaScript("./Services/RTE/tiny_mce" . $this->vd . "/tiny_mce.js");
228 $this->tpl->addOnLoadCode($tpl->get());
229 self::$renderedToGlobalTemplate = true;
230 }
231 }
232 }
233
238 {
239 if ($this->getRemoveImgContextMenuItem() && $tpl->blockExists('remove_img_context_menu_item')) {
240 $tpl->touchBlock('remove_img_context_menu_item');
241 }
242 }
243
247 public function addCustomRTESupport($obj_id, $obj_type, array $tags)
248 {
250 include_once "./Services/UICore/classes/class.ilTemplate.php";
251 $tpl = new ilTemplate("tpl.tinymce.js", true, true, "Services/RTE");
253 $tpl->setCurrentBlock("tinymce");
254 include_once "./Services/Object/classes/class.ilObject.php";
255 $tpl->setVariable("OBJ_ID", $obj_id);
256 $tpl->setVariable("OBJ_TYPE", $obj_type);
257 $tpl->setVariable("CLIENT_ID", CLIENT_ID);
258 $tpl->setVariable("SESSION_ID", $_COOKIE[session_name()]);
259 $tpl->setVariable("BLOCKFORMATS", $this->_buildAdvancedBlockformatsFromHTMLTags($tags));
260 $tpl->setVariable("VALID_ELEMENTS", $this->_getValidElementsFromHTMLTags($tags));
261
262 $this->disableButtons('charmap');
263 $buttons_1 = $this->_buildAdvancedButtonsFromHTMLTags(1, $tags);
264 $buttons_2 = $this->_buildAdvancedButtonsFromHTMLTags(2, $tags)
265 . ',' . $this->_buildAdvancedTableButtonsFromHTMLTags($tags)
266 . ($this->getStyleSelect() ? ',styleselect' : '');
267 $buttons_3 = $this->_buildAdvancedButtonsFromHTMLTags(3, $tags);
268 $tpl->setVariable('BUTTONS_1', self::removeRedundantSeparators($buttons_1));
269 $tpl->setVariable('BUTTONS_2', self::removeRedundantSeparators($buttons_2));
270 $tpl->setVariable('BUTTONS_3', self::removeRedundantSeparators($buttons_3));
271
272 $tpl->setVariable("ADDITIONAL_PLUGINS", join(",", $this->plugins));
273 include_once "./Services/Utilities/classes/class.ilUtil.php";
274 //$tpl->setVariable("STYLESHEET_LOCATION", $this->getContentCSS());
275 $tpl->setVariable("STYLESHEET_LOCATION", ilUtil::getNewContentStyleSheetLocation() . ", ./Services/RTE/css/tiny.css");
276 $tpl->setVariable("LANG", $this->_getEditorLanguage());
277
278 if ($this->getRTERootBlockElement() !== null) {
279 $tpl->setVariable('FORCED_ROOT_BLOCK', $this->getRTERootBlockElement());
280 }
281
282 $tpl->parseCurrentBlock();
283
284 if (!self::$renderedToGlobalTemplate) {
285 $this->tpl->addJavaScript("./Services/RTE/tiny_mce" . $this->vd . "/tiny_mce.js");
286 $this->tpl->addOnLoadCode($tpl->get());
287 self::$renderedToGlobalTemplate = true;
288 }
289 }
290
294 public function addUserTextEditor($editor_selector)
295 {
296 $validtags = array("strong","em","p", "br", "div", "span");
297 $buttontags = array("strong","em");
298 include_once "./Services/UICore/classes/class.ilTemplate.php";
299 $template = new ilTemplate("tpl.usereditor.html", true, true, "Services/RTE");
300 $this->handleImgContextMenuItem($template);
301 $template->setCurrentBlock("tinymce");
302 include_once "./Services/Object/classes/class.ilObject.php";
303 $template->setVariable("SELECTOR", $editor_selector);
304 $template->setVariable("BLOCKFORMATS", "");
305 $template->setVariable("VALID_ELEMENTS", $this->_getValidElementsFromHTMLTags($validtags));
306 if ($this->getStyleSelect()) {
307 $template->setVariable("STYLE_SELECT", ",styleselect");
308 }
309 $template->setVariable("BUTTONS", $this->getButtonsForUserTextEditor($buttontags) . ",backcolor,removeformat");
310 include_once "./Services/Utilities/classes/class.ilUtil.php";
311 //$template->setVariable("STYLESHEET_LOCATION", $this->getContentCSS());
312 $template->setVariable("STYLESHEET_LOCATION", ilUtil::getNewContentStyleSheetLocation() . "," . ilUtil::getStyleSheetLocation("output", "delos.css") . ", ./Services/RTE/css/tiny.css");
313 $template->setVariable("LANG", $this->_getEditorLanguage());
314 $template->parseCurrentBlock();
315
316 $this->tpl->addJavaScript("./Services/RTE/tiny_mce" . $this->vd . "/tiny_mce.js");
317 $this->tpl->addOnLoadCode($template->get());
318 }
319
324 protected function getButtonsForUserTextEditor(array $buttontags)
325 {
326 $btns = $this->_buildButtonsFromHTMLTags($buttontags);
327
328 $btns = explode(',', $btns);
329
330 $btns[] = 'undo';
331 $btns[] = 'redo';
332
333 return implode(',', $btns);
334 }
335
341 protected function setStyleSelect($a_styleselect)
342 {
343 $this->styleselect = $a_styleselect;
344 }
345
351 public function getStyleSelect()
352 {
353 return $this->styleselect;
354 }
355
360 public function _buildAdvancedBlockformatsFromHTMLTags(array $a_html_tags)
361 {
362 $blockformats = array();
363
364 if (in_array("p", $a_html_tags)) {
365 array_push($blockformats, "p");
366 }
367 if (in_array("div", $a_html_tags)) {
368 array_push($blockformats, "div");
369 }
370 if (in_array("pre", $a_html_tags)) {
371 array_push($blockformats, "pre");
372 }
373 if (in_array("code", $a_html_tags)) {
374 array_push($blockformats, "code");
375 }
376 if (in_array("h1", $a_html_tags)) {
377 array_push($blockformats, "h1");
378 }
379 if (in_array("h2", $a_html_tags)) {
380 array_push($blockformats, "h2");
381 }
382 if (in_array("h3", $a_html_tags)) {
383 array_push($blockformats, "h3");
384 }
385 if (in_array("h4", $a_html_tags)) {
386 array_push($blockformats, "h4");
387 }
388 if (in_array("h5", $a_html_tags)) {
389 array_push($blockformats, "h5");
390 }
391 if (in_array("h6", $a_html_tags)) {
392 array_push($blockformats, "h6");
393 }
394 if (count($blockformats)) {
395 return join(",", $blockformats);
396 } else {
397 return "";
398 }
399 }
400
406 public function _buildAdvancedButtonsFromHTMLTags($a_buttons_section, array $a_html_tags)
407 {
408 $theme_advanced_buttons = array();
409
410 if ($a_buttons_section == 1) {
411 if (in_array("strong", $a_html_tags)) {
412 array_push($theme_advanced_buttons, "bold");
413 }
414 if (in_array("em", $a_html_tags)) {
415 array_push($theme_advanced_buttons, "italic");
416 }
417 if (in_array("u", $a_html_tags)) {
418 array_push($theme_advanced_buttons, "underline");
419 }
420 if (in_array("strike", $a_html_tags)) {
421 array_push($theme_advanced_buttons, "strikethrough");
422 }
423 if (count($theme_advanced_buttons)) {
424 array_push($theme_advanced_buttons, "separator");
425 }
426 if (in_array("p", $a_html_tags)) {
427 array_push($theme_advanced_buttons, "justifyleft");
428 array_push($theme_advanced_buttons, "justifycenter");
429 array_push($theme_advanced_buttons, "justifyright");
430 array_push($theme_advanced_buttons, "justifyfull");
431 array_push($theme_advanced_buttons, "separator");
432 }
433 if (strlen(ilTinyMCE::_buildAdvancedBlockformatsFromHTMLTags($a_html_tags))) {
434 array_push($theme_advanced_buttons, "formatselect");
435 }
436 if (in_array("hr", $a_html_tags)) {
437 array_push($theme_advanced_buttons, "hr");
438 }
439 array_push($theme_advanced_buttons, "removeformat");
440 array_push($theme_advanced_buttons, "separator");
441 if (in_array("sub", $a_html_tags)) {
442 array_push($theme_advanced_buttons, "sub");
443 }
444 if (in_array("sup", $a_html_tags)) {
445 array_push($theme_advanced_buttons, "sup");
446 }
447 if (in_array("font", $a_html_tags)) {
448 array_push($theme_advanced_buttons, "fontselect");
449 array_push($theme_advanced_buttons, "fontsizeselect");
450 }
451 array_push($theme_advanced_buttons, "charmap");
452 if ((in_array("ol", $a_html_tags)) && (in_array("li", $a_html_tags))) {
453 array_push($theme_advanced_buttons, "bullist");
454 }
455 if ((in_array("ul", $a_html_tags)) && (in_array("li", $a_html_tags))) {
456 array_push($theme_advanced_buttons, "numlist");
457 }
458 array_push($theme_advanced_buttons, "separator");
459 if (in_array("cite", $a_html_tags)) {
460 array_push($theme_advanced_buttons, "cite");
461 }
462 if (in_array("abbr", $a_html_tags)) {
463 array_push($theme_advanced_buttons, "abbr");
464 }
465 if (in_array("acronym", $a_html_tags)) {
466 array_push($theme_advanced_buttons, "acronym");
467 }
468 if (in_array("del", $a_html_tags)) {
469 array_push($theme_advanced_buttons, "del");
470 }
471 if (in_array("ins", $a_html_tags)) {
472 array_push($theme_advanced_buttons, "ins");
473 }
474 if (in_array("blockquote", $a_html_tags)) {
475 array_push($theme_advanced_buttons, "indent");
476 array_push($theme_advanced_buttons, "outdent");
477 }
478 if (in_array("img", $a_html_tags)) {
479 //array_push($theme_advanced_buttons, "advimage");
480 array_push($theme_advanced_buttons, "image");
481 array_push($theme_advanced_buttons, "ibrowser");
482 array_push($theme_advanced_buttons, "ilimgupload");
483 }
484 if (in_array("a", $a_html_tags)) {
485 array_push($theme_advanced_buttons, "link");
486 array_push($theme_advanced_buttons, "unlink");
487 array_push($theme_advanced_buttons, "anchor");
488 }
489 array_push($theme_advanced_buttons, "separator");
490 array_push($theme_advanced_buttons, "undo");
491 array_push($theme_advanced_buttons, "redo");
492
493 if (is_array($this->buttons) && count($this->buttons)) {
494 array_push($theme_advanced_buttons, "separator");
495 foreach ($this->buttons as $button) {
496 array_push($theme_advanced_buttons, $button);
497 }
498 }
499
500 array_push($theme_advanced_buttons, "code");
501 array_push($theme_advanced_buttons, "fullscreen");
502
503 // Changed in elba2 branch, adopted change for 4.2.x due to manits bug #8147
504 array_push($theme_advanced_buttons, "pasteword");
505 } elseif ($a_buttons_section == 2) {
506 array_push($theme_advanced_buttons, "cut");
507 array_push($theme_advanced_buttons, "copy");
508 array_push($theme_advanced_buttons, "paste");
509 array_push($theme_advanced_buttons, "pastetext");
510 // Changed in elba2 branch, adopted change for 4.2.x due to manits bug #8147
511 //array_push($theme_advanced_buttons, "pasteword");
512 } elseif ($a_buttons_section == 3) {
513 }
514
515 $remove_buttons = $this->getDisabledButtons();
516 if (is_array($remove_buttons)) {
517 foreach ($remove_buttons as $buttontext) {
518 if (($res = array_search($buttontext, $theme_advanced_buttons)) !== false) {
519 unset($theme_advanced_buttons[$res]);
520 }
521 }
522 }
523
524 return join(",", $theme_advanced_buttons);
525 }
526
531 protected function _buildButtonsFromHTMLTags(array $a_html_tags)
532 {
533 $theme_advanced_buttons = array();
534 if (in_array("strong", $a_html_tags)) {
535 array_push($theme_advanced_buttons, "bold");
536 }
537 if (in_array("em", $a_html_tags)) {
538 array_push($theme_advanced_buttons, "italic");
539 }
540 if (in_array("u", $a_html_tags)) {
541 array_push($theme_advanced_buttons, "underline");
542 }
543 if (in_array("strike", $a_html_tags)) {
544 array_push($theme_advanced_buttons, "strikethrough");
545 }
546 if (in_array("p", $a_html_tags)) {
547 array_push($theme_advanced_buttons, "justifyleft");
548 array_push($theme_advanced_buttons, "justifycenter");
549 array_push($theme_advanced_buttons, "justifyright");
550 array_push($theme_advanced_buttons, "justifyfull");
551 }
552 if (strlen(ilTinyMCE::_buildAdvancedBlockformatsFromHTMLTags($a_html_tags))) {
553 array_push($theme_advanced_buttons, "formatselect");
554 }
555 if (in_array("hr", $a_html_tags)) {
556 array_push($theme_advanced_buttons, "hr");
557 }
558 if (in_array("sub", $a_html_tags)) {
559 array_push($theme_advanced_buttons, "sub");
560 }
561 if (in_array("sup", $a_html_tags)) {
562 array_push($theme_advanced_buttons, "sup");
563 }
564 if (in_array("font", $a_html_tags)) {
565 array_push($theme_advanced_buttons, "fontselect");
566 array_push($theme_advanced_buttons, "fontsizeselect");
567 }
568 if ((in_array("ol", $a_html_tags)) && (in_array("li", $a_html_tags))) {
569 array_push($theme_advanced_buttons, "bullist");
570 }
571 if ((in_array("ul", $a_html_tags)) && (in_array("li", $a_html_tags))) {
572 array_push($theme_advanced_buttons, "numlist");
573 }
574 if (in_array("cite", $a_html_tags)) {
575 array_push($theme_advanced_buttons, "cite");
576 }
577 if (in_array("abbr", $a_html_tags)) {
578 array_push($theme_advanced_buttons, "abbr");
579 }
580 if (in_array("acronym", $a_html_tags)) {
581 array_push($theme_advanced_buttons, "acronym");
582 }
583 if (in_array("del", $a_html_tags)) {
584 array_push($theme_advanced_buttons, "del");
585 }
586 if (in_array("ins", $a_html_tags)) {
587 array_push($theme_advanced_buttons, "ins");
588 }
589 if (in_array("blockquote", $a_html_tags)) {
590 array_push($theme_advanced_buttons, "indent");
591 array_push($theme_advanced_buttons, "outdent");
592 }
593 if (in_array("img", $a_html_tags)) {
594 //array_push($theme_advanced_buttons, "advimage");
595 array_push($theme_advanced_buttons, "image");
596 array_push($theme_advanced_buttons, "ibrowser");
597 array_push($theme_advanced_buttons, "ilimgupload");
598 }
599 if (in_array("a", $a_html_tags)) {
600 array_push($theme_advanced_buttons, "link");
601 array_push($theme_advanced_buttons, "unlink");
602 array_push($theme_advanced_buttons, "anchor");
603 }
604
605 $remove_buttons = $this->getDisabledButtons();
606 if (is_array($remove_buttons)) {
607 foreach ($remove_buttons as $buttontext) {
608 if (($res = array_search($buttontext, $theme_advanced_buttons)) !== false) {
609 unset($theme_advanced_buttons[$res]);
610 }
611 }
612 }
613
614 return join(",", $theme_advanced_buttons);
615 }
616
621 public function _buildAdvancedTableButtonsFromHTMLTags(array $a_html_tags)
622 {
623 $theme_advanced_buttons = array();
624 if (in_array("table", $a_html_tags) && in_array("tr", $a_html_tags) && in_array("td", $a_html_tags)) {
625 array_push($theme_advanced_buttons, "tablecontrols");
626 }
627
628 $remove_buttons = $this->getDisabledButtons();
629 if (is_array($remove_buttons)) {
630 foreach ($remove_buttons as $buttontext) {
631 if (($res = array_search($buttontext, $theme_advanced_buttons)) !== false) {
632 unset($theme_advanced_buttons[$res]);
633 }
634 }
635 }
636
637 return join(",", $theme_advanced_buttons);
638 }
639
640 protected function _getEditorLanguage()
641 {
642 $lang = $this->user->getLanguage();
643 if (file_exists("./Services/RTE/tiny_mce" . $this->vd . "/langs/$lang.js")) {
644 return "$lang";
645 } else {
646 return "en";
647 }
648 }
649
654 public function _getValidElementsFromHTMLTags(array $a_html_tags)
655 {
656 $valid_elements = array();
657 foreach ($a_html_tags as $tag) {
658 switch ($tag) {
659 case "a":
660 array_push($valid_elements, "a[accesskey|charset|class|coords|dir<ltr?rtl|href|hreflang|id|lang|name"
661 . "|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup"
662 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rel|rev"
663 . "|shape<circle?default?poly?rect|style|tabindex|title|target|type]");
664 break;
665 case "abbr":
666 array_push($valid_elements, "abbr[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
667 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
668 . "|title]");
669 break;
670 case "acronym":
671 array_push($valid_elements, "acronym[class|dir<ltr?rtl|id|id|lang|onclick|ondblclick|onkeydown|onkeypress"
672 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
673 . "|title]");
674 break;
675 case "address":
676 array_push($valid_elements, "address[class|align|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
677 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
678 . "|onmouseup|style|title]");
679 break;
680 case "applet":
681 array_push($valid_elements, "applet[align<bottom?left?middle?right?top|alt|archive|class|code|codebase"
682 . "|height|hspace|id|name|object|style|title|vspace|width]");
683 break;
684 case "area":
685 array_push($valid_elements, "area[accesskey|alt|class|coords|dir<ltr?rtl|href|id|lang|nohref<nohref"
686 . "|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup"
687 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup"
688 . "|shape<circle?default?poly?rect|style|tabindex|title|target]");
689 break;
690 case "base":
691 array_push($valid_elements, "base[href|target]");
692 break;
693 case "basefont":
694 array_push($valid_elements, "basefont[color|face|id|size]");
695 break;
696 case "bdo":
697 array_push($valid_elements, "bdo[class|dir<ltr?rtl|id|lang|style|title]");
698 break;
699 case "big":
700 array_push($valid_elements, "big[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
701 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
702 . "|title]");
703 break;
704 case "blockquote":
705 array_push($valid_elements, "blockquote[dir|style|cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick"
706 . "|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"
707 . "|onmouseover|onmouseup|style|title]");
708 break;
709 case "body":
710 array_push($valid_elements, "body[alink|background|bgcolor|class|dir<ltr?rtl|id|lang|link|onclick"
711 . "|ondblclick|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove"
712 . "|onmouseout|onmouseover|onmouseup|onunload|style|title|text|vlink]");
713 break;
714 case "br":
715 array_push($valid_elements, "br[class|clear<all?left?none?right|id|style|title]");
716 break;
717 case "button":
718 array_push($valid_elements, "button[accesskey|class|dir<ltr?rtl|disabled<disabled|id|lang|name|onblur"
719 . "|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup|onmousedown"
720 . "|onmousemove|onmouseout|onmouseover|onmouseup|style|tabindex|title|type"
721 . "|value]");
722 break;
723 case "caption":
724 array_push($valid_elements, "caption[align<bottom?left?right?top|class|dir<ltr?rtl|id|lang|onclick"
725 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
726 . "|onmouseout|onmouseover|onmouseup|style|title]");
727 break;
728 case "center":
729 array_push($valid_elements, "center[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
730 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
731 . "|title]");
732 break;
733 case "cite":
734 array_push($valid_elements, "cite[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
735 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
736 . "|title]");
737 break;
738 case "code":
739 array_push($valid_elements, "code[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
740 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
741 . "|title]");
742 break;
743 case "col":
744 array_push($valid_elements, "col[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id"
745 . "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"
746 . "|onmousemove|onmouseout|onmouseover|onmouseup|span|style|title"
747 . "|valign<baseline?bottom?middle?top|width]");
748 break;
749 case "colgroup":
750 array_push($valid_elements, "colgroup[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl"
751 . "|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"
752 . "|onmousemove|onmouseout|onmouseover|onmouseup|span|style|title"
753 . "|valign<baseline?bottom?middle?top|width]");
754 break;
755 case "dd":
756 array_push($valid_elements, "dd[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"
757 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]");
758 break;
759 case "del":
760 array_push($valid_elements, "del[cite|class|datetime|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
761 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
762 . "|onmouseup|style|title]");
763 break;
764 case "dfn":
765 array_push($valid_elements, "dfn[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
766 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
767 . "|title]");
768 break;
769 case "dir":
770 array_push($valid_elements, "dir[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
771 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
772 . "|onmouseup|style|title]");
773 break;
774 case "div":
775 array_push($valid_elements, "div[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
776 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
777 . "|onmouseout|onmouseover|onmouseup|style|title]");
778 break;
779 case "dl":
780 array_push($valid_elements, "dl[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
781 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
782 . "|onmouseup|style|title]");
783 break;
784 case "dt":
785 array_push($valid_elements, "dt[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"
786 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]");
787 break;
788 case "em":
789 array_push($valid_elements, "em/i[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
790 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
791 . "|title]");
792 break;
793 case "fieldset":
794 array_push($valid_elements, "fieldset[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
795 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
796 . "|title]");
797 break;
798 case "font":
799 array_push($valid_elements, "font[class|color|dir<ltr?rtl|face|id|lang|size|style|title]");
800 break;
801 case "form":
802 array_push($valid_elements, "form[accept|accept-charset|action|class|dir<ltr?rtl|enctype|id|lang"
803 . "|method<get?post|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup"
804 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onreset|onsubmit"
805 . "|style|title|target]");
806 break;
807 case "frame":
808 array_push($valid_elements, "frame[class|frameborder|id|longdesc|marginheight|marginwidth|name"
809 . "|noresize<noresize|scrolling<auto?no?yes|src|style|title]");
810 break;
811 case "frameset":
812 array_push($valid_elements, "frameset[class|cols|id|onload|onunload|rows|style|title]");
813 break;
814 case "h1":
815 array_push($valid_elements, "h1[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
816 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
817 . "|onmouseout|onmouseover|onmouseup|style|title]");
818 break;
819 case "h2":
820 array_push($valid_elements, "h2[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
821 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
822 . "|onmouseout|onmouseover|onmouseup|style|title]");
823 break;
824 case "h3":
825 array_push($valid_elements, "h3[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
826 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
827 . "|onmouseout|onmouseover|onmouseup|style|title]");
828 break;
829 case "h4":
830 array_push($valid_elements, "h4[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
831 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
832 . "|onmouseout|onmouseover|onmouseup|style|title]");
833 break;
834 case "h5":
835 array_push($valid_elements, "h5[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
836 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
837 . "|onmouseout|onmouseover|onmouseup|style|title]");
838 break;
839 case "h6":
840 array_push($valid_elements, "h6[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
841 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
842 . "|onmouseout|onmouseover|onmouseup|style|title]");
843 break;
844 case "head":
845 array_push($valid_elements, "head[dir<ltr?rtl|lang|profile]");
846 break;
847 case "hr":
848 array_push($valid_elements, "hr[align<center?left?right|class|dir<ltr?rtl|id|lang|noshade<noshade|onclick"
849 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
850 . "|onmouseout|onmouseover|onmouseup|size|style|title|width]");
851 break;
852 case "html":
853 array_push($valid_elements, "html[dir<ltr?rtl|lang|version]");
854 break;
855 case "iframe":
856 array_push($valid_elements, "iframe[align<bottom?left?middle?right?top|class|frameborder|height|id"
857 . "|longdesc|marginheight|marginwidth|name|scrolling<auto?no?yes|src|style"
858 . "|title|width]");
859 break;
860 case "img":
861 array_push($valid_elements, "img[align<bottom?left?middle?right?top|alt|border|class|dir<ltr?rtl|height"
862 . "|hspace|id|ismap<ismap|lang|longdesc|name|onclick|ondblclick|onkeydown"
863 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
864 . "|onmouseup|src|style|title|usemap|vspace|width]");
865 break;
866 case "input":
867 array_push($valid_elements, "input[accept|accesskey|align<bottom?left?middle?right?top|alt"
868 . "|checked<checked|class|dir<ltr?rtl|disabled<disabled|id|ismap<ismap|lang"
869 . "|maxlength|name|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress"
870 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onselect"
871 . "|readonly<readonly|size|src|style|tabindex|title"
872 . "|type<button?checkbox?file?hidden?image?password?radio?reset?submit?text"
873 . "|usemap|value]");
874 break;
875 case "ins":
876 array_push($valid_elements, "ins[cite|class|datetime|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
877 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
878 . "|onmouseup|style|title]");
879 break;
880 case "isindex":
881 array_push($valid_elements, "isindex[class|dir<ltr?rtl|id|lang|prompt|style|title]");
882 break;
883 case "kbd":
884 array_push($valid_elements, "kbd[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
885 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
886 . "|title]");
887 break;
888 case "label":
889 array_push($valid_elements, "label[accesskey|class|dir<ltr?rtl|for|id|lang|onblur|onclick|ondblclick"
890 . "|onfocus|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"
891 . "|onmouseover|onmouseup|style|title]");
892 break;
893 case "legend":
894 array_push($valid_elements, "legend[align<bottom?left?right?top|accesskey|class|dir<ltr?rtl|id|lang"
895 . "|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
896 . "|onmouseout|onmouseover|onmouseup|style|title]");
897 break;
898 case "li":
899 array_push($valid_elements, "li[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"
900 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title|type"
901 . "|value]");
902 break;
903 case "link":
904 array_push($valid_elements, "link[charset|class|dir<ltr?rtl|href|hreflang|id|lang|media|onclick"
905 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
906 . "|onmouseout|onmouseover|onmouseup|rel|rev|style|title|target|type]");
907 break;
908 case "map":
909 array_push($valid_elements, "map[class|dir<ltr?rtl|id|lang|name|onclick|ondblclick|onkeydown|onkeypress"
910 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
911 . "|title]");
912 break;
913 case "menu":
914 array_push($valid_elements, "menu[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
915 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
916 . "|onmouseup|style|title]");
917 break;
918 case "meta":
919 array_push($valid_elements, "meta[content|dir<ltr?rtl|http-equiv|lang|name|scheme]");
920 break;
921 case "noframes":
922 array_push($valid_elements, "noframes[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
923 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
924 . "|title]");
925 break;
926 case "noscript":
927 array_push($valid_elements, "noscript[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
928 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
929 . "|title]");
930 break;
931 case "object":
932 array_push($valid_elements, "object[align<bottom?left?middle?right?top|archive|border|class|classid"
933 . "|codebase|codetype|data|declare|dir<ltr?rtl|height|hspace|id|lang|name"
934 . "|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
935 . "|onmouseout|onmouseover|onmouseup|standby|style|tabindex|title|type|usemap"
936 . "|vspace|width]");
937 break;
938 case "ol":
939 array_push($valid_elements, "ol[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
940 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
941 . "|onmouseup|start|style|title|type]");
942 break;
943 case "optgroup":
944 array_push($valid_elements, "optgroup[class|dir<ltr?rtl|disabled<disabled|id|label|lang|onclick"
945 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
946 . "|onmouseout|onmouseover|onmouseup|style|title]");
947 break;
948 case "option":
949 array_push($valid_elements, "option[class|dir<ltr?rtl|disabled<disabled|id|label|lang|onclick|ondblclick"
950 . "|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"
951 . "|onmouseover|onmouseup|selected<selected|style|title|value]");
952 break;
953 case "p":
954 array_push($valid_elements, "p[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick"
955 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
956 . "|onmouseout|onmouseover|onmouseup|style|title]");
957 break;
958 case "param":
959 array_push($valid_elements, "param[id|name|type|value|valuetype<DATA?OBJECT?REF]");
960 break;
961 case "pre":
962 case "listing":
963 case "plaintext":
964 case "xmp":
965 array_push($valid_elements, "pre/listing/plaintext/xmp[align|class|dir<ltr?rtl|id|lang|onclick|ondblclick"
966 . "|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout"
967 . "|onmouseover|onmouseup|style|title|width]");
968 break;
969 case "q":
970 array_push($valid_elements, "q[cite|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
971 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
972 . "|title]");
973 break;
974 case "s":
975 array_push($valid_elements, "s[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"
976 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]");
977 break;
978 case "samp":
979 array_push($valid_elements, "samp[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
980 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
981 . "|title]");
982 break;
983 case "script":
984 array_push($valid_elements, "script[charset|defer|language|src|type]");
985 break;
986 case "select":
987 array_push($valid_elements, "select[class|dir<ltr?rtl|disabled<disabled|id|lang|multiple<multiple|name"
988 . "|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup"
989 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|size|style"
990 . "|tabindex|title]");
991 break;
992 case "small":
993 array_push($valid_elements, "small[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
994 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
995 . "|title]");
996 break;
997 case "span":
998 array_push($valid_elements, "span[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
999 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
1000 . "|onmouseup|style|title]");
1001 break;
1002 case "strike":
1003 array_push($valid_elements, "strike[class|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
1004 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
1005 . "|onmouseup|style|title]");
1006 break;
1007 case "strong":
1008 array_push($valid_elements, "strong/b[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
1009 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
1010 . "|title]");
1011 break;
1012 case "style":
1013 array_push($valid_elements, "style[dir<ltr?rtl|lang|media|title|type]");
1014 break;
1015 case "sub":
1016 array_push($valid_elements, "sub[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
1017 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
1018 . "|title]");
1019 break;
1020 case "sup":
1021 array_push($valid_elements, "sup[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
1022 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
1023 . "|title]");
1024 break;
1025 case "table":
1026 array_push($valid_elements, "table[align<center?left?right|bgcolor|border|cellpadding|cellspacing|class"
1027 . "|dir<ltr?rtl|frame|height|id|lang|onclick|ondblclick|onkeydown|onkeypress"
1028 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|rules"
1029 . "|style|summary|title|width]");
1030 break;
1031 case "tbody":
1032 array_push($valid_elements, "tbody[align<center?char?justify?left?right|char|class|charoff|dir<ltr?rtl|id"
1033 . "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"
1034 . "|onmousemove|onmouseout|onmouseover|onmouseup|style|title"
1035 . "|valign<baseline?bottom?middle?top]");
1036 break;
1037 case "td":
1038 array_push($valid_elements, "td[abbr|align<center?char?justify?left?right|axis|bgcolor|char|charoff|class"
1039 . "|colspan|dir<ltr?rtl|headers|height|id|lang|nowrap<nowrap|onclick"
1040 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
1041 . "|onmouseout|onmouseover|onmouseup|rowspan|scope<col?colgroup?row?rowgroup"
1042 . "|style|title|valign<baseline?bottom?middle?top|width]");
1043 break;
1044 case "textarea":
1045 array_push($valid_elements, "textarea[accesskey|class|cols|dir<ltr?rtl|disabled<disabled|id|lang|name"
1046 . "|onblur|onclick|ondblclick|onfocus|onkeydown|onkeypress|onkeyup"
1047 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onselect"
1048 . "|readonly<readonly|rows|style|tabindex|title]");
1049 break;
1050 case "tfoot":
1051 array_push($valid_elements, "tfoot[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id"
1052 . "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"
1053 . "|onmousemove|onmouseout|onmouseover|onmouseup|style|title"
1054 . "|valign<baseline?bottom?middle?top]");
1055 break;
1056 case "th":
1057 array_push($valid_elements, "th[abbr|align<center?char?justify?left?right|axis|bgcolor|char|charoff|class"
1058 . "|colspan|dir<ltr?rtl|headers|height|id|lang|nowrap<nowrap|onclick"
1059 . "|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
1060 . "|onmouseout|onmouseover|onmouseup|rowspan|scope<col?colgroup?row?rowgroup"
1061 . "|style|title|valign<baseline?bottom?middle?top|width]");
1062 break;
1063 case "thead":
1064 array_push($valid_elements, "thead[align<center?char?justify?left?right|char|charoff|class|dir<ltr?rtl|id"
1065 . "|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown"
1066 . "|onmousemove|onmouseout|onmouseover|onmouseup|style|title"
1067 . "|valign<baseline?bottom?middle?top]");
1068 break;
1069 case "title":
1070 array_push($valid_elements, "title[dir<ltr?rtl|lang]");
1071 break;
1072 case "tr":
1073 array_push($valid_elements, "tr[abbr|align<center?char?justify?left?right|bgcolor|char|charoff|class"
1074 . "|rowspan|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
1075 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
1076 . "|title|valign<baseline?bottom?middle?top]");
1077 break;
1078 case "tt":
1079 array_push($valid_elements, "tt[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"
1080 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]");
1081 break;
1082 case "u":
1083 array_push($valid_elements, "u[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress|onkeyup"
1084 . "|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style|title]");
1085
1086 // Bugfix #5945: Necessary because TinyMCE does not use the "u"
1087 // html element but <span style="text-decoration: underline">E</span>
1088 array_push($valid_elements, "span[align<center?justify?left?right|class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
1089 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
1090 . "|onmouseup|style|title]");
1091 break;
1092 case "ul":
1093 array_push($valid_elements, "ul[class|compact<compact|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown"
1094 . "|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover"
1095 . "|onmouseup|style|title|type]");
1096 break;
1097 case "var":
1098 array_push($valid_elements, "var[class|dir<ltr?rtl|id|lang|onclick|ondblclick|onkeydown|onkeypress"
1099 . "|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|style"
1100 . "|title]");
1101 break;
1102 }
1103 }
1104 return join(",", $valid_elements);
1105 }
1106
1112 public static function removeRedundantSeparators($a_string)
1113 {
1114 while (strpos($a_string, 'separator,separator') !== false) {
1115 $a_string = str_replace('separator,separator', 'separator', $a_string);
1116 }
1117
1118 while (strpos($a_string, ',,') !== false) {
1119 $a_string = str_replace(',,', ',', $a_string);
1120 }
1121
1122 if ($a_string[0] == ',') {
1123 $a_string = (string) substr($a_string, 1);
1124 }
1125
1126 if (strlen($a_string) && $a_string[strlen($a_string) - 1] == ',') {
1127 $a_string = substr($a_string, 0, strlen($a_string) - 1);
1128 }
1129
1130 return $a_string;
1131 }
1132
1137 {
1138 $this->remove_img_context_menu_item = $remove_img_context_menu_item;
1139 }
1140
1145 {
1147 }
1148}
user()
Definition: user.php:4
An exception for terminatinating execution or to throw for unit testing.
static _getRichTextEditor()
Returns the identifier for the Rich Text Editor.
static _getRichTextEditorUserState()
Gets the state of the rich text editor visibility for the current user.
static _setRichTextEditorUserState($a_state)
Sets the state of the rich text editor visibility for the current user.
static _getUsedHTMLTags($a_module="")
Returns an array of all allowed HTML tags for text editing.
Rich Text Editor base class This class provides access methods to a Rich Text Editor (RTE) integrated...
Definition: class.ilRTE.php:13
getDisabledButtons($as_array=true)
Returns the disabled RTE buttons.
getRTERootBlockElement()
Getter for the RTE root block element.
disableButtons($a_button)
Sets buttons which should be disabled in the RTE.
getInitialWidth()
special template class to simplify handling of ITX/PEAR
blockExists($a_blockname)
check if block exists in actual template @access private
Tiny MCE editor class.
_buildAdvancedBlockformatsFromHTMLTags(array $a_html_tags)
_buildAdvancedTableButtonsFromHTMLTags(array $a_html_tags)
addUserTextEditor($editor_selector)
{Adds support for an user text editor.}
static $renderedToGlobalTemplate
setRemoveImgContextMenuItem($remove_img_context_menu_item)
_buildAdvancedButtonsFromHTMLTags($a_buttons_section, array $a_html_tags)
handleImgContextMenuItem(ilTemplate $tpl)
getStyleSelect()
Get Enable Style Selecttion.
$remove_img_context_menu_item
__construct($a_version='')
{ilRTE constructor.}
getRemoveImgContextMenuItem()
_getValidElementsFromHTMLTags(array $a_html_tags)
setStyleSelect($a_styleselect)
Set Enable Style Selecttion.
handleIliasImageManagerAdded()
_buildButtonsFromHTMLTags(array $a_html_tags)
addRTESupport($obj_id, $obj_type, $a_module="", $allowFormElements=false, $cfg_template=null, $hide_switch=false)
{Adds support for an RTE in an ILIAS form.}
addCustomRTESupport($obj_id, $obj_type, array $tags)
{Adds custom support for an RTE in an ILIAS form.}
handleImagePluginsBeforeRendering(array $tags)
handleIliasImageManagerRemoved()
removePlugin($a_plugin_name)
{Removes a plugin from the plugin list.}
addInternalTinyMCEImageManager()
getButtonsForUserTextEditor(array $buttontags)
static removeRedundantSeparators($a_string)
Removes redundant seperators and removes ,, and , at the first or last position of the string.
addPlugin($a_plugin_name)
{Adds a plugin to the plugin list.}
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static getNewContentStyleSheetLocation($mode="output")
get full style sheet file name (path inclusive) of current user
vd()
shortcut for var_dump with enhanced debug information
Definition: inc.debug.php:42
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
foreach($_POST as $key=> $value) $res
$lang
Definition: xapiexit.php:8
$_COOKIE[session_name()]
Definition: xapitoken.php:39