Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

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

   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['td@bgcolor'] =
 100          $r['th@bgcolor'] =
 101              new HTMLPurifier_AttrTransform_BgColor();
 102  
 103          // @border for img ------------------------------------------------

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

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

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

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

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

 128          // different browsers use different styles to designate noshade

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

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

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

 147          // {{{

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

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

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

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