diff --git a/includes/ServiceWiring.php b/includes/ServiceWiring.php index e402116..b88374b 100644 --- a/includes/ServiceWiring.php +++ b/includes/ServiceWiring.php @@ -58,7 +58,9 @@ return [ $context->getUser(), $context, $services->getPermissionManager(), - $services->getService( 'Minerva.Permissions' ) + $services->getService( 'Minerva.Permissions' ), + $skinOptions, + $services->get( 'Minerva.SkinUserPageHelper' ) ); if ( $skinOptions->get( SkinOptions::OPTION_OVERFLOW_SUBMENU ) ) { $overflowBuilder = $userPageHelper->isUserPage() ? diff --git a/includes/menu/PageActions/ToolbarBuilder.php b/includes/menu/PageActions/ToolbarBuilder.php index ec5502d..fd674c1 100644 --- a/includes/menu/PageActions/ToolbarBuilder.php +++ b/includes/menu/PageActions/ToolbarBuilder.php @@ -26,6 +26,8 @@ use MediaWiki\Minerva\Menu\Group; use MediaWiki\Minerva\Menu\IMenuEntry; use MediaWiki\Minerva\Menu\LanguageSelectorEntry; use MediaWiki\Minerva\Permissions\IMinervaPagePermissions; +use MediaWiki\Minerva\SkinOptions; +use MediaWiki\Minerva\SkinUserPageHelper; use MediaWiki\Permissions\PermissionManager; use MessageLocalizer; use MinervaUI; @@ -59,6 +61,16 @@ class ToolbarBuilder { * @var PermissionManager */ private $permissionsManager; + + /** + * @var SkinOptions + */ + private $skinOptions; + + /** + * @var SkinUserPageHelper + */ + private $userPageHelper; /** * Build Group containing icons for toolbar * @param Title $title Article title user is currently browsing @@ -66,18 +78,25 @@ class ToolbarBuilder { * @param MessageLocalizer $msgLocalizer Message localizer to generate localized texts * @param PermissionManager $permissionManager Mediawiki Permissions Manager * @param IMinervaPagePermissions $permissions Minerva permissions system + * @param SkinOptions $skinOptions Skin options + * @param SkinUserPageHelper $userPageHelper User Page helper */ public function __construct( Title $title, User $user, MessageLocalizer $msgLocalizer, PermissionManager $permissionManager, - IMinervaPagePermissions $permissions ) { + IMinervaPagePermissions $permissions, + SkinOptions $skinOptions, + SkinUserPageHelper $userPageHelper + ) { $this->title = $title; $this->user = $user; $this->messageLocalizer = $msgLocalizer; $this->permissionsManager = $permissionManager; $this->permissions = $permissions; + $this->skinOptions = $skinOptions; + $this->userPageHelper = $userPageHelper; } /** @@ -103,6 +122,13 @@ class ToolbarBuilder { $group->insertEntry( $this->getHistoryPageAction() ); } + if ( $this->skinOptions->get( SkinOptions::OPTION_OVERFLOW_SUBMENU ) && + $this->userPageHelper->isUserPage() ) { + // User links are hidden when Overflow menu is visible. We want to show Contributions + // link on toolbar only when overflow is visible + $group->insertEntry( $this->createContributionsPageAction() ); + } + Hooks::run( 'MobileMenu', [ 'pageactions.toolbar', &$group ] ); // We want the edit icon/action always to be the last element on the toolbar list @@ -112,6 +138,23 @@ class ToolbarBuilder { return $group; } + /** + * Create Contributions page action visible on user pages + * + * @return IMenuEntry + */ + protected function createContributionsPageAction(): IMenuEntry { + $pageUser = $this->userPageHelper->getPageUser(); + $label = $this->messageLocalizer->msg( 'mobile-frontend-user-page-contributions' ); + + return PageActionMenuEntry::create( + 'page-actions-contributions', + SpecialPage::getTitleFor( 'Contributions', $pageUser )->getLocalURL(), + MinervaUI::iconClass( 'contributions' ), + $label + )->setTitle( $label ); + } + /** * Creates the "edit" page action: the well-known pencil icon that, when tapped, will open an * editor with the lead section loaded. diff --git a/includes/skins/SkinMinerva.php b/includes/skins/SkinMinerva.php index 825ff29..e830a22 100644 --- a/includes/skins/SkinMinerva.php +++ b/includes/skins/SkinMinerva.php @@ -925,6 +925,7 @@ class SkinMinerva extends SkinTemplate { 'mediawiki.ui.icon', 'mediawiki.ui.button', 'skins.minerva.icons.images', + 'skins.minerva.mainMenu.icons', 'wikimedia.ui' ]; if ( $title->isMainPage() ) {