Merge "OutputPage: Load html5shiv without indirection of load.php"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 6 Jul 2019 01:00:54 +0000 (01:00 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 6 Jul 2019 01:00:54 +0000 (01:00 +0000)
1  2 
includes/OutputPage.php

diff --combined includes/OutputPage.php
@@@ -3012,6 -3012,7 +3012,7 @@@ class OutputPage extends ContextSource 
         * @return string The doctype, opening "<html>", and head element.
         */
        public function headElement( Skin $sk, $includeStyle = true ) {
+               $config = $this->getConfig();
                $userdir = $this->getLanguage()->getDir();
                $sitedir = MediaWikiServices::getInstance()->getContentLanguage()->getDir();
  
                        $this->setHTMLTitle( $this->msg( 'pagetitle', $this->getPageTitle() )->inContentLanguage() );
                }
  
-               if ( !Html::isXmlMimeType( $this->getConfig()->get( 'MimeType' ) ) ) {
+               if ( !Html::isXmlMimeType( $config->get( 'MimeType' ) ) ) {
                        // Add <meta charset="UTF-8">
                        // This should be before <title> since it defines the charset used by
                        // text including the text inside <title>.
                $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. 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' );
         */
        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 );
        }
  
        /**