ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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 
4 require_once 'Services/RTE/classes/class.ilRTE.php';
5 
15 class 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 
32  protected $remove_img_context_menu_item = false;
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 
136  protected function handleIliasImageManagerRemoved()
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");
186  $tags = ilObjAdvancedEditing::_getUsedHTMLTags($a_module);
187  $this->handleImagePluginsBeforeRendering($tags);
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  {
249  $this->handleImagePluginsBeforeRendering($tags);
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 }
addUserTextEditor($editor_selector)
{}
vd()
shortcut for var_dump with enhanced debug information
Definition: inc.debug.php:42
_buildAdvancedButtonsFromHTMLTags($a_buttons_section, array $a_html_tags)
handleImagePluginsBeforeRendering(array $tags)
setStyleSelect($a_styleselect)
Set Enable Style Selecttion.
getStyleSelect()
Get Enable Style Selecttion.
static _getRichTextEditor()
Returns the identifier for the Rich Text Editor.
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
disableButtons($a_button)
Sets buttons which should be disabled in the RTE.
static _getUsedHTMLTags($a_module="")
Returns an array of all allowed HTML tags for text editing.
static getNewContentStyleSheetLocation($mode="output")
get full style sheet file name (path inclusive) of current user
addCustomRTESupport($obj_id, $obj_type, array $tags)
{}
removePlugin($a_plugin_name)
{}
_buildButtonsFromHTMLTags(array $a_html_tags)
static _setRichTextEditorUserState($a_state)
Sets the state of the rich text editor visibility for the current user.
getInitialWidth()
user()
Definition: user.php:4
static removeRedundantSeparators($a_string)
Removes redundant seperators and removes ,, and , at the first or last position of the string...
__construct($a_version='')
{}
handleIliasImageManagerAdded()
Rich Text Editor base class This class provides access methods to a Rich Text Editor (RTE) integrated...
Definition: class.ilRTE.php:12
Tiny MCE editor class.
foreach($_POST as $key=> $value) $res
touchBlock($block)
overwrites ITX::touchBlock.
_buildAdvancedTableButtonsFromHTMLTags(array $a_html_tags)
addPlugin($a_plugin_name)
{}
addRTESupport($obj_id, $obj_type, $a_module="", $allowFormElements=false, $cfg_template=null, $hide_switch=false)
{}
$lang
Definition: xapiexit.php:8
blockExists($a_blockname)
check if block exists in actual template private
addInternalTinyMCEImageManager()
getRTERootBlockElement()
Getter for the RTE root block element.
__construct(Container $dic, ilPlugin $plugin)
static _getRichTextEditorUserState()
Gets the state of the rich text editor visibility for the current user.
getButtonsForUserTextEditor(array $buttontags)
handleImgContextMenuItem(ilTemplate $tpl)
getDisabledButtons($as_array=true)
Returns the disabled RTE buttons.
getRemoveImgContextMenuItem()
handleIliasImageManagerRemoved()
$_COOKIE[session_name()]
Definition: xapitoken.php:39
static $renderedToGlobalTemplate
_buildAdvancedBlockformatsFromHTMLTags(array $a_html_tags)
_getValidElementsFromHTMLTags(array $a_html_tags)
$remove_img_context_menu_item
setRemoveImgContextMenuItem($remove_img_context_menu_item)