static function ( MediaWikiServices $services ) { $featureManager = new FeatureManager(); $featureManager->registerRequirement( new DynamicConfigRequirement( $services->getMainConfig(), Constants::CONFIG_KEY_FULLY_INITIALISED, Constants::REQUIREMENT_FULLY_INITIALISED ) ); $context = RequestContext::getMain(); // Feature: Languages in sidebar // ================================ $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), $services->getCentralIdLookupFactory()->getNonLocalLookup(), Constants::CONFIG_KEY_LANGUAGE_IN_HEADER, Constants::REQUIREMENT_LANGUAGE_IN_HEADER, null, Constants::CONFIG_LANGUAGE_IN_HEADER_TREATMENT_AB_TEST ) ); // --- // Temporary T286932 - remove after languages A/B test is finished. $requirementName = 'T286932'; // MultiConfig checks each config in turn, allowing us to override the main config for specific keys. In this // case, override the "VectorLanguageInHeaderABTest" configuration value so that the following requirement // always buckets the user as if the language treatment A/B test were running. $config = new MultiConfig( [ new HashConfig( [ Constants::CONFIG_LANGUAGE_IN_HEADER_TREATMENT_AB_TEST => true, ] ), $services->getMainConfig(), ] ); $featureManager->registerRequirement( new OverridableConfigRequirement( $config, $context->getUser(), $context->getRequest(), $services->getCentralIdLookupFactory()->getNonLocalLookup(), Constants::CONFIG_KEY_LANGUAGE_IN_HEADER, $requirementName, /* $overrideName = */ '', Constants::CONFIG_LANGUAGE_IN_HEADER_TREATMENT_AB_TEST ) ); // --- $featureManager->registerFeature( Constants::FEATURE_LANGUAGE_IN_HEADER, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_LANGUAGE_IN_HEADER, ] ); // Feature: T293470: Language in main page header // ================================ $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), null, Constants::CONFIG_LANGUAGE_IN_MAIN_PAGE_HEADER, Constants::REQUIREMENT_LANGUAGE_IN_MAIN_PAGE_HEADER ) ); $featureManager->registerSimpleRequirement( Constants::REQUIREMENT_IS_MAIN_PAGE, $context->getTitle() ? $context->getTitle()->isMainPage() : false ); $featureManager->registerFeature( Constants::FEATURE_LANGUAGE_IN_MAIN_PAGE_HEADER, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_IS_MAIN_PAGE, Constants::REQUIREMENT_LANGUAGE_IN_HEADER, Constants::REQUIREMENT_LANGUAGE_IN_MAIN_PAGE_HEADER ] ); // Feature: T295555: Language switch alert in sidebar // ================================ $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), null, Constants::CONFIG_LANGUAGE_ALERT_IN_SIDEBAR, Constants::REQUIREMENT_LANGUAGE_ALERT_IN_SIDEBAR ) ); $featureManager->registerFeature( Constants::FEATURE_LANGUAGE_ALERT_IN_SIDEBAR, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_LANGUAGE_IN_HEADER, Constants::REQUIREMENT_LANGUAGE_ALERT_IN_SIDEBAR ] ); // Feature: T297610: Table of Contents // ================================ $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), null, Constants::CONFIG_TABLE_OF_CONTENTS, Constants::REQUIREMENT_TABLE_OF_CONTENTS, Constants::QUERY_PARAM_TABLE_OF_CONTENTS, null ) ); $featureManager->registerFeature( Constants::FEATURE_TABLE_OF_CONTENTS, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_TABLE_OF_CONTENTS ] ); // Feature: Sticky header // ================================ $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), null, Constants::CONFIG_STICKY_HEADER, Constants::REQUIREMENT_STICKY_HEADER ) ); $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), null, Constants::CONFIG_STICKY_HEADER_EDIT, Constants::REQUIREMENT_STICKY_HEADER_EDIT ) ); $featureManager->registerFeature( Constants::FEATURE_STICKY_HEADER, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_STICKY_HEADER ] ); $featureManager->registerFeature( Constants::FEATURE_STICKY_HEADER_EDIT, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_STICKY_HEADER, Constants::REQUIREMENT_STICKY_HEADER_EDIT, ] ); // Feature: Title above tabs // ================================ $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), null, Constants::CONFIG_TITLE_ABOVE_TABS, Constants::REQUIREMENT_TITLE_ABOVE_TABS ) ); $featureManager->registerFeature( Constants::FEATURE_TITLE_ABOVE_TABS, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_TITLE_ABOVE_TABS, ] ); // Feature: Grid // ================================ $featureManager->registerRequirement( new OverridableConfigRequirement( $services->getMainConfig(), $context->getUser(), $context->getRequest(), null, Constants::CONFIG_GRID, Constants::REQUIREMENT_GRID ) ); // Requires both table of contents and title above tabs // to be enabled to simplify the number of variants it needs // to consider. $featureManager->registerFeature( Constants::FEATURE_GRID, [ Constants::REQUIREMENT_FULLY_INITIALISED, Constants::REQUIREMENT_TITLE_ABOVE_TABS, Constants::REQUIREMENT_GRID, Constants::REQUIREMENT_TABLE_OF_CONTENTS, ] ); return $featureManager; } ];