X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FOutputPage.php;h=4f12e0cfd0f1e961e7088a923ebd0dde97559678;hb=9d00d8783e9d74343fc0ea34ab228ce70684e4e4;hp=c8e18e0218bd2122245ea9f15b13b98e4421cd11;hpb=0a20a21168fdb16f75e622dc6919c6538798c28b;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/OutputPage.php b/includes/OutputPage.php index c8e18e0218..4f12e0cfd0 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -2364,10 +2364,6 @@ class OutputPage extends ContextSource { if ( !$this->mArticleBodyOnly ) { $sk = $this->getSkin(); - - if ( $sk->shouldPreloadLogo() ) { - $this->addLogoPreloadLinkHeaders(); - } } $linkHeader = $this->getLinkHeader(); @@ -2758,6 +2754,18 @@ class OutputPage extends ContextSource { foreach ( $this->contentOverrideCallbacks as $callback ) { $content = $callback( $title ); if ( $content !== null ) { + $text = ContentHandler::getContentText( $content ); + if ( strpos( $text, '' ) !== false ) { + // Proactively replace this so that we can display a message + // to the user, instead of letting it go to Html::inlineScript(), + // where it would be considered a server-side issue. + $titleFormatted = $title->getPrefixedText(); + $content = new JavaScriptContent( + Xml::encodeJsCall( 'mw.log.error', [ + "Cannot preview $titleFormatted due to script-closing tag." + ] ) + ); + } return $content; } } @@ -3915,80 +3923,6 @@ class OutputPage extends ContextSource { ] ); } - /** - * Add Link headers for preloading the wiki's logo. - * - * @since 1.26 - */ - protected function addLogoPreloadLinkHeaders() { - $logo = ResourceLoaderSkinModule::getLogo( $this->getConfig() ); - - $tags = []; - $logosPerDppx = []; - $logos = []; - - if ( !is_array( $logo ) ) { - // No media queries required if we only have one variant - $this->addLinkHeader( '<' . $logo . '>;rel=preload;as=image' ); - return; - } - - if ( isset( $logo['svg'] ) ) { - // No media queries required if we only have a 1x and svg variant - // because all preload-capable browsers support SVGs - $this->addLinkHeader( '<' . $logo['svg'] . '>;rel=preload;as=image' ); - return; - } - - foreach ( $logo as $dppx => $src ) { - // Keys are in this format: "1.5x" - $dppx = substr( $dppx, 0, -1 ); - $logosPerDppx[$dppx] = $src; - } - - // Because PHP can't have floats as array keys - uksort( $logosPerDppx, function ( $a , $b ) { - $a = floatval( $a ); - $b = floatval( $b ); - // Sort from smallest to largest (e.g. 1x, 1.5x, 2x) - return $a <=> $b; - } ); - - foreach ( $logosPerDppx as $dppx => $src ) { - $logos[] = [ 'dppx' => $dppx, 'src' => $src ]; - } - - $logosCount = count( $logos ); - // Logic must match ResourceLoaderSkinModule: - // - 1x applies to resolution < 1.5dppx - // - 1.5x applies to resolution >= 1.5dppx && < 2dppx - // - 2x applies to resolution >= 2dppx - // Note that min-resolution and max-resolution are both inclusive. - for ( $i = 0; $i < $logosCount; $i++ ) { - if ( $i === 0 ) { - // Smallest dppx - // min-resolution is ">=" (larger than or equal to) - // "not min-resolution" is essentially "<" - $media_query = 'not all and (min-resolution: ' . $logos[ 1 ]['dppx'] . 'dppx)'; - } elseif ( $i !== $logosCount - 1 ) { - // In between - // Media query expressions can only apply "not" to the entire expression - // (e.g. can't express ">= 1.5 and not >= 2). - // Workaround: Use <= 1.9999 in place of < 2. - $upper_bound = floatval( $logos[ $i + 1 ]['dppx'] ) - 0.000001; - $media_query = '(min-resolution: ' . $logos[ $i ]['dppx'] . - 'dppx) and (max-resolution: ' . $upper_bound . 'dppx)'; - } else { - // Largest dppx - $media_query = '(min-resolution: ' . $logos[ $i ]['dppx'] . 'dppx)'; - } - - $this->addLinkHeader( - '<' . $logos[$i]['src'] . '>;rel=preload;as=image;media=' . $media_query - ); - } - } - /** * Get (and set if not yet set) the CSP nonce. *