Fix bugs in r59360, r59361, r59363
authorAryeh Gregor <simetrical@users.mediawiki.org>
Fri, 11 Dec 2009 19:01:16 +0000 (19:01 +0000)
committerAryeh Gregor <simetrical@users.mediawiki.org>
Fri, 11 Dec 2009 19:01:16 +0000 (19:01 +0000)
* spellcheck is not a boolean attribute; it is an enumerated attribute
  whose possible values are "true" and "false".  If it were boolean, the
  permitted constructs would be <input spellcheck>, <input
  spellcheck="spellcheck">, and <input spellcheck="">, which would all
  set it true, and it would only be set to false if omitted entirely.
  (It would be boolean if HTML5 had invented it, but can't be for
  historical reasons.)
* spellcheck is valid on any HTML element, not just input, and so should
  be stripped on any element.

For reference, a table of all HTML5 attributes can be found at:

<http://www.whatwg.org/specs/web-apps/current-work/multipage/section-index.html#attributes-0>

includes/Html.php

index 7357eb9..8b9e50e 100644 (file)
@@ -81,7 +81,6 @@ class Html {
                'reversed',
                'scoped',
                'seamless',
-               'spellcheck',
        );
 
        /**
@@ -113,13 +112,10 @@ class Html {
                # consistency and better compression.
                $element = strtolower( $element );
 
-               # Element-specific hacks to slim down output and ensure validity
-               if ( $element == 'input' ) {
-                       if ( !$wgHtml5 ) {
-                               # With $wgHtml5 off we want to validate as XHTML 1, so we
-                               # strip out any fancy HTML 5-only input types for now.
-                               #
-                               # Whitelist of valid types:
+               # Remove HTML5-only attributes if we aren't doing HTML5
+               if ( !$wgHtml5 ) {
+                       if ( $element == 'input' ) {
+                               # Whitelist of valid XHTML1 types
                                $validTypes = array(
                                        'hidden',
                                        'text',
@@ -137,22 +133,22 @@ class Html {
                                        # Fall back to type=text, the default
                                        unset( $attribs['type'] );
                                }
-                               # Here we're blacklisting some HTML5-only attributes...
-                               $html5attribs = array(
-                                       'autocomplete',
-                                       'autofocus',
-                                       'max',
-                                       'min',
-                                       'multiple',
-                                       'pattern',
-                                       'placeholder',
-                                       'required',
-                                       'step',
-                                       'spellcheck',
-                               );
-                               foreach ( $html5attribs as $badAttr ) {
-                                       unset( $attribs[$badAttr] );
-                               }
+                       }
+                       # Here we're blacklisting some HTML5-only attributes...
+                       $html5attribs = array(
+                               'autocomplete',
+                               'autofocus',
+                               'max',
+                               'min',
+                               'multiple',
+                               'pattern',
+                               'placeholder',
+                               'required',
+                               'step',
+                               'spellcheck',
+                       );
+                       foreach ( $html5attribs as $badAttr ) {
+                               unset( $attribs[$badAttr] );
                        }
                }