X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FHtml.php;h=fea5fb7aca73da820e40c359b8de53c1568ce86e;hb=bec7a947e7bdfb6fa0eac10b4d3e2817c7c17173;hp=6a69b9c471c4d975d874c9955c648235f7a92f95;hpb=af304dfd44abd127f9a8835b83c53685f2624229;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Html.php b/includes/Html.php index 6a69b9c471..fea5fb7aca 100644 --- a/includes/Html.php +++ b/includes/Html.php @@ -61,10 +61,9 @@ class Html { ); # Boolean attributes, which may have the value omitted entirely. Manually - # collected from the HTML5 spec as of 2009-08-10. + # collected from the HTML5 spec as of 2010-06-07. private static $boolAttribs = array( 'async', - 'autobuffer', 'autofocus', 'autoplay', 'checked', @@ -74,10 +73,12 @@ class Html { 'formnovalidate', 'hidden', 'ismap', + 'itemscope', 'loop', 'multiple', 'novalidate', 'open', + 'pubdate', 'readonly', 'required', 'reversed', @@ -154,48 +155,37 @@ class Html { return ''; } - # Remove HTML5-only attributes if we aren't doing HTML5 - if ( !$wgHtml5 ) { - if ( $element == 'input' ) { - # Whitelist of valid XHTML1 types - $validTypes = array( - 'hidden', - 'text', - 'password', - 'checkbox', - 'radio', - 'file', - 'submit', - 'image', - 'reset', - 'button', - ); - if ( isset( $attribs['type'] ) - && !in_array( $attribs['type'], $validTypes ) ) { - # Fall back to type=text, the default - unset( $attribs['type'] ); - } - } - if ( $element == 'textarea' && isset( $attribs['maxlength'] ) ) { - unset( $attribs['maxlength'] ); - } - # Here we're blacklisting some HTML5-only attributes... - $html5attribs = array( - 'autocomplete', - 'autofocus', - 'max', - 'min', - 'multiple', - 'pattern', - 'placeholder', - 'required', - 'step', - 'spellcheck', + # Remove HTML5-only attributes if we aren't doing HTML5, and disable + # form validation regardless (see bug 23769 and the more detailed + # comment in expandAttributes()) + if ( $element == 'input' ) { + # Whitelist of types that don't cause validation. All except + # 'search' are valid in XHTML1. + $validTypes = array( + 'hidden', + 'text', + 'password', + 'checkbox', + 'radio', + 'file', + 'submit', + 'image', + 'reset', + 'button', + 'search', ); - foreach ( $html5attribs as $badAttr ) { - unset( $attribs[$badAttr] ); + if ( isset( $attribs['type'] ) + && !in_array( $attribs['type'], $validTypes ) ) { + unset( $attribs['type'] ); + } + if ( isset( $attribs['type'] ) && $attribs['type'] == 'search' + && !$wgHtml5 ) { + unset( $attribs['type'] ); } } + if ( !$wgHtml5 && $element == 'textarea' && isset( $attribs['maxlength'] ) ) { + unset( $attribs['maxlength'] ); + } return "<$element" . self::expandAttributes( self::dropDefaults( $element, $attribs ) ) . '>'; @@ -370,6 +360,32 @@ class Html { # and we'd like consistency and better compression anyway. $key = strtolower( $key ); + # Bug 23769: Blacklist all form validation attributes for now. Current + # (June 2010) WebKit has no UI, so the form just refuses to submit + # without telling the user why, which is much worse than failing + # server-side validation. Opera is the only other implementation at + # this time, and has ugly UI, so just kill the feature entirely until + # we have at least one good implementation. + if ( in_array( $key, array( 'max', 'min', 'pattern', 'required', 'step' ) ) ) { + continue; + } + + # Here we're blacklisting some HTML5-only attributes... + if ( !$wgHtml5 && in_array( $key, array( + 'autocomplete', + 'autofocus', + 'max', + 'min', + 'multiple', + 'pattern', + 'placeholder', + 'required', + 'step', + 'spellcheck', + ) ) ) { + continue; + } + # See the "Attributes" section in the HTML syntax part of HTML5, # 9.1.2.3 as of 2009-08-10. Most attributes can have quotation # marks omitted, but not all. (Although a literal " is not @@ -582,19 +598,7 @@ class Html { global $wgHtml5, $wgHtml5Version, $wgWellFormedXml, $wgDocType, $wgDTD; global $wgXhtmlNamespaces, $wgXhtmlDefaultNamespace; if ( $wgHtml5 ) { - if ( $wgWellFormedXml ) { - # Unknown elements and attributes are okay in XML, but unknown - # named entities are well-formedness errors and will break XML - # parsers. Thus we need a doctype that gives us appropriate - # entity definitions. The HTML5 spec permits four legacy - # doctypes as obsolete but conforming, so let's pick one of - # those, although it makes our pages look like XHTML1 Strict. - # Isn't compatibility great? - $ret .= "\n"; - } else { - # Much saner. - $ret .= "\n"; - } + $ret .= "\n"; if ( $wgHtml5Version ) { $attribs['version'] = $wgHtml5Version; }