Revert "ResourceLoader namespace"

This reverts commit e08ea8ccb9.

Reason for revert: Breaks Phan in extensions, and as far as I’m aware,
this change isn’t urgently needed for anything, so the simplest fix is
to revert it again for now. After PHP 7.4 it should be safer to try this
again (we hopefully won’t need the two “hack” classes by then).

Bug: T308443
Change-Id: Iff3318cbf97a67f821f78e60da62a583f63e389e
This commit is contained in:
Lucas Werkmeister (WMDE) 2022-05-16 14:43:33 +00:00
parent e08ea8ccb9
commit a241d83e0a
107 changed files with 673 additions and 1151 deletions

View file

@ -193,7 +193,7 @@
any new occurrences.
-->
<exclude-pattern>*/includes/export/DumpPipeOutput\.php</exclude-pattern>
<exclude-pattern>*/includes/ResourceLoader/Image\.php</exclude-pattern>
<exclude-pattern>*/includes/resourceloader/ResourceLoaderImage\.php</exclude-pattern>
<exclude-pattern>*/includes/shell/Command\.php</exclude-pattern>
<exclude-pattern>*/maintenance/includes/TextPassDumper\.php</exclude-pattern>
<exclude-pattern>*/maintenance/mysql\.php</exclude-pattern>

View file

@ -223,24 +223,6 @@ because of Phabricator reports.
* ILBFactory::forEachLB() is deprecated. Use ::getAllLBs().
* LoadBalancer::forEachOpenConnection() and ::forEachOpenPrimaryConnection()
are deprecated without replacement.
* The following classes were moved from the root namespace to the
MediaWiki\ResourceLoader namespace, the old names becoming deprecated aliases:
ResourceLoader, ResourceLoaderContext, DerivativeResourceLoaderContext,
MessageBlobStore, VueComponentParser.
* The following classes had the "ResourceLoader" prefix stripped while being
moved to the MediaWiki\ResourceLoader namespace, the old names becoming
deprecated aliases: ResourceLoaderCircularDependencyError,
ResourceLoaderClientHtml, ResourceLoaderCodexModule, ResourceLoaderFileModule,
ResourceLoaderFilePath, ResourceLoaderForeignApiModule, ResourceLoaderImage,
ResourceLoaderImageModule, ResourceLoaderLanguageDataModule,
ResourceLoaderLessVarFileModule, ResourceLoaderModule,
ResourceLoaderMwUrlModule, ResourceLoaderOOUIFileModule,
ResourceLoaderOOUIIconPackModule, ResourceLoaderOOUIImageModule,
ResourceLoaderOOUIModule, ResourceLoaderSiteModule,
ResourceLoaderSiteStylesModule, ResourceLoaderSkinModule,
ResourceLoaderStartUpModule, ResourceLoaderUserModule,
ResourceLoaderUserOptionsModule, ResourceLoaderUserStylesModule,
ResourceLoaderWikiModule.
* The following methods in WikiRevision and their interfaces
ImportableUploadRevision and ImportableOldRevision are deprecated:
- ::getUserObj() → ::getUser()

View file

