return;
}
$dbr = wfGetDB( DB_REPLICA );
- $skin = $context->getSkin();
$lang = $context->getLanguage();
// Batched version of ResourceLoaderModule::getFileDependencies
- $vary = "$skin|$lang";
+ $vary = ResourceLoaderModule::getVary( $context );
$res = $dbr->select( 'module_deps', [ 'md_module', 'md_deps' ], [
'md_module' => $moduleNames,
'md_skin' => $vary,
$cache = ObjectCache::getLocalServerInstance( CACHE_ANYTHING );
$key = $cache->makeGlobalKey(
- 'resourceloader',
- 'filter',
+ 'resourceloader-filter',
$filter,
self::CACHE_VERSION,
md5( $data )
if ( isset( $info['object'] ) ) {
return false;
}
- return (
+ return !isset( $info['factory'] ) && (
// The implied default for 'class' is ResourceLoaderFileModule
!isset( $info['class'] ) ||
// Explicit default
$states[$name] = 'missing';
}
- // Generate output
- $isRaw = false;
-
$filter = $context->getOnly() === 'styles' ? 'minify-css' : 'minify-js';
foreach ( $modules as $name => $module ) {
$states[$name] = 'error';
unset( $modules[$name] );
}
- $isRaw |= $module->isRaw();
}
// Update module states
- if ( $context->shouldIncludeScripts() && !$context->getRaw() && !$isRaw ) {
- if ( count( $modules ) && $context->getOnly() === 'scripts' ) {
+ if ( $context->shouldIncludeScripts() && !$context->getRaw() ) {
+ if ( $modules && $context->getOnly() === 'scripts' ) {
// Set the state of modules loaded as only scripts to ready as
// they don't have an mw.loader.implement wrapper that sets the state
foreach ( $modules as $name => $module ) {
}
// Set the state of modules we didn't respond to with mw.loader.implement
- if ( count( $states ) ) {
+ if ( $states ) {
$stateScript = self::makeLoaderStateScript( $states );
if ( !$context->getDebug() ) {
$stateScript = self::filter( 'minify-js', $stateScript );
* @return string JavaScript code
*/
public static function makeMessageSetScript( $messages ) {
- return Xml::encodeJsCall(
- 'mw.messages.set',
- [ (object)$messages ],
- self::inDebugMode()
- );
+ return 'mw.messages.set('
+ . self::encodeJsonForScript( (object)$messages )
+ . ');';
}
/**
if ( !is_array( $states ) ) {
$states = [ $states => $state ];
}
- return Xml::encodeJsCall(
- 'mw.loader.state',
- [ $states ],
- self::inDebugMode()
- );
+ return 'mw.loader.state('
+ . self::encodeJsonForScript( $states )
+ . ');';
}
private static function isEmptyObject( stdClass $obj ) {
array_walk( $modules, [ self::class, 'trimArray' ] );
- return Xml::encodeJsCall(
- 'mw.loader.register',
- [ $modules ],
- self::inDebugMode()
- );
+ return 'mw.loader.register('
+ . self::encodeJsonForScript( $modules )
+ . ');';
}
/**
if ( !is_array( $sources ) ) {
$sources = [ $sources => $loadUrl ];
}
- return Xml::encodeJsCall(
- 'mw.loader.addSource',
- [ $sources ],
- self::inDebugMode()
- );
+ return 'mw.loader.addSource('
+ . self::encodeJsonForScript( $sources )
+ . ');';
}
/**
* @param bool $printable
* @param bool $handheld
* @param array $extraQuery
- *
* @return array
*/
public static function makeLoaderQuery( $modules, $lang, $skin, $user = null,
) {
$query = [
'modules' => self::makePackedModulesString( $modules ),
- 'lang' => $lang,
- 'skin' => $skin,
];
+ // Keep urls short by omitting query parameters that
+ // match the defaults assumed by ResourceLoaderContext.
+ // Note: This relies on the defaults either being insignificant or forever constant,
+ // as otherwise cached urls could change in meaning when the defaults change.
+ if ( $lang !== ResourceLoaderContext::DEFAULT_LANG ) {
+ $query['lang'] = $lang;
+ }
+ if ( $skin !== ResourceLoaderContext::DEFAULT_SKIN ) {
+ $query['skin'] = $skin;
+ }
if ( $debug === true ) {
$query['debug'] = 'true';
}