From c1f9b1f7b1b77776192048005dcc66dcf3df2bfb Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 27 Dec 2014 15:41:37 +0100 Subject: Update to MediaWiki 1.24.1 --- .../resourceloader/ResourceLoaderWikiModule.php | 110 ++++++++++++++------- 1 file changed, 72 insertions(+), 38 deletions(-) (limited to 'includes/resourceloader/ResourceLoaderWikiModule.php') diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php index 3f10ae53..de61fc55 100644 --- a/includes/resourceloader/ResourceLoaderWikiModule.php +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -36,8 +36,8 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { # Origin is user-supplied code protected $origin = self::ORIGIN_USER_SITEWIDE; - // In-object cache for title mtimes - protected $titleMtimes = array(); + // In-object cache for title info + protected $titleInfo = array(); /* Abstract Protected Methods */ @@ -54,7 +54,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { * There is an optional media key, the value of which can be the * medium ('screen', 'print', etc.) of the stylesheet. * - * @param $context ResourceLoaderContext + * @param ResourceLoaderContext $context * @return array */ abstract protected function getPages( ResourceLoaderContext $context ); @@ -77,7 +77,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { } /** - * @param $title Title + * @param Title $title * @return null|string */ protected function getContent( $title ) { @@ -96,20 +96,20 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { return null; } - $model = $content->getModel(); - - if ( $model !== CONTENT_MODEL_CSS && $model !== CONTENT_MODEL_JAVASCRIPT ) { - wfDebugLog( 'resourceloader', __METHOD__ . ': bad content model $model for JS/CSS page!' ); + if ( $content->isSupportedFormat( CONTENT_FORMAT_JAVASCRIPT ) ) { + return $content->serialize( CONTENT_FORMAT_JAVASCRIPT ); + } elseif ( $content->isSupportedFormat( CONTENT_FORMAT_CSS ) ) { + return $content->serialize( CONTENT_FORMAT_CSS ); + } else { + wfDebugLog( 'resourceloader', __METHOD__ . ": bad content model {$content->getModel()} for JS/CSS page!" ); return null; } - - return $content->getNativeData(); //NOTE: this is safe, we know it's JS or CSS } /* Methods */ /** - * @param $context ResourceLoaderContext + * @param ResourceLoaderContext $context * @return string */ public function getScript( ResourceLoaderContext $context ) { @@ -125,22 +125,17 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { $script = $this->getContent( $title ); if ( strval( $script ) !== '' ) { $script = $this->validateScriptFile( $titleText, $script ); - if ( strpos( $titleText, '*/' ) === false ) { - $scripts .= "/* $titleText */\n"; - } - $scripts .= $script . "\n"; + $scripts .= ResourceLoader::makeComment( $titleText ) . $script . "\n"; } } return $scripts; } /** - * @param $context ResourceLoaderContext + * @param ResourceLoaderContext $context * @return array */ public function getStyles( ResourceLoaderContext $context ) { - global $wgScriptPath; - $styles = array(); foreach ( $this->getPages( $context ) as $titleText => $options ) { if ( $options['type'] !== 'style' ) { @@ -158,47 +153,84 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { if ( $this->getFlip( $context ) ) { $style = CSSJanus::transform( $style, true, false ); } - $style = CSSMin::remap( $style, false, $wgScriptPath, true ); + $style = CSSMin::remap( $style, false, $this->getConfig()->get( 'ScriptPath' ), true ); if ( !isset( $styles[$media] ) ) { $styles[$media] = array(); } - if ( strpos( $titleText, '*/' ) === false ) { - $style = "/* $titleText */\n" . $style; - } + $style = ResourceLoader::makeComment( $titleText ) . $style; $styles[$media][] = $style; } return $styles; } /** - * @param $context ResourceLoaderContext + * @param ResourceLoaderContext $context * @return int|mixed */ public function getModifiedTime( ResourceLoaderContext $context ) { $modifiedTime = 1; // wfTimestamp() interprets 0 as "now" - $mtimes = $this->getTitleMtimes( $context ); - if ( count( $mtimes ) ) { + $titleInfo = $this->getTitleInfo( $context ); + if ( count( $titleInfo ) ) { + $mtimes = array_map( function( $value ) { + return $value['timestamp']; + }, $titleInfo ); $modifiedTime = max( $modifiedTime, max( $mtimes ) ); } - $modifiedTime = max( $modifiedTime, $this->getMsgBlobMtime( $context->getLanguage() ) ); + $modifiedTime = max( + $modifiedTime, + $this->getMsgBlobMtime( $context->getLanguage() ), + $this->getDefinitionMtime( $context ) + ); return $modifiedTime; } /** - * @param $context ResourceLoaderContext + * Get the definition summary for this module. + * + * @param ResourceLoaderContext $context + * @return array + */ + public function getDefinitionSummary( ResourceLoaderContext $context ) { + return array( + 'class' => get_class( $this ), + 'pages' => $this->getPages( $context ), + ); + } + + /** + * @param ResourceLoaderContext $context * @return bool */ public function isKnownEmpty( ResourceLoaderContext $context ) { - return count( $this->getTitleMtimes( $context ) ) == 0; + $titleInfo = $this->getTitleInfo( $context ); + // Bug 68488: For modules in the "user" group, we should actually + // check that the pages are empty (page_len == 0), but for other + // groups, just check the pages exist so that we don't end up + // caching temporarily-blank pages without the appropriate + //