Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.

Differences Between: [Versions 310 and 311] [Versions 311 and 401] [Versions 311 and 402] [Versions 311 and 403] [Versions 39 and 311]

   1  <?php
   2  
   3  class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule_Tidy
   4  {
   5  
   6      /**

   7       * @return array

   8       */
   9      public function makeFixes()
  10      {
  11          $r = array();
  12  
  13          // == deprecated tag transforms ===================================

  14  
  15          $r['font'] = new HTMLPurifier_TagTransform_Font();
  16          $r['menu'] = new HTMLPurifier_TagTransform_Simple('ul');
  17          $r['dir'] = new HTMLPurifier_TagTransform_Simple('ul');
  18          $r['center'] = new HTMLPurifier_TagTransform_Simple('div', 'text-align:center;');
  19          $r['u'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:underline;');
  20          $r['s'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
  21          $r['strike'] = new HTMLPurifier_TagTransform_Simple('span', 'text-decoration:line-through;');
  22  
  23          // == deprecated attribute transforms =============================

  24  
  25          $r['caption@align'] =
  26              new HTMLPurifier_AttrTransform_EnumToCSS(
  27                  'align',
  28                  array(
  29                      // we're following IE's behavior, not Firefox's, due

  30                      // to the fact that no one supports caption-side:right,

  31                      // W3C included (with CSS 2.1). This is a slightly

  32                      // unreasonable attribute!

  33                      'left' => 'text-align:left;',
  34                      'right' => 'text-align:right;',
  35                      'top' => 'caption-side:top;',
  36                      'bottom' => 'caption-side:bottom;' // not supported by IE
  37                  )
  38              );
  39  
  40          // @align for img -------------------------------------------------

  41          $r['img@align'] =
  42              new HTMLPurifier_AttrTransform_EnumToCSS(
  43                  'align',
  44                  array(
  45                      'left' => 'float:left;',
  46                      'right' => 'float:right;',
  47                      'top' => 'vertical-align:top;',
  48                      'middle' => 'vertical-align:middle;',
  49                      'bottom' => 'vertical-align:baseline;',
  50                  )
  51              );
  52  
  53          // @align for table -----------------------------------------------

  54          $r['table@align'] =
  55              new HTMLPurifier_AttrTransform_EnumToCSS(
  56                  'align',
  57                  array(
  58                      'left' => 'float:left;',
  59                      'center' => 'margin-left:auto;margin-right:auto;',
  60                      'right' => 'float:right;'
  61                  )
  62              );
  63  
  64          // @align for hr -----------------------------------------------

  65          $r['hr@align'] =
  66              new HTMLPurifier_AttrTransform_EnumToCSS(
  67                  'align',
  68                  array(
  69                      // we use both text-align and margin because these work

  70                      // for different browsers (IE and Firefox, respectively)

  71                      // and the melange makes for a pretty cross-compatible

  72                      // solution

  73                      'left' => 'margin-left:0;margin-right:auto;text-align:left;',
  74                      'center' => 'margin-left:auto;margin-right:auto;text-align:center;',
  75                      'right' => 'margin-left:auto;margin-right:0;text-align:right;'
  76                  )
  77              );
  78  
  79          // @align for h1, h2, h3, h4, h5, h6, p, div ----------------------

  80          // {{{

  81          $align_lookup = array();
  82          $align_values = array('left', 'right', 'center', 'justify');
  83          foreach ($align_values as $v) {
  84              $align_lookup[$v] = "text-align:$v;";
  85          }
  86          // }}}

  87          $r['h1@align'] =
  88          $r['h2@align'] =
  89          $r['h3@align'] =
  90          $r['h4@align'] =
  91          $r['h5@align'] =
  92          $r['h6@align'] =
  93          $r['p@align'] =
  94          $r['div@align'] =
  95              new HTMLPurifier_AttrTransform_EnumToCSS('align', $align_lookup);
  96  
  97          // @bgcolor for table, tr, td, th ---------------------------------

  98          $r['table@bgcolor'] =
  99          $r['tr@bgcolor'] =
 100          $r['td@bgcolor'] =
 101          $r['th@bgcolor'] =
 102              new HTMLPurifier_AttrTransform_BgColor();
 103  
 104          // @border for img ------------------------------------------------

 105          $r['img@border'] = new HTMLPurifier_AttrTransform_Border();
 106  
 107          // @clear for br --------------------------------------------------

 108          $r['br@clear'] =
 109              new HTMLPurifier_AttrTransform_EnumToCSS(
 110                  'clear',
 111                  array(
 112                      'left' => 'clear:left;',
 113                      'right' => 'clear:right;',
 114                      'all' => 'clear:both;',
 115                      'none' => 'clear:none;',
 116                  )
 117              );
 118  
 119          // @height for td, th ---------------------------------------------

 120          $r['td@height'] =
 121          $r['th@height'] =
 122              new HTMLPurifier_AttrTransform_Length('height');
 123  
 124          // @hspace for img ------------------------------------------------

 125          $r['img@hspace'] = new HTMLPurifier_AttrTransform_ImgSpace('hspace');
 126  
 127          // @noshade for hr ------------------------------------------------

 128          // this transformation is not precise but often good enough.

 129          // different browsers use different styles to designate noshade

 130          $r['hr@noshade'] =
 131              new HTMLPurifier_AttrTransform_BoolToCSS(
 132                  'noshade',
 133                  'color:#808080;background-color:#808080;border:0;'
 134              );
 135  
 136          // @nowrap for td, th ---------------------------------------------

 137          $r['td@nowrap'] =
 138          $r['th@nowrap'] =
 139              new HTMLPurifier_AttrTransform_BoolToCSS(
 140                  'nowrap',
 141                  'white-space:nowrap;'
 142              );
 143  
 144          // @size for hr  --------------------------------------------------

 145          $r['hr@size'] = new HTMLPurifier_AttrTransform_Length('size', 'height');
 146  
 147          // @type for li, ol, ul -------------------------------------------

 148          // {{{

 149          $ul_types = array(
 150              'disc' => 'list-style-type:disc;',
 151              'square' => 'list-style-type:square;',
 152              'circle' => 'list-style-type:circle;'
 153          );
 154          $ol_types = array(
 155              '1' => 'list-style-type:decimal;',
 156              'i' => 'list-style-type:lower-roman;',
 157              'I' => 'list-style-type:upper-roman;',
 158              'a' => 'list-style-type:lower-alpha;',
 159              'A' => 'list-style-type:upper-alpha;'
 160          );
 161          $li_types = $ul_types + $ol_types;
 162          // }}}

 163  
 164          $r['ul@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ul_types);
 165          $r['ol@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $ol_types, true);
 166          $r['li@type'] = new HTMLPurifier_AttrTransform_EnumToCSS('type', $li_types, true);
 167  
 168          // @vspace for img ------------------------------------------------

 169          $r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace');
 170  
 171          // @width for hr, td, th ------------------------------------------

 172          $r['td@width'] =
 173          $r['th@width'] =
 174          $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width');
 175  
 176          return $r;
 177      }
 178  }
 179  
 180  // vim: et sw=4 sts=4