X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2FOutputPage.php;h=d34ace8fb0f5b7a7b94b7b99eab856161f4bce4f;hp=5c7203d9071cff74ff653dfe07e3dd077830a46f;hb=28adc4d7eef2d7d8e5696a4f9849538a769daa00;hpb=c20a76ee0a37888cc45fe32a54c61c5ed609b595 diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 5c7203d907..d34ace8fb0 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -23,6 +23,7 @@ use MediaWiki\Logger\LoggerFactory; use MediaWiki\Session\SessionManager; use WrappedString\WrappedString; +use WrappedString\WrappedStringList; /** * This class should be covered by a general architecture document which does @@ -104,22 +105,11 @@ class OutputPage extends ContextSource { protected $mStatusCode; /** - * @var string Variable mLastModified and mEtag are used for sending cache control. + * @var string Used for sending cache control. * The whole caching system should probably be moved into its own class. */ protected $mLastModified = ''; - /** - * Contains an HTTP Entity Tags (see RFC 2616 section 3.13) which is used - * as a unique identifier for the content. It is later used by the client - * to compare its cached version with the server version. Client sends - * headers If-Match and If-None-Match containing its locally cached ETAG value. - * - * To get more information, you will have to look at HTTP/1.1 protocol which - * is properly described in RFC 2616 : http://tools.ietf.org/html/rfc2616 - */ - private $mETag = false; - /** @var array */ protected $mCategoryLinks = []; @@ -261,11 +251,6 @@ class OutputPage extends ContextSource { */ protected $styles = []; - /** - * Whether jQuery is already handled. - */ - protected $mJQueryDone = false; - private $mIndexPolicy = 'index'; private $mFollowPolicy = 'follow'; private $mVaryHeader = [ @@ -305,6 +290,9 @@ class OutputPage extends ContextSource { */ private $copyrightUrl; + /** @var array Profiling data */ + private $limitReportData = []; + /** * Constructor for OutputPage. This should not be called directly. * Instead a new RequestContext should be created and it will implicitly create @@ -619,29 +607,6 @@ class OutputPage extends ContextSource { $this->mModuleStyles = array_merge( $this->mModuleStyles, (array)$modules ); } - /** - * Get the list of module messages to include on this page - * - * @deprecated since 1.26 Obsolete - * @param bool $filter - * @param string|null $position - * @return array Array of module names - */ - public function getModuleMessages( $filter = false, $position = null ) { - wfDeprecated( __METHOD__, '1.26' ); - return []; - } - - /** - * Load messages of one or more ResourceLoader modules. - * - * @deprecated since 1.26 Use addModules() instead - * @param string|array $modules Module name (string) or array of module names - */ - public function addModuleMessages( $modules ) { - wfDeprecated( __METHOD__, '1.26' ); - } - /** * @return null|string ResourceLoader target */ @@ -694,12 +659,10 @@ class OutputPage extends ContextSource { } /** - * Set the value of the ETag HTTP header, only used if $wgUseETag is true - * - * @param string $tag Value of "ETag" header + * @deprecated since 1.28 Obsolete - wgUseETag experiment was removed. + * @param string $tag */ - function setETag( $tag ) { - $this->mETag = $tag; + public function setETag( $tag ) { } /** @@ -1794,11 +1757,14 @@ class OutputPage extends ContextSource { } } - // enable OOUI if requested via ParserOutput + // Enable OOUI if requested via ParserOutput if ( $parserOutput->getEnableOOUI() ) { $this->enableOOUI(); } + // Include profiling data + $this->limitReportData = $parserOutput->getLimitReportData(); + // Link flags are ignored for now, but may in the future be // used to mark individual language links. $linkFlags = []; @@ -2156,9 +2122,6 @@ class OutputPage extends ContextSource { public function sendCacheControl() { $response = $this->getRequest()->response(); $config = $this->getConfig(); - if ( $config->get( 'UseETag' ) && $this->mETag ) { - $response->header( "ETag: $this->mETag" ); - } $this->addVaryHeader( 'Cookie' ); $this->addAcceptLanguage(); @@ -2649,7 +2612,8 @@ class OutputPage extends ContextSource { $userdir = $this->getLanguage()->getDir(); $sitedir = $wgContLang->getDir(); - $ret = Html::htmlHeader( $sk->getHtmlElementAttributes() ); + $pieces = []; + $pieces[] = Html::htmlHeader( $sk->getHtmlElementAttributes() ); if ( $this->getHTMLTitle() == '' ) { $this->setHTMLTitle( $this->msg( 'pagetitle', $this->getPageTitle() )->inContentLanguage() ); @@ -2657,8 +2621,7 @@ class OutputPage extends ContextSource { $openHead = Html::openElement( 'head' ); if ( $openHead ) { - # Don't bother with the newline if $head == '' - $ret .= "$openHead\n"; + $pieces[] = $openHead; } if ( !Html::isXmlMimeType( $this->getConfig()->get( 'MimeType' ) ) ) { @@ -2670,25 +2633,25 @@ class OutputPage extends ContextSource { // Our XML declaration is output by Html::htmlHeader. // http://www.whatwg.org/html/semantics.html#attr-meta-http-equiv-content-type // http://www.whatwg.org/html/semantics.html#charset - $ret .= Html::element( 'meta', [ 'charset' => 'UTF-8' ] ) . "\n"; + $pieces[] = Html::element( 'meta', [ 'charset' => 'UTF-8' ] ); } - $ret .= Html::element( 'title', null, $this->getHTMLTitle() ) . "\n"; - $ret .= $this->getInlineHeadScripts() . "\n"; - $ret .= $this->buildCssLinks() . "\n"; - $ret .= $this->getExternalHeadScripts() . "\n"; + $pieces[] = Html::element( 'title', null, $this->getHTMLTitle() ); + $pieces[] = $this->getInlineHeadScripts(); + $pieces[] = $this->buildCssLinks(); + $pieces[] = $this->getExternalHeadScripts(); foreach ( $this->getHeadLinksArray() as $item ) { - $ret .= $item . "\n"; + $pieces[] = $item; } foreach ( $this->mHeadItems as $item ) { - $ret .= $item . "\n"; + $pieces[] = $item; } $closeHead = Html::closeElement( 'head' ); if ( $closeHead ) { - $ret .= "$closeHead\n"; + $pieces[] = $closeHead; } $bodyClasses = []; @@ -2703,6 +2666,11 @@ class OutputPage extends ContextSource { $bodyClasses[] = 'capitalize-all-nouns'; } + // Parser feature migration class + // The idea is that this will eventually be removed, after the wikitext + // which requires it is cleaned up. + $bodyClasses[] = 'mw-hide-empty-elt'; + $bodyClasses[] = $sk->getPageClasses( $this->getTitle() ); $bodyClasses[] = 'skin-' . Sanitizer::escapeClass( $sk->getSkinName() ); $bodyClasses[] = @@ -2717,9 +2685,9 @@ class OutputPage extends ContextSource { $sk->addToBodyAttributes( $this, $bodyAttrs ); Hooks::run( 'OutputPageBodyAttributes', [ $this, $sk, &$bodyAttrs ] ); - $ret .= Html::openElement( 'body', $bodyAttrs ) . "\n"; + $pieces[] = Html::openElement( 'body', $bodyAttrs ); - return $ret; + return WrappedStringList::join( "\n", $pieces ); } /** @@ -2800,6 +2768,17 @@ class OutputPage extends ContextSource { continue; } + if ( $only === ResourceLoaderModule::TYPE_STYLES ) { + if ( $module->getType() !== ResourceLoaderModule::LOAD_STYLES ) { + $logger = $resourceLoader->getLogger(); + $logger->debug( 'Unexpected general module "{module}" in styles queue.', [ + 'module' => $name, + ] ); + } else { + $links['states'][$name] = 'ready'; + } + } + $sortedModules[$module->getSource()][$module->getGroup()][$name] = $module; } @@ -2920,7 +2899,7 @@ class OutputPage extends ContextSource { /** * Build html output from an array of links from makeResourceLoaderLink. * @param array $links - * @return string HTML + * @return string|WrappedStringList HTML */ protected static function getHtmlFromLoaderLinks( array $links ) { $html = []; @@ -2936,7 +2915,7 @@ class OutputPage extends ContextSource { // Filter out empty values $html = array_filter( $html, 'strlen' ); - if ( count( $states ) ) { + if ( $states ) { array_unshift( $html, ResourceLoader::makeInlineScript( ResourceLoader::makeLoaderStateScript( $states ) ) ); @@ -2956,25 +2935,23 @@ class OutputPage extends ContextSource { } /** - * tags to put in "". + * Inline "