* // If 'packageFiles' is set, 'scripts' cannot also be set
* 'packageFiles' => [
* [file path string], // or:
- * [file alias] => [file path string], // or:
- * [file alias] => [ 'file' => [file path string], 'type' => 'script'|'data' ], // or:
- * [file alias] => [ 'content' => [string], 'type' => 'script'|'data' ], // or:
- * [file alias] => [ 'callback' => [callable], 'type' => 'script'|'data' ], // or:
- * [file alias] => [ 'config' => [ [config var name], ... ], 'type' => 'data' ], // or:
- * [file alias] => [ 'config' => [ [JS name] => [PHP name] ], 'type' => 'data' ],
+ * [ 'name' => [file name], 'file' => [file path], 'type' => 'script'|'data' ], // or:
+ * [ 'name' => [name], 'content' => [string], 'type' => 'script'|'data' ], // or:
+ * [ 'name' => [name], 'callback' => [callable], 'type' => 'script'|'data' ],
+ * [ 'name' => [name], 'config' => [ [config var name], ... ], 'type' => 'data' ],
+ * [ 'name' => [name], 'config' => [ [JS name] => [PHP name] ], 'type' => 'data' ],
* ],
* // Modules which must be loaded before this module
* 'dependencies' => [module name string or array of module name strings],
$mainFile = null;
foreach ( $this->packageFiles as $alias => $fileInfo ) {
- // Alias is optional, but only when specfiying plain file names (strings)
- if ( is_int( $alias ) ) {
- if ( is_array( $fileInfo ) ) {
+ if ( is_string( $fileInfo ) ) {
+ $fileInfo = [ 'name' => $fileInfo, 'file' => $fileInfo ];
+ } elseif ( !isset( $fileInfo['name'] ) ) {
+ // Backwards compatibility
+ if ( !is_numeric( $alias ) ) {
+ $fileInfo['name'] = $alias;
+ } else {
$msg = __METHOD__ . ": invalid package file definition for module " .
- "\"{$this->getName()}\": key is required when value is not a string";
+ "\"{$this->getName()}\": 'name' key is required when value is not a string";
wfDebugLog( 'resourceloader', $msg );
throw new MWException( $msg );
}
- $alias = $fileInfo;
- }
- if ( !is_array( $fileInfo ) ) {
- $fileInfo = [ 'file' => $fileInfo ];
}
// Infer type from alias if needed
- $type = $fileInfo['type'] ?? self::getPackageFileType( $alias );
+ $type = $fileInfo['type'] ?? self::getPackageFileType( $fileInfo['name'] );
$expanded = [ 'type' => $type ];
if ( !empty( $fileInfo['main'] ) ) {
- $mainFile = $alias;
+ $mainFile = $fileInfo['name'];
if ( $type !== 'script' ) {
$msg = __METHOD__ . ": invalid package file definition for module " .
"\"{$this->getName()}\": main file \"$mainFile\" must be of type \"script\", not \"$type\"";
if ( is_callable( $fileInfo['callback'] ) ) {
$expanded['content'] = $fileInfo['callback']( $context );
} else {
- $msg = __METHOD__ . ": invalid callback for package file \"$alias\"" .
+ $msg = __METHOD__ . ": invalid callback for package file \"{$fileInfo['name']}\"" .
" in module \"{$this->getName()}\"";
wfDebugLog( 'resourceloader', $msg );
throw new MWException( $msg );
}
} elseif ( isset( $fileInfo['config'] ) ) {
if ( $type !== 'data' ) {
- $msg = __METHOD__ . ": invalid use of \"config\" for package file \"$alias\" in module " .
- "\"{$this->getName()}\": type must be \"data\" but is \"$type\"";
+ $msg = __METHOD__ . ": invalid use of \"config\" for package file \"{$fileInfo['name']}\" " .
+ "in module \"{$this->getName()}\": type must be \"data\" but is \"$type\"";
wfDebugLog( 'resourceloader', $msg );
throw new MWException( $msg );
}
}
$expanded['content'] = $expandedConfig;
} elseif ( !empty( $fileInfo['main'] ) ) {
- // 'foo.js' => [ 'main' => true ] is shorthand
- $expanded['filePath'] = $alias;
+ // [ 'name' => 'foo.js', 'main' => true ] is shorthand
+ $expanded['filePath'] = $fileInfo['name'];
} else {
- $msg = __METHOD__ . ": invalid package file definition for \"$alias\" in module " .
- "\"{$this->getName()}\": one of \"file\", \"content\", \"callback\" or \"config\" must be set";
+ $msg = __METHOD__ . ": invalid package file definition for \"{$fileInfo['name']}\" " .
+ "in module \"{$this->getName()}\": one of \"file\", \"content\", \"callback\" or \"config\" " .
+ "must be set";
wfDebugLog( 'resourceloader', $msg );
throw new MWException( $msg );
}
- $expandedFiles[$alias] = $expanded;
+ $expandedFiles[$fileInfo['name']] = $expanded;
}
if ( $expandedFiles && $mainFile === null ) {
'remoteBasePath' => "$wgResourceBasePath/resources/src",
'packageFiles' => [
'mediawiki.ForeignStructuredUpload.js',
- 'config.json' => [ 'config' => [ 'UploadDialog' ] ],
+ [ 'name' => 'config.json', 'config' => [ 'UploadDialog' ] ],
],
'dependencies' => [
'mediawiki.ForeignUpload',
'remoteBasePath' => "$wgResourceBasePath/resources/src",
'packageFiles' => [
'mediawiki.util.js',
- 'config.json' => [ 'config' => [ 'FragmentMode' ] ],
+ [ 'name' => 'config.json', 'config' => [ 'FragmentMode' ] ],
],
'dependencies' => [
'jquery.accessKeyLabel',
'remoteBasePath' => "$wgResourceBasePath/resources/src/mediawiki.jqueryMsg",
'packageFiles' => [
'mediawiki.jqueryMsg.js',
- 'parserDefaults.json' => [ 'callback' => function ( ResourceLoaderContext $context ) {
+ [ 'name' => 'parserDefaults.json', 'callback' => function ( ResourceLoaderContext $context ) {
$tagData = Sanitizer::getRecognizedTagData();
$allowedHtmlElements = array_merge(
array_keys( $tagData['htmlpairs'] ),
'remoteBasePath' => "$wgResourceBasePath/resources/src/mediawiki.language",
'packageFiles' => [
'mediawiki.language.names.js',
- 'names.json' => [ 'callback' => function ( ResourceLoaderContext $context ) {
+ [ 'name' => 'names.json', 'callback' => function ( ResourceLoaderContext $context ) {
return Language::fetchLanguageNames( $context->getLanguage(), 'all' );
} ],
],
'dm/ItemModel.js',
'dm/SavedQueriesModel.js',
'dm/SavedQueryItemModel.js',
- 'config.json' => [ 'config' => [ 'StructuredChangeFiltersLiveUpdatePollingRate' ] ],
+ [ 'name' => 'config.json', 'config' => [ 'StructuredChangeFiltersLiveUpdatePollingRate' ] ],
],
'dependencies' => [
'mediawiki.String',
'ui/RclTargetPageWidget.js',
'ui/RclToOrFromWidget.js',
'ui/WatchlistTopSectionWidget.js',
- 'config.json' => [ 'callback' => 'ChangesListSpecialPage::getRcFiltersConfigVars' ],
+ [ 'name' => 'config.json', 'callback' => 'ChangesListSpecialPage::getRcFiltersConfigVars' ],
],
'styles' => [
'styles/mw.rcfilters.mixins.less',
'remoteBasePath' => "$wgResourceBasePath/resources/src/mediawiki.legacy",
'packageFiles' => [
'protect.js',
- 'config.json' => [ 'config' => [ 'CascadingRestrictionLevels' ] ],
+ [ 'name' => 'config.json', 'config' => [ 'CascadingRestrictionLevels' ] ],
],
'dependencies' => 'jquery.lengthLimit',
'messages' => [ 'protect-unchain-permissions' ]
$base + [
'packageFiles' => [
'script-comment.js',
- 'script-nosemi.js' => [ 'main' => true ]
+ [ 'name' => 'script-nosemi.js', 'main' => true ]
],
'deprecated' => 'Deprecation test',
'name' => 'test-deprecated'
[
$base + [
'packageFiles' => [
- 'init.js' => [ 'file' => 'script-comment.js', 'main' => true ],
- 'nosemi.js' => 'script-nosemi.js'
+ [ 'name' => 'init.js', 'file' => 'script-comment.js', 'main' => true ],
+ [ 'name' => 'nosemi.js', 'file' => 'script-nosemi.js' ],
]
],
[
[
$base + [
'packageFiles' => [
- 'foo.json' => [ 'content' => [ 'Hello' => 'world' ] ],
+ [ 'name' => 'foo.json', 'content' => [ 'Hello' => 'world' ] ],
'sample.json',
- 'bar.js' => [ 'content' => "console.log('Hello');" ],
- 'data' => [ 'type' => 'data', 'callback' => function ( $context ) {
+ [ 'name' => 'bar.js', 'content' => "console.log('Hello');" ],
+ [ 'name' => 'data.json', 'callback' => function ( $context ) {
return [ 'langCode' => $context->getLanguage() ];
} ],
- 'config' => [ 'type' => 'data', 'config' => [
+ [ 'name' => 'config.json', 'config' => [
'Sitename',
'wgVersion' => 'Version',
] ],
'type' => 'script',
'content' => "console.log('Hello');",
],
- 'data' => [
+ 'data.json' => [
'type' => 'data',
'content' => [ 'langCode' => 'fy' ]
],
- 'config' => [
+ 'config.json' => [
'type' => 'data',
'content' => [
'Sitename' => $config->get( 'Sitename' ),
[
$base + [
'packageFiles' => [
- 'foo.json' => [ 'callback' => 'functionThatDoesNotExist142857' ]
+ [ 'name' => 'foo.json', 'callback' => 'functionThatDoesNotExist142857' ]
]
],
false
[
$base + [
'packageFiles' => [
- 'foo' => [ 'type' => 'script', 'config' => [ 'Sitename' ] ]
+ 'foo.json' => [ 'type' => 'script', 'config' => [ 'Sitename' ] ]
]
],
false
[
$base + [
'packageFiles' => [
- 'foo.js' => [ 'config' => 'Sitename' ]
+ [ 'name' => 'foo.js', 'config' => 'Sitename' ]
]
],
false
$base + [
'packageFiles' => [
'script-nosemi.js',
- 'foo.json' => [
- 'type' => 'data',
- 'content' => [ 'Hello' => 'world' ],
- 'main' => true
- ]
+ [ 'name' => 'foo.json', 'content' => [ 'Hello' => 'world' ], 'main' => true ]
]
],
false