X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fresourceloader%2FResourceLoaderStartUpModule.php;h=8f026dc87bcd1e852bbf753c549647ae388c376b;hb=fa0f6f34972c0e0f4aac24a03b3efdfc45f256f6;hp=7880f6f2494b4e7634b558eaa8134df5a98f7ab3;hpb=d72f24589b3eece35b334d080e6e609b048fc22f;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index 7880f6f249..78775fb597 100644 --- a/includes/resourceloader/ResourceLoaderStartUpModule.php +++ b/includes/resourceloader/ResourceLoaderStartUpModule.php @@ -38,10 +38,22 @@ use MediaWiki\MediaWikiServices; * - safemode: Only register modules that have ORIGIN_CORE as their origin. * This effectively disables ORIGIN_USER modules. (T185303) * See also: OutputPage::disallowUserJs() + * + * @ingroup ResourceLoader + * @internal */ 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 +107,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 @@ -105,14 +118,13 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { 'wgCaseSensitiveNamespaces' => $caseSensitiveNamespaces, 'wgLegalTitleChars' => Title::convertByteClassToUnicodeClass( Title::legalChars() ), 'wgIllegalFileChars' => Title::convertByteClassToUnicodeClass( $illegalFileChars ), - 'wgResourceLoaderStorageEnabled' => $conf->get( 'ResourceLoaderStorageEnabled' ), 'wgForeignUploadTargets' => $conf->get( 'ForeignUploadTargets' ), 'wgEnableUploads' => $conf->get( 'EnableUploads' ), 'wgCommentByteLimit' => null, 'wgCommentCodePointLimit' => CommentStore::COMMENT_CHARACTER_LIMIT, ]; - Hooks::run( 'ResourceLoaderGetConfigVars', [ &$vars, $skin ] ); + Hooks::run( 'ResourceLoaderGetConfigVars', [ &$vars, $skin, $conf ] ); return $vars; } @@ -283,9 +295,10 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { $states[$name] = 'error'; } - if ( $versionHash !== '' && strlen( $versionHash ) !== 7 ) { - $this->getLogger()->warning( - "Module '{module}' produced an invalid version hash: '{version}'.", + 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}'.", [ 'module' => $name, 'version' => $versionHash, @@ -304,7 +317,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { $registryData[$name] = [ 'version' => $versionHash, 'dependencies' => $module->getDependencies( $context ), - 'group' => $module->getGroup(), + 'group' => $this->getGroupId( $module->getGroup() ), 'source' => $module->getSource(), 'skip' => $skipFunction, ]; @@ -340,14 +353,16 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { return $out; } - /** - * @private For internal use by SpecialJavaScriptTest - * @since 1.32 - * @return array - * @codeCoverageIgnore - */ - public function getBaseModulesInternal() { - return $this->getBaseModules(); + 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]; } /** @@ -356,13 +371,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { * @return array */ private function getBaseModules() { - global $wgIncludeLegacyJavaScript; - $baseModules = [ 'jquery', 'mediawiki.base' ]; - if ( $wgIncludeLegacyJavaScript ) { - $baseModules[] = 'mediawiki.legacy.wikibits'; - } - return $baseModules; } @@ -422,8 +431,18 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { '$VARS.maxQueryLength' => ResourceLoader::encodeJsonForScript( $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( + $conf->get( 'ResourceLoaderStorageEnabled' ) && !$context->getDebug() + ), + '$VARS.wgLegacyJavaScriptGlobals' => ResourceLoader::encodeJsonForScript( + $conf->get( 'LegacyJavaScriptGlobals' ) + ), '$VARS.storeKey' => ResourceLoader::encodeJsonForScript( $this->getStoreKey() ), '$VARS.storeVary' => ResourceLoader::encodeJsonForScript( $this->getStoreVary( $context ) ), + '$VARS.groupUser' => ResourceLoader::encodeJsonForScript( $this->getGroupId( 'user' ) ), + '$VARS.groupPrivate' => ResourceLoader::encodeJsonForScript( $this->getGroupId( 'private' ) ), ]; $profilerStubs = [ '$CODE.profileExecuteStart();' => 'mw.loader.profiler.onExecuteStart( module );', @@ -442,9 +461,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { // Perform string replacements for startup.js $pairs = [ - '$VARS.wgLegacyJavaScriptGlobals' => ResourceLoader::encodeJsonForScript( - $conf->get( 'LegacyJavaScriptGlobals' ) - ), '$VARS.configuration' => ResourceLoader::encodeJsonForScript( $this->getConfigSettings( $context ) ),