diff options
Diffstat (limited to 'includes/resourceloader/ResourceLoaderWikiModule.php')
-rw-r--r-- | includes/resourceloader/ResourceLoaderWikiModule.php | 90 |
1 files changed, 66 insertions, 24 deletions
diff --git a/includes/resourceloader/ResourceLoaderWikiModule.php b/includes/resourceloader/ResourceLoaderWikiModule.php index de61fc55..7b44cc67 100644 --- a/includes/resourceloader/ResourceLoaderWikiModule.php +++ b/includes/resourceloader/ResourceLoaderWikiModule.php @@ -29,17 +29,37 @@ * because of its dependence on the functionality of * Title::isCssJsSubpage. */ -abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { +class ResourceLoaderWikiModule extends ResourceLoaderModule { - /* Protected Members */ - - # Origin is user-supplied code + // Origin defaults to users with sitewide authority protected $origin = self::ORIGIN_USER_SITEWIDE; // In-object cache for title info protected $titleInfo = array(); - /* Abstract Protected Methods */ + // List of page names that contain CSS + protected $styles = array(); + + // List of page names that contain JavaScript + protected $scripts = array(); + + // Group of module + protected $group; + + /** + * @param array $options For back-compat, this can be omitted in favour of overwriting getPages. + */ + public function __construct( array $options = null ) { + if ( isset( $options['styles'] ) ) { + $this->styles = $options['styles']; + } + if ( isset( $options['scripts'] ) ) { + $this->scripts = $options['scripts']; + } + if ( isset( $options['group'] ) ) { + $this->group = $options['group']; + } + } /** * Subclasses should return an associative array of resources in the module. @@ -57,9 +77,34 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { * @param ResourceLoaderContext $context * @return array */ - abstract protected function getPages( ResourceLoaderContext $context ); + protected function getPages( ResourceLoaderContext $context ) { + $config = $this->getConfig(); + $pages = array(); - /* Protected Methods */ + // Filter out pages from origins not allowed by the current wiki configuration. + if ( $config->get( 'UseSiteJs' ) ) { + foreach ( $this->scripts as $script ) { + $pages[$script] = array( 'type' => 'script' ); + } + } + + if ( $config->get( 'UseSiteCss' ) ) { + foreach ( $this->styles as $style ) { + $pages[$style] = array( 'type' => 'style' ); + } + } + + return $pages; + } + + /** + * Get group name + * + * @return string + */ + public function getGroup() { + return $this->group; + } /** * Get the Database object used in getTitleMTimes(). Defaults to the local slave DB @@ -70,7 +115,7 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { * In particular, it doesn't work for getting the content of JS and CSS pages. That functionality * will use the local DB irrespective of the return value of this method. * - * @return DatabaseBase|null + * @return IDatabase|null */ protected function getDB() { return wfGetDB( DB_SLAVE ); @@ -81,9 +126,15 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { * @return null|string */ protected function getContent( $title ) { - if ( !$title->isCssJsSubpage() && !$title->isCssOrJsPage() ) { + $handler = ContentHandler::getForTitle( $title ); + if ( $handler->isSupportedFormat( CONTENT_FORMAT_CSS ) ) { + $format = CONTENT_FORMAT_CSS; + } elseif ( $handler->isSupportedFormat( CONTENT_FORMAT_JAVASCRIPT ) ) { + $format = CONTENT_FORMAT_JAVASCRIPT; + } else { return null; } + $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL ); if ( !$revision ) { return null; @@ -96,18 +147,9 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { return null; } - 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->serialize( $format ); } - /* Methods */ - /** * @param ResourceLoaderContext $context * @return string @@ -165,13 +207,13 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { /** * @param ResourceLoaderContext $context - * @return int|mixed + * @return int */ public function getModifiedTime( ResourceLoaderContext $context ) { - $modifiedTime = 1; // wfTimestamp() interprets 0 as "now" + $modifiedTime = 1; $titleInfo = $this->getTitleInfo( $context ); if ( count( $titleInfo ) ) { - $mtimes = array_map( function( $value ) { + $mtimes = array_map( function ( $value ) { return $value['timestamp']; }, $titleInfo ); $modifiedTime = max( $modifiedTime, max( $mtimes ) ); @@ -227,8 +269,8 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule { * Get the modification times of all titles that would be loaded for * a given context. * @param ResourceLoaderContext $context Context object - * @return array keyed by page dbkey, with value is an array with 'length' and 'timestamp' - * keys, where the timestamp is a unix one + * @return array Keyed by page dbkey. Value is an array with 'length' and 'timestamp' + * keys, where the timestamp is a UNIX timestamp */ protected function getTitleInfo( ResourceLoaderContext $context ) { $dbr = $this->getDB(); |