X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2FOutputPage.php;h=b7341e3b7a2a8b90e65de3bd9190cbb6ad8c04ab;hp=ad375fa91554b6b517cd8d21cc81f39946a56beb;hb=c698fe313e6c067ad1bb156885558d1397d65b7f;hpb=2586339be2c2be12dcf67c64d7f663d0e632c664 diff --git a/includes/OutputPage.php b/includes/OutputPage.php index ad375fa915..b7341e3b7a 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -29,9 +29,9 @@ use Wikimedia\WrappedString; use Wikimedia\WrappedStringList; /** - * This class should be covered by a general architecture document which does - * not exist as of January 2011. This is one of the Core classes and should - * be read at least once by any new developers. + * This is one of the Core classes and should + * be read at least once by any new developers. Also documented at + * https://www.mediawiki.org/wiki/Manual:Architectural_modules/OutputPage * * This class is used to prepare the final rendering. A skin is then * applied to the output parameters (links, javascript, html, categories ...). @@ -54,7 +54,8 @@ class OutputPage extends ContextSource { protected $mCanonicalUrl = false; /** - * @var string The contents of

*/ + * @var string The contents of

+ */ private $mPageTitle = ''; /** @@ -3012,6 +3013,7 @@ class OutputPage extends ContextSource { * @return string The doctype, opening "", and head element. */ public function headElement( Skin $sk, $includeStyle = true ) { + $config = $this->getConfig(); $userdir = $this->getLanguage()->getDir(); $sitedir = MediaWikiServices::getInstance()->getContentLanguage()->getDir(); @@ -3026,7 +3028,7 @@ class OutputPage extends ContextSource { $this->setHTMLTitle( $this->msg( 'pagetitle', $this->getPageTitle() )->inContentLanguage() ); } - if ( !Html::isXmlMimeType( $this->getConfig()->get( 'MimeType' ) ) ) { + if ( !Html::isXmlMimeType( $config->get( 'MimeType' ) ) ) { // Add // This should be before since it defines the charset used by // text including the text inside <title>. @@ -3044,18 +3046,15 @@ class OutputPage extends ContextSource { $pieces = array_merge( $pieces, array_values( $this->getHeadLinksArray() ) ); $pieces = array_merge( $pieces, array_values( $this->mHeadItems ) ); + // This library is intended to run on older browsers that MediaWiki no longer + // supports as Grade A. For these Grade C browsers, we provide an experience + // using only HTML and CSS. But, where standards-compliant browsers are able to + // style unknown HTML elements without issue, old IE ignores these styles. + // The html5shiv library fixes that. // Use an IE conditional comment to serve the script only to old IE + $shivUrl = $config->get( 'ResourceBasePath' ) . '/resources/lib/html5shiv/html5shiv.js'; $pieces[] = '<!--[if lt IE 9]>' . - ResourceLoaderClientHtml::makeLoad( - new ResourceLoaderContext( - $this->getResourceLoader(), - new FauxRequest( [] ) - ), - [ 'html5shiv' ], - ResourceLoaderModule::TYPE_SCRIPTS, - [ 'raw' => '1', 'sync' => '1' ], - $this->getCSPNonce() - ) . + Html::linkedScript( $shivUrl, $this->getCSPNonce() ) . '<![endif]-->'; $pieces[] = Html::closeElement( 'head' ); @@ -3712,43 +3711,54 @@ class OutputPage extends ContextSource { */ protected function buildExemptModules() { $chunks = []; - // Things that go after the ResourceLoaderDynamicStyles marker - $append = []; - // We want site, private and user styles to override dynamically added styles from - // general modules, but we want dynamically added styles to override statically added - // style modules. So the order has to be: - // - page style modules (formatted by ResourceLoaderClientHtml::getHeadHtml()) - // - dynamically loaded styles (added by mw.loader before ResourceLoaderDynamicStyles) - // - ResourceLoaderDynamicStyles marker - // - site/private/user styles + // Requirements: + // - Within modules provided by the software (core, skin, extensions), + // styles from skin stylesheets should be overridden by styles + // from modules dynamically loaded with JavaScript. + // - Styles from site-specific, private, and user modules should override + // both of the above. + // + // The effective order for stylesheets must thus be: + // 1. Page style modules, formatted server-side by ResourceLoaderClientHtml. + // 2. Dynamically-loaded styles, inserted client-side by mw.loader. + // 3. Styles that are site-specific, private or from the user, formatted + // server-side by this function. + // + // The 'ResourceLoaderDynamicStyles' marker helps JavaScript know where + // point #2 is. // Add legacy styles added through addStyle()/addInlineStyle() here $chunks[] = implode( '', $this->buildCssLinksArray() ) . $this->mInlineStyles; - $chunks[] = Html::element( - 'meta', - [ 'name' => 'ResourceLoaderDynamicStyles', 'content' => '' ] - ); - + // Things that go after the ResourceLoaderDynamicStyles marker + $append = []; $separateReq = [ 'site.styles', 'user.styles' ]; foreach ( $this->rlExemptStyleModules as $group => $moduleNames ) { - // Combinable modules - $chunks[] = $this->makeResourceLoaderLink( - array_diff( $moduleNames, $separateReq ), - ResourceLoaderModule::TYPE_STYLES - ); - - foreach ( array_intersect( $moduleNames, $separateReq ) as $name ) { - // These require their own dedicated request in order to support "@import" - // syntax, which is incompatible with concatenation. (T147667, T37562) - $chunks[] = $this->makeResourceLoaderLink( $name, + if ( $moduleNames ) { + $append[] = $this->makeResourceLoaderLink( + array_diff( $moduleNames, $separateReq ), ResourceLoaderModule::TYPE_STYLES ); + + foreach ( array_intersect( $moduleNames, $separateReq ) as $name ) { + // These require their own dedicated request in order to support "@import" + // syntax, which is incompatible with concatenation. (T147667, T37562) + $append[] = $this->makeResourceLoaderLink( $name, + ResourceLoaderModule::TYPE_STYLES + ); + } } } + if ( $append ) { + $chunks[] = Html::element( + 'meta', + [ 'name' => 'ResourceLoaderDynamicStyles', 'content' => '' ] + ); + $chunks = array_merge( $chunks, $append ); + } - return self::combineWrappedStrings( array_merge( $chunks, $append ) ); + return self::combineWrappedStrings( $chunks ); } /**