X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fresourceloader%2FResourceLoaderStartUpModule.php;h=8f026dc87bcd1e852bbf753c549647ae388c376b;hb=fa0f6f34972c0e0f4aac24a03b3efdfc45f256f6;hp=a982de2a7d5e2c0d739603c2325dae77c743e748;hpb=04052920e992bd32115b9e16ccc8feeac7b8f5dc;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/resourceloader/ResourceLoaderStartUpModule.php b/includes/resourceloader/ResourceLoaderStartUpModule.php index a982de2a7d..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 @@ -111,7 +124,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 +295,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}'.", @@ -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,19 +353,25 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { 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; } @@ -422,6 +441,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule { ), '$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 );',