static function ( MediaWikiServices $services ): Definitions { return new Definitions( RequestContext::getMain(), $services->getSpecialPageFactory(), $services->getUserOptionsLookup() ); }, 'Minerva.Menu.UserMenuDirector' => static function ( MediaWikiServices $services ): UserMenuDirector { $options = $services->getService( 'Minerva.SkinOptions' ); $definitions = $services->getService( 'Minerva.Menu.Definitions' ); $context = RequestContext::getMain(); $builder = $options->get( SkinOptions::PERSONAL_MENU ) ? new AdvancedUserMenuBuilder( $context, $context->getUser(), $definitions ) : new DefaultUserMenuBuilder(); return new UserMenuDirector( $builder, $context->getSkin() ); }, 'Minerva.Menu.MainDirector' => static function ( MediaWikiServices $services ): MainMenuDirector { $context = RequestContext::getMain(); /** @var SkinOptions $options */ $options = $services->getService( 'Minerva.SkinOptions' ); $definitions = $services->getService( 'Minerva.Menu.Definitions' ); $userIdentityUtils = $services->getUserIdentityUtils(); $showMobileOptions = $options->get( SkinOptions::MOBILE_OPTIONS ); $user = $context->getUser(); // Add a donate link (see https://phabricator.wikimedia.org/T219793) $showDonateLink = $options->get( SkinOptions::SHOW_DONATE ); $builder = $options->get( SkinOptions::MAIN_MENU_EXPANDED ) ? new AdvancedMainMenuBuilder( $showMobileOptions, $showDonateLink, $definitions ) : new DefaultMainMenuBuilder( $showMobileOptions, $showDonateLink, $user, $definitions, $userIdentityUtils ); return new MainMenuDirector( $builder ); }, 'Minerva.Menu.PageActionsDirector' => static function ( MediaWikiServices $services ): PageActionsMenu\PageActionsDirector { /** * @var SkinOptions $skinOptions * @var SkinMinerva $skin * @var SkinUserPageHelper $userPageHelper */ $skinOptions = $services->getService( 'Minerva.SkinOptions' ); // FIXME: RequestContext should not be accessed in service container. $context = RequestContext::getMain(); $title = $context->getTitle(); if ( !$title ) { $title = SpecialPage::getTitleFor( 'Badtitle' ); } $user = $context->getUser(); $userPageHelper = $services->getService( 'Minerva.SkinUserPageHelper' ); $languagesHelper = $services->getService( 'Minerva.LanguagesHelper' ); $relevantUserPageHelper = $title->inNamespace( NS_USER_TALK ) ? new SkinUserPageHelper( $services->getUserNameUtils(), $services->getUserFactory(), $context->getSkin()->getRelevantTitle()->getSubjectPage(), $context ) : $userPageHelper; $permissions = $services->getService( 'Minerva.Permissions' ) ->setContext( $context ); $watchlistManager = $services->getWatchlistManager(); $toolbarBuilder = new PageActionsMenu\ToolbarBuilder( $title, $user, $context, $permissions, $skinOptions, $relevantUserPageHelper, $languagesHelper, new ServiceOptions( PageActionsMenu\ToolbarBuilder::CONSTRUCTOR_OPTIONS, $services->getMainConfig() ), $watchlistManager ); if ( $skinOptions->get( SkinOptions::TOOLBAR_SUBMENU ) ) { $overflowBuilder = $relevantUserPageHelper->isUserPage() ? new PageActionsMenu\UserNamespaceOverflowBuilder( $title, $context, $permissions, $languagesHelper ) : new PageActionsMenu\DefaultOverflowBuilder( $title, $context, $permissions ); } else { $overflowBuilder = new PageActionsMenu\EmptyOverflowBuilder(); } return new PageActionsMenu\PageActionsDirector( $toolbarBuilder, $overflowBuilder, $context ); }, 'Minerva.SkinUserPageHelper' => static function ( MediaWikiServices $services ): SkinUserPageHelper { return new SkinUserPageHelper( $services->getUserNameUtils(), $services->getUserFactory(), RequestContext::getMain()->getSkin()->getRelevantTitle(), RequestContext::getMain() ); }, 'Minerva.LanguagesHelper' => static function ( MediaWikiServices $services ): LanguagesHelper { return new LanguagesHelper( $services->getLanguageConverterFactory(), RequestContext::getMain()->getOutput() ); }, 'Minerva.SkinOptions' => static function ( MediaWikiServices $services ): SkinOptions { return new SkinOptions( $services->getHookContainer(), $services->getUserFactory(), $services->getUserNameUtils() ); }, 'Minerva.Permissions' => static function ( MediaWikiServices $services ): IMinervaPagePermissions { return new MinervaPagePermissions( $services->getService( 'Minerva.SkinOptions' ), $services->getService( 'Minerva.LanguagesHelper' ), $services->getPermissionManager(), $services->getContentHandlerFactory(), $services->getUserFactory(), $services->getWatchlistManager() ); } ];