It also removes some code duplication which is nice.
This unlocks various future changes, including:
* Making the `$config` parameter mandatory for the ResourceLoader class
constructor, which currently falls back to global state.
This should be deprecated and removed.
* Making it possible to instantiate the ResourceLoader class
without all the default MW modules being registered from
global state. E.g. move MW module registration from main class
constructor to ServiceWiring, and remove the 'EmptyResourceLoader'
class hack from unit tests, and use regular 'new ResourceLoader'
instead.
* Making ResourceLoader a standalone library (some day),
e.g. allowing it to be instantiated from a basic PHP script,
in a way that is still useful and perhaps able to serve
(most) RL modules without MW itself.
Bug: T32956
Change-Id: I4939f296c705b268e9cf8de635e923a739410470
use ParserFactory;
use PasswordFactory;
use ProxyLookup;
use ParserFactory;
use PasswordFactory;
use ProxyLookup;
use SearchEngine;
use SearchEngineConfig;
use SearchEngineFactory;
use SearchEngine;
use SearchEngineConfig;
use SearchEngineFactory;
return $this->getService( 'ReadOnlyMode' );
}
return $this->getService( 'ReadOnlyMode' );
}
+ /**
+ * @since 1.33
+ * @return ResourceLoader
+ */
+ public function getResourceLoader() {
+ return $this->getService( 'ResourceLoader' );
+ }
+
/**
* @since 1.31
* @return RevisionFactory
/**
* @since 1.31
* @return RevisionFactory
*/
use MediaWiki\Linker\LinkTarget;
*/
use MediaWiki\Linker\LinkTarget;
-use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use MediaWiki\Session\SessionManager;
use Wikimedia\Rdbms\IResultWrapper;
use MediaWiki\MediaWikiServices;
use MediaWiki\Session\SessionManager;
use Wikimedia\Rdbms\IResultWrapper;
*/
public function getResourceLoader() {
if ( is_null( $this->mResourceLoader ) ) {
*/
public function getResourceLoader() {
if ( is_null( $this->mResourceLoader ) ) {
- $this->mResourceLoader = new ResourceLoader(
- $this->getConfig(),
- LoggerFactory::getInstance( 'resourceloader' )
- );
+ // Lazy-initialise as needed
+ $this->mResourceLoader = MediaWikiServices::getInstance()->getResourceLoader();
}
return $this->mResourceLoader;
}
}
return $this->mResourceLoader;
}
+ 'ResourceLoader' => function ( MediaWikiServices $services ) : ResourceLoader {
+ return new ResourceLoader(
+ $services->getMainConfig(),
+ LoggerFactory::getInstance( 'resourceloader' )
+ );
+ },
+
'RevisionFactory' => function ( MediaWikiServices $services ) : RevisionFactory {
return $services->getRevisionStore();
},
'RevisionFactory' => function ( MediaWikiServices $services ) : RevisionFactory {
return $services->getRevisionStore();
},
+use MediaWiki\MediaWikiServices;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
// Lazy-initialise this property because most callers don't need it.
if ( $this->resourceloader === null ) {
$this->logger->warning( __CLASS__ . ' created without a ResourceLoader instance' );
// Lazy-initialise this property because most callers don't need it.
if ( $this->resourceloader === null ) {
$this->logger->warning( __CLASS__ . ' created without a ResourceLoader instance' );
- $this->resourceloader = new ResourceLoader();
+ $this->resourceloader = MediaWikiServices::getInstance()->getResourceLoader();
}
return $this->resourceloader;
}
}
return $this->resourceloader;
}
+use MediaWiki\MediaWikiServices;
+
/**
* Output class modelled on OutputPage.
*
/**
* Output class modelled on OutputPage.
*
'mediawiki.skinning.interface',
];
'mediawiki.skinning.interface',
];
- $resourceLoader = new ResourceLoader();
+ $resourceLoader = MediaWikiServices::getInstance()->getResourceLoader();
if ( file_exists( "$wgStyleDirectory/Vector/skin.json" ) ) {
// Force loading Vector skin if available as a fallback skin
if ( file_exists( "$wgStyleDirectory/Vector/skin.json" ) ) {
// Force loading Vector skin if available as a fallback skin
$this->logger = $logger ?: new NullLogger();
if ( !$config ) {
$this->logger = $logger ?: new NullLogger();
if ( !$config ) {
+ // TODO: Deprecate and remove.
$this->logger->debug( __METHOD__ . ' was called without providing a Config instance' );
$config = MediaWikiServices::getInstance()->getMainConfig();
}
$this->logger->debug( __METHOD__ . ' was called without providing a Config instance' );
$config = MediaWikiServices::getInstance()->getMainConfig();
}
/**
* Return a dummy ResourceLoaderContext object suitable for passing into
* things that don't "really" need a context.
/**
* Return a dummy ResourceLoaderContext object suitable for passing into
* things that don't "really" need a context.
+ *
+ * Use cases:
+ * - Creating html5shiv script tag in OutputPage.
+ * - FileModule::readStyleFiles (deprecated, to be removed).
+ * - Unit tests (deprecated, create empty instance directly or use RLTestCase).
+ *
* @return ResourceLoaderContext
*/
public static function newDummyContext() {
* @return ResourceLoaderContext
*/
public static function newDummyContext() {
+ // This currently creates a non-empty instance of ResourceLoader (all modules registered),
+ // but that's probably not needed. So once that moves into ServiceWiring, this'll
+ // become more like the EmptyResourceLoader class we have in PHPUnit tests, which
+ // is what this should've had originally. If this turns out to be untrue, change to:
+ // `MediaWikiServices::getInstance()->getResourceLoader()` instead.
return new self( new ResourceLoader(
MediaWikiServices::getInstance()->getMainConfig(),
LoggerFactory::getInstance( 'resourceloader' )
return new self( new ResourceLoader(
MediaWikiServices::getInstance()->getMainConfig(),
LoggerFactory::getInstance( 'resourceloader' )
* @author Trevor Parscal
*/
* @author Trevor Parscal
*/
-use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
// This endpoint is supposed to be independent of request cookies and other
use MediaWiki\MediaWikiServices;
// This endpoint is supposed to be independent of request cookies and other
// writes when getting database connections for ResourceLoader. (T192611)
MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->disableChronologyProtection();
// writes when getting database connections for ResourceLoader. (T192611)
MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->disableChronologyProtection();
-// Set up ResourceLoader
-$resourceLoader = new ResourceLoader(
- ConfigFactory::getDefaultInstance()->makeConfig( 'main' ),
- LoggerFactory::getInstance( 'resourceloader' )
-);
+$resourceLoader = MediaWikiServices::getInstance()->getResourceLoader();
$context = new ResourceLoaderContext( $resourceLoader, $wgRequest );
// Respond to ResourceLoader request
$context = new ResourceLoaderContext( $resourceLoader, $wgRequest );
// Respond to ResourceLoader request
$this->output( "Cleaning up module_deps table...\n" );
$dbw = $this->getDB( DB_MASTER );
$this->output( "Cleaning up module_deps table...\n" );
$dbw = $this->getDB( DB_MASTER );
- $rl = new ResourceLoader( MediaWikiServices::getInstance()->getMainConfig() );
+ $rl = MediaWikiServices::getInstance()->getResourceLoader();
$moduleNames = $rl->getModuleNames();
$res = $dbw->select( 'module_deps',
[ 'md_module', 'md_skin' ],
$moduleNames = $rl->getModuleNames();
$res = $dbw->select( 'module_deps',
[ 'md_module', 'md_skin' ],
+
+use MediaWiki\MediaWikiServices;
+
/**
* Sanity checks for making sure registered resources are sane.
*
/**
* Sanity checks for making sure registered resources are sane.
*
* @author Antoine Musso
* @author Niklas Laxström
* @author Santhosh Thottingal
* @author Antoine Musso
* @author Niklas Laxström
* @author Santhosh Thottingal
$org_wgEnableJavaScriptTest = $wgEnableJavaScriptTest;
$wgEnableJavaScriptTest = true;
$org_wgEnableJavaScriptTest = $wgEnableJavaScriptTest;
$wgEnableJavaScriptTest = true;
- // Initialize ResourceLoader
- $rl = new ResourceLoader();
+ // Get main ResourceLoader
+ $rl = MediaWikiServices::getInstance()->getResourceLoader();
+use MediaWiki\MediaWikiServices;
+
/**
* @author Sam Smith <samsmith@wikimedia.org>
*/
/**
* @author Sam Smith <samsmith@wikimedia.org>
*/
public function __construct() {
parent::__construct();
public function __construct() {
parent::__construct();
- $resourceLoader = new ResourceLoader();
+ $resourceLoader = MediaWikiServices::getInstance()->getResourceLoader();
foreach ( $resourceLoader->getModuleNames() as $name ) {
$module = $resourceLoader->getModule( $name );
foreach ( $resourceLoader->getModuleNames() as $name ) {
$module = $resourceLoader->getModule( $name );