X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=blobdiff_plain;f=includes%2Fresourceloader%2FResourceLoaderStartUpModule.php;h=319105730559a6064934e2fdeed00a854a6eec90;hb=2fc229116d6b040667b6f8592c48a8527abf2673;hp=a982de2a7d5e2c0d739603c2325dae77c743e748;hpb=2a4e5dc9c7b240c261c7ef1b85ebd8837b3e526b;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index a982de2a7d..3191057305 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -42,6 +42,15 @@ use MediaWiki\MediaWikiServices; class ResourceLoaderStartUpModule extends ResourceLoaderModule { protected $targets = [ 'desktop', 'mobile' ]; + private $groupIds = [ + // These reserved numbers MUST start at 0 and not skip any. These are preset + // for forward compatiblity so that they can be safely referenced by mediawiki.js, + // even when the code is cached and the order of registrations (and implicit + // group ids) changes between versions of the software. + 'user' => 0, + 'private' => 1, + ]; + /** * @param ResourceLoaderContext $context * @return array @@ -95,6 +104,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { 'wgContentNamespaces' => $nsInfo->getContentNamespaces(), 'wgSiteName' => $conf->get( 'Sitename' ), 'wgDBname' => $conf->get( 'DBname' ), + 'wgWikiID' => WikiMap::getWikiIdFromDbDomain( WikiMap::getCurrentWikiDbDomain() ), 'wgExtraSignatureNamespaces' => $conf->get( 'ExtraSignatureNamespaces' ), 'wgExtensionAssetsPath' => $conf->get( 'ExtensionAssetsPath' ), // MediaWiki sets cookies to have this prefix by default @@ -111,7 +121,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { 'wgCommentCodePointLimit' => CommentStore::COMMENT_CHARACTER_LIMIT, ]; - Hooks::run( 'ResourceLoaderGetConfigVars', [ &$vars, $skin ] ); + Hooks::run( 'ResourceLoaderGetConfigVars', [ &$vars, $skin, $conf ] ); return $vars; } @@ -282,7 +292,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { $states[$name] = 'error'; } - if ( $versionHash !== '' && strlen( $versionHash ) !== 7 ) { + if ( $versionHash !== '' && strlen( $versionHash ) !== ResourceLoader::HASH_LENGTH ) { $e = new RuntimeException( "Badly formatted module version hash" ); $resourceLoader->outputErrorAndLog( $e, "Module '{module}' produced an invalid version hash: '{version}'.", @@ -297,14 +307,14 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { } $skipFunction = $module->getSkipFunction(); - if ( $skipFunction !== null && !ResourceLoader::inDebugMode() ) { + if ( $skipFunction !== null && !$context->getDebug() ) { $skipFunction = ResourceLoader::filter( 'minify-js', $skipFunction ); } $registryData[$name] = [ 'version' => $versionHash, 'dependencies' => $module->getDependencies( $context ), - 'group' => $module->getGroup(), + 'group' => $this->getGroupId( $module->getGroup() ), 'source' => $module->getSource(), 'skip' => $skipFunction, ]; @@ -313,7 +323,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { self::compileUnresolvedDependencies( $registryData ); // Register sources - $out .= ResourceLoader::makeLoaderSourcesScript( $resourceLoader->getSources() ); + $out .= ResourceLoader::makeLoaderSourcesScript( $context, $resourceLoader->getSources() ); // Figure out the different call signatures for mw.loader.register $registrations = []; @@ -331,28 +341,34 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { } // Register modules - $out .= "\n" . ResourceLoader::makeLoaderRegisterScript( $registrations ); + $out .= "\n" . ResourceLoader::makeLoaderRegisterScript( $context, $registrations ); if ( $states ) { - $out .= "\n" . ResourceLoader::makeLoaderStateScript( $states ); + $out .= "\n" . ResourceLoader::makeLoaderStateScript( $context, $states ); } return $out; } + private function getGroupId( $groupName ) { + if ( $groupName === null ) { + return null; + } + + if ( !array_key_exists( $groupName, $this->groupIds ) ) { + $this->groupIds[$groupName] = count( $this->groupIds ); + } + + return $this->groupIds[$groupName]; + } + /** * Base modules implicitly available to all modules. * * @return array */ private function getBaseModules() { - global $wgIncludeLegacyJavaScript; - $baseModules = [ 'jquery', 'mediawiki.base' ]; - if ( $wgIncludeLegacyJavaScript ) { - $baseModules[] = 'mediawiki.legacy.wikibits'; - } - return $baseModules; } @@ -407,21 +423,23 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { // Perform replacements for mediawiki.js $mwLoaderPairs = [ - '$VARS.reqBase' => ResourceLoader::encodeJsonForScript( $context->getReqBase() ), - '$VARS.baseModules' => ResourceLoader::encodeJsonForScript( $this->getBaseModules() ), - '$VARS.maxQueryLength' => ResourceLoader::encodeJsonForScript( + '$VARS.reqBase' => $context->encodeJson( $context->getReqBase() ), + '$VARS.baseModules' => $context->encodeJson( $this->getBaseModules() ), + '$VARS.maxQueryLength' => $context->encodeJson( $conf->get( 'ResourceLoaderMaxQueryLength' ) ), // The client-side module cache can be disabled by site configuration. // It is also always disabled in debug mode. - '$VARS.storeEnabled' => ResourceLoader::encodeJsonForScript( + '$VARS.storeEnabled' => $context->encodeJson( $conf->get( 'ResourceLoaderStorageEnabled' ) && !$context->getDebug() ), - '$VARS.wgLegacyJavaScriptGlobals' => ResourceLoader::encodeJsonForScript( + '$VARS.wgLegacyJavaScriptGlobals' => $context->encodeJson( $conf->get( 'LegacyJavaScriptGlobals' ) ), - '$VARS.storeKey' => ResourceLoader::encodeJsonForScript( $this->getStoreKey() ), - '$VARS.storeVary' => ResourceLoader::encodeJsonForScript( $this->getStoreVary( $context ) ), + '$VARS.storeKey' => $context->encodeJson( $this->getStoreKey() ), + '$VARS.storeVary' => $context->encodeJson( $this->getStoreVary( $context ) ), + '$VARS.groupUser' => $context->encodeJson( $this->getGroupId( 'user' ) ), + '$VARS.groupPrivate' => $context->encodeJson( $this->getGroupId( 'private' ) ), ]; $profilerStubs = [ '$CODE.profileExecuteStart();' => 'mw.loader.profiler.onExecuteStart( module );', @@ -440,7 +458,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { // Perform string replacements for startup.js $pairs = [ - '$VARS.configuration' => ResourceLoader::encodeJsonForScript( + '$VARS.configuration' => $context->encodeJson( $this->getConfigSettings( $context ) ), // Raw JavaScript code (not JSON)