@ -375,7 +375,7 @@ $wgAutoloadLocalClasses = [
'DeprecationHelper' => __DIR__ . '/includes/debug/DeprecationHelper.php',
'DerivativeContext' => __DIR__ . '/includes/context/DerivativeContext.php',
'DerivativeRequest' => __DIR__ . '/includes/DerivativeRequest.php',
'DerivativeResourceLoaderContext' => __DIR__ . '/includes/ResourceLoader/DerivativeResourceLoaderContext.php',
'DerivativeResourceLoaderContext' => __DIR__ . '/includes/resourceloader/DerivativeResourceLoaderContext.php',
'DescribeFileOp' => __DIR__ . '/includes/libs/filebackend/fileop/DescribeFileOp.php',
'Diff' => __DIR__ . '/includes/diff/Diff.php',
'DiffEngine' => __DIR__ . '/includes/diff/DiffEngine.php',
@ -1088,8 +1088,6 @@ $wgAutoloadLocalClasses = [
'MediaWiki\\Languages\\LanguageFallback' => __DIR__ . '/includes/language/LanguageFallback.php',
'MediaWiki\\Languages\\LanguageNameUtils' => __DIR__ . '/includes/language/LanguageNameUtils.php',
'MediaWiki\\ProcOpenError' => __DIR__ . '/includes/exception/ProcOpenError.php',
'MediaWiki\\ResourceLoader\\ResourceLoader72Hack' => __DIR__ . '/includes/ResourceLoader/MessageBlobStore.php',
'MediaWiki\\ResourceLoader\\ResourceLoaderContext72Hack' => __DIR__ . '/includes/ResourceLoader/ResourceLoader.php',
'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php',
'MediaWiki\\Skin\\ComponentRegistryContext' => __DIR__ . '/includes/skins/components/ComponentRegistryContext.php',
'MediaWiki\\Skin\\SkinComponent' => __DIR__ . '/includes/skins/components/SkinComponent.php',
@ -1129,7 +1127,7 @@ $wgAutoloadLocalClasses = [
'MergeLogFormatter' => __DIR__ . '/includes/logging/MergeLogFormatter.php',
'MergeableUpdate' => __DIR__ . '/includes/deferred/MergeableUpdate.php',
'Message' => __DIR__ . '/includes/language/Message.php',
'MessageBlobStore' => __DIR__ . '/includes/ResourceLoader/MessageBlobStore.php',
'MessageBlobStore' => __DIR__ . '/includes/resourceloader/MessageBlobStore.php',
'MessageCache' => __DIR__ . '/includes/cache/MessageCache.php',
'MessageCacheUpdate' => __DIR__ . '/includes/deferred/MessageCacheUpdate.php',
'MessageContent' => __DIR__ . '/includes/content/MessageContent.php',
@ -1354,32 +1352,32 @@ $wgAutoloadLocalClasses = [
'ResetUserEmail' => __DIR__ . '/maintenance/resetUserEmail.php',
'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
'ResourceFileCache' => __DIR__ . '/includes/cache/ResourceFileCache.php',
'ResourceLoader' => __DIR__ . '/includes/ResourceLoader/ResourceLoader.php',
'ResourceLoaderCircularDependencyError' => __DIR__ . '/includes/ResourceLoader/CircularDependencyError.php',
'ResourceLoaderClientHtml' => __DIR__ . '/includes/ResourceLoader/ClientHtml.php',
'ResourceLoaderCodexModule' => __DIR__ . '/includes/ResourceLoader/CodexModule.php',
'ResourceLoaderContext' => __DIR__ . '/includes/ResourceLoader/ResourceLoaderContext.php',
'ResourceLoaderFileModule' => __DIR__ . '/includes/ResourceLoader/FileModule.php',
'ResourceLoaderFilePath' => __DIR__ . '/includes/ResourceLoader/FilePath.php',
'ResourceLoaderForeignApiModule' => __DIR__ . '/includes/ResourceLoader/ForeignApiModule.php',
'ResourceLoaderImage' => __DIR__ . '/includes/ResourceLoader/Image.php',
'ResourceLoaderImageModule' => __DIR__ . '/includes/ResourceLoader/ImageModule.php',
'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/ResourceLoader/LanguageDataModule.php',
'ResourceLoaderLessVarFileModule' => __DIR__ . '/includes/ResourceLoader/LessVarFileModule.php',
'ResourceLoaderModule' => __DIR__ . '/includes/ResourceLoader/Module.php',
'ResourceLoaderMwUrlModule' => __DIR__ . '/includes/ResourceLoader/MwUrlModule.php',
'ResourceLoaderOOUIFileModule' => __DIR__ . '/includes/ResourceLoader/OOUIFileModule.php',
'ResourceLoaderOOUIIconPackModule' => __DIR__ . '/includes/ResourceLoader/OOUIIconPackModule.php',
'ResourceLoaderOOUIImageModule' => __DIR__ . '/includes/ResourceLoader/OOUIImageModule.php',
'ResourceLoaderOOUIModule' => __DIR__ . '/includes/ResourceLoader/OOUIModule.php',
'ResourceLoaderSiteModule' => __DIR__ . '/includes/ResourceLoader/SiteModule.php',
'ResourceLoaderSiteStylesModule' => __DIR__ . '/includes/ResourceLoader/SiteStylesModule.php',
'ResourceLoaderSkinModule' => __DIR__ . '/includes/ResourceLoader/SkinModule.php',
'ResourceLoaderStartUpModule' => __DIR__ . '/includes/ResourceLoader/StartUpModule.php',
'ResourceLoaderUserModule' => __DIR__ . '/includes/ResourceLoader/UserModule.php',
'ResourceLoaderUserOptionsModule' => __DIR__ . '/includes/ResourceLoader/UserOptionsModule.php',
'ResourceLoaderUserStylesModule' => __DIR__ . '/includes/ResourceLoader/UserStylesModule.php',
'ResourceLoaderWikiModule' => __DIR__ . '/includes/ResourceLoader/WikiModule.php',
'ResourceLoader' => __DIR__ . '/includes/resourceloader/ResourceLoader.php',
'ResourceLoaderCircularDependencyError' => __DIR__ . '/includes/resourceloader/ResourceLoaderCircularDependencyError.php',
'ResourceLoaderClientHtml' => __DIR__ . '/includes/resourceloader/ResourceLoaderClientHtml.php',
'ResourceLoaderCodexModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderCodexModule.php',
'ResourceLoaderContext' => __DIR__ . '/includes/resourceloader/ResourceLoaderContext.php',
'ResourceLoaderFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFileModule.php',
'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php',
'ResourceLoaderForeignApiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderForeignApiModule.php',
'ResourceLoaderImage' => __DIR__ . '/includes/resourceloader/ResourceLoaderImage.php',
'ResourceLoaderImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderImageModule.php',
'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageDataModule.php',
'ResourceLoaderLessVarFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLessVarFileModule.php',
'ResourceLoaderModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderModule.php',
'ResourceLoaderMwUrlModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderMwUrlModule.php',
'ResourceLoaderOOUIFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIFileModule.php',
'ResourceLoaderOOUIIconPackModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIIconPackModule.php',
'ResourceLoaderOOUIImageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIImageModule.php',
'ResourceLoaderOOUIModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderOOUIModule.php',
'ResourceLoaderSiteModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteModule.php',
'ResourceLoaderSiteStylesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteStylesModule.php',
'ResourceLoaderSkinModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSkinModule.php',
'ResourceLoaderStartUpModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderStartUpModule.php',
'ResourceLoaderUserModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserModule.php',
'ResourceLoaderUserOptionsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserOptionsModule.php',
'ResourceLoaderUserStylesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserStylesModule.php',
'ResourceLoaderWikiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderWikiModule.php',
'RestbaseVirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/RestbaseVirtualRESTService.php',
'ResultAugmentor' => __DIR__ . '/includes/search/ResultAugmentor.php',
'ResultSetAugmentor' => __DIR__ . '/includes/search/ResultSetAugmentor.php',
@ -1744,7 +1742,7 @@ $wgAutoloadLocalClasses = [
'ViewCLI' => __DIR__ . '/maintenance/view.php',
'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php',
'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php',
'VueComponentParser' => __DIR__ . '/includes/ResourceLoader/VueComponentParser.php',
'VueComponentParser' => __DIR__ . '/includes/resourceloader/VueComponentParser.php',
'WANCacheReapUpdate' => __DIR__ . '/includes/deferred/WANCacheReapUpdate.php',
'WANObjectCache' => __DIR__ . '/includes/libs/objectcache/wancache/WANObjectCache.php',
'WANObjectCacheReaper' => __DIR__ . '/includes/libs/objectcache/wancache/WANObjectCacheReaper.php',
@ -1791,10 +1789,10 @@ $wgAutoloadLocalClasses = [
'WikiRevision' => __DIR__ . '/includes/import/WikiRevision.php',
'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
'WikiTextStructure' => __DIR__ . '/includes/content/WikiTextStructure.php',
'Wikimedia\\DependencyStore\\DependencyStore' => __DIR__ . '/includes/ResourceLoader/dependencystore/DependencyStore.php',
'Wikimedia\\DependencyStore\\DependencyStoreException' => __DIR__ . '/includes/ResourceLoader/dependencystore/DependencyStoreException.php',
'Wikimedia\\DependencyStore\\KeyValueDependencyStore' => __DIR__ . '/includes/ResourceLoader/dependencystore/KeyValueDependencyStore.php',
'Wikimedia\\DependencyStore\\SqlModuleDependencyStore' => __DIR__ . '/includes/ResourceLoader/dependencystore/SqlModuleDependencyStore.php',
'Wikimedia\\DependencyStore\\DependencyStore' => __DIR__ . '/includes/resourceloader/dependencystore/DependencyStore.php',
'Wikimedia\\DependencyStore\\DependencyStoreException' => __DIR__ . '/includes/resourceloader/dependencystore/DependencyStoreException.php',
'Wikimedia\\DependencyStore\\KeyValueDependencyStore' => __DIR__ . '/includes/resourceloader/dependencystore/KeyValueDependencyStore.php',
'Wikimedia\\DependencyStore\\SqlModuleDependencyStore' => __DIR__ . '/includes/resourceloader/dependencystore/SqlModuleDependencyStore.php',
'Wikimedia\\LightweightObjectStore\\ExpirationAwareness' => __DIR__ . '/includes/libs/objectcache/utils/ExpirationAwareness.php',
'Wikimedia\\LightweightObjectStore\\StorageAwareness' => __DIR__ . '/includes/libs/objectcache/utils/StorageAwareness.php',
'Wikimedia\\Mime\\MimeMap' => __DIR__ . '/includes/libs/mime/MimeMap.php',

View file

@ -197,7 +197,7 @@ config-schema:
The URL path of the wiki logo. The logo size should be 135x135 pixels.
Defaults to "$wgResourceBasePath/resources/assets/change-your-logo.svg".
Developers should retrieve this logo (and other variants) using
the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos
the static function ResourceLoaderSkinModule::getAvailableLogos
Ignored if $wgLogos is set.
Logos:
default: false
@ -254,8 +254,8 @@ config-schema:
- boolean
deprecated: |-
since 1.35. Developers should retrieve this logo (and other variants) using
the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos.
$wgLogos should be used instead.
the static function ResourceLoaderSkinModule::getAvailableLogos. $wgLogos
should be used instead.
description: |-
Array with URL paths to HD versions of the wiki logo. The scaled logo size
should be under 135x155 pixels.
@ -278,8 +278,8 @@ config-schema:
@endcode
@since 1.25
@deprecated since 1.35. Developers should retrieve this logo (and other variants) using
the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos.
$wgLogos should be used instead.
the static function ResourceLoaderSkinModule::getAvailableLogos. $wgLogos should be used
instead.
Favicon:
default: /favicon.ico
description: |-
@ -3190,12 +3190,12 @@ config-schema:
## Options
- class `{string}`:
By default a module is assumed to bundle file resources
as handled by the MediaWiki\ResourceLoader\FileModule class. Use this option
to use a different implementation of MediaWiki\ResourceLoader\Module instead.
Default: `\MediaWiki\ResourceLoader\FileModule`
as handled by the ResourceLoaderFileModule class. Use this option
to use a different implementation of ResourceLoaderModule instead.
Default: `ResourceLoaderFileModule`
- factory `{string}`:
Override the instantiation of the MediaWiki\ResourceLoader\Module
class using a PHP callback. This allows dependency injection to be used.
Override the instantiation of the ResourceLoaderModule class using
a PHP callback. This allows dependency injection to be used.
This option cannot be combined with the `class` option.
Since: MW 1.30
- dependencies `{string[]|string}`:
@ -3319,7 +3319,7 @@ config-schema:
**Example: Using an alternate subclass**
```
$wgResourceModules['ext.myExtension'] = [
'class' => WikiModule::class,
'class' => ResourceLoaderWikiModule::class,
];
```
**Example: Deprecated module**
@ -3511,7 +3511,7 @@ config-schema:
ResourceBasePath:
default: null
description: |-
The default 'remoteBasePath' value for instances of MediaWiki\ResourceLoader\FileModule.
The default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
Defaults to $wgScriptPath.
ResourceLoaderMaxage:
default:
@ -3560,7 +3560,7 @@ config-schema:
but may be needed based on the query string limit supported by your web
server and/or your user's web browsers.
Default: `2000`.
@see \MediaWiki\ResourceLoader\StartUpModule::getMaxQueryLength
@see \ResourceLoaderStartUpModule::getMaxQueryLength
@since 1.17
ResourceLoaderValidateJS:
default: true

View file

@ -164,7 +164,7 @@
"type": "object",
"anyOf": [
{
"description": "A FileModule definition",
"description": "A ResourceLoaderFileModule definition",
"additionalProperties": false,
"properties": {
"localBasePath": {
@ -308,11 +308,11 @@
}
},
{
"description": "A WikiModule definition",
"description": "A ResourceLoaderWikiModule definition",
"additionalProperties": false,
"properties": {
"class": {
"type": "string"
"enum": ["ResourceLoaderWikiModule"]
},
"group": {
"type": "string",
@ -350,11 +350,11 @@
}
},
{
"description": "A ResourceLoader ImageModule definition",
"description": "A ResourceLoaderImageModule definition",
"additionalProperties": false,
"properties": {
"class": {
"type": "string"
"enum": ["ResourceLoaderImageModule"]
},
"localBasePath": {
"type": "string",
@ -425,7 +425,7 @@
},
"QUnitTestModule": {
"type": "object",
"description": "A ResourceLoader FileModule definition registered only when wgEnableJavaScriptTest is true.",
"description": "A ResourceLoaderFileModule definition registered only when wgEnableJavaScriptTest is true.",
"additionalProperties": false,
"properties": {
"localBasePath": {
@ -963,11 +963,11 @@
},
"SkinOOUIThemes": {
"type": "object",
"description": "Map of skin names to OOUI themes to use. Same format as MediaWiki\\ResourceLoader\\OOUIModule::$builtinSkinThemeMap."
"description": "Map of skin names to OOUI themes to use. Same format as ResourceLoaderOOUIModule::$builtinSkinThemeMap."
},
"OOUIThemePaths": {
"type": "object",
"description": "Map of custom OOUI theme names to paths to load them from. Same format as MediaWiki\\ResourceLoader\\OOUIModule::$builtinThemePaths.",
"description": "Map of custom OOUI theme names to paths to load them from. Same format as ResourceLoaderOOUIModule::$builtinThemePaths.",
"patternProperties": {
"^[A-Za-z]+$": {
"type": "object",

View file

@ -174,7 +174,7 @@
"type": "object",
"anyOf": [
{
"description": "A ResourceLoader FileModule definition",
"description": "A ResourceLoaderFileModule definition",
"additionalProperties": false,
"properties": {
"localBasePath": {
@ -321,11 +321,11 @@
}
},
{
"description": "A ResourceLoader WikiModule definition",
"description": "A ResourceLoaderWikiModule definition",
"additionalProperties": false,
"properties": {
"class": {
"type": "string"
"enum": ["ResourceLoaderWikiModule"]
},
"group": {
"type": "string",
@ -367,7 +367,7 @@
"additionalProperties": false,
"properties": {
"class": {
"type": "string"
"enum": ["ResourceLoaderImageModule"]
},
"localBasePath": {
"type": "string",
@ -411,7 +411,7 @@
}
},
{
"description": "An arbitrary ResourceLoader Module definition by class",
"description": "An arbitrary ResourceLoaderModule definition by class",
"properties": {
"class": {
"type": "string",
@ -421,11 +421,11 @@
"required": ["class"]
},
{
"description": "An arbitrary ResourceLoader Module definition with instantiator",
"description": "An arbitrary ResourceLoaderModule definition with instantiator",
"properties": {
"factory": {
"type": "string",
"description": "A static instantiator function for creating the ResourceLoader Module object."
"description": "A static instantiator function for creating the ResourceLoaderModule object."
}
},
"required": ["factory"]
@ -448,7 +448,7 @@
},
"QUnitTestModule": {
"type": "object",
"description": "A ResourceLoader FileModule definition registered only when wgEnableJavaScriptTest is true.",
"description": "A ResourceLoaderFileModule definition registered only when wgEnableJavaScriptTest is true.",
"additionalProperties": false,
"properties": {
"localBasePath": {
@ -994,11 +994,11 @@
},
"SkinOOUIThemes": {
"type": "object",
"description": "Map of skin names to OOUI themes to use. Same format as MediaWiki\\ResourceLoader\\OOUIModule::$builtinSkinThemeMap."
"description": "Map of skin names to OOUI themes to use. Same format as ResourceLoaderOOUIModule::$builtinSkinThemeMap."
},
"OOUIThemePaths": {
"type": "object",
"description": "Map of custom OOUI theme names to paths to load them from. Same format as MediaWiki\\ResourceLoader\\OOUIModule::$builtinThemePaths.",
"description": "Map of custom OOUI theme names to paths to load them from. Same format as ResourceLoaderOOUIModule::$builtinThemePaths.",
"patternProperties": {
"^[A-Za-z]+$": {
"type": "object",

View file

@ -66,6 +66,7 @@ class AutoLoader {
'MediaWiki\\Page\\' => __DIR__ . '/page/',
'MediaWiki\\Parser\\' => __DIR__ . '/parser/',
'MediaWiki\\Preferences\\' => __DIR__ . '/preferences/',
'MediaWiki\\ResourceLoader\\' => __DIR__ . '/resourceloader/',
'MediaWiki\\Search\\' => __DIR__ . '/search/',
'MediaWiki\\Search\\SearchWidgets\\' => __DIR__ . '/search/searchwidgets/',
'MediaWiki\\Session\\' => __DIR__ . '/session/',

View file

@ -237,8 +237,8 @@ $wgLogos = false;
* @see MainConfigSchema::LogoHD
* @note Do not change manually, generated by maintenance/generateConfigDefaultSettings.php!
* @deprecated since 1.35. Developers should retrieve this logo (and other variants) using
* the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos.
* $wgLogos should be used instead.
* the static function ResourceLoaderSkinModule::getAvailableLogos. $wgLogos
* should be used instead.
* @var array|bool
*/
$wgLogoHD = false;

View file

@ -28,7 +28,6 @@ use MediaWiki\Linker\LinkTarget;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use MediaWiki\ProcOpenError;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\Shell\Shell;
use MediaWiki\Utils\UrlUtils;
use Wikimedia\AtEase\AtEase;

View file

@ -11,12 +11,12 @@ use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\Page\ProperPageIdentity;
use MediaWiki\Permissions\Authority;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Session\Session;
use MediaWiki\User\UserIdentity;
use Parser;
use ParserOptions;
use ResourceLoaderContext;
use Skin;
use SpecialPage;
use StatusValue;

View file

@ -188,8 +188,8 @@ class MainConfigNames {
* Name constant for the LogoHD setting, for use with Config::get()
* @see MainConfigSchema::LogoHD
* @deprecated since 1.35. Developers should retrieve this logo (and other variants) using
* the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos.
* $wgLogos should be used instead.
* the static function ResourceLoaderSkinModule::getAvailableLogos. $wgLogos
* should be used instead.
*/
public const LogoHD = 'LogoHD';

View file

@ -420,7 +420,7 @@ class MainConfigSchema {
*
* Defaults to "$wgResourceBasePath/resources/assets/change-your-logo.svg".
* Developers should retrieve this logo (and other variants) using
* the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos
* the static function ResourceLoaderSkinModule::getAvailableLogos
* Ignored if $wgLogos is set.
*/
public const Logo = [
@ -507,14 +507,14 @@ class MainConfigSchema {
*
* @since 1.25
* @deprecated since 1.35. Developers should retrieve this logo (and other variants) using
* the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos.
* $wgLogos should be used instead.
* the static function ResourceLoaderSkinModule::getAvailableLogos. $wgLogos should be used
* instead.
*/
public const LogoHD = [
'default' => false,
'type' => 'map|false',
'deprecated' => 'since 1.35. Developers should retrieve this logo (and other variants) ' .
'using the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos. $wgLogos ' .
'using the static function ResourceLoaderSkinModule::getAvailableLogos. $wgLogos ' .
'should be used instead.',
];
@ -4926,14 +4926,14 @@ class MainConfigSchema {
*
* - class `{string}`:
* By default a module is assumed to bundle file resources
* as handled by the MediaWiki\ResourceLoader\FileModule class. Use this option
* to use a different implementation of MediaWiki\ResourceLoader\Module instead.
* as handled by the ResourceLoaderFileModule class. Use this option
* to use a different implementation of ResourceLoaderModule instead.
*
* Default: `\MediaWiki\ResourceLoader\FileModule`
* Default: `ResourceLoaderFileModule`
*
* - factory `{string}`:
* Override the instantiation of the MediaWiki\ResourceLoader\Module
* class using a PHP callback. This allows dependency injection to be used.
* Override the instantiation of the ResourceLoaderModule class using
* a PHP callback. This allows dependency injection to be used.
* This option cannot be combined with the `class` option.
*
* Since: MW 1.30
@ -5106,7 +5106,7 @@ class MainConfigSchema {
*
* ```
* $wgResourceModules['ext.myExtension'] = [
* 'class' => WikiModule::class,
* 'class' => ResourceLoaderWikiModule::class,
* ];
* ```
*
@ -5349,7 +5349,7 @@ class MainConfigSchema {
];
/**
* The default 'remoteBasePath' value for instances of MediaWiki\ResourceLoader\FileModule.
* The default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
*
* Defaults to $wgScriptPath.
*/
@ -5420,7 +5420,7 @@ class MainConfigSchema {
*
* Default: `2000`.
*
* @see \MediaWiki\ResourceLoader\StartUpModule::getMaxQueryLength
* @see \ResourceLoaderStartUpModule::getMaxQueryLength
* @since 1.17
*/
public const ResourceLoaderMaxQueryLength = [

View file

@ -88,7 +88,6 @@ use MediaWiki\Permissions\PermissionManager;
use MediaWiki\Permissions\RestrictionStore;
use MediaWiki\Preferences\PreferencesFactory;
use MediaWiki\Preferences\SignatureValidatorFactory;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\Revision\ArchivedRevisionLookup;
use MediaWiki\Revision\ContributionsLookup;
use MediaWiki\Revision\RevisionFactory;
@ -142,6 +141,7 @@ use PasswordReset;
use ProxyLookup;
use ReadOnlyMode;
use RepoGroup;
use ResourceLoader;
use SearchEngine;
use SearchEngineConfig;
use SearchEngineFactory;

View file

@ -27,10 +27,6 @@ use MediaWiki\MediaWikiServices;
use MediaWiki\Page\PageRecord;
use MediaWiki\Page\PageReference;
use MediaWiki\Permissions\PermissionStatus;
use MediaWiki\ResourceLoader as RL;
use MediaWiki\ResourceLoader\DerivativeResourceLoaderContext;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\Session\SessionManager;
use Wikimedia\AtEase\AtEase;
use Wikimedia\Rdbms\IResultWrapper;
@ -205,7 +201,7 @@ class OutputPage extends ContextSource {
/** @var ResourceLoader */
protected $mResourceLoader;
/** @var RL\ClientHtml */
/** @var ResourceLoaderClientHtml */
private $rlClient;
/** @var ResourceLoaderContext */
@ -236,11 +232,11 @@ class OutputPage extends ContextSource {
/** @var array
* What level of 'untrustworthiness' is allowed in CSS/JS modules loaded on this page?
* @see RL\Module::$origin
* RL\Module::ORIGIN_ALL is assumed unless overridden;
* @see ResourceLoaderModule::$origin
* ResourceLoaderModule::ORIGIN_ALL is assumed unless overridden;
*/
protected $mAllowedModules = [
RL\Module::TYPE_COMBINED => RL\Module::ORIGIN_ALL,
ResourceLoaderModule::TYPE_COMBINED => ResourceLoaderModule::ORIGIN_ALL,
];
/** @var bool Whether output is disabled. If this is true, the 'output' method will do nothing. */
@ -551,13 +547,13 @@ class OutputPage extends ContextSource {
* @return string[]
*/
protected function filterModules( array $modules, $position = null,
$type = RL\Module::TYPE_COMBINED
$type = ResourceLoaderModule::TYPE_COMBINED
) {
$resourceLoader = $this->getResourceLoader();
$filteredModules = [];
foreach ( $modules as $val ) {
$module = $resourceLoader->getModule( $val );
if ( $module instanceof RL\Module
if ( $module instanceof ResourceLoaderModule
&& $module->getOrigin() <= $this->getAllowedModules( $type )
) {
if ( $this->mTarget && !in_array( $this->mTarget, $module->getTargets() ) ) {
@ -595,7 +591,7 @@ class OutputPage extends ContextSource {
* @return string[] Array of module names
*/
public function getModules( $filter = false, $position = null, $param = 'mModules',
$type = RL\Module::TYPE_COMBINED
$type = ResourceLoaderModule::TYPE_COMBINED
) {
$modules = array_values( array_unique( $this->$param ) );
return $filter
@ -621,7 +617,7 @@ class OutputPage extends ContextSource {
*/
public function getModuleStyles( $filter = false, $position = null ) {
return $this->getModules( $filter, null, 'mModuleStyles',
RL\Module::TYPE_STYLES
ResourceLoaderModule::TYPE_STYLES
);
}
@ -1683,34 +1679,34 @@ class OutputPage extends ContextSource {
*/
public function disallowUserJs() {
$this->reduceAllowedModules(
RL\Module::TYPE_SCRIPTS,
RL\Module::ORIGIN_CORE_INDIVIDUAL
ResourceLoaderModule::TYPE_SCRIPTS,
ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL
);
// Site-wide styles are controlled by a config setting, see T73621
// for background on why. User styles are never allowed.
if ( $this->getConfig()->get( MainConfigNames::AllowSiteCSSOnRestrictedPages ) ) {
$styleOrigin = RL\Module::ORIGIN_USER_SITEWIDE;
$styleOrigin = ResourceLoaderModule::ORIGIN_USER_SITEWIDE;
} else {
$styleOrigin = RL\Module::ORIGIN_CORE_INDIVIDUAL;
$styleOrigin = ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL;
}
$this->reduceAllowedModules(
RL\Module::TYPE_STYLES,
ResourceLoaderModule::TYPE_STYLES,
$styleOrigin
);
}
/**
* Show what level of JavaScript / CSS untrustworthiness is allowed on this page
* @see RL\Module::$origin
* @param string $type RL\Module TYPE_ constant
* @return int Module ORIGIN_ class constant
* @see ResourceLoaderModule::$origin
* @param string $type ResourceLoaderModule TYPE_ constant
* @return int ResourceLoaderModule ORIGIN_ class constant
*/
public function getAllowedModules( $type ) {
if ( $type == RL\Module::TYPE_COMBINED ) {
if ( $type == ResourceLoaderModule::TYPE_COMBINED ) {
return min( array_values( $this->mAllowedModules ) );
} else {
return $this->mAllowedModules[$type] ?? RL\Module::ORIGIN_ALL;
return $this->mAllowedModules[$type] ?? ResourceLoaderModule::ORIGIN_ALL;
}
}
@ -1721,7 +1717,7 @@ class OutputPage extends ContextSource {
* level will remain unchanged.
*
* @param string $type
* @param int $level RL\Module class constant
* @param int $level ResourceLoaderModule class constant
*/
public function reduceAllowedModules( $type, $level ) {
$this->mAllowedModules[$type] = min( $this->getAllowedModules( $type ), $level );
@ -3182,7 +3178,7 @@ class OutputPage extends ContextSource {
* the module filters retroactively. Skins and extension hooks may also add modules until very
* late in the request lifecycle.
*
* @return RL\ClientHtml
* @return ResourceLoaderClientHtml
*/
public function getRlClient() {
if ( !$this->rlClient ) {
@ -3200,21 +3196,21 @@ class OutputPage extends ContextSource {
// Prepare exempt modules for buildExemptModules()
$exemptGroups = [
RL\Module::GROUP_SITE => [],
RL\Module::GROUP_NOSCRIPT => [],
RL\Module::GROUP_PRIVATE => [],
RL\Module::GROUP_USER => []
ResourceLoaderModule::GROUP_SITE => [],
ResourceLoaderModule::GROUP_NOSCRIPT => [],
ResourceLoaderModule::GROUP_PRIVATE => [],
ResourceLoaderModule::GROUP_USER => []
];
$exemptStates = [];
$moduleStyles = $this->getModuleStyles( /*filter*/ true );
// Preload getTitleInfo for isKnownEmpty calls below and in RL\ClientHtml
// Preload getTitleInfo for isKnownEmpty calls below and in ResourceLoaderClientHtml
// Separate user-specific batch for improved cache-hit ratio.
$userBatch = [ 'user.styles', 'user' ];
$siteBatch = array_diff( $moduleStyles, $userBatch );
$dbr = wfGetDB( DB_REPLICA );
RL\WikiModule::preloadTitleInfo( $context, $dbr, $siteBatch );
RL\WikiModule::preloadTitleInfo( $context, $dbr, $userBatch );
ResourceLoaderWikiModule::preloadTitleInfo( $context, $dbr, $siteBatch );
ResourceLoaderWikiModule::preloadTitleInfo( $context, $dbr, $userBatch );
// Filter out modules handled by buildExemptModules()
$moduleStyles = array_filter( $moduleStyles,
@ -3226,7 +3222,7 @@ class OutputPage extends ContextSource {
// The `noscript` module is excluded from the client
// side registry, no need to set its state either.
// But we still output it. See T291735
if ( $group !== RL\Module::GROUP_NOSCRIPT ) {
if ( $group !== ResourceLoaderModule::GROUP_NOSCRIPT ) {
$exemptStates[$name] = 'ready';
}
if ( !$module->isKnownEmpty( $context ) ) {
@ -3241,7 +3237,7 @@ class OutputPage extends ContextSource {
);
$this->rlExemptStyleModules = $exemptGroups;
$rlClient = new RL\ClientHtml( $context, [
$rlClient = new ResourceLoaderClientHtml( $context, [
'target' => $this->getTarget(),
'nonce' => $this->CSP->getNonce(),
// When 'safemode', disallowUserJs(), or reduceAllowedModules() is used
@ -3251,8 +3247,8 @@ class OutputPage extends ContextSource {
// lazy-loaded modules at run-time on the client-side, pass 'safemode' down to the
// StartupModule so that the client-side registry will not contain any restricted
// modules either. (T152169, T185303)
'safemode' => ( $this->getAllowedModules( RL\Module::TYPE_COMBINED )
<= RL\Module::ORIGIN_CORE_INDIVIDUAL
'safemode' => ( $this->getAllowedModules( ResourceLoaderModule::TYPE_COMBINED )
<= ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL
) ? '1' : null,
] );
$rlClient->setConfig( $this->getJSVars() );
@ -3375,7 +3371,7 @@ class OutputPage extends ContextSource {
* Explicitly load or embed modules on a page.
*
* @param array|string $modules One or more module names
* @param string $only RL\Module TYPE_ class constant
* @param string $only ResourceLoaderModule TYPE_ class constant
* @param array $extraQuery [optional] Array with extra query parameters for the request
* @return string|WrappedStringList HTML
*/
@ -3383,7 +3379,7 @@ class OutputPage extends ContextSource {
// Apply 'target' and 'origin' filters
$modules = $this->filterModules( (array)$modules, null, $only );
return RL\ClientHtml::makeLoad(
return ResourceLoaderClientHtml::makeLoad(
$this->getRlClientContext(),
$modules,
$only,
@ -3467,7 +3463,7 @@ class OutputPage extends ContextSource {
/**
* Get an array containing the variables to be set in mw.config in JavaScript.
*
* Do not add things here which can be evaluated in RL\StartUpModule
* Do not add things here which can be evaluated in ResourceLoaderStartUpModule
* - in other words, page-independent/site-wide variables (without state).
* You will only be adding bloat to the html page and causing page caches to
* have to be purged on configuration changes.
@ -4033,7 +4029,7 @@ class OutputPage extends ContextSource {
// both of the above.
//
// The effective order for stylesheets must thus be:
// 1. Page style modules, formatted server-side by RL\ClientHtml.
// 1. Page style modules, formatted server-side by ResourceLoaderClientHtml.
// 2. Dynamically-loaded styles, inserted client-side by mw.loader.
// 3. Styles that are site-specific, private or from the user, formatted
// server-side by this function.
@ -4051,14 +4047,14 @@ class OutputPage extends ContextSource {
if ( $moduleNames ) {
$append[] = $this->makeResourceLoaderLink(
array_diff( $moduleNames, $separateReq ),
RL\Module::TYPE_STYLES
ResourceLoaderModule::TYPE_STYLES
);
foreach ( array_intersect( $moduleNames, $separateReq ) as $name ) {
// These require their own dedicated request in order to support "@import"
// syntax, which is incompatible with concatenation. (T147667, T37562)
$append[] = $this->makeResourceLoaderLink( $name,
RL\Module::TYPE_STYLES
ResourceLoaderModule::TYPE_STYLES
);
}
}
@ -4329,7 +4325,7 @@ class OutputPage extends ContextSource {
* @param string $dir Language direction
*/
public static function setupOOUI( $skinName = 'default', $dir = 'ltr' ) {
$themes = RL\OOUIFileModule::getSkinThemeMap();
$themes = ResourceLoaderOOUIFileModule::getSkinThemeMap();
$theme = $themes[$skinName] ?? $themes['default'];
// For example, 'OOUI\WikimediaUITheme'.
$themeClass = "OOUI\\{$theme}Theme";

View file

@ -129,8 +129,6 @@ use MediaWiki\Preferences\DefaultPreferencesFactory;
use MediaWiki\Preferences\PreferencesFactory;
use MediaWiki\Preferences\SignatureValidator;
use MediaWiki\Preferences\SignatureValidatorFactory;
use MediaWiki\ResourceLoader\MessageBlobStore;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\Revision\ArchivedRevisionLookup;
use MediaWiki\Revision\ContributionsLookup;
use MediaWiki\Revision\MainSlotRoleHandler;

View file

@ -40,7 +40,6 @@ use MediaWiki\HookContainer\HookContainer;
use MediaWiki\HookContainer\HookRunner;
use MediaWiki\Page\PageIdentity;
use MediaWiki\Permissions\PermissionManager;
use MediaWiki\ResourceLoader as RL;
use MediaWiki\Revision\MutableRevisionRecord;
use MediaWiki\Revision\RenderedRevision;
use MediaWiki\Revision\RevisionRecord;
@ -62,6 +61,7 @@ use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use RefreshSecondaryDataUpdate;
use ResourceLoaderWikiModule;
use RevertedTagUpdateJob;
use SearchUpdate;
use SiteStatsUpdate;
@ -1672,7 +1672,7 @@ class DerivedPageDataUpdater implements IDBAccessObject, LoggerAwareInterface, P
$oldRevisionRecord = $this->getParentRevision();
// TODO: In the wiring, register a listener for this on the new PageEventEmitter
RL\WikiModule::invalidateModuleCache(
ResourceLoaderWikiModule::invalidateModuleCache(
$title,
$oldRevisionRecord,
$this->revision,

View file

@ -33,7 +33,6 @@ use MediaWiki\Page\PageIdentityValue;
use MediaWiki\Page\PageReference;
use MediaWiki\Page\PageStoreRecord;
use MediaWiki\Page\ProperPageIdentity;
use MediaWiki\ResourceLoader\WikiModule;
use Wikimedia\Assert\Assert;
use Wikimedia\Assert\PreconditionException;
use Wikimedia\Rdbms\IDatabase;
@ -688,7 +687,7 @@ class Title implements LinkTarget, PageIdentity, IDBAccessObject {
* will use the user language, which would involve initialising the session
* via `RequestContext::getMain()->getLanguage()`. For session-less endpoints,
* be sure to pass in a MessageLocalizer (such as your own RequestContext,
* or ResourceLoaderContext) to prevent an error.
* or ResourceloaderContext) to prevent an error.
*
* @note The Title instance returned by this method is not guaranteed to be a fresh instance.
* It may instead be a cached instance created previously, with references to it remaining
@ -3682,7 +3681,7 @@ class Title implements LinkTarget, PageIdentity, IDBAccessObject {
MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $this );
WikiModule::invalidateModuleCache(
ResourceLoaderWikiModule::invalidateModuleCache(
$this, null, null, $dbw->getDomainID() );
}
),

View file

@ -26,7 +26,6 @@ use MediaWiki\Languages\LanguageConverterFactory;
use MediaWiki\Languages\LanguageFactory;
use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\MainConfigNames;
use MediaWiki\ResourceLoader\SkinModule;
use MediaWiki\SpecialPage\SpecialPageFactory;
use MediaWiki\User\UserGroupManager;
use MediaWiki\User\UserOptionsLookup;
@ -238,7 +237,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
// A logo can either be a relative or an absolute path
// make sure we always return an absolute path
$logo = SkinModule::getAvailableLogos( $config );
$logo = ResourceLoaderSkinModule::getAvailableLogos( $config );
$data['logo'] = wfExpandUrl( $logo['1x'], PROTO_RELATIVE );
$data['generator'] = 'MediaWiki ' . MW_VERSION;

View file

@ -24,7 +24,6 @@
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
/**
* ResourceLoader request result caching in the file system.

View file

@ -21,7 +21,6 @@
*/
use MediaWiki\Logger\LegacyLogger;
use MediaWiki\ResourceLoader\ResourceLoader;
use Wikimedia\WrappedString;
use Wikimedia\WrappedStringList;

View file

@ -26,7 +26,6 @@ use MediaWiki\HookContainer\HookRunner;
use MediaWiki\HookContainer\StaticHookRegistry;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\MessageBlobStore;
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\IMaintainableDatabase;

View file

@ -22,9 +22,6 @@
*/
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\ResourceLoader\SkinModule;
/**
* Output class modelled on OutputPage.
@ -142,7 +139,7 @@ class WebInstallerOutput {
'only' => 'styles',
] ) );
$module = new SkinModule( [
$module = new ResourceLoaderSkinModule( [
'features' => [
'elements',
'interface-message-box'

View file

@ -24,7 +24,6 @@ use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MainConfigNames;
use MediaWiki\Permissions\Authority;
use MediaWiki\Permissions\PermissionStatus;
use MediaWiki\ResourceLoader\WikiModule;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Revision\RevisionStore;
use MediaWiki\Revision\SlotRecord;
@ -32,6 +31,7 @@ use MediaWiki\User\UserFactory;
use Message;
use NamespaceInfo;
use RawMessage;
use ResourceLoaderWikiModule;
use SearchUpdate;
use SiteStatsUpdate;
use Status;
@ -894,7 +894,7 @@ class DeletePage {
WikiPage::onArticleDelete( $page->getTitle() );
}
WikiModule::invalidateModuleCache(
ResourceLoaderWikiModule::invalidateModuleCache(
$page->getTitle(),
$revRecord,
null,

View file

@ -1,7 +1,6 @@
<?php
use MediaWiki\MainConfigNames;
use MediaWiki\ResourceLoader\FilePath;
class ExtensionProcessor implements Processor {
@ -597,7 +596,7 @@ class ExtensionProcessor implements Processor {
$baseDir = $basePath === '' ? $dir : "$dir/$basePath";
foreach ( $data['scripts'] ?? [] as $scripts ) {
$this->attributes['MessagePosterModule']['scripts'][] =
new FilePath( $scripts, $baseDir );
new ResourceLoaderFilePath( $scripts, $baseDir );
}
foreach ( $data['dependencies'] ?? [] as $dependency ) {
$this->attributes['MessagePosterModule']['dependencies'][] = $dependency;

View file

@ -19,13 +19,9 @@
* @author Kunal Mehta
*/
namespace MediaWiki\ResourceLoader;
use MediaWiki\MediaWikiServices;
use MediaWiki\User\UserIdentity;
use MediaWiki\User\UserRigorOptions;
use User;
use WebRequest;
/**
* A mutable version of ResourceLoaderContext.
@ -261,6 +257,3 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
}
}
/** @deprecated since 1.39 */
class_alias( DerivativeResourceLoaderContext::class, 'DerivativeResourceLoaderContext' );

View file

@ -2,7 +2,7 @@
namespace MediaWiki\ResourceLoader\Hook;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use ResourceLoaderContext;
/**
* This is a hook handler interface, see docs/Hooks.md.

View file

@ -2,7 +2,7 @@
namespace MediaWiki\ResourceLoader\Hook;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use ResourceLoaderContext;
/**
* This is a hook handler interface, see docs/Hooks.md.

View file

@ -2,7 +2,7 @@
namespace MediaWiki\ResourceLoader\Hook;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use ResourceLoaderContext;
/**
* This is a hook handler interface, see docs/Hooks.md.

View file

@ -2,7 +2,7 @@
namespace MediaWiki\ResourceLoader\Hook;
use MediaWiki\ResourceLoader\ResourceLoader;
use ResourceLoader;
/**
* This is a hook handler interface, see docs/Hooks.md.

View file

@ -2,7 +2,7 @@
namespace MediaWiki\ResourceLoader\Hook;
use MediaWiki\ResourceLoader\ResourceLoader;
use ResourceLoader;
/**
* This is a hook handler interface, see docs/Hooks.md.

View file

@ -3,6 +3,8 @@
namespace MediaWiki\ResourceLoader;
use MediaWiki\HookContainer\HookContainer;
use ResourceLoader;
use ResourceLoaderContext;
/**
* @internal

View file

@ -20,25 +20,12 @@
* @author Trevor Parscal
*/
namespace MediaWiki\ResourceLoader;
use FormatJson;
use MediaWiki\MediaWikiServices;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use WANObjectCache;
use Wikimedia\Rdbms\Database;
/**
* PHP 7.2 hack to work around the issue described at https://phabricator.wikimedia.org/T166010#5962098
* Load the ResourceLoader class when MessageBlobStore is loaded.
* phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound
* phpcs:disable MediaWiki.Files.ClassMatchesFilename.NotMatch
*/
class ResourceLoader72Hack extends ResourceLoader {
}
/**
* This class generates message blobs for use by ResourceLoader.
*
@ -90,11 +77,11 @@ class MessageBlobStore implements LoggerAwareInterface {
* Get the message blob for a module
*
* @since 1.27
* @param Module $module
* @param ResourceLoaderModule $module
* @param string $lang Language code
* @return string JSON
*/
public function getBlob( Module $module, $lang ) {
public function getBlob( ResourceLoaderModule $module, $lang ) {
$blobs = $this->getBlobs( [ $module->getName() => $module ], $lang );
return $blobs[$module->getName()];
}
@ -103,7 +90,7 @@ class MessageBlobStore implements LoggerAwareInterface {
* Get the message blobs for a set of modules
*
* @since 1.27
* @param Module[] $modules Array of module objects keyed by name
* @param ResourceLoaderModule[] $modules Array of module objects keyed by name
* @param string $lang Language code
* @return string[] An array mapping module names to message blobs
*/
@ -141,11 +128,11 @@ class MessageBlobStore implements LoggerAwareInterface {
/**
* @since 1.27
* @param Module $module
* @param ResourceLoaderModule $module
* @param string $lang
* @return string Cache key
*/
private function makeCacheKey( Module $module, $lang ) {
private function makeCacheKey( ResourceLoaderModule $module, $lang ) {
$messages = array_values( array_unique( $module->getMessages() ) );
sort( $messages );
return $this->wanCache->makeKey( __CLASS__, $module->getName(), $lang,
@ -156,11 +143,11 @@ class MessageBlobStore implements LoggerAwareInterface {
/**
* @since 1.27
* @param string $cacheKey
* @param Module $module
* @param ResourceLoaderModule $module
* @param string $lang
* @return string JSON blob
*/
protected function recacheMessageBlob( $cacheKey, Module $module, $lang ) {
protected function recacheMessageBlob( $cacheKey, ResourceLoaderModule $module, $lang ) {
$blob = $this->generateMessageBlob( $module, $lang );
$cache = $this->wanCache;
$cache->set( $cacheKey, $blob,
@ -233,11 +220,11 @@ class MessageBlobStore implements LoggerAwareInterface {
/**
* Generate the message blob for a given module in a given language.
*
* @param Module $module
* @param ResourceLoaderModule $module
* @param string $lang Language code
* @return string JSON blob
*/
private function generateMessageBlob( Module $module, $lang ) {
private function generateMessageBlob( ResourceLoaderModule $module, $lang ) {
$messages = [];
foreach ( $module->getMessages() as $key ) {
$value = $this->fetchMessage( $key, $lang );
@ -261,6 +248,3 @@ class MessageBlobStore implements LoggerAwareInterface {
return $json;
}
}
/** @deprecated since 1.39 */
class_alias( MessageBlobStore::class, 'MessageBlobStore' );

View file

@ -20,40 +20,14 @@
* @author Trevor Parscal
*/
namespace MediaWiki\ResourceLoader;
use BagOStuff;
use CommentStore;
use Config;
use DeferredUpdates;
use Exception;
use ExtensionRegistry;
use HashBagOStuff;
use Hooks;
use Html;
use HttpStatus;
use InvalidArgumentException;
use Less_Parser;
use MediaWiki\HeaderCallback;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MWException;
use MWExceptionHandler;
use Net_URL2;
use ObjectCache;
use OutputPage;
use MediaWiki\ResourceLoader\HookRunner;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use ResourceFileCache;
use RuntimeException;
use stdClass;
use Throwable;
use Title;
use UnexpectedValueException;
use WebRequest;
use WikiMap;
use Wikimedia\DependencyStore\DependencyStore;
use Wikimedia\DependencyStore\KeyValueDependencyStore;
use Wikimedia\Minify\CSSMin;
@ -63,8 +37,6 @@ use Wikimedia\RequestTimeout\TimeoutException;
use Wikimedia\ScopedCallback;
use Wikimedia\Timestamp\ConvertibleTimestamp;
use Wikimedia\WrappedString;
use Xml;
use XmlJsCode;
/**
* @defgroup ResourceLoader ResourceLoader
@ -78,15 +50,6 @@ use XmlJsCode;
* @ingroup Hooks
*/
/**
* PHP 7.2 hack to work around the issue described at https://phabricator.wikimedia.org/T166010#5962098
* Load the ResourceLoaderContext class when ResourceLoader is loaded.
* phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound
* phpcs:disable MediaWiki.Files.ClassMatchesFilename.NotMatch
*/
class ResourceLoaderContext72Hack extends ResourceLoaderContext {
}
/**
* ResourceLoader is a loading system for JavaScript and CSS resources.
*
@ -122,7 +85,7 @@ class ResourceLoader implements LoggerAwareInterface {
/** @var HookRunner */
private $hookRunner;
/** @var Module[] Map of (module name => ResourceLoaderModule) */
/** @var ResourceLoaderModule[] Map of (module name => ResourceLoaderModule) */
private $modules = [];
/** @var array[] Map of (module name => associative info array) */
private $moduleInfos = [];
@ -170,7 +133,7 @@ class ResourceLoader implements LoggerAwareInterface {
$this->addSource( 'local', $config->get( MainConfigNames::LoadScript ) );
// Special module that always exists
$this->register( 'startup', [ 'class' => StartUpModule::class ] );
$this->register( 'startup', [ 'class' => ResourceLoaderStartUpModule::class ] );
$this->setMessageBlobStore(
new MessageBlobStore( $this, $this->logger, $services->getMainWANObjectCache() )
@ -381,15 +344,15 @@ class ResourceLoader implements LoggerAwareInterface {
}
/**
* Get the Module object for a given module name.
* Get the ResourceLoaderModule object for a given module name.
*
* If an array of module parameters exists but a Module object has not yet
* been instantiated, this method will instantiate and cache that object such that
* If an array of module parameters exists but a ResourceLoaderModule object has not
* yet been instantiated, this method will instantiate and cache that object such that
* subsequent calls simply return the same object.
*
* @param string $name Module name
* @return Module|null If module has been registered, return a
* Module instance. Otherwise, return null.
* @return ResourceLoaderModule|null If module has been registered, return a
* ResourceLoaderModule instance. Otherwise, return null.
*/
public function getModule( $name ) {
if ( !isset( $this->modules[$name] ) ) {
@ -400,11 +363,11 @@ class ResourceLoader implements LoggerAwareInterface {
// Construct the requested module object
$info = $this->moduleInfos[$name];
if ( isset( $info['factory'] ) ) {
/** @var Module $object */
/** @var ResourceLoaderModule $object */
$object = call_user_func( $info['factory'], $info );
} else {
$class = $info['class'] ?? FileModule::class;
/** @var Module $object */
$class = $info['class'] ?? ResourceLoaderFileModule::class;
/** @var ResourceLoaderModule $object */
$object = new $class( $info );
}
$object->setConfig( $this->getConfig() );
@ -430,7 +393,7 @@ class ResourceLoader implements LoggerAwareInterface {
*/
public function preloadModuleInfo( array $moduleNames, ResourceLoaderContext $context ) {
// Load all tracked indirect file dependencies for the modules
$vary = Module::getVary( $context );
$vary = ResourceLoaderModule::getVary( $context );
$entitiesByModule = [];
foreach ( $moduleNames as $moduleName ) {
$entitiesByModule[$moduleName] = "$moduleName|$vary";
@ -445,14 +408,14 @@ class ResourceLoader implements LoggerAwareInterface {
if ( $module ) {
$entity = $entitiesByModule[$moduleName];
$deps = $depsByEntity[$entity];
$paths = Module::expandRelativePaths( $deps['paths'] );
$paths = ResourceLoaderModule::expandRelativePaths( $deps['paths'] );
$module->setFileDependencies( $context, $paths );
}
}
// Batched version of ResourceLoaderWikiModule::getTitleInfo
$dbr = wfGetDB( DB_REPLICA );
WikiModule::preloadTitleInfo( $context, $dbr, $moduleNames );
ResourceLoaderWikiModule::preloadTitleInfo( $context, $dbr, $moduleNames );
// Prime in-object cache for message blobs for modules with messages
$modulesWithMessages = [];
@ -480,7 +443,7 @@ class ResourceLoader implements LoggerAwareInterface {
public function loadModuleDependenciesInternal( $moduleName, $variant ) {
$deps = $this->depStore->retrieve( self::RL_DEP_STORE_PREFIX, "$moduleName|$variant" );
return Module::expandRelativePaths( $deps['paths'] );
return ResourceLoaderModule::expandRelativePaths( $deps['paths'] );
}
/**
@ -568,7 +531,7 @@ class ResourceLoader implements LoggerAwareInterface {
}
/**
* @internal For use by StartUpModule only.
* @internal For use by ResourceLoaderStartUpModule only.
*/
public const HASH_LENGTH = 5;
@ -639,7 +602,7 @@ class ResourceLoader implements LoggerAwareInterface {
// The base_convert will pad it (if too short),
// then substr() will trim it (if too long).
return substr(
\Wikimedia\base_convert( $hash, 16, 36, self::HASH_LENGTH ),
Wikimedia\base_convert( $hash, 16, 36, self::HASH_LENGTH ),
0,
self::HASH_LENGTH
);
@ -648,7 +611,7 @@ class ResourceLoader implements LoggerAwareInterface {
/**
* Add an error to the 'errors' array and log it.
*
* @internal For use by StartUpModule.
* @internal For use by ResourceLoaderStartUpModule.
* @since 1.29
* @param Exception $e
* @param string $msg
@ -754,7 +717,7 @@ class ResourceLoader implements LoggerAwareInterface {
if ( $module ) {
// Do not allow private modules to be loaded from the web.
// This is a security issue, see T36907.
if ( $module->getGroup() === Module::GROUP_PRIVATE ) {
if ( $module->getGroup() === ResourceLoaderModule::GROUP_PRIVATE ) {
// Not a serious error, just means something is trying to access it (T101806)
$this->logger->debug( "Request for private module '$name' denied" );
$this->errors[] = "Cannot build private module \"$name\"";
@ -1070,7 +1033,7 @@ class ResourceLoader implements LoggerAwareInterface {
* later used by respond().
*
* @param ResourceLoaderContext $context Context in which to generate a response
* @param Module[] $modules List of module objects keyed by module name
* @param ResourceLoaderModule[] $modules List of module objects keyed by module name
* @param string[] $missing List of requested module names that are unregistered (optional)
* @return string Response data
*/
@ -1162,6 +1125,7 @@ MESSAGE;
$implementKey,
$scripts,
$content['styles'] ?? [],
// @phan-suppress-next-line SecurityCheck-XSS
isset( $content['messagesBlob'] ) ? new XmlJsCode( $content['messagesBlob'] ) : [],
$content['templates'] ?? []
);
@ -1281,6 +1245,7 @@ MESSAGE;
if ( $scripts->value === '' ) {
$scripts = null;
} else {
// @phan-suppress-next-line SecurityCheck-XSS
$scripts = new XmlJsCode( "function ( $, jQuery, require, module ) {\n{$scripts->value}\n}" );
}
} elseif ( is_array( $scripts ) && isset( $scripts['files'] ) ) {
@ -1347,8 +1312,9 @@ MESSAGE;
public static function makeCombinedStyles( array $stylePairs ) {
$out = [];
foreach ( $stylePairs as $media => $styles ) {
// FileModule::getStyle can return the styles as a string or an
// array of strings. This is to allow separation in the front-end.
// ResourceLoaderFileModule::getStyle can return the styles
// as a string or an array of strings. This is to allow separation in
// the front-end.
$styles = (array)$styles;
foreach ( $styles as $style ) {
$style = trim( $style );
@ -1406,7 +1372,7 @@ MESSAGE;
* - ResourceLoader::makeLoaderStateScript( $context, [ $name => $state, ... ] ):
* Set the state of modules with the given names to the given states
*
* @internal For use by StartUpModule
* @internal For use by ResourceLoaderStartUpModule
* @param ResourceLoaderContext $context
* @param array<string,string> $states
* @return string JavaScript code
@ -1467,7 +1433,7 @@ MESSAGE;
* ] ):
* @endcode
*
* @internal For use by StartUpModule only
* @internal For use by ResourceLoaderStartUpModule only
* @param ResourceLoaderContext $context
* @param array[] $modules Array of module registration arrays, each containing
* - string: module name
@ -1516,7 +1482,7 @@ MESSAGE;
* );
* Register sources with the given IDs and properties.
*
* @internal For use by StartUpModule only
* @internal For use by ResourceLoaderStartUpModule only
* @param ResourceLoaderContext $context
* @param array<string,string> $sources
* @return string JavaScript code
@ -2058,5 +2024,3 @@ MESSAGE;
return $vars;
}
}
class_alias( ResourceLoader::class, 'ResourceLoader' );

View file

@ -18,16 +18,9 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
use Exception;
/**
* @ingroup ResourceLoader
* @internal For use by ResourceLoaderStartUpModule only
*/
class CircularDependencyError extends Exception {
class ResourceLoaderCircularDependencyError extends Exception {
}
/** @deprecated since 1.39 */
class_alias( CircularDependencyError::class, 'ResourceLoaderCircularDependencyError' );

View file

@ -18,9 +18,6 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
use Html;
use Wikimedia\WrappedString;
use Wikimedia\WrappedStringList;
@ -30,7 +27,7 @@ use Wikimedia\WrappedStringList;
* @ingroup ResourceLoader
* @since 1.28
*/
class ClientHtml {
class ResourceLoaderClientHtml {
/** @var ResourceLoaderContext */
private $context;
@ -58,8 +55,8 @@ class ClientHtml {
/**
* @param ResourceLoaderContext $context
* @param array $options [optional] Array of options
* - 'target': Parameter for modules=startup request, see StartUpModule.
* - 'safemode': Parameter for modules=startup request, see StartUpModule.
* - 'target': Parameter for modules=startup request, see ResourceLoaderStartUpModule.
* - 'safemode': Parameter for modules=startup request, see ResourceLoaderStartUpModule.
* - 'nonce': From OutputPage->getCSP->getNonce().
*/
public function __construct( ResourceLoaderContext $context, array $options = [] ) {
@ -142,17 +139,17 @@ class ClientHtml {
}
$group = $module->getGroup();
$context = $this->getContext( $group, Module::TYPE_COMBINED );
$context = $this->getContext( $group, ResourceLoaderModule::TYPE_COMBINED );
$shouldEmbed = $module->shouldEmbedModule( $this->context );
if ( ( $group === Module::GROUP_USER || $shouldEmbed ) &&
if ( ( $group === ResourceLoaderModule::GROUP_USER || $shouldEmbed ) &&
$module->isKnownEmpty( $context ) ) {
// This is a user-specific or embedded module, which means its output
// can be specific to the current page or user. As such, we can optimise
// the way we load it based on the current version of the module.
// Avoid needless embed for empty module, preset ready state.
$data['states'][$name] = 'ready';
} elseif ( $group === Module::GROUP_USER || $shouldEmbed ) {
} elseif ( $group === ResourceLoaderModule::GROUP_USER || $shouldEmbed ) {
// - For group=user: We need to provide a pre-generated load.php
// url to the client that has the 'user' and 'version' parameters
// filled in. Without this, the client would wrongly use the static
@ -173,7 +170,7 @@ class ClientHtml {
continue;
}
if ( $module->getType() !== Module::LOAD_STYLES ) {
if ( $module->getType() !== ResourceLoaderModule::LOAD_STYLES ) {
$logger = $rl->getLogger();
$logger->error( 'Unexpected general module "{module}" in styles queue.', [
'module' => $name,
@ -188,11 +185,11 @@ class ClientHtml {
// Optimization: Exclude state for "noscript" modules. Since these are also excluded
// from the startup registry, no need to send their states (T291735).
$group = $module->getGroup();
if ( $group !== Module::GROUP_NOSCRIPT ) {
if ( $group !== ResourceLoaderModule::GROUP_NOSCRIPT ) {
$data['states'][$name] = 'ready';
}
$context = $this->getContext( $group, Module::TYPE_STYLES );
$context = $this->getContext( $group, ResourceLoaderModule::TYPE_STYLES );
if ( $module->shouldEmbedModule( $this->context ) ) {
// Avoid needless embed for private embeds we know are empty.
// (Set "ready" state directly instead, which we do a few lines above.)
@ -214,7 +211,7 @@ class ClientHtml {
// * ... are used on page views not publicly cached.
// * ... are in their own group and thus a require a request we can avoid
// * ... have known-empty status preloaded by ResourceLoader.
} elseif ( $group !== Module::GROUP_USER || !$module->isKnownEmpty( $context ) ) {
} elseif ( $group !== ResourceLoaderModule::GROUP_USER || !$module->isKnownEmpty( $context ) ) {
// Load from load.php?only=styles via <link rel=stylesheet>
$data['styles'][] = $name;
}
@ -299,7 +296,7 @@ RLPAGEMODULES = {$pageModulesJson};
if ( $data['embed']['general'] ) {
$chunks[] = $this->getLoad(
$data['embed']['general'],
Module::TYPE_COMBINED,
ResourceLoaderModule::TYPE_COMBINED,
$nonce
);
}
@ -308,7 +305,7 @@ RLPAGEMODULES = {$pageModulesJson};
if ( $data['styles'] ) {
$chunks[] = $this->getLoad(
$data['styles'],
Module::TYPE_STYLES,
ResourceLoaderModule::TYPE_STYLES,
$nonce
);
}
@ -317,7 +314,7 @@ RLPAGEMODULES = {$pageModulesJson};
if ( $data['embed']['styles'] ) {
$chunks[] = $this->getLoad(
$data['embed']['styles'],
Module::TYPE_STYLES,
ResourceLoaderModule::TYPE_STYLES,
$nonce
);
}
@ -332,7 +329,7 @@ RLPAGEMODULES = {$pageModulesJson};
}
$chunks[] = $this->getLoad(
'startup',
Module::TYPE_SCRIPTS,
ResourceLoaderModule::TYPE_SCRIPTS,
$nonce,
$startupQuery
);
@ -372,9 +369,9 @@ RLPAGEMODULES = {$pageModulesJson};
// Allow caller to setVersion() and setModules()
$ret = new DerivativeResourceLoaderContext( $mainContext );
// Set 'only' if not combined
$ret->setOnly( $type === Module::TYPE_COMBINED ? null : $type );
$ret->setOnly( $type === ResourceLoaderModule::TYPE_COMBINED ? null : $type );
// Remove user parameter in most cases
if ( $group !== Module::GROUP_USER && $group !== Module::GROUP_PRIVATE ) {
if ( $group !== ResourceLoaderModule::GROUP_USER && $group !== ResourceLoaderModule::GROUP_PRIVATE ) {
$ret->setUser( null );
}
if ( isset( $extraQuery['raw'] ) ) {
@ -388,7 +385,7 @@ RLPAGEMODULES = {$pageModulesJson};
*
* @param ResourceLoaderContext $mainContext
* @param string[] $modules One or more module names
* @param string $only Module TYPE_ class constant
* @param string $only ResourceLoaderModule TYPE_ class constant
* @param array $extraQuery [optional] Array with extra query parameters for the request
* @param string|null $nonce [optional] Content-Security-Policy nonce
* (from OutputPage->getCSP->getNonce())
@ -443,7 +440,7 @@ RLPAGEMODULES = {$pageModulesJson};
$context->setModules( $moduleSetNames );
if ( $embed ) {
// Decide whether to use style or script element
if ( $only == Module::TYPE_STYLES ) {
if ( $only == ResourceLoaderModule::TYPE_STYLES ) {
$chunks[] = Html::inlineStyle(
$rl->makeModuleResponse( $context, $moduleSet )
);
@ -459,7 +456,7 @@ RLPAGEMODULES = {$pageModulesJson};
// timestamp of these user-changeable modules so we can ensure cache misses on change
// This should NOT be done for the site group (T29564) because anons get that too
// and we shouldn't be putting timestamps in CDN-cached HTML
if ( $group === Module::GROUP_USER ) {
if ( $group === ResourceLoaderModule::GROUP_USER ) {
$context->setVersion( $rl->makeVersionQuery( $context, $moduleSetNames ) );
}
@ -467,7 +464,7 @@ RLPAGEMODULES = {$pageModulesJson};
$url = $rl->createLoaderURL( $source, $context, $extraQuery );
// Decide whether to use 'style' or 'script' element
if ( $only === Module::TYPE_STYLES ) {
if ( $only === ResourceLoaderModule::TYPE_STYLES ) {
$chunk = Html::linkedStyle( $url );
} elseif ( $context->getRaw() ) {
// This request is asking for the module to be delivered standalone,
@ -485,7 +482,7 @@ RLPAGEMODULES = {$pageModulesJson};
);
}
if ( $group == Module::GROUP_NOSCRIPT ) {
if ( $group == ResourceLoaderModule::GROUP_NOSCRIPT ) {
$chunks[] = Html::rawElement( 'noscript', [], $chunk );
} else {
$chunks[] = $chunk;
@ -498,6 +495,3 @@ RLPAGEMODULES = {$pageModulesJson};
return new WrappedStringList( "\n", $chunks );
}
}
/** @deprecated since 1.39 */
class_alias( ClientHtml::class, 'ResourceLoaderClientHtml' );

View file

@ -18,10 +18,6 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
use Config;
/**
* Module for codex that has direction-specific style files and a static helper function for
* embedding icons in package modules.
@ -29,7 +25,7 @@ use Config;
* @ingroup ResourceLoader
* @internal
*/
class CodexModule extends FileModule {
class ResourceLoaderCodexModule extends ResourceLoaderFileModule {
protected $dirSpecificStyles = [];
@ -83,6 +79,3 @@ class CodexModule extends FileModule {
return array_intersect_key( $allIcons, array_flip( $iconNames ) );
}
}
/** @deprecated since 1.39 */
class_alias( CodexModule::class, 'ResourceLoaderCodexModule' );

View file

@ -20,25 +20,16 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use Config;
use FauxRequest;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
use MediaWiki\Page\PageReferenceValue;
use MediaWiki\User\UserIdentity;
use MediaWiki\User\UserRigorOptions;
use Message;
use MessageLocalizer;
use MessageSpecifier;
use Psr\Log\LoggerInterface;
use User;
use WebRequest;
/**
* Context object that contains information about the state of a specific
* ResourceLoader web request. Passed around to Module methods.
* ResourceLoader web request. Passed around to ResourceLoaderModule methods.
*
* @ingroup ResourceLoader
* @since 1.17
@ -94,7 +85,7 @@ class ResourceLoaderContext implements MessageLocalizer {
protected $userObj;
/** @var UserIdentity|null|false */
protected $userIdentity = false;
/** @var Image|false */
/** @var ResourceLoaderImage|false */
protected $imageObj;
/**
@ -182,8 +173,8 @@ class ResourceLoaderContext implements MessageLocalizer {
}
/**
* @deprecated since 1.34 Use Module::getConfig instead inside module
* methods. Use ResourceLoader::getConfig elsewhere.
* @deprecated since 1.34 Use ResourceLoaderModule::getConfig instead
* inside module methods. Use ResourceLoader::getConfig elsewhere.
* @return Config
* @codeCoverageIgnore
*/
@ -197,7 +188,7 @@ class ResourceLoaderContext implements MessageLocalizer {
}
/**
* @deprecated since 1.34 Use Module::getLogger instead
* @deprecated since 1.34 Use ResourceLoaderModule::getLogger instead
* inside module methods. Use ResourceLoader::getLogger elsewhere.
* @since 1.27
* @return LoggerInterface
@ -332,8 +323,8 @@ class ResourceLoaderContext implements MessageLocalizer {
}
/**
* @see Module::getVersionHash
* @see ClientHtml::makeLoad
* @see ResourceLoaderModule::getVersionHash
* @see ResourceLoaderClientHtml::makeLoad
* @return string|null
*/
public function getVersion(): ?string {
@ -366,10 +357,10 @@ class ResourceLoaderContext implements MessageLocalizer {
}
/**
* If this is a request for an image, get the Image object.
* If this is a request for an image, get the ResourceLoaderImage object.
*
* @since 1.25
* @return Image|bool false if a valid object cannot be created
* @return ResourceLoaderImage|bool false if a valid object cannot be created
*/
public function getImageObj() {
if ( $this->imageObj === null ) {
@ -385,7 +376,7 @@ class ResourceLoaderContext implements MessageLocalizer {
}
$module = $this->getResourceLoader()->getModule( $modules[0] );
if ( !$module || !$module instanceof ImageModule ) {
if ( !$module || !$module instanceof ResourceLoaderImageModule ) {
return $this->imageObj;
}
@ -404,7 +395,7 @@ class ResourceLoaderContext implements MessageLocalizer {
* Return the replaced-content mapping callback
*
* When editing a page that's used to generate the scripts or styles of a
* WikiModule, a preview should use the to-be-saved version of
* ResourceLoaderWikiModule, a preview should use the to-be-saved version of
* the page rather than the current version in the database. A context
* supporting such previews should return a callback to return these
* mappings here.
@ -462,7 +453,7 @@ class ResourceLoaderContext implements MessageLocalizer {
/**
* Get the request base parameters, omitting any defaults.
*
* @internal For use by StartUpModule only
* @internal For use by ResourceLoaderStartUpModule only
* @return string[]
*/
public function getReqBase(): array {
@ -510,6 +501,3 @@ class ResourceLoaderContext implements MessageLocalizer {
return json_encode( $data, $jsonFlags );
}
}
/** @deprecated since 1.39 */
class_alias( ResourceLoaderContext::class, 'ResourceLoaderContext' );

View file

@ -20,20 +20,9 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use CSSJanus;
use Exception;
use ExtensionRegistry;
use FileContentsHasher;
use InvalidArgumentException;
use LogicException;
use MediaWiki\Languages\LanguageFallback;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use ObjectCache;
use OutputPage;
use RuntimeException;
use Wikimedia\Minify\CSSMin;
use Wikimedia\RequestTimeout\TimeoutException;
@ -42,15 +31,15 @@ use Wikimedia\RequestTimeout\TimeoutException;
*
* The following public methods can query the database:
*
* - getDefinitionSummary / / Module::getFileDependencies.
* - getVersionHash / getDefinitionSummary / / Module::getFileDependencies.
* - getStyles / Module::saveFileDependencies.
* - getDefinitionSummary / / ResourceLoaderModule::getFileDependencies.
* - getVersionHash / getDefinitionSummary / / ResourceLoaderModule::getFileDependencies.
* - getStyles / ResourceLoaderModule::saveFileDependencies.
*
* @ingroup ResourceLoader
* @see $wgResourceModules
* @since 1.17
*/
class FileModule extends Module {
class ResourceLoaderFileModule extends ResourceLoaderModule {
/** @var string Local base path, see __construct() */
protected $localBasePath = '';
@ -450,7 +439,7 @@ class FileModule extends Module {
}
}
// Track indirect file dependencies so that StartUpModule can check for
// Track indirect file dependencies so that ResourceLoaderStartUpModule can check for
// on-disk file changes to any of this files without having to recompute the file list
$this->saveFileDependencies( $context, $this->localFileRefs );
@ -687,11 +676,11 @@ class FileModule extends Module {
}
/**
* @param string|FilePath $path
* @param string|ResourceLoaderFilePath $path
* @return string
*/
protected function getPath( $path ) {
if ( $path instanceof FilePath ) {
if ( $path instanceof ResourceLoaderFilePath ) {
return $path->getPath();
}
@ -699,11 +688,11 @@ class FileModule extends Module {
}
/**
* @param string|FilePath $path
* @param string|ResourceLoaderFilePath $path
* @return string
*/
protected function getLocalPath( $path ) {
if ( $path instanceof FilePath ) {
if ( $path instanceof ResourceLoaderFilePath ) {
return $path->getLocalPath();
}
@ -711,11 +700,11 @@ class FileModule extends Module {
}
/**
* @param string|FilePath $path
* @param string|ResourceLoaderFilePath $path
* @return string
*/
protected function getRemotePath( $path ) {
if ( $path instanceof FilePath ) {
if ( $path instanceof ResourceLoaderFilePath ) {
return $path->getRemotePath();
}
@ -882,7 +871,7 @@ class FileModule extends Module {
list( $localBasePath, $remoteBasePath ) = self::extractBasePaths( $overrides );
foreach ( $paths as $path ) {
$styleFiles[] = new FilePath( $path, $localBasePath, $remoteBasePath );
$styleFiles[] = new ResourceLoaderFilePath( $path, $localBasePath, $remoteBasePath );
}
$this->skinStyles[$skinName] = $styleFiles;
@ -1191,13 +1180,13 @@ class FileModule extends Module {
$files = $compiler->AllParsedFiles();
$data = [
'css' => $css,
'files' => Module::getRelativePaths( $files ),
'files' => ResourceLoaderModule::getRelativePaths( $files ),
'hash' => FileContentsHasher::getFileContentsHash( $files )
];
$cache->set( $key, $data, $cache::TTL_DAY );
}
foreach ( Module::expandRelativePaths( $data['files'] ) as $path ) {
foreach ( ResourceLoaderModule::expandRelativePaths( $data['files'] ) as $path ) {
$this->localFileRefs[] = $path;
}
@ -1311,7 +1300,7 @@ class FileModule extends Module {
$this->getConfig(),
$expanded['callbackParam']
);
if ( $callbackResult instanceof FilePath ) {
if ( $callbackResult instanceof ResourceLoaderFilePath ) {
$expanded['filePath'] = $callbackResult->getPath();
} else {
$expanded['definitionSummary'] = $callbackResult;
@ -1325,7 +1314,7 @@ class FileModule extends Module {
$this->getConfig(),
$expanded['callbackParam']
);
if ( $callbackResult instanceof FilePath ) {
if ( $callbackResult instanceof ResourceLoaderFilePath ) {
$expanded['filePath'] = $callbackResult->getPath();
} else {
$expanded['content'] = $callbackResult;
@ -1403,7 +1392,7 @@ class FileModule extends Module {
$this->getConfig(),
$fileInfo['callbackParam']
);
if ( $callbackResult instanceof FilePath ) {
if ( $callbackResult instanceof ResourceLoaderFilePath ) {
// Fall through to the filePath handling code below
$fileInfo['filePath'] = $callbackResult->getPath();
} else {
@ -1484,6 +1473,3 @@ class FileModule extends Module {
return $input;
}
}
/** @deprecated since 1.39 */
class_alias( FileModule::class, 'ResourceLoaderFileModule' );

View file

@ -18,8 +18,6 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
/**
* An object to represent a path to a JavaScript/CSS file, along with a remote
* and local base path, for use with ResourceLoaderFileModule.
@ -27,7 +25,7 @@ namespace MediaWiki\ResourceLoader;
* @ingroup ResourceLoader
* @since 1.17
*/
class FilePath {
class ResourceLoaderFilePath {
/** @var string Local base path */
protected $localBasePath;
@ -85,6 +83,3 @@ class FilePath {
return $this->path;
}
}
/** @deprecated since 1.39 */
class_alias( FilePath::class, 'ResourceLoaderFilePath' );

View file

@ -18,8 +18,6 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
/**
* Module for mediawiki.ForeignApi and mediawiki.ForeignRest that has dynamically
* generated dependencies, via a hook usable by extensions.
@ -27,13 +25,10 @@ namespace MediaWiki\ResourceLoader;
* @ingroup ResourceLoader
* @internal
*/
class ForeignApiModule extends FileModule {
class ResourceLoaderForeignApiModule extends ResourceLoaderFileModule {
public function getDependencies( ResourceLoaderContext $context = null ) {
$dependencies = $this->dependencies;
$this->getHookRunner()->onResourceLoaderForeignApiModules( $dependencies, $context );
return $dependencies;
}
}
/** @deprecated since 1.39 */
class_alias( ForeignApiModule::class, 'ResourceLoaderForeignApiModule' );

View file

@ -18,27 +18,19 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
use DOMDocument;
use FileBackend;
use InvalidArgumentException;
use MediaWiki\Languages\LanguageFallback;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\Shell\Shell;
use MWException;
use SvgHandler;
use SVGReader;
use Wikimedia\Minify\CSSMin;
/**
* Class encapsulating an image used in an ImageModule.
* Class encapsulating an image used in a ResourceLoaderImageModule.
*
* @ingroup ResourceLoader
* @since 1.25
*/
class Image {
class ResourceLoaderImage {
/**
* Map of allowed file extensions to their MIME types.
* @var array
@ -66,7 +58,7 @@ class Image {
private $extension;
/**
* @param string $name Self-name of the image as known to ImageModule.
* @param string $name Self-name of the image as known to ResourceLoaderImageModule.
* @param string $module Self-name of the module containing this image.
* Used to find the image in the registry e.g. through a load.php url.
* @param string|array $descriptor Path to image file, or array structure containing paths
@ -198,11 +190,11 @@ class Image {
}
/**
* @param string|FilePath $path
* @param string|ResourceLoaderFilePath $path
* @return string
*/
protected function getLocalPath( $path ) {
if ( $path instanceof FilePath ) {
if ( $path instanceof ResourceLoaderFilePath ) {
return $path->getLocalPath();
}
@ -497,6 +489,3 @@ class Image {
isset( $this->descriptor['lang'] ) );
}
}
/** @deprecated since 1.39 */
class_alias( Image::class, 'ResourceLoaderImage' );

View file

@ -18,9 +18,6 @@
* @file
* @author Trevor Parscal
*/
namespace MediaWiki\ResourceLoader;
use InvalidArgumentException;
use Wikimedia\Minify\CSSMin;
/**
@ -29,7 +26,7 @@ use Wikimedia\Minify\CSSMin;
* @ingroup ResourceLoader
* @since 1.25
*/
class ImageModule extends Module {
class ResourceLoaderImageModule extends ResourceLoaderModule {
/** @var array|null */
protected $definition;
@ -41,7 +38,7 @@ class ImageModule extends Module {
protected $origin = self::ORIGIN_CORE_SITEWIDE;
/** @var Image[][]|null */
/** @var ResourceLoaderImage[][]|null */
protected $imageObjects = null;
/** @var array */
protected $images = [];
@ -233,21 +230,21 @@ class ImageModule extends Module {
}
/**
* Get an Image object for given image.
* Get a ResourceLoaderImage object for given image.
* @param string $name Image name
* @param ResourceLoaderContext $context
* @return Image|null
* @return ResourceLoaderImage|null
*/
public function getImage( $name, ResourceLoaderContext $context ): ?Image {
public function getImage( $name, ResourceLoaderContext $context ): ?ResourceLoaderImage {
$this->loadFromDefinition();
$images = $this->getImages( $context );
return $images[$name] ?? null;
}
/**
* Get Image objects for all images.
* Get ResourceLoaderImage objects for all images.
* @param ResourceLoaderContext $context
* @return Image[] Array keyed by image name
* @return ResourceLoaderImage[] Array keyed by image name
*/
public function getImages( ResourceLoaderContext $context ): array {
$skin = $context->getSkin();
@ -276,7 +273,7 @@ class ImageModule extends Module {
$variantConfig = [];
}
$image = new Image(
$image = new ResourceLoaderImage(
$name,
$this->getName(),
$fileDescriptor,
@ -366,14 +363,14 @@ class ImageModule extends Module {
* Module:getVersionHash, which calls Module::getDefinitionSummary).
*
* @param ResourceLoaderContext $context
* @param Image $image Image to get the style for
* @param ResourceLoaderImage $image Image to get the style for
* @param string $script URL to load.php
* @param string|null $variant Variant to get the style for
* @return string
*/
private function getStyleDeclarations(
ResourceLoaderContext $context,
Image $image,
ResourceLoaderImage $image,
$script,
$variant = null
) {
@ -459,11 +456,11 @@ class ImageModule extends Module {
}
/**
* @param string|FilePath $path
* @param string|ResourceLoaderFilePath $path
* @return string
*/
protected function getLocalPath( $path ) {
if ( $path instanceof FilePath ) {
if ( $path instanceof ResourceLoaderFilePath ) {
return $path->getLocalPath();
}
@ -499,6 +496,3 @@ class ImageModule extends Module {
return self::LOAD_STYLES;
}
}
/** @deprecated since 1.39 */
class_alias( ImageModule::class, 'ResourceLoaderImageModule' );

View file

@ -19,9 +19,6 @@
* @author Santhosh Thottingal
*/
namespace MediaWiki\ResourceLoader;
use LanguageCode;
use MediaWiki\MediaWikiServices;
/**
@ -30,7 +27,7 @@ use MediaWiki\MediaWikiServices;
* @ingroup ResourceLoader
* @internal
*/
class LanguageDataModule extends FileModule {
class ResourceLoaderLanguageDataModule extends ResourceLoaderFileModule {
protected $targets = [ 'desktop', 'mobile' ];
/**
@ -82,6 +79,3 @@ class LanguageDataModule extends FileModule {
return false;
}
}
/** @deprecated since 1.39 */
class_alias( LanguageDataModule::class, 'ResourceLoaderLanguageDataModule' );

View file

@ -17,8 +17,6 @@
*
* @file
*/
namespace MediaWiki\ResourceLoader;
use Wikimedia\Minify\CSSMin;
// Per https://phabricator.wikimedia.org/T241091
@ -30,7 +28,7 @@ use Wikimedia\Minify\CSSMin;
* @ingroup ResourceLoader
* @since 1.32
*/
class LessVarFileModule extends FileModule {
class ResourceLoaderLessVarFileModule extends ResourceLoaderFileModule {
protected $lessVariables = [];
/**
@ -133,6 +131,3 @@ class LessVarFileModule extends FileModule {
return $vars;
}
}
/** @deprecated since 1.39 */
class_alias( LessVarFileModule::class, 'ResourceLoaderLessVarFileModule' );

View file

@ -20,20 +20,13 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use Config;
use Exception;
use FileContentsHasher;
use JSParser;
use LogicException;
use MediaWiki\HookContainer\HookContainer;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\HookRunner;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use RuntimeException;
use Wikimedia\RelPath;
use Wikimedia\RequestTimeout\TimeoutException;
@ -45,7 +38,7 @@ use Wikimedia\RequestTimeout\TimeoutException;
* @ingroup ResourceLoader
* @since 1.17
*/
abstract class Module implements LoggerAwareInterface {
abstract class ResourceLoaderModule implements LoggerAwareInterface {
/** @var Config */
protected $config;
/** @var LoggerInterface */
@ -490,7 +483,7 @@ abstract class Module implements LoggerAwareInterface {
*
* @stable to override
* @since 1.28
* @return string Module LOAD_* constant
* @return string ResourceLoaderModule LOAD_* constant
*/
public function getType() {
return self::LOAD_GENERAL;
@ -752,14 +745,13 @@ abstract class Module implements LoggerAwareInterface {
* }
* @endcode
*
* @see Module::getHeaders
* @see ResourceLoaderModule::getHeaders
*
* @stable to override
* @since 1.30
* @param ResourceLoaderContext $context
* @return array Keyed by url, values must be an array containing
* at least an 'as' key. Optionally a 'media' key as well.
*
*/
protected function getPreloadLinks( ResourceLoaderContext $context ) {
return [];
@ -906,7 +898,8 @@ abstract class Module implements LoggerAwareInterface {
*
* The underlying methods called here for any given module should be quick because this
* is called for potentially thousands of module bundles in the same request as part of the
* StartUpModule, which is how we invalidate caches and propagate changes to clients.
* ResourceLoaderStartUpModule, which is how we invalidate caches and propagate changes to
* clients.
*
* @since 1.26
* @see self::getDefinitionSummary for how to customize version computation.
@ -1028,7 +1021,7 @@ abstract class Module implements LoggerAwareInterface {
* Check whether this module should be embedded rather than linked
*
* Modules returning true here will be embedded rather than loaded by
* ClientHtml.
* ResourceLoaderClientHtml.
*
* @since 1.30
* @stable to override
@ -1123,6 +1116,3 @@ abstract class Module implements LoggerAwareInterface {
] );
}
}
/** @deprecated since 1.39 */
class_alias( Module::class, 'ResourceLoaderModule' );

View file

@ -18,13 +18,11 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
/**
* @ingroup ResourceLoader
* @internal
*/
class MwUrlModule {
class ResourceLoaderMwUrlModule {
/**
* @param string $content JavaScript RegExp content with additional whitespace
* and named capturing group allowed, which will be stripped.
@ -41,6 +39,3 @@ class MwUrlModule {
return 'module.exports = /' . strtr( $content, [ '/' => '\/' ] ) . '/;';
}
}
/** @deprecated since 1.39 */
class_alias( MwUrlModule::class, 'ResourceLoaderMwUrlModule' );

View file

@ -18,8 +18,6 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
/**
* Module which magically loads the right skinScripts and skinStyles for every
* skin, using the specified OOUI theme for each.
@ -27,10 +25,10 @@ namespace MediaWiki\ResourceLoader;
* @ingroup ResourceLoader
* @internal
*/
class OOUIFileModule extends FileModule {
use OOUIModule;
class ResourceLoaderOOUIFileModule extends ResourceLoaderFileModule {
use ResourceLoaderOOUIModule;
/** @var array<string,string|FilePath> */
/** @var array<string,string|ResourceLoaderFilePath> */
private $themeStyles = [];
public function __construct( array $options = [] ) {
@ -57,7 +55,7 @@ class OOUIFileModule extends FileModule {
* @param string $module Module to generate skinStyles/skinScripts for:
* 'core', 'widgets', 'toolbars', 'windows'
* @param string $which 'scripts' or 'styles'
* @return array<string,string|FilePath>
* @return array<string,string|ResourceLoaderFilePath>
*/
private function getSkinSpecific( $module, $which ): array {
$themes = self::getSkinThemeMap();
@ -114,6 +112,3 @@ class OOUIFileModule extends FileModule {
return $skinSpecific;
}
}
/** @deprecated since 1.39 */
class_alias( OOUIFileModule::class, 'ResourceLoaderOOUIFileModule' );

View file

@ -18,17 +18,13 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
use InvalidArgumentException;
/**
* Allows loading arbitrary sets of OOUI icons.
*
* @ingroup ResourceLoader
* @since 1.34
*/
class OOUIIconPackModule extends OOUIImageModule {
class ResourceLoaderOOUIIconPackModule extends ResourceLoaderOOUIImageModule {
public function __construct( array $options = [], $localBasePath = null ) {
parent::__construct( $options, $localBasePath );
@ -85,6 +81,3 @@ class OOUIIconPackModule extends OOUIImageModule {
return $localBasePath;
}
}
/** @deprecated since 1.39 */
class_alias( OOUIIconPackModule::class, 'ResourceLoaderOOUIIconPackModule' );

View file

@ -18,18 +18,14 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
use Exception;
/**
* Loads the module definition from JSON files in the format that OOUI uses, converting it to the
* format we use. (Previously known as secret special sauce.)
*
* @since 1.26
*/
class OOUIImageModule extends ImageModule {
use OOUIModule;
class ResourceLoaderOOUIImageModule extends ResourceLoaderImageModule {
use ResourceLoaderOOUIModule;
protected function loadFromDefinition() {
if ( $this->definition === null ) {
@ -51,7 +47,7 @@ class OOUIImageModule extends ImageModule {
continue;
}
// Convert into a definition compatible with the parent vanilla ImageModule
// Convert into a definition compatible with the parent vanilla ResourceLoaderImageModule
foreach ( $data as $key => $value ) {
switch ( $key ) {
// Images and color variants are defined per-theme, here converted to per-skin
@ -135,8 +131,8 @@ class OOUIImageModule extends ImageModule {
// Expand the paths to images (since they are relative to the JSON file that defines them, not
// our base directory)
$fixPath = static function ( &$path ) use ( $dataPath ) {
if ( $dataPath instanceof FilePath ) {
$path = new FilePath(
if ( $dataPath instanceof ResourceLoaderFilePath ) {
$path = new ResourceLoaderFilePath(
dirname( $dataPath->getPath() ) . '/' . $path,
$dataPath->getLocalBasePath(),
$dataPath->getRemoteBasePath()
@ -157,6 +153,3 @@ class OOUIImageModule extends ImageModule {
return $data;
}
}
/** @deprecated since 1.39 */
class_alias( OOUIImageModule::class, 'ResourceLoaderOOUIImageModule' );

View file

@ -18,18 +18,13 @@
* @file
*/
namespace MediaWiki\ResourceLoader;
use ExtensionRegistry;
use InvalidArgumentException;
/**
* Convenience methods for dealing with OOUI themes and their relations to MW skins.
*
* @ingroup ResourceLoader
* @internal
*/
trait OOUIModule {
trait ResourceLoaderOOUIModule {
protected static $knownScriptsModules = [ 'core' ];
protected static $knownStylesModules = [ 'core', 'widgets', 'toolbars', 'windows' ];
protected static $knownImagesModules = [
@ -88,7 +83,7 @@ trait OOUIModule {
* Return a map of theme names to lists of paths from which a given theme should be loaded.
*
* Keys are theme names, values are associative arrays. Keys of the inner array are 'scripts',
* 'styles', or 'images', and values are paths. Paths may be strings or FilePaths.
* 'styles', or 'images', and values are paths. Paths may be strings or ResourceLoaderFilePaths.
*
* Additionally, the string '{module}' in paths represents the name of the module to load.
*
@ -99,16 +94,16 @@ trait OOUIModule {
$themePaths += ExtensionRegistry::getInstance()->getAttribute( 'OOUIThemePaths' );
list( $defaultLocalBasePath, $defaultRemoteBasePath ) =
FileModule::extractBasePaths();
ResourceLoaderFileModule::extractBasePaths();
// Allow custom themes' paths to be relative to the skin/extension that defines them,
// like with ResourceModuleSkinStyles
foreach ( $themePaths as $theme => &$paths ) {
list( $localBasePath, $remoteBasePath ) =
FileModule::extractBasePaths( $paths );
ResourceLoaderFileModule::extractBasePaths( $paths );
if ( $localBasePath !== $defaultLocalBasePath || $remoteBasePath !== $defaultRemoteBasePath ) {
foreach ( $paths as &$path ) {
$path = new FilePath( $path, $localBasePath, $remoteBasePath );
$path = new ResourceLoaderFilePath( $path, $localBasePath, $remoteBasePath );
}
}
}
@ -126,13 +121,13 @@ trait OOUIModule {
* @param string $kind Kind of the module: 'scripts', 'styles', or 'images'
* @param string $module Module name, for valid values see $knownScriptsModules,
* $knownStylesModules, $knownImagesModules
* @return string|FilePath
* @return string|ResourceLoaderFilePath
*/
protected function getThemePath( $theme, $kind, $module ) {
$paths = self::getThemePaths();
$path = $paths[$theme][$kind];
if ( $path instanceof FilePath ) {
$path = new FilePath(
if ( $path instanceof ResourceLoaderFilePath ) {
$path = new ResourceLoaderFilePath(
str_replace( '{module}', $module, $path->getPath() ),
$path->getLocalBasePath(),
$path->getRemoteBasePath()
@ -146,7 +141,7 @@ trait OOUIModule {
/**
* @param string $theme See getThemePath()
* @param string $module See getThemePath()
* @return string|FilePath
* @return string|ResourceLoaderFilePath
*/
protected function getThemeScriptsPath( $theme, $module ) {
if ( !in_array( $module, self::$knownScriptsModules ) ) {
@ -158,7 +153,7 @@ trait OOUIModule {
/**
* @param string $theme See getThemePath()
* @param string $module See getThemePath()
* @return string|FilePath
* @return string|ResourceLoaderFilePath
*/
protected function getThemeStylesPath( $theme, $module ) {
if ( !in_array( $module, self::$knownStylesModules ) ) {
@ -170,7 +165,7 @@ trait OOUIModule {
/**
* @param string $theme See getThemePath()
* @param string $module See getThemePath()
* @return string|FilePath
* @return string|ResourceLoaderFilePath
*/
protected function getThemeImagesPath( $theme, $module ) {
if ( !in_array( $module, self::$knownImagesModules ) ) {
@ -179,6 +174,3 @@ trait OOUIModule {
return $this->getThemePath( $theme, 'images', $module );
}
}
/** @deprecated since 1.39 */
class_alias( OOUIModule::class, 'ResourceLoaderOOUIModule' );

View file

@ -20,8 +20,6 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use MediaWiki\MainConfigNames;
/**
@ -30,7 +28,7 @@ use MediaWiki\MainConfigNames;
* @ingroup ResourceLoader
* @internal
*/
class SiteModule extends WikiModule {
class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
/** @var string[] What client platforms the module targets (e.g. desktop, mobile) */
protected $targets = [ 'desktop', 'mobile' ];
@ -59,6 +57,3 @@ class SiteModule extends WikiModule {
return [ 'site.styles' ];
}
}
/** @deprecated since 1.39 */
class_alias( SiteModule::class, 'ResourceLoaderSiteModule' );

View file

@ -20,8 +20,6 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use MediaWiki\MainConfigNames;
/**
@ -30,7 +28,7 @@ use MediaWiki\MainConfigNames;
* @ingroup ResourceLoader
* @internal
*/
class SiteStylesModule extends WikiModule {
class ResourceLoaderSiteStylesModule extends ResourceLoaderWikiModule {
/** @var string[] What client platforms the module targets (e.g. desktop, mobile) */
protected $targets = [ 'desktop', 'mobile' ];
@ -66,6 +64,3 @@ class SiteStylesModule extends WikiModule {
return self::GROUP_SITE;
}
}
/** @deprecated since 1.39 */
class_alias( SiteStylesModule::class, 'ResourceLoaderSiteStylesModule' );

View file

@ -17,13 +17,7 @@
*
* @file
*/
namespace MediaWiki\ResourceLoader;
use Config;
use ConfigException;
use InvalidArgumentException;
use MediaWiki\MainConfigNames;
use OutputPage;
use Wikimedia\Minify\CSSMin;
/**
@ -32,7 +26,7 @@ use Wikimedia\Minify\CSSMin;
* @ingroup ResourceLoader
* @internal
*/
class SkinModule extends LessVarFileModule {
class ResourceLoaderSkinModule extends ResourceLoaderLessVarFileModule {
/**
* All skins are assumed to be compatible with mobile
*/
@ -40,7 +34,7 @@ class SkinModule extends LessVarFileModule {
/**
* Every skin should define which features it would like to reuse for core inside a
* ResourceLoader module that has set the class to SkinModule.
* ResourceLoader module that has set the class to ResourceLoaderSkinModule.
* For a feature to be valid it must be listed here along with the associated resources
*
* The following features are available:
@ -343,7 +337,7 @@ class SkinModule extends LessVarFileModule {
// Bypass the current module paths so that these files are served from core,
// instead of the individual skin's module directory.
list( $defaultLocalBasePath, $defaultRemoteBasePath ) =
FileModule::extractBasePaths(
ResourceLoaderFileModule::extractBasePaths(
[],
null,
$this->getConfig()->get( MainConfigNames::ResourceBasePath )
@ -355,7 +349,7 @@ class SkinModule extends LessVarFileModule {
if ( in_array( $feature, $this->features ) ) {
foreach ( $featureFiles as $mediaType => $files ) {
foreach ( $files as $filepath ) {
$featureFilePaths[$mediaType][] = new FilePath(
$featureFilePaths[$mediaType][] = new ResourceLoaderFilePath(
$filepath,
$defaultLocalBasePath,
$defaultRemoteBasePath
@ -366,17 +360,17 @@ class SkinModule extends LessVarFileModule {
!$this->getConfig()->get( MainConfigNames::ParserEnableLegacyMediaDOM ) ||
$this->getConfig()->get( MainConfigNames::UseContentMediaStyles )
) ) {
$featureFilePaths['all'][] = new FilePath(
$featureFilePaths['all'][] = new ResourceLoaderFilePath(
'resources/src/mediawiki.skinning/content.media-common.less',
$defaultLocalBasePath,
$defaultRemoteBasePath
);
$featureFilePaths['screen'][] = new FilePath(
$featureFilePaths['screen'][] = new ResourceLoaderFilePath(
'resources/src/mediawiki.skinning/content.media-screen.less',
$defaultLocalBasePath,
$defaultRemoteBasePath
);
$featureFilePaths['print'][] = new FilePath(
$featureFilePaths['print'][] = new ResourceLoaderFilePath(
'resources/src/mediawiki.skinning/content.media-print.less',
$defaultLocalBasePath,
$defaultRemoteBasePath
@ -497,7 +491,7 @@ class SkinModule extends LessVarFileModule {
$logosCount = count( $logos );
$preloadLinks = [];
// Logic must match SkinModule:
// Logic must match ResourceLoaderSkinModule:
// - 1x applies to resolution < 1.5dppx
// - 1.5x applies to resolution >= 1.5dppx && < 2dppx
// - 2x applies to resolution >= 2dppx
@ -533,7 +527,7 @@ class SkinModule extends LessVarFileModule {
/**
* Ensure all media keys use array values.
*
* Normalises arrays returned by the FileModule::getStyles() method.
* Normalises arrays returned by the ResourceLoaderFileModule::getStyles() method.
*
* @param array &$styles Associative array, keys are strings (media queries),
* values are strings or arrays
@ -714,6 +708,3 @@ class SkinModule extends LessVarFileModule {
return $summary;
}
}
/** @deprecated since 1.39 */
class_alias( SkinModule::class, 'ResourceLoaderSkinModule' );

View file

@ -19,9 +19,7 @@
* @author Trevor Parscal
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use Exception;
use MediaWiki\MainConfigNames;
use Wikimedia\RequestTimeout\TimeoutException;
@ -30,13 +28,13 @@ use Wikimedia\RequestTimeout\TimeoutException;
*
* See also <https://www.mediawiki.org/wiki/ResourceLoader/Features#Startup_Module>
*
* The startup module, as being called only from ClientHtml, has
* The startup module, as being called only from ResourceLoaderClientHtml, has
* the ability to vary based extra query parameters, in addition to those
* from ResourceLoaderContext:
*
* - target: Only register modules in the client intended for this target.
* Default: "desktop".
* See also: OutputPage::setTarget(), Module::getTargets().
* See also: OutputPage::setTarget(), ResourceLoaderModule::getTargets().
*
* - safemode: Only register modules that have ORIGIN_CORE as their origin.
* This disables ORIGIN_USER modules and mw.loader.store. (T185303, T145498)
@ -45,7 +43,7 @@ use Wikimedia\RequestTimeout\TimeoutException;
* @ingroup ResourceLoader
* @internal
*/
class StartUpModule extends Module {
class ResourceLoaderStartUpModule extends ResourceLoaderModule {
protected $targets = [ 'desktop', 'mobile' ];
private $groupIds = [
@ -64,7 +62,7 @@ class StartUpModule extends Module {
* @param string $moduleName
* @param string[] $handled Internal parameter for recursion. (Optional)
* @return array
* @throws CircularDependencyError
* @throws ResourceLoaderCircularDependencyError
*/
protected static function getImplicitDependencies(
array $registryData,
@ -94,7 +92,7 @@ class StartUpModule extends Module {
// supported in ResourceLoader. Awareness of them exists here so that we can
// optimise the registry when it isn't broken, and otherwise transport the
// registry unchanged. The client will handle this further.
throw new CircularDependencyError();
throw new ResourceLoaderCircularDependencyError();
} else {
// Recursively add the dependencies of the dependencies
$flat = array_merge(
@ -138,7 +136,7 @@ class StartUpModule extends Module {
$implicitDependencies = self::getImplicitDependencies( $registryData, $dependency );
$dependencies = array_diff( $dependencies, $implicitDependencies );
}
} catch ( CircularDependencyError $err ) {
} catch ( ResourceLoaderCircularDependencyError $err ) {
// Leave unchanged
$dependencies = $data['dependencies'];
}
@ -192,13 +190,13 @@ class StartUpModule extends Module {
$moduleSkins = $module->getSkins();
if (
( !$byPassTargetFilter && !in_array( $target, $moduleTargets ) )
|| ( $safemode && $module->getOrigin() > Module::ORIGIN_CORE_INDIVIDUAL )
|| ( $safemode && $module->getOrigin() > ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL )
|| ( $moduleSkins !== null && !in_array( $skin, $moduleSkins ) )
) {
continue;
}
if ( $module instanceof StartUpModule ) {
if ( $module instanceof ResourceLoaderStartUpModule ) {
// Don't register 'startup' to the client because loading it lazily or depending
// on it doesn't make sense, because the startup module *is* the client.
// Registering would be a waste of bandwidth and memory and risks somehow causing
@ -206,7 +204,7 @@ class StartUpModule extends Module {
// ATTENTION: Because of the line below, this is not going to cause infinite recursion.
// Think carefully before making changes to this code!
// The below code is going to call Module::getVersionHash() for every module.
// The below code is going to call ResourceLoaderModule::getVersionHash() for every module.
// For StartUpModule (this module) the hash is computed based on the manifest content,
// which is the very thing we are computing right here. As such, this must skip iterating
// over 'startup' itself.
@ -379,7 +377,7 @@ class StartUpModule extends Module {
'$VARS.maxQueryLength' => $context->encodeJson(
// In debug mode (except legacy debug mode), let the client fetch each module in
// its own dedicated request (T85805).
// This is effectively the equivalent of ClientHtml::makeLoad,
// This is effectively the equivalent of ResourceLoaderClientHtml::makeLoad,
// which does this for stylesheets.
( !$context->getDebug() || $context->getDebug() === $context::DEBUG_LEGACY ) ?
$this->getMaxQueryLength() :
@ -448,6 +446,3 @@ class StartUpModule extends Module {
return true;
}
}
/** @deprecated since 1.39 */
class_alias( StartUpModule::class, 'ResourceLoaderStartUpModule' );

View file

@ -20,11 +20,8 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use TitleValue;
/**
* Module for user customizations scripts.
@ -32,7 +29,7 @@ use TitleValue;
* @ingroup ResourceLoader
* @internal
*/
class UserModule extends WikiModule {
class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
protected $origin = self::ORIGIN_USER_INDIVIDUAL;
protected $targets = [ 'desktop', 'mobile' ];
@ -86,6 +83,3 @@ class UserModule extends WikiModule {
return self::GROUP_USER;
}
}
/** @deprecated since 1.39 */
class_alias( UserModule::class, 'ResourceLoaderUserModule' );

View file

@ -1,7 +1,5 @@
<?php
namespace MediaWiki\ResourceLoader;
use MediaWiki\MediaWikiServices;
use MediaWiki\User\UserOptionsLookup;
@ -29,13 +27,13 @@ use MediaWiki\User\UserOptionsLookup;
/**
* Module for per-user private data that is transmitted on all HTML web responses.
*
* This module is embedded by ClientHtml and sent to the browser
* This module is embedded by ResourceLoaderClientHtml and sent to the browser
* by OutputPage as part of the HTML `<head>`.
*
* @ingroup ResourceLoader
* @internal
*/
class UserOptionsModule extends Module {
class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
@ -91,6 +89,3 @@ class UserOptionsModule extends Module {
return self::GROUP_PRIVATE;
}
}
/** @deprecated since 1.39 */
class_alias( UserOptionsModule::class, 'ResourceLoaderUserOptionsModule' );

View file

@ -20,11 +20,8 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use TitleValue;
/**
* Module for user customizations styles.
@ -32,7 +29,7 @@ use TitleValue;
* @ingroup ResourceLoader
* @internal
*/
class UserStylesModule extends WikiModule {
class ResourceLoaderUserStylesModule extends ResourceLoaderWikiModule {
protected $origin = self::ORIGIN_USER_INDIVIDUAL;
protected $targets = [ 'desktop', 'mobile' ];
@ -95,6 +92,3 @@ class UserStylesModule extends WikiModule {
return self::GROUP_USER;
}
}
/** @deprecated since 1.39 */
class_alias( UserStylesModule::class, 'ResourceLoaderUserStylesModule' );

View file

@ -20,20 +20,12 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use Content;
use CSSJanus;
use FormatJson;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\Page\PageIdentity;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Revision\SlotRecord;
use MemoizedCallable;
use Title;
use TitleValue;
use Wikimedia\Minify\CSSMin;
use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
@ -62,7 +54,7 @@ use Wikimedia\Timestamp\ConvertibleTimestamp;
* @ingroup ResourceLoader
* @since 1.17
*/
class WikiModule extends Module {
class ResourceLoaderWikiModule extends ResourceLoaderModule {
/** @var string Origin defaults to users with sitewide authority */
protected $origin = self::ORIGIN_USER_SITEWIDE;
@ -421,7 +413,7 @@ class WikiModule extends Module {
// document root, MediaWiki uses an empty string but that is
// not a valid URI path. Expand to a slash to avoid fatals
// later in CSSMin::resolveUrl().
// See also FilePath::extractBasePaths, T282280.
// See also ResourceLoaderFilePath::extractBasePaths, T282280.
$remoteDir = '/';
}
@ -592,7 +584,7 @@ class WikiModule extends Module {
// getDB() can be overridden to point to a foreign database.
// For now, only preload local. In the future, we could preload by wikiID.
$allPages = [];
/** @var WikiModule[] $wikiModules */
/** @var ResourceLoaderWikiModule[] $wikiModules */
$wikiModules = [];
foreach ( $moduleNames as $name ) {
$module = $rl->getModule( $name );
@ -716,6 +708,3 @@ class WikiModule extends Module {
return ( $this->styles && !$this->scripts ) ? self::LOAD_STYLES : self::LOAD_GENERAL;
}
}
/** @deprecated since 1.39 */
class_alias( WikiModule::class, 'ResourceLoaderWikiModule' );

View file

@ -19,12 +19,6 @@
* @author Roan Kattouw
*/
namespace MediaWiki\ResourceLoader;
use DOMDocument;
use DOMElement;
use DOMNode;
use Exception;
use Wikimedia\RemexHtml\DOM\DOMBuilder;
use Wikimedia\RemexHtml\HTMLData;
use Wikimedia\RemexHtml\Serializer\HtmlFormatter;
@ -40,7 +34,7 @@ use Wikimedia\RemexHtml\TreeBuilder\TreeBuilder;
* Parser for Vue single file components (.vue files). See parse() for usage.
*
* @ingroup ResourceLoader
* @internal For use within FileModule.
* @internal For use within ResourceLoaderFileModule.
*/
class VueComponentParser {
/**
@ -316,6 +310,3 @@ class VueComponentParser {
};
}
}
/** @deprecated since 1.39 */
class_alias( VueComponentParser::class, 'VueComponentParser' );

View file

@ -23,7 +23,7 @@ namespace Wikimedia\DependencyStore;
/**
* Class for tracking per-entity dependency path lists that are expensive to mass compute
*
* @internal This should not be used outside of ResourceLoader and ResourceLoader\Module
* @internal This should not be used outside of ResourceLoader and ResourceLoaderModule
*/
abstract class DependencyStore {
/** @var string */

View file

@ -29,9 +29,9 @@ use Wikimedia\Rdbms\ILoadBalancer;
/**
* Class for tracking per-entity dependency path lists in the module_deps table
*
* This should not be used outside of ResourceLoader and ResourceLoader\Module
* This should not be used outside of ResourceLoader and ResourceLoaderModule
*
* @internal For use with ResourceLoader/ResourceLoader\Module only
* @internal For use with ResourceLoader/ResourceLoaderModule only
* @since 1.35
*/
class SqlModuleDependencyStore extends DependencyStore {

View file

@ -2,7 +2,7 @@
namespace MediaWiki\Skins\Hook;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use ResourceLoaderContext;
/**
* This is a hook handler interface, see docs/Hooks.md.

View file

@ -23,7 +23,6 @@
use MediaWiki\HookContainer\ProtectedHookAccessorTrait;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader as RL;
use MediaWiki\Revision\RevisionLookup;
use MediaWiki\Revision\RevisionStore;
use MediaWiki\Skin\SkinComponent;
@ -960,7 +959,7 @@ abstract class Skin extends ContextSource {
$mp = $this->msg( 'mainpage' )->escaped();
$url = htmlspecialchars( Title::newMainPage()->getLocalURL() );
$logourl = RL\SkinModule::getAvailableLogos( $this->getConfig() )[ '1x' ];
$logourl = ResourceLoaderSkinModule::getAvailableLogos( $this->getConfig() )[ '1x' ];
return "<a href='{$url}'><img{$a} src='{$logourl}' alt='[{$mp}]' /></a>";
}
@ -2600,7 +2599,7 @@ abstract class Skin extends ContextSource {
* Returns skin options for portlet links, used by addPortletLink
*
* @internal
* @param RL\ResourceLoaderContext $context
* @param ResourceLoaderContext $context
* @return array $linkOptions
* - 'text-wrapper' key to specify a list of elements to wrap the text of
* a link in. This should be an array of arrays containing a 'tag' and
@ -2610,7 +2609,7 @@ abstract class Skin extends ContextSource {
* for your options. If text-wrapper contains multiple entries they are
* interpreted as going from the outer wrapper to the inner wrapper.
*/
public static function getPortletLinkOptions( RL\ResourceLoaderContext $context ): array {
public static function getPortletLinkOptions( ResourceLoaderContext $context ): array {
$skinName = $context->getSkin();
$skinFactory = MediaWikiServices::getInstance()->getSkinFactory();
$options = $skinFactory->getSkinOptions( $skinName );

View file

@ -23,7 +23,6 @@
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\Permissions\Authority;
use MediaWiki\ResourceLoader as RL;
/**
* Base class for QuickTemplate-based skins.
@ -283,7 +282,7 @@ class SkinTemplate extends Skin {
$tpl->set( 'articlepath', $config->get( MainConfigNames::ArticlePath ) );
$tpl->set( 'scriptpath', $config->get( MainConfigNames::ScriptPath ) );
$tpl->set( 'serverurl', $config->get( MainConfigNames::Server ) );
$logos = RL\SkinModule::getAvailableLogos( $config );
$logos = ResourceLoaderSkinModule::getAvailableLogos( $config );
$tpl->set( 'logopath', $logos['1x'] );
$tpl->set( 'sitename', $config->get( MainConfigNames::Sitename ) );

View file

@ -19,7 +19,7 @@
namespace MediaWiki\Skin;
use Config;
use MediaWiki\ResourceLoader as RL;
use ResourceLoaderSkinModule;
/**
* @internal for use inside Skin and SkinTemplate classes only
@ -64,6 +64,6 @@ class SkinComponentLogo implements SkinComponent {
* - array tagline with `src`, `width`, `height` and `style` keys.
*/
public function getTemplateData(): array {
return RL\SkinModule::getAvailableLogos( $this->getConfig(), $this->getLanguage() );
return ResourceLoaderSkinModule::getAvailableLogos( $this->getConfig(), $this->getLanguage() );
}
}

View file

@ -24,7 +24,6 @@
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\User\UserIdentity;
use OOUI\IconWidget;
use Wikimedia\Rdbms\DBQueryTimeoutError;
@ -844,7 +843,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
* Get essential data about getRcFiltersConfigVars() for change detection.
*
* @internal For use by Resources.php only.
* @see Module::getDefinitionSummary() and Module::getVersionHash()
* @see ResourceLoaderModule::getDefinitionSummary() and ResourceLoaderModule::getVersionHash()
* @param ResourceLoaderContext $context
* @return array
*/

View file

@ -22,8 +22,6 @@
*/
use MediaWiki\MainConfigNames;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
/**
* @ingroup SpecialPage

View file

@ -26,7 +26,6 @@
*/
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
// This endpoint is supposed to be independent of request cookies and other
// details of the session. Enforce this constraint with respect to session use.

View file

@ -34,7 +34,7 @@
};
</script>
<script>
// Mock StartUpModule substitutions
// Mock ResourceLoaderStartUpModule substitutions
window.$VARS = {
baseModules: [],
storeEnabled: false,

View file

@ -34,7 +34,6 @@ use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\MessageBlobStore;
use MediaWiki\Settings\SettingsBuilder;
require_once __DIR__ . '/Maintenance.php';

View file

@ -22,23 +22,6 @@
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\FilePath;
use MediaWiki\ResourceLoader\ForeignApiModule;
use MediaWiki\ResourceLoader\LanguageDataModule;
use MediaWiki\ResourceLoader\LessVarFileModule;
use MediaWiki\ResourceLoader\Module;
use MediaWiki\ResourceLoader\MwUrlModule;
use MediaWiki\ResourceLoader\OOUIFileModule;
use MediaWiki\ResourceLoader\OOUIIconPackModule;
use MediaWiki\ResourceLoader\OOUIImageModule;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\ResourceLoader\SiteModule;
use MediaWiki\ResourceLoader\SiteStylesModule;
use MediaWiki\ResourceLoader\SkinModule;
use MediaWiki\ResourceLoader\UserModule;
use MediaWiki\ResourceLoader\UserOptionsModule;
use MediaWiki\ResourceLoader\UserStylesModule;
use MediaWiki\ResourceLoader\WikiModule;
if ( !defined( 'MEDIAWIKI' ) ) {
die( 'Not an entry point.' );
@ -49,29 +32,29 @@ global $wgBaseDirectory;
return [
// Scripts managed by the local wiki (stored in the MediaWiki namespace)
'site' => [ 'class' => SiteModule::class ],
'site.styles' => [ 'class' => SiteStylesModule::class ],
'site' => [ 'class' => ResourceLoaderSiteModule::class ],
'site.styles' => [ 'class' => ResourceLoaderSiteStylesModule::class ],
'noscript' => [
'targets' => [ 'desktop', 'mobile' ],
'class' => WikiModule::class,
'class' => ResourceLoaderWikiModule::class,
'styles' => [ 'MediaWiki:Noscript.css' ],
'group' => Module::GROUP_NOSCRIPT,
'group' => ResourceLoaderModule::GROUP_NOSCRIPT,
],
'filepage' => [
'class' => WikiModule::class,
'class' => ResourceLoaderWikiModule::class,
'styles' => [ 'MediaWiki:Filepage.css' ],
],
// Scripts managed by the current user (stored in their user space)
'user' => [ 'class' => UserModule::class ],
'user.styles' => [ 'class' => UserStylesModule::class ],
'user' => [ 'class' => ResourceLoaderUserModule::class ],
'user.styles' => [ 'class' => ResourceLoaderUserStylesModule::class ],
'user.options' => [ 'class' => UserOptionsModule::class ],
'user.options' => [ 'class' => ResourceLoaderUserOptionsModule::class ],
'mediawiki.skinning.elements' => [
'deprecated' => 'Your default skin ResourceLoader class should use '
. '\MediaWiki\ResourceLoader\SkinModule::class',
'class' => SkinModule::class,
. 'ResourceLoaderSkinModule::class',
'class' => ResourceLoaderSkinModule::class,
'features' => [
'elements' => true,
'legacy' => true,
@ -79,8 +62,8 @@ return [
],
'mediawiki.skinning.content' => [
'deprecated' => 'Your default skin ResourceLoader class should use '
. '\MediaWiki\ResourceLoader\SkinModule::class',
'class' => SkinModule::class,
. 'ResourceLoaderSkinModule::class',
'class' => ResourceLoaderSkinModule::class,
'features' => [
'elements' => true,
'content' => true,
@ -88,7 +71,7 @@ return [
],
],
'mediawiki.skinning.interface' => [
'class' => SkinModule::class,
'class' => ResourceLoaderSkinModule::class,
'features' => [
'elements' => true,
'content' => true,
@ -99,7 +82,7 @@ return [
],
'jquery.makeCollapsible.styles' => [
'targets' => [ 'desktop', 'mobile' ],
'class' => LessVarFileModule::class,
'class' => ResourceLoaderLessVarFileModule::class,
'lessMessages' => [
'collapsible-collapse',
'collapsible-expand',
@ -125,8 +108,8 @@ return [
'mediawiki.skinning.content.externallinks' => [
'deprecated' => 'Your default skin ResourceLoader class should use '
. 'the "content-links" feature in \MediaWiki\ResourceLoader\SkinModule::class',
'class' => SkinModule::class,
. 'the "content-links" feature in ResourceLoaderSkinModule::class',
'class' => ResourceLoaderSkinModule::class,
'features' => [ 'content-links' ],
],
@ -181,7 +164,7 @@ return [
'name' => 'legacy.wikibits.js',
'callback' => static function ( ResourceLoaderContext $context, Config $config ) {
return $config->get( MainConfigNames::IncludeLegacyJavaScript ) ?
new FilePath( 'legacy.wikibits.js' ) : '';
new ResourceLoaderFilePath( 'legacy.wikibits.js' ) : '';
}
],
],
@ -610,7 +593,7 @@ return [
$file = $config->get( MainConfigNames::VueDevelopmentMode ) || $context->getDebug() ?
'resources/lib/vue/vue.global.js' :
'resources/lib/vue/vue.global.prod.js';
return new FilePath( $file );
return new ResourceLoaderFilePath( $file );
}
],
@ -650,7 +633,7 @@ return [
$file = $config->get( MainConfigNames::VueDevelopmentMode ) || $context->getDebug() ?
'resources/lib/vuex/vuex.global.js' :
'resources/lib/vuex/vuex.global.prod.js';
return new FilePath( $file );
return new ResourceLoaderFilePath( $file );
}
],
],
@ -691,14 +674,14 @@ return [
],
'@wikimedia/codex' => [
'class' => '\MediaWiki\ResourceLoader\CodexModule',
'class' => 'ResourceLoaderCodexModule',
'targets' => [ 'desktop', 'mobile' ],
'packageFiles' => [
'resources/src/codex/codex.js',
'resources/lib/codex/codex.umd.js',
],
'dirSpecificStyles' => [
// Special syntax supported by CodexModule
// Special syntax supported by ResourceLoaderCodexModule
'ltr' => 'resources/lib/codex/codex.style.css',
'rtl' => 'resources/lib/codex/codex.style-rtl.css'
],
@ -852,7 +835,7 @@ return [
],
'mediawiki.ForeignApi' => [
'targets' => [ 'desktop', 'mobile' ],
'class' => ForeignApiModule::class,
'class' => ResourceLoaderForeignApiModule::class,
// Additional dependencies generated dynamically
'dependencies' => 'mediawiki.ForeignApi.core',
],
@ -876,7 +859,7 @@ return [
'targets' => [ 'desktop', 'mobile' ],
],
'mediawiki.hlist' => [
'class' => LessVarFileModule::class,
'class' => ResourceLoaderLessVarFileModule::class,
'lessMessages' => [
'colon-separator',
'parentheses-start',
@ -1177,8 +1160,8 @@ return [
'targets' => [ 'desktop', 'mobile' ],
],
'mediawiki.toc.styles' => [
'deprecated' => 'Please use the `toc` feature on SkinModule',
'class' => SkinModule::class,
'deprecated' => 'Please use the `toc` feature on ResourceLoaderSkinModule',
'class' => ResourceLoaderSkinModule::class,
'features' => [ 'toc' ],
'targets' => [ 'desktop', 'mobile' ],
],
@ -1190,23 +1173,23 @@ return [
[ 'name' => 'loose.regexp.js',
'callback' => static function ( ResourceLoaderContext $context, Config $config ) {
$baseDir = $config->get( MainConfigNames::BaseDirectory );
return MwUrlModule::makeJsFromExtendedRegExp(
return ResourceLoaderMwUrlModule::makeJsFromExtendedRegExp(
file_get_contents( "$baseDir/resources/src/mediawiki.Uri/loose.regexp" )
);
},
'versionCallback' => static function () {
return new FilePath( 'loose.regexp' );
return new ResourceLoaderFilePath( 'loose.regexp' );
},
],
[ 'name' => 'strict.regexp.js',
'callback' => static function ( ResourceLoaderContext $context, Config $config ) {
$baseDir = $config->get( MainConfigNames::BaseDirectory );
return MwUrlModule::makeJsFromExtendedRegExp(
return ResourceLoaderMwUrlModule::makeJsFromExtendedRegExp(
file_get_contents( "$baseDir/resources/src/mediawiki.Uri/strict.regexp" )
);
},
'versionCallback' => static function () {
return new FilePath( 'strict.regexp' );
return new ResourceLoaderFilePath( 'strict.regexp' );
},
],
],
@ -1473,7 +1456,7 @@ return [
/* MediaWiki Language */
'mediawiki.language' => [
'class' => LanguageDataModule::class,
'class' => ResourceLoaderLanguageDataModule::class,
'scripts' => [
'resources/src/mediawiki.language/mediawiki.language.init.js',
'resources/src/mediawiki.language/mediawiki.language.js',
@ -1971,7 +1954,7 @@ return [
],
],
'mediawiki.interface.helpers.styles' => [
'class' => LessVarFileModule::class,
'class' => ResourceLoaderLessVarFileModule::class,
'lessMessages' => [
'comma-separator',
'parentheses-start',
@ -2456,7 +2439,7 @@ return [
/* MediaWiki Legacy */
'mediawiki.legacy.commonPrint' => [
'deprecated' => 'Use SkinModule',
'deprecated' => 'Use ResourceLoaderSkinModule',
'styles' => [
'resources/src/mediawiki.skinning/commonPrint.less' => [ 'media' => 'print' ]
],
@ -2464,8 +2447,8 @@ return [
// Used in the web installer. Test it after modifying this definition!
'mediawiki.legacy.shared' => [
'deprecated' => 'Your default skin ResourceLoader class should use '
. '\MediaWiki\ResourceLoader\SkinModule::class',
'class' => SkinModule::class,
. 'ResourceLoaderSkinModule::class',
'class' => ResourceLoaderSkinModule::class,
'features' => [
'legacy' => true,
],
@ -2991,7 +2974,7 @@ return [
// The core JavaScript library.
'oojs-ui-core' => [
'class' => OOUIFileModule::class,
'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => [
'resources/lib/ooui/oojs-ui-core.js',
'resources/src/ooui-local.js',
@ -3019,7 +3002,7 @@ return [
],
// This contains only the styles required by core widgets.
'oojs-ui-core.styles' => [
'class' => OOUIFileModule::class,
'class' => ResourceLoaderOOUIFileModule::class,
'styles' => [
'resources/lib/ooui/wikimedia-ui-base.less', // Providing Wikimedia UI LESS variables to all
],
@ -3027,7 +3010,7 @@ return [
'targets' => [ 'desktop', 'mobile' ],
],
'oojs-ui-core.icons' => [
'class' => OOUIIconPackModule::class,
'class' => ResourceLoaderOOUIIconPackModule::class,
'icons' => [
'add', 'alert', 'infoFilled', 'error', 'check', 'close', 'info', 'search', 'subtract'
],
@ -3035,7 +3018,7 @@ return [
],
// Additional widgets and layouts module.
'oojs-ui-widgets' => [
'class' => OOUIFileModule::class,
'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => 'resources/lib/ooui/oojs-ui-widgets.js',
'themeStyles' => 'widgets',
'dependencies' => [
@ -3054,19 +3037,19 @@ return [
// they depend on the internal structure of OOUI widgets, which can change at any time. If you
// find that you need to load this module, you're probably doing something wrong or very hacky.
'oojs-ui-widgets.styles' => [
'class' => OOUIFileModule::class,
'class' => ResourceLoaderOOUIFileModule::class,
'themeStyles' => 'widgets',
'targets' => [ 'desktop', 'mobile' ],
],
'oojs-ui-widgets.icons' => [
'class' => OOUIIconPackModule::class,
'class' => ResourceLoaderOOUIIconPackModule::class,
// Do not repeat icons already used in 'oojs-ui-core.icons'
'icons' => [ 'attachment', 'collapse', 'expand', 'trash', 'upload' ],
'targets' => [ 'desktop', 'mobile' ],
],
// Toolbar and tools module.
'oojs-ui-toolbars' => [
'class' => OOUIFileModule::class,
'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => 'resources/lib/ooui/oojs-ui-toolbars.js',
'themeStyles' => 'toolbars',
'dependencies' => [
@ -3081,14 +3064,14 @@ return [
'targets' => [ 'desktop', 'mobile' ],
],
'oojs-ui-toolbars.icons' => [
'class' => OOUIIconPackModule::class,
'class' => ResourceLoaderOOUIIconPackModule::class,
// Do not repeat icons already used in 'oojs-ui-core.icons': 'check'
'icons' => [ 'collapse', 'expand' ],
'targets' => [ 'desktop', 'mobile' ],
],
// Windows and dialogs module.
'oojs-ui-windows' => [
'class' => OOUIFileModule::class,
'class' => ResourceLoaderOOUIFileModule::class,
'scripts' => 'resources/lib/ooui/oojs-ui-windows.js',
'themeStyles' => 'windows',
'dependencies' => [
@ -3106,78 +3089,78 @@ return [
'targets' => [ 'desktop', 'mobile' ],
],
'oojs-ui-windows.icons' => [
'class' => OOUIIconPackModule::class,
'class' => ResourceLoaderOOUIIconPackModule::class,
// Do not repeat icons already used in 'oojs-ui-core.icons': 'close'
'icons' => [ 'previous' ],
'targets' => [ 'desktop', 'mobile' ],
],
'oojs-ui.styles.indicators' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'indicators',
],
'oojs-ui.styles.icons-accessibility' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-accessibility',
],
'oojs-ui.styles.icons-alerts' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-alerts',
],
'oojs-ui.styles.icons-content' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-content',
],
'oojs-ui.styles.icons-editing-advanced' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-advanced',
],
'oojs-ui.styles.icons-editing-citation' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-citation',
],
'oojs-ui.styles.icons-editing-core' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-core',
],
'oojs-ui.styles.icons-editing-list' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-list',
],
'oojs-ui.styles.icons-editing-styling' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-editing-styling',
],
'oojs-ui.styles.icons-interactions' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-interactions',
],
'oojs-ui.styles.icons-layout' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-layout',
],
'oojs-ui.styles.icons-location' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-location',
],
'oojs-ui.styles.icons-media' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-media',
],
'oojs-ui.styles.icons-moderation' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-moderation',
],
'oojs-ui.styles.icons-movement' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-movement',
],
'oojs-ui.styles.icons-user' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-user',
],
'oojs-ui.styles.icons-wikimedia' => [
'class' => OOUIImageModule::class,
'class' => ResourceLoaderOOUIImageModule::class,
'themeImages' => 'icons-wikimedia',
],
];

View file

@ -114,7 +114,7 @@
//
// We typically receive them from the server through batches from load.php,
// or embedded as inline scripts (handled in PHP by ResourceLoader::makeModuleResponse
// and ResourceLoader\ClientHtml respectively).
// and ResourceLoaderClientHtml respectively).
//
// Each module is bundled by ResourceLoader::makeLoaderImplementScript in PHP,
// and might look as follows:

View file

@ -14,7 +14,7 @@
/**
* Language-related data (keyed by language, contains instances of mw.Map).
*
* Exported dynamically by the ResourceLoader\LanguageDataModule class in PHP.
* Exported dynamically by the ResourceLoaderLanguageDataModule class in PHP.
*
* To set data:
*

View file

@ -144,11 +144,11 @@ $wgAutoloadClasses += [
'PoolWorkArticleViewTest' =>
"$testDir/phpunit/includes/poolcounter/PoolWorkArticleViewTest.php",
# tests/phpunit/includes/ResourceLoader
'MediaWiki\\Tests\\ResourceLoader\\ImageModuleTest' =>
"$testDir/phpunit/includes/ResourceLoader/ImageModuleTest.php",
'MediaWiki\\Tests\\ResourceLoader\\ImageModuleTestable' =>
"$testDir/phpunit/includes/ResourceLoader/ImageModuleTest.php",
# tests/phpunit/includes/resourceloader
'ResourceLoaderImageModuleTest' =>
"$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
'ResourceLoaderImageModuleTestable' =>
"$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
# tests/phpunit/includes/session
'MediaWiki\\Session\\TestBagOStuff' => "$testDir/phpunit/includes/session/TestBagOStuff.php",

View file

@ -2,10 +2,6 @@
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\FileModule;
use MediaWiki\ResourceLoader\Module;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use Psr\Log\LoggerInterface;
abstract class ResourceLoaderTestCase extends MediaWikiIntegrationTestCase {
@ -107,7 +103,7 @@ abstract class ResourceLoaderTestCase extends MediaWikiIntegrationTestCase {
/* Stubs */
class ResourceLoaderTestModule extends Module {
class ResourceLoaderTestModule extends ResourceLoaderModule {
protected $messages = [];
protected $dependencies = [];
protected $group = null;
@ -118,7 +114,7 @@ class ResourceLoaderTestModule extends Module {
protected $es6 = false;
protected $isRaw = false;
protected $isKnownEmpty = false;
protected $type = Module::LOAD_GENERAL;
protected $type = ResourceLoaderModule::LOAD_GENERAL;
protected $targets = [ 'phpunit' ];
protected $shouldEmbed = null;
protected $mayValidateScript = false;
@ -195,7 +191,7 @@ class ResourceLoaderTestModule extends Module {
* - Implements getLessVars() support.
* - Disables database persistance of discovered file dependencies.
*/
class ResourceLoaderFileTestModule extends FileModule {
class ResourceLoaderFileTestModule extends ResourceLoaderFileModule {
protected $lessVars = [];
public function __construct( $options = [] ) {
@ -225,7 +221,7 @@ class ResourceLoaderFileTestModule extends FileModule {
}
}
class ResourceLoaderFileModuleTestingSubclass extends FileModule {
class ResourceLoaderFileModuleTestingSubclass extends ResourceLoaderFileModule {
}
class EmptyResourceLoader extends ResourceLoader {

View file

@ -6,7 +6,6 @@ use MediaWiki\Page\PageReference;
use MediaWiki\Page\PageReferenceValue;
use MediaWiki\Page\PageStoreRecord;
use MediaWiki\Permissions\Authority;
use MediaWiki\ResourceLoader as RL;
use MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait;
use PHPUnit\Framework\MockObject\MockObject;
use Wikimedia\DependencyStore\KeyValueDependencyStore;
@ -2576,7 +2575,7 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
}
/**
* See ClientHtmlTest for full coverage.
* See ResourceLoaderClientHtmlTest for full coverage.
*
* @dataProvider provideMakeResourceLoaderLink
*
@ -2601,7 +2600,7 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
$nonce->setAccessible( true );
$nonce->setValue( $out->getCSP(), 'secret' );
$rl = $out->getResourceLoader();
$rl->setMessageBlobStore( $this->createMock( RL\MessageBlobStore::class ) );
$rl->setMessageBlobStore( $this->createMock( MessageBlobStore::class ) );
$rl->setDependencyStore( $this->createMock( KeyValueDependencyStore::class ) );
$rl->register( [
'test.foo' => [
@ -2650,27 +2649,27 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
return [
// Single only=scripts load
[
[ 'test.foo', RL\Module::TYPE_SCRIPTS ],
[ 'test.foo', ResourceLoaderModule::TYPE_SCRIPTS ],
"<script nonce=\"secret\">(RLQ=window.RLQ||[]).push(function(){"
. 'mw.loader.load("http://127.0.0.1:8080/w/load.php?lang=en\u0026modules=test.foo\u0026only=scripts");'
. "});</script>"
],
// Multiple only=styles load
[
[ [ 'test.baz', 'test.foo', 'test.bar' ], RL\Module::TYPE_STYLES ],
[ [ 'test.baz', 'test.foo', 'test.bar' ], ResourceLoaderModule::TYPE_STYLES ],
'<link rel="stylesheet" href="http://127.0.0.1:8080/w/load.php?lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles"/>'
],
// Private embed (only=scripts)
[
[ 'test.quux', RL\Module::TYPE_SCRIPTS ],
[ 'test.quux', ResourceLoaderModule::TYPE_SCRIPTS ],
"<script nonce=\"secret\">(RLQ=window.RLQ||[]).push(function(){"
. "mw.test.baz({token:123});\nmw.loader.state({\"test.quux\":\"ready\"});"
. "});</script>"
],
// Load private module (combined)
[
[ 'test.quux', RL\Module::TYPE_COMBINED ],
[ 'test.quux', ResourceLoaderModule::TYPE_COMBINED ],
"<script nonce=\"secret\">(RLQ=window.RLQ||[]).push(function(){"
. "mw.loader.implement(\"test.quux@1ev0i\",function($,jQuery,require,module){"
. "mw.test.baz({token:123});},{\"css\":[\".mw-icon{transition:none}"
@ -2678,17 +2677,17 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
],
// Load no modules
[
[ [], RL\Module::TYPE_COMBINED ],
[ [], ResourceLoaderModule::TYPE_COMBINED ],
'',
],
// noscript group
[
[ 'test.noscript', RL\Module::TYPE_STYLES ],
[ 'test.noscript', ResourceLoaderModule::TYPE_STYLES ],
'<noscript><link rel="stylesheet" href="http://127.0.0.1:8080/w/load.php?lang=en&amp;modules=test.noscript&amp;only=styles"/></noscript>'
],
// Load two modules in separate groups
[
[ [ 'test.group.foo', 'test.group.bar' ], RL\Module::TYPE_COMBINED ],
[ [ 'test.group.foo', 'test.group.bar' ], ResourceLoaderModule::TYPE_COMBINED ],
"<script nonce=\"secret\">(RLQ=window.RLQ||[]).push(function(){"
. 'mw.loader.load("http://127.0.0.1:8080/w/load.php?lang=en\u0026modules=test.group.bar");'
. 'mw.loader.load("http://127.0.0.1:8080/w/load.php?lang=en\u0026modules=test.group.foo");'
@ -2725,7 +2724,7 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
->willReturn( [] );
/** @var OutputPage $op */
$rl = $op->getResourceLoader();
$rl->setMessageBlobStore( $this->createMock( RL\MessageBlobStore::class ) );
$rl->setMessageBlobStore( $this->createMock( MessageBlobStore::class ) );
// Register custom modules
$rl->register( [
@ -2764,7 +2763,7 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
'exemptStyleModules' => [ 'site' => [ 'site.styles' ], 'user' => [ 'user.styles' ] ],
'<meta name="ResourceLoaderDynamicStyles" content=""/>' . "\n" .
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles"/>' . "\n" .
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=user.styles&amp;only=styles&amp;version=94mvi"/>',
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=user.styles&amp;only=styles&amp;version=tgzos"/>',
],
'custom modules' => [
'exemptStyleModules' => [
@ -2775,7 +2774,7 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=example.site.a%2Cb&amp;only=styles"/>' . "\n" .
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles"/>' . "\n" .
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=example.user&amp;only=styles&amp;version={blankCombi}"/>' . "\n" .
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=user.styles&amp;only=styles&amp;version=94mvi"/>',
'<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=user.styles&amp;only=styles&amp;version=tgzos"/>',
],
];
// phpcs:enable
@ -2993,11 +2992,11 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
/**
* @dataProvider providePreloadLinkHeaders
* @covers \MediaWiki\ResourceLoader\SkinModule::getPreloadLinks
* @covers ResourceLoaderSkinModule::getPreloadLinks
*/
public function testPreloadLinkHeaders( $config, $result ) {
$ctx = $this->createMock( RL\ResourceLoaderContext::class );
$module = new RL\SkinModule();
$ctx = $this->createMock( ResourceLoaderContext::class );
$module = new ResourceLoaderSkinModule();
$module->setConfig( new HashConfig( $config + ResourceLoaderTestCase::getSettings() ) );
$this->assertEquals( [ $result ], $module->getHeaders( $ctx ) );

View file

@ -1,20 +1,10 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use FauxRequest;
use MediaWiki\ResourceLoader\DerivativeResourceLoaderContext;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\User\UserIdentity;
use MediaWikiIntegrationTestCase;
use ResourceLoaderTestCase;
use Title;
use User;
/**
* @group ResourceLoader
* @covers \MediaWiki\ResourceLoader\DerivativeResourceLoaderContext
* @covers DerivativeResourceLoaderContext
*/
class DerivativeResourceLoaderContextTest extends MediaWikiIntegrationTestCase {

View file

@ -1,21 +1,12 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use EmptyResourceLoader;
use HashBagOStuff;
use MediaWiki\ResourceLoader\MessageBlobStore;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWikiCoversValidator;
use Psr\Log\NullLogger;
use ResourceLoaderTestModule;
use WANObjectCache;
/**
* @group ResourceLoader
* @covers \MediaWiki\ResourceLoader\MessageBlobStore
* @covers MessageBlobStore
*/
class MessageBlobStoreTest extends \PHPUnit\Framework\TestCase {
class MessageBlobStoreTest extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;

View file

@ -1,23 +1,12 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use FauxRequest;
use HashConfig;
use MediaWiki\ResourceLoader\ClientHtml;
use MediaWiki\ResourceLoader\Module;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWikiCoversValidator;
use ResourceLoaderTestCase;
use ResourceLoaderTestModule;
use Wikimedia\TestingAccessWrapper;
/**
* @group ResourceLoader
* @covers \MediaWiki\ResourceLoader\ClientHtml
* @covers ResourceLoaderClientHtml
*/
class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
class ResourceLoaderClientHtmlTest extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;
@ -25,7 +14,7 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
$context = self::makeContext();
$context->getResourceLoader()->register( self::makeSampleModules() );
$client = new ClientHtml( $context );
$client = new ResourceLoaderClientHtml( $context );
$client->setModules( [
'test',
'test.private',
@ -97,7 +86,7 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
$context = self::makeContext();
$context->getResourceLoader()->register( self::makeSampleModules() );
$client = new ClientHtml( $context, [
$client = new ResourceLoaderClientHtml( $context, [
'nonce' => false,
] );
$client->setConfig( [ 'key' => 'value' ] );
@ -135,7 +124,7 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
* Confirm that 'target' is passed down to the startup module's load url.
*/
public function testGetHeadHtmlWithTarget() {
$client = new ClientHtml(
$client = new ResourceLoaderClientHtml(
self::makeContext(),
[ 'target' => 'example' ]
);
@ -150,7 +139,7 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
* Confirm that 'safemode' is passed down to startup.
*/
public function testGetHeadHtmlWithSafemode() {
$client = new ClientHtml(
$client = new ResourceLoaderClientHtml(
self::makeContext(),
[ 'safemode' => '1' ]
);
@ -165,7 +154,7 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
* Confirm that a null 'target' is the same as no target.
*/
public function testGetHeadHtmlWithNullTarget() {
$client = new ClientHtml(
$client = new ResourceLoaderClientHtml(
self::makeContext(),
[ 'target' => null ]
);
@ -180,7 +169,7 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
$context = self::makeContext();
$context->getResourceLoader()->register( self::makeSampleModules() );
$client = new ClientHtml( $context, [ 'nonce' => false ] );
$client = new ResourceLoaderClientHtml( $context, [ 'nonce' => false ] );
$client->setConfig( [ 'key' => 'value' ] );
$client->setModules( [
'test',
@ -202,28 +191,28 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
[
'context' => [],
'modules' => [ 'test.unknown' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' => '',
],
[
'context' => [],
'modules' => [ 'test.styles.private' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' => '<style>.private{}</style>',
],
[
'context' => [],
'modules' => [ 'test.private' ],
'only' => Module::TYPE_COMBINED,
'only' => ResourceLoaderModule::TYPE_COMBINED,
'extra' => [],
'output' => '<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("test.private@{blankVer}",null,{"css":[]});});</script>',
],
[
'context' => [],
'modules' => [ 'test.scripts' ],
'only' => Module::TYPE_SCRIPTS,
'only' => ResourceLoaderModule::TYPE_SCRIPTS,
// Eg. startup module
'extra' => [ 'raw' => '1' ],
'output' => '<script async="" src="/w/load.php?lang=nl&amp;modules=test.scripts&amp;only=scripts&amp;raw=1"></script>',
@ -231,21 +220,21 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
[
'context' => [],
'modules' => [ 'test.scripts.user' ],
'only' => Module::TYPE_SCRIPTS,
'only' => ResourceLoaderModule::TYPE_SCRIPTS,
'extra' => [],
'output' => '<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.load("/w/load.php?lang=nl\u0026modules=test.scripts.user\u0026only=scripts\u0026user=Example\u0026version={blankCombi}");});</script>',
],
[
'context' => [],
'modules' => [ 'test.user' ],
'only' => Module::TYPE_COMBINED,
'only' => ResourceLoaderModule::TYPE_COMBINED,
'extra' => [],
'output' => '<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.load("/w/load.php?lang=nl\u0026modules=test.user\u0026user=Example\u0026version={blankCombi}");});</script>',
],
[
'context' => [ 'debug' => 'true' ],
'modules' => [ 'test.styles.pure', 'test.styles.mixed' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' => '<link rel="stylesheet" href="/w/load.php?debug=1&amp;lang=nl&amp;modules=test.styles.mixed&amp;only=styles"/>' . "\n"
. '<link rel="stylesheet" href="/w/load.php?debug=1&amp;lang=nl&amp;modules=test.styles.pure&amp;only=styles"/>',
@ -253,49 +242,49 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
[
'context' => [ 'debug' => 'false' ],
'modules' => [ 'test.styles.pure', 'test.styles.mixed' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' => '<link rel="stylesheet" href="/w/load.php?lang=nl&amp;modules=test.styles.mixed%2Cpure&amp;only=styles"/>',
],
[
'context' => [],
'modules' => [ 'test.styles.noscript' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' => '<noscript><link rel="stylesheet" href="/w/load.php?lang=nl&amp;modules=test.styles.noscript&amp;only=styles"/></noscript>',
],
[
'context' => [],
'modules' => [ 'test.shouldembed' ],
'only' => Module::TYPE_COMBINED,
'only' => ResourceLoaderModule::TYPE_COMBINED,
'extra' => [],
'output' => '<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("test.shouldembed@{blankVer}",null,{"css":[]});});</script>',
],
[
'context' => [],
'modules' => [ 'test.styles.shouldembed' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' => '<style>.shouldembed{}</style>',
],
[
'context' => [],
'modules' => [ 'test.scripts.shouldembed' ],
'only' => Module::TYPE_SCRIPTS,
'only' => ResourceLoaderModule::TYPE_SCRIPTS,
'extra' => [],
'output' => '<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.state({"test.scripts.shouldembed":"ready"});});</script>',
],
[
'context' => [],
'modules' => [ 'test', 'test.shouldembed' ],
'only' => Module::TYPE_COMBINED,
'only' => ResourceLoaderModule::TYPE_COMBINED,
'extra' => [],
'output' => '<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.load("/w/load.php?lang=nl\u0026modules=test");mw.loader.implement("test.shouldembed@{blankVer}",null,{"css":[]});});</script>',
],
[
'context' => [],
'modules' => [ 'test.styles.pure', 'test.styles.shouldembed' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' =>
'<link rel="stylesheet" href="/w/load.php?lang=nl&amp;modules=test.styles.pure&amp;only=styles"/>' . "\n"
@ -304,7 +293,7 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
[
'context' => [],
'modules' => [ 'test.ordering.a', 'test.ordering.e', 'test.ordering.b', 'test.ordering.d', 'test.ordering.c' ],
'only' => Module::TYPE_STYLES,
'only' => ResourceLoaderModule::TYPE_STYLES,
'extra' => [],
'output' =>
'<link rel="stylesheet" href="/w/load.php?lang=nl&amp;modules=test.ordering.a%2Cb&amp;only=styles"/>' . "\n"
@ -317,9 +306,9 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
/**
* @dataProvider provideMakeLoad
* @covers \MediaWiki\ResourceLoader\ClientHtml
* @covers \MediaWiki\ResourceLoader\Module::getModuleContent
* @covers \MediaWiki\ResourceLoader\ResourceLoader
* @covers ResourceLoaderClientHtml
* @covers ResourceLoaderModule::getModuleContent
* @covers ResourceLoader
*/
public function testMakeLoad(
array $contextQuery,
@ -330,13 +319,13 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
) {
$context = self::makeContext( $contextQuery );
$context->getResourceLoader()->register( self::makeSampleModules() );
$actual = ClientHtml::makeLoad( $context, $modules, $type, $extraQuery, false );
$actual = ResourceLoaderClientHtml::makeLoad( $context, $modules, $type, $extraQuery, false );
$expected = self::expandVariables( $expected );
$this->assertSame( $expected, (string)$actual );
}
public function testGetDocumentAttributes() {
$client = new ClientHtml( self::makeContext() );
$client = new ResourceLoaderClientHtml( self::makeContext() );
$this->assertIsArray( $client->getDocumentAttributes() );
}
@ -375,33 +364,33 @@ class ClientHtmlTest extends \PHPUnit\Framework\TestCase {
'test.shouldembed' => [ 'shouldEmbed' => true ],
'test.user' => [ 'group' => 'user' ],
'test.styles.pure' => [ 'type' => Module::LOAD_STYLES ],
'test.styles.pure' => [ 'type' => ResourceLoaderModule::LOAD_STYLES ],
'test.styles.mixed' => [],
'test.styles.noscript' => [
'type' => Module::LOAD_STYLES,
'type' => ResourceLoaderModule::LOAD_STYLES,
'group' => 'noscript',
],
'test.styles.user' => [
'type' => Module::LOAD_STYLES,
'type' => ResourceLoaderModule::LOAD_STYLES,
'group' => 'user',
],
'test.styles.user.empty' => [
'type' => Module::LOAD_STYLES,
'type' => ResourceLoaderModule::LOAD_STYLES,
'group' => 'user',
'isKnownEmpty' => true,
],
'test.styles.private' => [
'type' => Module::LOAD_STYLES,
'type' => ResourceLoaderModule::LOAD_STYLES,
'group' => 'private',
'styles' => '.private{}',
],
'test.styles.shouldembed' => [
'type' => Module::LOAD_STYLES,
'type' => ResourceLoaderModule::LOAD_STYLES,
'shouldEmbed' => true,
'styles' => '.shouldembed{}',
],
'test.styles.deprecated' => [
'type' => Module::LOAD_STYLES,
'type' => ResourceLoaderModule::LOAD_STYLES,
'deprecated' => 'Deprecation message.',
],

View file

@ -1,25 +1,13 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use EmptyResourceLoader;
use FauxRequest;
use HashConfig;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWikiCoversValidator;
use Message;
use User;
use WebRequest;
/**
* See also:
* - ResourceLoaderImageModuleTest::testContext
*
* @group ResourceLoader
* @covers \MediaWiki\ResourceLoader\ResourceLoaderContext
* @covers ResourceLoaderContext
*/
class ResourceLoaderContextTest extends \PHPUnit\Framework\TestCase {
class ResourceLoaderContextTest extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;
@ -61,7 +49,7 @@ class ResourceLoaderContextTest extends \PHPUnit\Framework\TestCase {
$ctx = new ResourceLoaderContext( $this->getResourceLoader(), new FauxRequest( [] ) );
$this->assertInstanceOf( ResourceLoader::class, $ctx->getResourceLoader() );
$this->assertInstanceOf( WebRequest::class, $ctx->getRequest() );
$this->assertInstanceOf( \Psr\Log\LoggerInterface::class, $ctx->getLogger() );
$this->assertInstanceOf( Psr\Log\LoggerInterface::class, $ctx->getLogger() );
}
public function testTypicalRequest() {

View file

@ -1,25 +1,12 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use Exception;
use HashConfig;
use LogicException;
use MediaWiki\ResourceLoader\FileModule;
use MediaWiki\ResourceLoader\FilePath;
use MediaWiki\ResourceLoader\ResourceLoader;
use Psr\Container\ContainerInterface;
use RequestContext;
use ResourceLoaderFileTestModule;
use ResourceLoaderTestCase;
use RuntimeException;
use SkinFactory;
use Wikimedia\ObjectFactory\ObjectFactory;
/**
* @group ResourceLoader
*/
class FileModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderFileModuleTest extends ResourceLoaderTestCase {
protected function setUp(): void {
parent::setUp();
@ -36,7 +23,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
$this->setService( 'SkinFactory', $skinFactory );
// This test is not expected to query any database
\MediaWiki\MediaWikiServices::disableStorageBackend();
MediaWiki\MediaWikiServices::disableStorageBackend();
}
private static function getModules() {
@ -121,11 +108,11 @@ class FileModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider providerTemplateDependencies
* @covers \MediaWiki\ResourceLoader\FileModule::__construct
* @covers \MediaWiki\ResourceLoader\FileModule::getDependencies
* @covers ResourceLoaderFileModule::__construct
* @covers ResourceLoaderFileModule::getDependencies
*/
public function testTemplateDependencies( $module, $expected ) {
$rl = new FileModule( $module );
$rl = new ResourceLoaderFileModule( $module );
$rl->setName( 'testing' );
$this->assertEquals( $expected, $rl->getDependencies() );
}
@ -148,23 +135,23 @@ class FileModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider providerDeprecatedModules
* @covers \MediaWiki\ResourceLoader\FileModule::getScript
* @covers ResourceLoaderFileModule::getScript
*/
public function testDeprecatedModules( $name, $expected ) {
$modules = self::getModules();
$module = new FileModule( $modules[$name] );
$module = new ResourceLoaderFileModule( $modules[$name] );
$module->setName( $name );
$ctx = $this->getResourceLoaderContext();
$this->assertEquals( $expected, $module->getScript( $ctx ) );
}
/**
* @covers \MediaWiki\ResourceLoader\FileModule::getScript
* @covers \MediaWiki\ResourceLoader\FileModule::getScriptFiles
* @covers \MediaWiki\ResourceLoader\FileModule::readScriptFiles
* @covers ResourceLoaderFileModule::getScript
* @covers ResourceLoaderFileModule::getScriptFiles
* @covers ResourceLoaderFileModule::readScriptFiles
*/
public function testGetScript() {
$module = new FileModule( [
$module = new ResourceLoaderFileModule( [
'localBasePath' => __DIR__ . '/../../data/resourceloader',
'scripts' => [ 'script-nosemi.js', 'script-comment.js' ],
] );
@ -177,7 +164,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
'scripts with newline at the end are concatenated without a newline'
);
$module = new FileModule( [
$module = new ResourceLoaderFileModule( [
'localBasePath' => __DIR__ . '/../../data/resourceloader',
'scripts' => [ 'script-nosemi-nonl.js', 'script-comment-nonl.js' ],
] );
@ -194,14 +181,14 @@ class FileModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\FileModule
* @covers \MediaWiki\ResourceLoader\Module
* @covers \MediaWiki\ResourceLoader\ResourceLoader::createLoaderURL
* @covers \MediaWiki\ResourceLoader\ResourceLoader::expandUrl
* @covers ResourceLoaderFileModule
* @covers ResourceLoaderModule
* @covers ResourceLoader::createLoaderURL
* @covers ResourceLoader::expandUrl
*/
public function testGetURLsForDebug() {
$ctx = $this->getResourceLoaderContext();
$module = new FileModule( [
$module = new ResourceLoaderFileModule( [
'localBasePath' => __DIR__ . '/../../data/resourceloader',
'remoteBasePath' => '/w/something',
'styles' => [ 'simple.css' ],
@ -227,7 +214,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\FileModule
* @covers ResourceLoaderFileModule
*/
public function testGetAllSkinStyleFiles() {
$baseParams = [
@ -254,7 +241,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
],
];
$module = new FileModule( $baseParams );
$module = new ResourceLoaderFileModule( $baseParams );
$module->setName( 'testing' );
$this->assertEquals(
@ -285,8 +272,8 @@ class FileModuleTest extends ResourceLoaderTestCase {
* into the module, and have their file contents read correctly from their
* own (out-of-module) directories.
*
* @covers \MediaWiki\ResourceLoader\ResourceLoader
* @covers \MediaWiki\ResourceLoader\FileModule
* @covers ResourceLoader
* @covers ResourceLoaderFileModule
*/
public function testInjectSkinStyles() {
$moduleDir = __DIR__ . '/../../data/resourceloader';
@ -307,7 +294,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
$ctx = $this->getResourceLoaderContext( [ 'skin' => 'fakeskin' ], $rl );
$module = $rl->getModule( 'testing' );
$this->assertInstanceOf( FileModule::class, $module );
$this->assertInstanceOf( ResourceLoaderFileModule::class, $module );
$this->assertEquals(
[ 'all' => ".example { color: blue; }\n\n.override { line-height: 2; }\n" ],
$module->getStyles( $ctx )
@ -318,10 +305,10 @@ class FileModuleTest extends ResourceLoaderTestCase {
* What happens when you mix @embed and @noflip?
* This really is an integration test, but oh well.
*
* @covers \MediaWiki\ResourceLoader\FileModule::getStyles
* @covers \MediaWiki\ResourceLoader\FileModule::getStyleFiles
* @covers \MediaWiki\ResourceLoader\FileModule::readStyleFiles
* @covers \MediaWiki\ResourceLoader\FileModule::readStyleFile
* @covers ResourceLoaderFileModule::getStyles
* @covers ResourceLoaderFileModule::getStyleFiles
* @covers ResourceLoaderFileModule::readStyleFiles
* @covers ResourceLoaderFileModule::readStyleFile
*/
public function testMixedCssAnnotations() {
$basePath = __DIR__ . '/../../data/css';
@ -360,7 +347,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\FileModule
* @covers ResourceLoaderFileModule
*/
public function testCssFlipping() {
$plain = new ResourceLoaderFileTestModule( [
@ -402,23 +389,23 @@ class FileModuleTest extends ResourceLoaderTestCase {
* injects additional files when 'ResourceModuleSkinStyles' or 'OOUIThemePaths' skin attributes
* apply to a given module.
*
* @covers \MediaWiki\ResourceLoader\FilePath::getLocalBasePath
* @covers \MediaWiki\ResourceLoader\FilePath::getRemoteBasePath
* @covers ResourceLoaderFilePath::getLocalBasePath
* @covers ResourceLoaderFilePath::getRemoteBasePath
*/
public function testResourceLoaderFilePath() {
$basePath = __DIR__ . '/../../data/blahblah';
$filePath = __DIR__ . '/../../data/rlfilepath';
$testModule = new FileModule( [
$testModule = new ResourceLoaderFileModule( [
'localBasePath' => $basePath,
'remoteBasePath' => 'blahblah',
'styles' => new FilePath( 'style.css', $filePath, 'rlfilepath' ),
'styles' => new ResourceLoaderFilePath( 'style.css', $filePath, 'rlfilepath' ),
'skinStyles' => [
'vector' => new FilePath( 'skinStyle.css', $filePath, 'rlfilepath' ),
'vector' => new ResourceLoaderFilePath( 'skinStyle.css', $filePath, 'rlfilepath' ),
],
'scripts' => new FilePath( 'script.js', $filePath, 'rlfilepath' ),
'templates' => new FilePath( 'template.html', $filePath, 'rlfilepath' ),
'scripts' => new ResourceLoaderFilePath( 'script.js', $filePath, 'rlfilepath' ),
'templates' => new ResourceLoaderFilePath( 'template.html', $filePath, 'rlfilepath' ),
] );
$expectedModule = new FileModule( [
$expectedModule = new ResourceLoaderFileModule( [
'localBasePath' => $filePath,
'remoteBasePath' => 'rlfilepath',
'styles' => 'style.css',
@ -474,10 +461,10 @@ class FileModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider providerGetTemplates
* @covers \MediaWiki\ResourceLoader\FileModule::getTemplates
* @covers ResourceLoaderFileModule::getTemplates
*/
public function testGetTemplates( $module, $expected ) {
$rl = new FileModule( $module );
$rl = new ResourceLoaderFileModule( $module );
$rl->setName( 'testing' );
if ( $expected === false ) {
@ -489,7 +476,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\FileModule::stripBom
* @covers ResourceLoaderFileModule::stripBom
*/
public function testBomConcatenation() {
$basePath = __DIR__ . '/../../data/css';
@ -513,7 +500,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\FileModule
* @covers ResourceLoaderFileModule
*/
public function testLessFileCompilation() {
$context = $this->getResourceLoaderContext();
@ -613,8 +600,8 @@ class FileModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider provideGetVersionHash
* @covers \MediaWiki\ResourceLoader\FileModule::getDefinitionSummary
* @covers \MediaWiki\ResourceLoader\FileModule::getFileHashes
* @covers ResourceLoaderFileModule::getDefinitionSummary
* @covers ResourceLoaderFileModule::getFileHashes
*/
public function testGetVersionHash( $a, $b, $isEqual ) {
$context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] );
@ -800,7 +787,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
'packageFiles' => [
[ 'name' => 'dynamic.js', 'callback' => static function ( $context ) {
$file = $context->getLanguage() === 'fy' ? 'script-comment.js' : 'script-nosemi.js';
return new FilePath( $file );
return new ResourceLoaderFilePath( $file );
} ]
]
],
@ -822,7 +809,7 @@ class FileModuleTest extends ResourceLoaderTestCase {
'packageFiles' => [
[ 'name' => 'dynamic.js', 'callback' => static function ( $context ) {
$file = $context->getLanguage() === 'fy' ? 'script-comment.js' : 'script-nosemi.js';
return new FilePath( $file );
return new ResourceLoaderFilePath( $file );
} ]
]
],
@ -944,12 +931,12 @@ class FileModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider provideGetScriptPackageFiles
* @covers \MediaWiki\ResourceLoader\FileModule::getScript
* @covers \MediaWiki\ResourceLoader\FileModule::getPackageFiles
* @covers \MediaWiki\ResourceLoader\FileModule::expandPackageFiles
* @covers ResourceLoaderFileModule::getScript
* @covers ResourceLoaderFileModule::getPackageFiles
* @covers ResourceLoaderFileModule::expandPackageFiles
*/
public function testGetScriptPackageFiles( $moduleDefinition, $expected, $contextOptions = [] ) {
$module = new FileModule( $moduleDefinition );
$module = new ResourceLoaderFileModule( $moduleDefinition );
$context = $this->getResourceLoaderContext( $contextOptions );
$module->setConfig( $context->getResourceLoader()->getConfig() );
if ( isset( $moduleDefinition['name'] ) ) {
@ -966,14 +953,14 @@ class FileModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\FileModule::requiresES6
* @covers ResourceLoaderFileModule::requiresES6
*/
public function testRequiresES6() {
$module = new FileModule();
$module = new ResourceLoaderFileModule();
$this->assertFalse( $module->requiresES6(), 'requiresES6 defaults to false' );
$module = new FileModule( [ 'es6' => false ] );
$module = new ResourceLoaderFileModule( [ 'es6' => false ] );
$this->assertFalse( $module->requiresES6(), 'requiresES6 is false when set to false' );
$module = new FileModule( [ 'es6' => true ] );
$module = new ResourceLoaderFileModule( [ 'es6' => true ] );
$this->assertTrue( $module->requiresES6(), 'requiresES6 is true when set to true' );
}
}

View file

@ -1,20 +1,11 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use EmptyResourceLoader;
use FauxRequest;
use MediaWiki\ResourceLoader\FilePath;
use MediaWiki\ResourceLoader\Image;
use MediaWiki\ResourceLoader\ImageModule;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use ResourceLoaderTestCase;
use Wikimedia\TestingAccessWrapper;
/**
* @group ResourceLoader
*/
class ImageModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderImageModuleTest extends ResourceLoaderTestCase {
public static $commonImageData = [
'abc' => 'abc.gif',
@ -68,7 +59,7 @@ class ImageModuleTest extends ResourceLoaderTestCase {
return [
[
[
'class' => ImageModule::class,
'class' => ResourceLoaderImageModule::class,
'prefix' => 'oo-ui-icon',
'variants' => self::$commonImageVariants,
'images' => self::$commonImageData,
@ -109,7 +100,7 @@ class ImageModuleTest extends ResourceLoaderTestCase {
],
[
[
'class' => ImageModule::class,
'class' => ResourceLoaderImageModule::class,
'selectorWithoutVariant' => '.mw-ui-icon-{name}:after, .mw-ui-icon-{name}:before',
'selectorWithVariant' =>
'.mw-ui-icon-{name}-{variant}:after, .mw-ui-icon-{name}-{variant}:before',
@ -159,27 +150,27 @@ class ImageModuleTest extends ResourceLoaderTestCase {
* This mimics modules modified by skins using 'ResourceModuleSkinStyles' and 'OOUIThemePaths'
* skin attributes.
*
* @covers \MediaWiki\ResourceLoader\FilePath::getLocalBasePath
* @covers \MediaWiki\ResourceLoader\FilePath::getRemoteBasePath
* @covers ResourceLoaderFilePath::getLocalBasePath
* @covers ResourceLoaderFilePath::getRemoteBasePath
*/
public function testResourceLoaderFilePath() {
$basePath = __DIR__ . '/../../data/blahblah';
$filePath = __DIR__ . '/../../data/rlfilepath';
$testModule = new ImageModule( [
$testModule = new ResourceLoaderImageModule( [
'localBasePath' => $basePath,
'remoteBasePath' => 'blahblah',
'prefix' => 'foo',
'images' => [
'eye' => new FilePath( 'eye.svg', $filePath, 'rlfilepath' ),
'eye' => new ResourceLoaderFilePath( 'eye.svg', $filePath, 'rlfilepath' ),
'flag' => [
'file' => [
'ltr' => new FilePath( 'flag-ltr.svg', $filePath, 'rlfilepath' ),
'rtl' => new FilePath( 'flag-rtl.svg', $filePath, 'rlfilepath' ),
'ltr' => new ResourceLoaderFilePath( 'flag-ltr.svg', $filePath, 'rlfilepath' ),
'rtl' => new ResourceLoaderFilePath( 'flag-rtl.svg', $filePath, 'rlfilepath' ),
],
],
],
] );
$expectedModule = new ImageModule( [
$expectedModule = new ResourceLoaderImageModule( [
'localBasePath' => $filePath,
'remoteBasePath' => 'rlfilepath',
'prefix' => 'foo',
@ -204,10 +195,10 @@ class ImageModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider providerGetModules
* @covers \MediaWiki\ResourceLoader\ImageModule::getStyles
* @covers ResourceLoaderImageModule::getStyles
*/
public function testGetStyles( $module, $expected ) {
$module = new ImageModuleTestable(
$module = new ResourceLoaderImageModuleTestable(
$module,
__DIR__ . '/../../data/resourceloader'
);
@ -216,7 +207,7 @@ class ImageModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\ResourceLoaderContext::getImageObj
* @covers ResourceLoaderContext::getImageObj
*/
public function testContext() {
$context = new ResourceLoaderContext( new EmptyResourceLoader(), new FauxRequest() );
@ -235,7 +226,7 @@ class ImageModuleTest extends ResourceLoaderTestCase {
$rl = new EmptyResourceLoader();
$rl->register( 'test', [
'class' => ImageModule::class,
'class' => ResourceLoaderImageModule::class,
'prefix' => 'test',
'images' => [ 'example' => 'example.png' ],
] );
@ -247,7 +238,7 @@ class ImageModuleTest extends ResourceLoaderTestCase {
$rl = new EmptyResourceLoader();
$rl->register( 'test', [
'class' => ImageModule::class,
'class' => ResourceLoaderImageModule::class,
'prefix' => 'test',
'images' => [ 'example' => 'example.png' ],
] );
@ -255,7 +246,7 @@ class ImageModuleTest extends ResourceLoaderTestCase {
'modules' => 'test',
'image' => 'example',
] ) );
$this->assertInstanceOf( Image::class, $context->getImageObj() );
$this->assertInstanceOf( ResourceLoaderImage::class, $context->getImageObj() );
}
public static function providerGetStyleDeclarations() {
@ -280,10 +271,10 @@ TEXT
/**
* @dataProvider providerGetStyleDeclarations
* @covers \MediaWiki\ResourceLoader\ImageModule::getStyleDeclarations
* @covers ResourceLoaderImageModule::getStyleDeclarations
*/
public function testGetStyleDeclarations( $dataUriReturnValue, $expected ) {
$module = TestingAccessWrapper::newFromObject( new ImageModule() );
$module = TestingAccessWrapper::newFromObject( new ResourceLoaderImageModule() );
$context = $this->getResourceLoaderContext();
$image = $this->getImageMock( $context, $dataUriReturnValue );
@ -297,7 +288,7 @@ TEXT
}
private function getImageMock( ResourceLoaderContext $context, $dataUriReturnValue ) {
$image = $this->getMockBuilder( Image::class )
$image = $this->getMockBuilder( ResourceLoaderImage::class )
->disableOriginalConstructor()
->getMock();
$image->method( 'getDataUri' )
@ -312,7 +303,7 @@ TEXT
}
}
class ImageModuleTestable extends ImageModule {
class ResourceLoaderImageModuleTestable extends ResourceLoaderImageModule {
/**
* Replace with a stub to make test cases easier to write.
* @inheritDoc

View file

@ -1,16 +1,10 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use MediaWiki\ResourceLoader\LessVarFileModule;
use ReflectionMethod;
use ResourceLoaderTestCase;
/**
* @group ResourceLoader
* @covers \MediaWiki\ResourceLoader\LessVarFileModule
* @covers ResourceLoaderLessVarFileModule
*/
class LessVarFileModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderLessVarFileModuleTest extends ResourceLoaderTestCase {
public static function providerWrapAndEscapeMessage() {
return [
@ -41,10 +35,10 @@ class LessVarFileModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider providerWrapAndEscapeMessage
* @covers \MediaWiki\ResourceLoader\LessVarFileModule::wrapAndEscapeMessage
* @covers ResourceLoaderLessVarFileModule::wrapAndEscapeMessage
*/
public function testEscapeMessage( $msg, $expected ) {
$method = new ReflectionMethod( LessVarFileModule::class, 'wrapAndEscapeMessage' );
$method = new ReflectionMethod( ResourceLoaderLessVarFileModule::class, 'wrapAndEscapeMessage' );
$method->setAccessible( true );
$this->assertEquals( $expected, $method->invoke( null, $msg ) );
}
@ -52,7 +46,7 @@ class LessVarFileModuleTest extends ResourceLoaderTestCase {
public function testLessMessagesFound() {
$context = $this->getResourceLoaderContext( 'qqx' );
$basePath = __DIR__ . '/../../data/less';
$module = new LessVarFileModule( [
$module = new ResourceLoaderLessVarFileModule( [
'localBasePath' => $basePath,
'styles' => [ 'less-messages.less' ],
'lessMessages' => [ 'pieday' ],
@ -66,7 +60,7 @@ class LessVarFileModuleTest extends ResourceLoaderTestCase {
public function testLessMessagesFailGraceful() {
$context = $this->getResourceLoaderContext( 'qqx' );
$basePath = __DIR__ . '/../../data/less';
$module = new LessVarFileModule( [
$module = new ResourceLoaderLessVarFileModule( [
'localBasePath' => $basePath,
'styles' => [ 'less-messages.less' ],
'lessMessages' => [ 'pieday' ],

View file

@ -1,20 +1,9 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use LogicException;
use MediaWiki\ResourceLoader\FileModule;
use MediaWiki\ResourceLoader\Module;
use MediaWiki\ResourceLoader\ResourceLoader;
use ReflectionMethod;
use ResourceLoaderFileModuleTestingSubclass;
use ResourceLoaderTestCase;
use ResourceLoaderTestModule;
class ModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
/**
* @covers \MediaWiki\ResourceLoader\Module::getVersionHash
* @covers ResourceLoaderModule::getVersionHash
*/
public function testGetVersionHash() {
$context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] );
@ -25,11 +14,11 @@ class ModuleTest extends ResourceLoaderTestCase {
'messages' => [ 'hello', 'world' ],
];
$module = new FileModule( $baseParams );
$module = new ResourceLoaderFileModule( $baseParams );
$version = json_encode( $module->getVersionHash( $context ) );
// Exactly the same
$module = new FileModule( $baseParams );
$module = new ResourceLoaderFileModule( $baseParams );
$this->assertEquals(
$version,
json_encode( $module->getVersionHash( $context ) ),
@ -37,7 +26,7 @@ class ModuleTest extends ResourceLoaderTestCase {
);
// Re-order dependencies
$module = new FileModule( [
$module = new ResourceLoaderFileModule( [
'dependencies' => [ 'mediawiki', 'jquery' ],
] + $baseParams );
$this->assertEquals(
@ -47,7 +36,7 @@ class ModuleTest extends ResourceLoaderTestCase {
);
// Re-order messages
$module = new FileModule( [
$module = new ResourceLoaderFileModule( [
'messages' => [ 'world', 'hello' ],
] + $baseParams );
$this->assertEquals(
@ -57,7 +46,7 @@ class ModuleTest extends ResourceLoaderTestCase {
);
// Re-order scripts
$module = new FileModule( [
$module = new ResourceLoaderFileModule( [
'scripts' => [ 'bar.js', 'foo.js' ],
] + $baseParams );
$this->assertNotEquals(
@ -76,7 +65,7 @@ class ModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\Module::getVersionHash
* @covers ResourceLoaderModule::getVersionHash
*/
public function testGetVersionHash_debug() {
$module = new ResourceLoaderTestModule( [ 'script' => 'foo();' ] );
@ -85,7 +74,7 @@ class ModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\Module::getVersionHash
* @covers ResourceLoaderModule::getVersionHash
*/
public function testGetVersionHash_length() {
$context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] );
@ -97,11 +86,11 @@ class ModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\Module::getVersionHash
* @covers ResourceLoaderModule::getVersionHash
*/
public function testGetVersionHash_parentDefinition() {
$context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] );
$module = $this->getMockBuilder( Module::class )
$module = $this->getMockBuilder( ResourceLoaderModule::class )
->onlyMethods( [ 'getDefinitionSummary' ] )->getMock();
$module->method( 'getDefinitionSummary' )->willReturn( [ 'a' => 'summary' ] );
@ -111,9 +100,9 @@ class ModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\Module::getScriptURLsForDebug
* @covers \MediaWiki\ResourceLoader\ResourceLoader
* @covers \MediaWiki\ResourceLoader\Module::getScriptURLsForDebug
* @covers ResourceLoaderModule::getScriptURLsForDebug
* @covers ResourceLoader
* @covers ResourceLoaderModule::getScriptURLsForDebug
*/
public function testGetURLsForDebug() {
$module = new ResourceLoaderTestModule( [
@ -156,7 +145,7 @@ class ModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\Module::validateScriptFile
* @covers ResourceLoaderModule::validateScriptFile
*/
public function testValidateScriptFile() {
$this->setMwGlobals( 'wgResourceLoaderValidateJS', true );
@ -222,7 +211,7 @@ class ModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider provideBuildContentScripts
* @covers \MediaWiki\ResourceLoader\Module::buildContent
* @covers ResourceLoaderModule::buildContent
*/
public function testBuildContentScripts( $raw, $build, $message = '' ) {
$context = $this->getResourceLoaderContext();
@ -238,13 +227,13 @@ class ModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\Module::getRelativePaths
* @covers \MediaWiki\ResourceLoader\Module::expandRelativePaths
* @covers ResourceLoaderModule::getRelativePaths
* @covers ResourceLoaderModule::expandRelativePaths
*/
public function testPlaceholderize() {
$getRelativePaths = new ReflectionMethod( Module::class, 'getRelativePaths' );
$getRelativePaths = new ReflectionMethod( ResourceLoaderModule::class, 'getRelativePaths' );
$getRelativePaths->setAccessible( true );
$expandRelativePaths = new ReflectionMethod( Module::class, 'expandRelativePaths' );
$expandRelativePaths = new ReflectionMethod( ResourceLoaderModule::class, 'expandRelativePaths' );
$expandRelativePaths->setAccessible( true );
$this->setMwGlobals( [
@ -275,8 +264,8 @@ class ModuleTest extends ResourceLoaderTestCase {
}
/**
* @covers \MediaWiki\ResourceLoader\Module::getHeaders
* @covers \MediaWiki\ResourceLoader\Module::getPreloadLinks
* @covers ResourceLoaderModule::getHeaders
* @covers ResourceLoaderModule::getPreloadLinks
*/
public function testGetHeaders() {
$context = $this->getResourceLoaderContext();

View file

@ -1,25 +1,19 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use ExtensionRegistry;
use MediaWiki\ResourceLoader\OOUIImageModule;
use Psr\Container\ContainerInterface;
use ResourceLoaderTestCase;
use SkinFactory;
use Wikimedia\ObjectFactory\ObjectFactory;
/**
* @group ResourceLoader
*/
class OOUIImageModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderOOUIImageModuleTest extends ResourceLoaderTestCase {
/**
* @covers \MediaWiki\ResourceLoader\OOUIImageModule::loadFromDefinition
* @covers ResourceLoaderOOUIImageModule::loadFromDefinition
*/
public function testNonDefaultSkin() {
$module = new OOUIImageModule( [
'class' => OOUIImageModule::class,
$module = new ResourceLoaderOOUIImageModule( [
'class' => ResourceLoaderOOUIImageModule::class,
'name' => 'icons',
'rootPath' => 'tests/phpunit/data/resourceloader/oouiimagemodule',
] );

View file

@ -1,21 +1,11 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use Generator;
use HashConfig;
use InvalidArgumentException;
use MediaWiki\ResourceLoader\FilePath;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\ResourceLoader\SkinModule;
use ReflectionClass;
use ResourceLoaderTestCase;
use Wikimedia\TestingAccessWrapper;
/**
* @group ResourceLoader
*/
class SkinModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderSkinModuleTest extends ResourceLoaderTestCase {
public static function provideApplyFeaturesCompatibility() {
return [
[
@ -110,11 +100,11 @@ class SkinModuleTest extends ResourceLoaderTestCase {
/**
* @dataProvider provideApplyFeaturesCompatibility
* @covers \MediaWiki\ResourceLoader\SkinModule::applyFeaturesCompatibility
* @covers ResourceLoaderSkinModule::applyFeaturesCompatibility
*/
public function testApplyFeaturesCompatibility( array $features, array $expected, bool $optInPolicy, $msg ) {
// Test protected method
$class = TestingAccessWrapper::newFromClass( SkinModule::class );
$class = TestingAccessWrapper::newFromClass( ResourceLoaderSkinModule::class );
$actual = $class->applyFeaturesCompatibility( $features, $optInPolicy );
$this->assertEquals( $expected, $actual, $msg );
}
@ -235,10 +225,10 @@ CSS
/**
* @dataProvider provideGetStyles
* @covers \MediaWiki\ResourceLoader\SkinModule
* @covers ResourceLoaderSkinModule
*/
public function testGetStyles( $parent, $logo, $expected ) {
$module = $this->getMockBuilder( SkinModule::class )
$module = $this->getMockBuilder( ResourceLoaderSkinModule::class )
->onlyMethods( [ 'readStyleFiles', 'getLogoData' ] )
->getMock();
$module->expects( $this->once() )->method( 'readStyleFiles' )
@ -260,18 +250,18 @@ CSS
/**
* @dataProvider provideGetAvailableLogos
* @covers \MediaWiki\ResourceLoader\SkinModule::getAvailableLogos
* @covers ResourceLoaderSkinModule::getAvailableLogos
*/
public function testGetAvailableLogos( $config, $expected ) {
$logos = SkinModule::getAvailableLogos( new HashConfig( $config ) );
$logos = ResourceLoaderSkinModule::getAvailableLogos( new HashConfig( $config ) );
$this->assertSame( $expected, $logos );
}
/**
* @covers \MediaWiki\ResourceLoader\SkinModule::getAvailableLogos
* @covers ResourceLoaderSkinModule::getAvailableLogos
*/
public function testGetAvailableLogosRuntimeException() {
$logos = SkinModule::getAvailableLogos( new HashConfig( [
$logos = ResourceLoaderSkinModule::getAvailableLogos( new HashConfig( [
'Logo' => false,
'Logos' => false,
'LogoHD' => false,
@ -280,10 +270,10 @@ CSS
}
/**
* @covers \MediaWiki\ResourceLoader\SkinModule::isKnownEmpty
* @covers ResourceLoaderSkinModule::isKnownEmpty
*/
public function testIsKnownEmpty() {
$module = $this->getMockBuilder( SkinModule::class )
$module = $this->getMockBuilder( ResourceLoaderSkinModule::class )
->disableOriginalConstructor()->onlyMethods( [] )->getMock();
$ctx = $this->getMockBuilder( ResourceLoaderContext::class )
->disableOriginalConstructor()->getMock();
@ -293,11 +283,11 @@ CSS
/**
* @dataProvider provideGetLogoData
* @covers \MediaWiki\ResourceLoader\SkinModule::getLogoData
* @covers ResourceLoaderSkinModule::getLogoData
*/
public function testGetLogoData( $config, $expected ) {
// Allow testing of protected method
$module = TestingAccessWrapper::newFromObject( new SkinModule() );
$module = TestingAccessWrapper::newFromObject( new ResourceLoaderSkinModule() );
$this->assertEquals(
$expected,
@ -408,14 +398,14 @@ CSS
/**
* @dataProvider providePreloadLinks
* @covers \MediaWiki\ResourceLoader\SkinModule::getPreloadLinks
* @covers \MediaWiki\ResourceLoader\SkinModule::getLogoData
* @covers ResourceLoaderSkinModule::getPreloadLinks
* @covers ResourceLoaderSkinModule::getLogoData
*/
public function testPreloadLinkHeaders( $config, $lang, $result ) {
$ctx = $this->getMockBuilder( ResourceLoaderContext::class )
->disableOriginalConstructor()->getMock();
$ctx->method( 'getLanguage' )->willReturn( $lang );
$module = new SkinModule();
$module = new ResourceLoaderSkinModule();
$module->setConfig( new HashConfig( $config + [
'BaseDirectory' => '/dummy',
'ResourceBasePath' => '/w',
@ -511,10 +501,10 @@ CSS
}
/**
* @covers \MediaWiki\ResourceLoader\SkinModule::getPreloadLinks
* @covers ResourceLoaderSkinModule::getPreloadLinks
*/
public function testNoPreloadLogos() {
$module = new SkinModule( [ 'features' => [ 'logo' => false ] ] );
$module = new ResourceLoaderSkinModule( [ 'features' => [ 'logo' => false ] ] );
$context =
$this->getMockBuilder( ResourceLoaderContext::class )
->disableOriginalConstructor()
@ -524,10 +514,10 @@ CSS
}
/**
* @covers \MediaWiki\ResourceLoader\SkinModule::getPreloadLinks
* @covers ResourceLoaderSkinModule::getPreloadLinks
*/
public function testPreloadLogos() {
$module = new SkinModule();
$module = new ResourceLoaderSkinModule();
$module->setConfig( self::getMinimalConfig() );
$context = $this->getMockBuilder( ResourceLoaderContext::class )
->disableOriginalConstructor()->getMock();
@ -537,7 +527,7 @@ CSS
}
/**
* Covers SkinModule::FEATURE_FILES, but not annotatable.
* Covers ResourceLoaderSkinModule::FEATURE_FILES, but not annotatable.
*
* @dataProvider provideFeatureFiles
* @coversNothing
@ -551,7 +541,7 @@ CSS
public function provideFeatureFiles(): Generator {
global $IP;
$featureFiles = ( new ReflectionClass( SkinModule::class ) )
$featureFiles = ( new ReflectionClass( ResourceLoaderSkinModule::class ) )
->getConstant( 'FEATURE_FILES' );
foreach ( $featureFiles as $feature => $files ) {
@ -565,20 +555,20 @@ CSS
public static function provideGetStyleFilesFeatureStylesOrder() {
global $IP;
$featureFiles = ( new ReflectionClass( SkinModule::class ) )
$featureFiles = ( new ReflectionClass( ResourceLoaderSkinModule::class ) )
->getConstant( 'FEATURE_FILES' );
$normalizePath = new FilePath(
$normalizePath = new ResourceLoaderFilePath(
$featureFiles['normalize']['all'][0],
$IP,
'/w'
);
$elementsPath = new FilePath(
$elementsPath = new ResourceLoaderFilePath(
$featureFiles['elements']['screen'][0],
$IP,
'/w'
);
$cbPath = new FilePath(
$cbPath = new ResourceLoaderFilePath(
$featureFiles['content-body']['screen'][0],
$IP,
'/w'
@ -636,7 +626,7 @@ CSS
}
/**
* @covers \MediaWiki\ResourceLoader\SkinModule::getStyleFiles
* @covers ResourceLoaderSkinModule::getStyleFiles
* @dataProvider provideGetStyleFilesFeatureStylesOrder
* @param array $features
* @param array $styles
@ -648,7 +638,7 @@ CSS
$features, $styles, $expectedAllStyles, $expectedScreenStyles, $msg
): void {
$ctx = $this->createMock( ResourceLoaderContext::class );
$module = new SkinModule(
$module = new ResourceLoaderSkinModule(
[
// The ordering should be controlled by ResourceLoaderSkinModule
// `normalize` will be outputted before `elements` despite the ordering
@ -694,13 +684,13 @@ CSS
}
/**
* @covers \MediaWiki\ResourceLoader\SkinModule
* @covers ResourceLoaderSkinModule
* @dataProvider provideInvalidFeatures
*/
public function testConstructInvalidFeatures( array $features ) {
$this->expectException( InvalidArgumentException::class );
$this->expectExceptionMessage( "Feature 'unknown' is not recognised" );
$module = new SkinModule( [
$module = new ResourceLoaderSkinModule( [
'features' => $features,
] );
}

View file

@ -1,15 +1,6 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use Exception;
use MediaWiki\ResourceLoader\Module;
use MediaWiki\ResourceLoader\StartUpModule;
use ResourceLoaderStartUpModule;
use ResourceLoaderTestCase;
use ResourceLoaderTestModule;
class StartUpModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderStartUpModuleTest extends ResourceLoaderTestCase {
protected static function expandPlaceholders( $text ) {
return strtr( $text, [
@ -326,15 +317,15 @@ mw.loader.register([
'test.blank' => [ 'class' => ResourceLoaderTestModule::class ],
'test.core-generated' => [
'class' => ResourceLoaderTestModule::class,
'origin' => Module::ORIGIN_CORE_INDIVIDUAL
'origin' => ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL
],
'test.sitewide' => [
'class' => ResourceLoaderTestModule::class,
'origin' => Module::ORIGIN_USER_SITEWIDE
'origin' => ResourceLoaderModule::ORIGIN_USER_SITEWIDE
],
'test.user' => [
'class' => ResourceLoaderTestModule::class,
'origin' => Module::ORIGIN_USER_INDIVIDUAL
'origin' => ResourceLoaderModule::ORIGIN_USER_INDIVIDUAL
],
],
'out' => '
@ -368,15 +359,15 @@ mw.loader.register([
'test.blank' => [ 'class' => ResourceLoaderTestModule::class ],
'test.core-generated' => [
'class' => ResourceLoaderTestModule::class,
'origin' => Module::ORIGIN_CORE_INDIVIDUAL
'origin' => ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL
],
'test.sitewide' => [
'class' => ResourceLoaderTestModule::class,
'origin' => Module::ORIGIN_USER_SITEWIDE
'origin' => ResourceLoaderModule::ORIGIN_USER_SITEWIDE
],
'test.user' => [
'class' => ResourceLoaderTestModule::class,
'origin' => Module::ORIGIN_USER_INDIVIDUAL
'origin' => ResourceLoaderModule::ORIGIN_USER_INDIVIDUAL
],
],
'out' => '
@ -684,8 +675,8 @@ mw.loader.register([
/**
* @dataProvider provideGetModuleRegistrations
* @covers \MediaWiki\ResourceLoader\StartUpModule
* @covers \MediaWiki\ResourceLoader\ResourceLoader::makeLoaderRegisterScript
* @covers ResourceLoaderStartUpModule
* @covers ResourceLoader::makeLoaderRegisterScript
*/
public function testGetModuleRegistrations( $case ) {
$extraQuery = $case['extraQuery'] ?? [];
@ -695,13 +686,13 @@ mw.loader.register([
$rl->addSource( $case['sources'] );
}
$rl->register( $case['modules'] );
$module = new StartUpModule();
$module = new ResourceLoaderStartUpModule();
$module->setConfig( $rl->getConfig() );
$out = ltrim( $case['out'], "\n" );
// Disable log from getModuleRegistrations via MWExceptionHandler
// for case where getVersionHash() is expected to throw.
$this->setLogger( 'exception', new \Psr\Log\NullLogger() );
$this->setLogger( 'exception', new Psr\Log\NullLogger() );
$this->assertEquals(
self::expandPlaceholders( $out ),
@ -759,8 +750,8 @@ mw.loader.register([
/**
* @dataProvider provideGetModuleRegistrationsProduction
* @covers \MediaWiki\ResourceLoader\StartUpModule
* @covers \MediaWiki\ResourceLoader\ResourceLoader
* @covers ResourceLoaderStartUpModule
* @covers ResourceLoader
*/
public function testGetModuleRegistrationsProduction( array $case ) {
$context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] );
@ -771,7 +762,7 @@ mw.loader.register([
$out = ltrim( $case['out'], "\n" );
// Tolerate exception logs for cases that expect getVersionHash() to throw.
$this->setLogger( 'exception', new \Psr\Log\NullLogger() );
$this->setLogger( 'exception', new Psr\Log\NullLogger() );
$this->assertEquals(
self::expandPlaceholders( $out ),
@ -800,7 +791,7 @@ mw.loader.register([
}
/**
* @covers \MediaWiki\ResourceLoader\StartUpModule::getModuleRegistrations
* @covers ResourceLoaderStartUpModule::getModuleRegistrations
* @dataProvider provideRegistrations
*/
public function testRegistrationsMinified( $modules ) {
@ -826,7 +817,7 @@ mw.loader.register([
}
/**
* @covers \MediaWiki\ResourceLoader\StartUpModule::getModuleRegistrations
* @covers ResourceLoaderStartUpModule::getModuleRegistrations
* @dataProvider provideRegistrations
*/
public function testRegistrationsUnminified( $modules ) {
@ -866,7 +857,7 @@ mw.loader.register([
}
/**
* @covers \MediaWiki\ResourceLoader\StartUpModule
* @covers ResourceLoaderStartupModule
*/
public function testGetVersionHash_varyConfig() {
$context = $this->getResourceLoaderContext();
@ -887,7 +878,7 @@ mw.loader.register([
}
/**
* @covers \MediaWiki\ResourceLoader\StartUpModule
* @covers ResourceLoaderStartupModule
*/
public function testGetVersionHash_varyModule() {
$context1 = $this->getResourceLoaderContext( [
@ -940,7 +931,7 @@ mw.loader.register([
}
/**
* @covers \MediaWiki\ResourceLoader\StartUpModule
* @covers ResourceLoaderStartUpModule
*/
public function testGetVersionHash_varyDeps() {
$context = $this->getResourceLoaderContext( [ 'debug' => 'false' ] );

View file

@ -1,28 +1,10 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use EmptyResourceLoader;
use Exception;
use ExtensionRegistry;
use FauxRequest;
use InvalidArgumentException;
use MediaWiki\ResourceLoader\FileModule;
use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\ResourceLoader\SkinModule;
use MediaWiki\ResourceLoader\StartUpModule;
use MediaWiki\User\StaticUserOptionsLookup;
use NullStatsdDataFactory;
use ResourceLoaderTestCase;
use ResourceLoaderTestModule;
use RuntimeException;
use UnexpectedValueException;
use Wikimedia\TestingAccessWrapper;
use XmlJsCode;
/**
* @covers \MediaWiki\ResourceLoader\ResourceLoader
* @covers ResourceLoader
*/
class ResourceLoaderTest extends ResourceLoaderTestCase {
@ -129,15 +111,15 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
}
public function testRegisterDuplicate() {
$logger = $this->getMockBuilder( \Psr\Log\LoggerInterface::class )->getMock();
$logger = $this->getMockBuilder( Psr\Log\LoggerInterface::class )->getMock();
$logger->expects( $this->once() )
->method( 'warning' );
$resourceLoader = new EmptyResourceLoader( null, $logger );
$resourceLoader->register( 'test', [ 'class' => SkinModule::class ] );
$resourceLoader->register( 'test', [ 'class' => StartUpModule::class ] );
$resourceLoader->register( 'test', [ 'class' => ResourceLoaderSkinModule::class ] );
$resourceLoader->register( 'test', [ 'class' => ResourceLoaderStartUpModule::class ] );
$this->assertInstanceOf(
StartUpModule::class,
ResourceLoaderStartUpModule::class,
$resourceLoader->getModule( 'test' ),
'last one wins'
);
@ -193,7 +175,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
$rl = new EmptyResourceLoader();
$rl->register( 'test', [] );
$this->assertInstanceOf(
FileModule::class,
ResourceLoaderFileModule::class,
$rl->getModule( 'test' ),
'Array-style module registrations default to FileModule'
);
@ -253,7 +235,7 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
$this->getServiceContainer()->resetServiceForTesting( 'SkinFactory' );
$context = $this->getResourceLoaderContext( [ 'skin' => $skin ] );
$module = new FileModule( [
$module = new ResourceLoaderFileModule( [
'localBasePath' => __DIR__ . '/../../data/less',
'styles' => [ 'use-variables.less' ],
] );
@ -843,7 +825,7 @@ END
);
// Disable log from makeModuleResponse via outputErrorAndLog
$this->setLogger( 'exception', new \Psr\Log\NullLogger() );
$this->setLogger( 'exception', new Psr\Log\NullLogger() );
$response = $rl->makeModuleResponse( $context, $modules );
$errors = $rl->getErrors();
@ -881,7 +863,7 @@ END
);
// Disable log from makeModuleResponse via outputErrorAndLog
$this->setLogger( 'exception', new \Psr\Log\NullLogger() );
$this->setLogger( 'exception', new Psr\Log\NullLogger() );
$response = $rl->makeModuleResponse( $context, $modules );
$errors = $rl->getErrors();
@ -932,7 +914,7 @@ END
);
// Disable log from makeModuleResponse via outputErrorAndLog
$this->setLogger( 'exception', new \Psr\Log\NullLogger() );
$this->setLogger( 'exception', new Psr\Log\NullLogger() );
$modules = [ 'startup' => $rl->getModule( 'startup' ) ];
$response = $rl->makeModuleResponse( $context, $modules );
@ -1106,7 +1088,7 @@ END
] );
$context = $this->getResourceLoaderContext( [ 'modules' => 'test' ], $rl );
// Disable logging from outputErrorAndLog
$this->setLogger( 'exception', new \Psr\Log\NullLogger() );
$this->setLogger( 'exception', new Psr\Log\NullLogger() );
$rl->expects( $this->once() )->method( 'preloadModuleInfo' )
->willThrowException( new Exception( 'Preload error' ) );

View file

@ -1,22 +1,15 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\ResourceLoader\UserOptionsModule;
use MediaWikiIntegrationTestCase;
use User;
/**
* @covers \MediaWiki\ResourceLoader\UserOptionsModule
* @covers ResourceLoaderUserOptionsModule
*/
class UserOptionsModuleTest extends MediaWikiIntegrationTestCase {
class ResourceLoaderUserOptionsModuleTest extends MediaWikiIntegrationTestCase {
public function testGetScript() {
$module = new UserOptionsModule();
$module = new ResourceLoaderUserOptionsModule();
$hooks = $this->createHookContainer();
$module->setHookContainer( $hooks );
$options = new \MediaWiki\User\StaticUserOptionsLookup(
$options = new MediaWiki\User\StaticUserOptionsLookup(
[
'Example1' => [],
'Example2' => [ 'y' => '1', 'userjs-extra' => '1' ],
@ -73,7 +66,7 @@ class UserOptionsModuleTest extends MediaWikiIntegrationTestCase {
}
public function testResourceLoaderExcludeUserOptionsHook() {
$module = new UserOptionsModule();
$module = new ResourceLoaderUserOptionsModule();
$hooks = $this->createHookContainer( [
'ResourceLoaderExcludeUserOptions' => static function (
array &$keysToExclude,
@ -84,7 +77,7 @@ class UserOptionsModuleTest extends MediaWikiIntegrationTestCase {
}
] );
$module->setHookContainer( $hooks );
$options = new \MediaWiki\User\StaticUserOptionsLookup(
$options = new MediaWiki\User\StaticUserOptionsLookup(
[
'User' => [ 'include-explicit' => '1', 'exclude-explicit' => '1' ],
],

View file

@ -1,44 +1,24 @@
<?php
namespace MediaWiki\Tests\ResourceLoader;
use Config;
use Content;
use CssContent;
use EmptyResourceLoader;
use FauxRequest;
use HashConfig;
use JavaScriptContent;
use JavaScriptContentHandler;
use LinkCacheTestTrait;
use MediaWiki\Page\PageIdentity;
use MediaWiki\Page\PageIdentityValue;
use MediaWiki\Page\PageRecord;
use MediaWiki\Page\PageStore;
use MediaWiki\ResourceLoader\DerivativeResourceLoaderContext;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWiki\ResourceLoader\WikiModule;
use ReflectionMethod;
use ResourceLoaderTestCase;
use Title;
use TitleValue;
use WikiMap;
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\TestingAccessWrapper;
use WikitextContent;
/**
* @covers \MediaWiki\ResourceLoader\WikiModule
* @covers ResourceLoaderWikiModule
*/
class WikiModuleTest extends ResourceLoaderTestCase {
class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
use LinkCacheTestTrait;
/**
* @dataProvider provideConstructor
*/
public function testConstructor( $params ) {
$module = new WikiModule( $params );
$this->assertInstanceOf( WikiModule::class, $module );
$module = new ResourceLoaderWikiModule( $params );
$this->assertInstanceOf( ResourceLoaderWikiModule::class, $module );
}
public static function provideConstructor() {
@ -49,7 +29,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
}
private function prepareTitleInfo( array $mockInfo ) {
$module = TestingAccessWrapper::newFromClass( WikiModule::class );
$module = TestingAccessWrapper::newFromClass( ResourceLoaderWikiModule::class );
$info = [];
foreach ( $mockInfo as $key => $val ) {
$info[ $module->makeTitleKey( Title::newFromText( $key ) ) ] = $val;
@ -61,7 +41,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
* @dataProvider provideGetPages
*/
public function testGetPages( $params, Config $config, $expected ) {
$module = new WikiModule( $params );
$module = new ResourceLoaderWikiModule( $params );
$module->setConfig( $config );
// Because getPages is protected..
@ -107,7 +87,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
* @dataProvider provideGetGroup
*/
public function testGetGroup( $params, $expected ) {
$module = new WikiModule( $params );
$module = new ResourceLoaderWikiModule( $params );
$this->assertSame( $expected, $module->getGroup() );
}
@ -120,26 +100,26 @@ class WikiModuleTest extends ResourceLoaderTestCase {
* @dataProvider provideGetType
*/
public function testGetType( $params, $expected ) {
$module = new WikiModule( $params );
$module = new ResourceLoaderWikiModule( $params );
$this->assertSame( $expected, $module->getType() );
}
public static function provideGetType() {
yield 'empty' => [
[],
WikiModule::LOAD_GENERAL,
ResourceLoaderWikiModule::LOAD_GENERAL,
];
yield 'scripts' => [
[ 'scripts' => [ 'Example.js' ] ],
WikiModule::LOAD_GENERAL,
ResourceLoaderWikiModule::LOAD_GENERAL,
];
yield 'styles' => [
[ 'styles' => [ 'Example.css' ] ],
WikiModule::LOAD_STYLES,
ResourceLoaderWikiModule::LOAD_STYLES,
];
yield 'styles and scripts' => [
[ 'styles' => [ 'Example.css' ], 'scripts' => [ 'Example.js' ] ],
WikiModule::LOAD_GENERAL,
ResourceLoaderWikiModule::LOAD_GENERAL,
];
}
@ -147,7 +127,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
* @dataProvider provideIsKnownEmpty
*/
public function testIsKnownEmpty( $titleInfo, $group, $dependencies, $expected ) {
$module = $this->getMockBuilder( WikiModule::class )
$module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->disableOriginalConstructor()
->onlyMethods( [ 'getTitleInfo', 'getGroup', 'getDependencies' ] )
->getMock();
@ -240,7 +220,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
] );
$expected = $titleInfo;
$module = $this->getMockBuilder( WikiModule::class )
$module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->onlyMethods( [ 'getPages', 'getTitleInfo' ] )
->getMock();
$module->method( 'getPages' )->willReturn( $pages );
@ -325,7 +305,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
// This covers the early return case
$this->assertSame(
null,
WikiModule::preloadTitleInfo(
ResourceLoaderWikiModule::preloadTitleInfo(
$context,
$this->createMock( IDatabase::class ),
[]
@ -366,7 +346,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
*/
public function testGetContent( $expected, $title, Content $contentObj = null ) {
$context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
$module = $this->getMockBuilder( WikiModule::class )
$module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->onlyMethods( [ 'getContentObj' ] )->getMock();
$module->method( 'getContentObj' )
->willReturn( $contentObj );
@ -399,7 +379,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
$rl = new EmptyResourceLoader();
$module = $this->getMockBuilder( WikiModule::class )
$module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->onlyMethods( [ 'getPages' ] )
->getMock();
$module->method( 'getPages' )->willReturn( $pages );
@ -436,7 +416,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
$context = new DerivativeResourceLoaderContext(
$this->getResourceLoaderContext( [], new EmptyResourceLoader )
);
$module = $this->getMockBuilder( WikiModule::class )
$module = $this->getMockBuilder( ResourceLoaderWikiModule::class )
->onlyMethods( [ 'getPages' ] )
->getMock();
$module->method( 'getPages' )
@ -473,7 +453,7 @@ class WikiModuleTest extends ResourceLoaderTestCase {
}
}
class TestResourceLoaderWikiModule extends WikiModule {
class TestResourceLoaderWikiModule extends ResourceLoaderWikiModule {
public static $returnFetchTitleInfo = null;
protected static function fetchTitleInfo( IDatabase $db, array $pages, $fname = null ) {

View file

@ -2,13 +2,13 @@
namespace MediaWiki\Tests\Structure;
use DerivativeResourceLoaderContext;
use FauxRequest;
use MediaWiki\MainConfigNames;
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader\DerivativeResourceLoaderContext;
use MediaWiki\ResourceLoader\Module;
use MediaWiki\ResourceLoader\ResourceLoaderContext;
use MediaWikiIntegrationTestCase;
use ResourceLoaderContext;
use ResourceLoaderModule;
/**
* Compare bundle sizes from each skin/extension bundlesize.config.json with ResourceLoader output.
@ -48,9 +48,9 @@ abstract class BundleSizeTest extends MediaWikiIntegrationTestCase {
$module = $resourceLoader->getModule( $moduleName );
$contentContext = new DerivativeResourceLoaderContext( $context );
$contentContext->setOnly(
$module->getType() === Module::LOAD_STYLES
? Module::TYPE_STYLES
: Module::TYPE_COMBINED
$module->getType() === ResourceLoaderModule::LOAD_STYLES
? ResourceLoaderModule::TYPE_STYLES
: ResourceLoaderModule::TYPE_COMBINED
);
$content = $resourceLoader->makeModuleResponse( $context, [ $moduleName => $module ] );
$contentTransferSize = strlen( gzencode( $content, 9 ) );

View file

@ -1,7 +1,6 @@
<?php
use MediaWiki\MediaWikiServices;
use MediaWiki\ResourceLoader as RL;
use Wikimedia\Minify\CSSMin;
use Wikimedia\TestingAccessWrapper;
@ -41,7 +40,7 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
$illegalDeps = [ 'startup' ];
// Can't depend on modules in the `noscript` group, find all such module names
// to add to $ilegalDeps. See T291735
/** @var RL\Module $module */
/** @var ResourceLoaderModule $module */
foreach ( $data['modules'] as $moduleName => $module ) {
if ( $module->getGroup() === 'noscript' ) {
$illegalDeps[] = $moduleName;
@ -61,7 +60,7 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
$actualIllegal = [];
$expectedIllegal = [];
/** @var RL\Module $module */
/** @var ResourceLoaderModule $module */
foreach ( $data['modules'] as $moduleName => $module ) {
foreach ( $module->getDependencies( $data['context'] ) as $dep ) {
if ( !in_array( $dep, $knownDeps, true ) ) {
@ -85,7 +84,7 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
$data = self::getAllModules();
$lang = MediaWikiServices::getInstance()->getLanguageFactory()->getLanguage( 'en' );
/** @var RL\Module $module */
/** @var ResourceLoaderModule $module */
foreach ( $data['modules'] as $moduleName => $module ) {
foreach ( $module->getMessages() as $msgKey ) {
$this->assertTrue(
@ -106,7 +105,7 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
public function testUnsatisfiableDependencies() {
$data = self::getAllModules();
/** @var RL\Module $module */
/** @var ResourceLoaderModule $module */
foreach ( $data['modules'] as $moduleName => $module ) {
$moduleTargets = $module->getTargets();
foreach ( $module->getDependencies( $data['context'] ) as $dep ) {
@ -170,20 +169,20 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
return [
'modules' => $modules,
'resourceloader' => $rl,
'context' => new RL\ResourceLoaderContext( $rl, new FauxRequest() )
'context' => new ResourceLoaderContext( $rl, new FauxRequest() )
];
}
/**
* Get all stylesheet files from modules that are an instance of
* RL\FileModule (or one of its subclasses).
* ResourceLoaderFileModule (or one of its subclasses).
*/
public static function provideMediaStylesheets() {
$data = self::getAllModules();
$context = $data['context'];
foreach ( $data['modules'] as $moduleName => $module ) {
if ( !$module instanceof RL\FileModule ) {
if ( !$module instanceof ResourceLoaderFileModule ) {
continue;
}
@ -210,12 +209,12 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
}
/**
* Check all resource files from RL\FileModule modules.
* Check all resource files from ResourceLoaderFileModule modules.
*/
public function testResourceFiles() {
$data = self::getAllModules();
// See also RL\FileModule::__construct
// See also ResourceLoaderFileModule::__construct
$filePathProps = [
// Lists of file paths
'lists' => [
@ -233,7 +232,7 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
];
foreach ( $data['modules'] as $moduleName => $module ) {
if ( !$module instanceof RL\FileModule ) {
if ( !$module instanceof ResourceLoaderFileModule ) {
continue;
}
@ -272,7 +271,7 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
}
foreach ( $files as $file ) {
$relativePath = ( $file instanceof RL\FilePath ? $file->getPath() : $file );
$relativePath = ( $file instanceof ResourceLoaderFilePath ? $file->getPath() : $file );
$this->assertFileExists(
$moduleProxy->getLocalPath( $file ),
"File '$relativePath' referenced by '$moduleName' must exist."
@ -297,13 +296,13 @@ class ResourcesTest extends MediaWikiIntegrationTestCase {
}
/**
* Check all image files from RL\ImageModule modules.
* Check all image files from ResourceLoaderImageModule modules.
*/
public function testImageFiles() {
$data = self::getAllModules();
foreach ( $data['modules'] as $moduleName => $module ) {
if ( !$module instanceof RL\ImageModule ) {
if ( !$module instanceof ResourceLoaderImageModule ) {
continue;
}

Some files were not shown because too many files have changed in this diff Show more