From e789f51f1183d57999926b80c726338d8611e2f1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Santoro?= Date: Tue, 15 Mar 2016 18:23:10 +0000 Subject: [PATCH] Remove $wgAllowMicroDataAttributes and $wgAllowRdfaAttributes $wgAllowMicroDataAttributes and $wgAllowRdfaAttributes have been introduced in MediaWiki 1.16 and required at this moment $wgHTML5 to be true. This last setting has been removed in MediaWiki 1.22. To simplify the code maintenance and the configuration complexity, those settings are removed and the features are always available. RDFa users must now explicitly set $wgHtml5Version to a RDFa version. Currently the correct values are: - HTML+RDFa 1.0 - XHTML+RDFa 1.0 Bug: T130040 Change-Id: I17a7bff2cad170e381eabf0aec4e26e4fd0cddc3 --- RELEASE-NOTES-1.27 | 3 + includes/DefaultSettings.php | 20 ++---- includes/Sanitizer.php | 69 +++++++++---------- includes/Setup.php | 9 --- tests/parser/parserTest.inc | 1 - tests/parser/parserTests.txt | 2 +- .../phpunit/includes/parser/NewParserTest.php | 1 - 7 files changed, 40 insertions(+), 65 deletions(-) diff --git a/RELEASE-NOTES-1.27 b/RELEASE-NOTES-1.27 index d8866ad1c5..1ec196250a 100644 --- a/RELEASE-NOTES-1.27 +++ b/RELEASE-NOTES-1.27 @@ -10,6 +10,9 @@ As of 1.27, MediaWiki now requires PHP 5.5.9 or higher. This corresponds with HHVM 3.1. === Configuration changes in 1.27 === +* $wgAllowMicrodataAttributes and $wgAllowRdfaAttributes were removed, + now always enabled. If you use RDFa on your wiki, you now have to explicitly + set $wgHtml5Version to 'HTML+RDFa 1.0' or 'XHTML+RDFa 1.0'. * $wgUseLinkNamespaceDBFields was removed. * Deprecated $wgResourceLoaderMinifierStatementsOnOwnLine and $wgResourceLoaderMinifierMaxLineLength, because there was little value in diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index c04602c69b..f2a3f97a4a 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -3081,10 +3081,11 @@ $wgHtml5 = true; /** * Defines the value of the version attribute in the <html> tag, if any. - * If $wgAllowRdfaAttributes is true, and this evaluates to boolean false - * (like if it's left at the default null value), it will be auto-initialized - * to the correct value for RDFa+HTML5. As such, you should have no reason to - * ever actually set this to anything. + * + * If your wiki uses RDFa, set it to the correct value for RDFa+HTML5. + * Correct current values are 'HTML+RDFa 1.0' or 'XHTML+RDFa 1.0'. + * See also http://www.w3.org/TR/rdfa-in-html/#document-conformance + * @since 1.16 */ $wgHtml5Version = null; @@ -3105,17 +3106,6 @@ $wgHTMLFormAllowTableFormat = true; */ $wgUseMediaWikiUIEverywhere = false; -/** - * Enabled RDFa attributes for use in wikitext. - * NOTE: Interaction with HTML5 is somewhat underspecified. - */ -$wgAllowRdfaAttributes = false; - -/** - * Enabled HTML5 microdata attributes for use in wikitext. - */ -$wgAllowMicrodataAttributes = false; - /** * Should we try to make our HTML output well-formed XML? If set to false, * output will be a few bytes shorter, and the HTML will arguably be more diff --git a/includes/Sanitizer.php b/includes/Sanitizer.php index d52bc07324..d321e9f0c9 100644 --- a/includes/Sanitizer.php +++ b/includes/Sanitizer.php @@ -363,14 +363,14 @@ class Sanitizer { * @return array */ public static function getRecognizedTagData( $extratags = [], $removetags = [] ) { - global $wgAllowMicrodataAttributes, $wgAllowImageTag; + global $wgAllowImageTag; static $htmlpairsStatic, $htmlsingle, $htmlsingleonly, $htmlnest, $tabletags, $htmllist, $listtags, $htmlsingleallowed, $htmlelementsStatic, $staticInitialised; // Base our staticInitialised variable off of the global config state so that if the globals // are changed (like in the screwed up test system) we will re-initialise the settings. - $globalContext = implode( '-', compact( 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) ); + $globalContext = $wgAllowImageTag; if ( !$staticInitialised || $staticInitialised != $globalContext ) { $htmlpairsStatic = [ # Tags that must be closed 'b', 'bdi', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1', @@ -386,10 +386,10 @@ class Sanitizer { $htmlsingleonly = [ # Elements that cannot have close tags 'br', 'wbr', 'hr' ]; - if ( $wgAllowMicrodataAttributes ) { - $htmlsingle[] = $htmlsingleonly[] = 'meta'; - $htmlsingle[] = $htmlsingleonly[] = 'link'; - } + + $htmlsingle[] = $htmlsingleonly[] = 'meta'; + $htmlsingle[] = $htmlsingleonly[] = 'link'; + $htmlnest = [ # Tags that can be nested--?? 'table', 'tr', 'td', 'th', 'div', 'blockquote', 'ol', 'ul', 'li', 'dl', 'dt', 'dd', 'font', 'big', 'small', 'sub', 'sup', 'span', @@ -734,15 +734,13 @@ class Sanitizer { * @todo Check for unique id attribute :P */ static function validateAttributes( $attribs, $whitelist ) { - global $wgAllowRdfaAttributes, $wgAllowMicrodataAttributes; - $whitelist = array_flip( $whitelist ); $hrefExp = '/^(' . wfUrlProtocols() . ')[^\s]+$/'; $out = []; foreach ( $attribs as $attribute => $value ) { - # allow XML namespace declaration if RDFa is enabled - if ( $wgAllowRdfaAttributes && preg_match( self::XMLNS_ATTRIBUTE_PATTERN, $attribute ) ) { + # Allow XML namespace declaration to allow RDFa + if ( preg_match( self::XMLNS_ATTRIBUTE_PATTERN, $attribute ) ) { if ( !preg_match( self::EVIL_URI_PATTERN, $value ) ) { $out[$attribute] = $value; } @@ -817,15 +815,14 @@ class Sanitizer { $out[$attribute] = $value; } - if ( $wgAllowMicrodataAttributes ) { - # itemtype, itemid, itemref don't make sense without itemscope - if ( !array_key_exists( 'itemscope', $out ) ) { - unset( $out['itemtype'] ); - unset( $out['itemid'] ); - unset( $out['itemref'] ); - } - # TODO: Strip itemprop if we aren't descendants of an itemscope or pointed to by an itemref. + # itemtype, itemid, itemref don't make sense without itemscope + if ( !array_key_exists( 'itemscope', $out ) ) { + unset( $out['itemtype'] ); + unset( $out['itemid'] ); + unset( $out['itemref'] ); } + # TODO: Strip itemprop if we aren't descendants of an itemscope or pointed to by an itemref. + return $out; } @@ -1561,12 +1558,9 @@ class Sanitizer { * @return array */ static function setupAttributeWhitelist() { - global $wgAllowRdfaAttributes, $wgAllowMicrodataAttributes; - static $whitelist, $staticInitialised; + static $whitelist; - $globalContext = implode( '-', compact( 'wgAllowRdfaAttributes', 'wgAllowMicrodataAttributes' ) ); - - if ( $whitelist !== null && $staticInitialised == $globalContext ) { + if ( $whitelist !== null ) { return $whitelist; } @@ -1586,23 +1580,24 @@ class Sanitizer { 'aria-labelledby', 'aria-owns', 'role', - ]; - if ( $wgAllowRdfaAttributes ) { - # RDFa attributes as specified in section 9 of + # RDFa + # These attributes are specified in section 9 of # http://www.w3.org/TR/2008/REC-rdfa-syntax-20081014 - $common = array_merge( $common, [ - 'about', 'property', 'resource', 'datatype', 'typeof', - ] ); - } + 'about', + 'property', + 'resource', + 'datatype', + 'typeof', - if ( $wgAllowMicrodataAttributes ) { - # add HTML5 microdata tags as specified by + # Microdata. These are specified by # http://www.whatwg.org/html/microdata.html#the-microdata-model - $common = array_merge( $common, [ - 'itemid', 'itemprop', 'itemref', 'itemscope', 'itemtype' - ] ); - } + 'itemid', + 'itemprop', + 'itemref', + 'itemscope', + 'itemtype', + ]; $block = array_merge( $common, [ 'align' ] ); $tablealign = [ 'align', 'valign' ]; @@ -1773,8 +1768,6 @@ class Sanitizer { 'link' => [ 'itemprop', 'href' ], ]; - $staticInitialised = $globalContext; - return $whitelist; } diff --git a/includes/Setup.php b/includes/Setup.php index f26d789496..25857389f4 100644 --- a/includes/Setup.php +++ b/includes/Setup.php @@ -443,15 +443,6 @@ $wgHtml5 = true; $wgXhtmlDefaultNamespace = 'http://www.w3.org/1999/xhtml'; $wgJsMimeType = 'text/javascript'; -if ( !$wgHtml5Version && $wgAllowRdfaAttributes ) { - // see http://www.w3.org/TR/rdfa-in-html/#document-conformance - if ( $wgMimeType == 'application/xhtml+xml' ) { - $wgHtml5Version = 'XHTML+RDFa 1.0'; - } else { - $wgHtml5Version = 'HTML+RDFa 1.0'; - } -} - // Blacklisted file extensions shouldn't appear on the "allowed" list $wgFileExtensions = array_values( array_diff( $wgFileExtensions, $wgFileBlacklist ) ); diff --git a/tests/parser/parserTest.inc b/tests/parser/parserTest.inc index 9f453075cb..c10d3f734c 100644 --- a/tests/parser/parserTest.inc +++ b/tests/parser/parserTest.inc @@ -896,7 +896,6 @@ class ParserTest { 'wgExternalLinkTarget' => false, 'wgHtml5' => true, 'wgWellFormedXml' => true, - 'wgAllowMicrodataAttributes' => true, 'wgAdaptiveMessageCache' => true, 'wgDisableLangConversion' => false, 'wgDisableTitleConversion' => false, diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt index d01ebdffbd..356eed3f0e 100644 --- a/tests/parser/parserTests.txt +++ b/tests/parser/parserTests.txt @@ -24664,7 +24664,7 @@ Don't block XML namespace declaration !! wikitext MediaWiki !! html/php -

MediaWiki +

MediaWiki

!! html/parsoid

MediaWiki

diff --git a/tests/phpunit/includes/parser/NewParserTest.php b/tests/phpunit/includes/parser/NewParserTest.php index 4eb480d4ef..0ad4b27972 100644 --- a/tests/phpunit/includes/parser/NewParserTest.php +++ b/tests/phpunit/includes/parser/NewParserTest.php @@ -102,7 +102,6 @@ class NewParserTest extends MediaWikiTestCase { $tmpGlobals['wgAllowExternalImages'] = true; $tmpGlobals['wgRawHtml'] = false; $tmpGlobals['wgWellFormedXml'] = true; - $tmpGlobals['wgAllowMicrodataAttributes'] = true; $tmpGlobals['wgExperimentalHtmlIds'] = false; $tmpGlobals['wgAdaptiveMessageCache'] = true; $tmpGlobals['wgUseDatabaseMessages'] = true; -- 2.20.1