mirror of
https://gerrit.wikimedia.org/r/mediawiki/skins/MinervaNeue
synced 2024-11-17 19:21:39 +00:00
244fcdd332
There is no need to keep the PageActionMenuEntry as the code is almost the same as SingleMenuEntry. Both classes were written around the same time and there was no clue if those can be merged together. Now it looks like it can be easily achieved. So DRY. Bug: T232734 Change-Id: I7ecf7440a241a18aac749b84dc86ff0f07910539
150 lines
4.3 KiB
PHP
150 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
*/
|
|
|
|
namespace MediaWiki\Minerva\Menu\PageActions;
|
|
|
|
use Hooks;
|
|
use MediaWiki\Minerva\LanguagesHelper;
|
|
use MediaWiki\Minerva\Menu\Entries\IMenuEntry;
|
|
use MediaWiki\Minerva\Menu\Entries\SingleMenuEntry;
|
|
use MediaWiki\Minerva\Menu\Group;
|
|
use MediaWiki\Minerva\Menu\Entries\LanguageSelectorEntry;
|
|
use MediaWiki\Minerva\Permissions\IMinervaPagePermissions;
|
|
use MediaWiki\Minerva\SkinUserPageHelper;
|
|
use MessageLocalizer;
|
|
use MinervaUI;
|
|
use MWException;
|
|
use Title;
|
|
use User;
|
|
|
|
class UserNamespaceOverflowBuilder implements IOverflowBuilder {
|
|
|
|
/**
|
|
* @var MessageLocalizer
|
|
*/
|
|
private $messageLocalizer;
|
|
|
|
/**
|
|
* @var User|null
|
|
*/
|
|
private $pageUser;
|
|
|
|
/**
|
|
* @var Title
|
|
*/
|
|
private $title;
|
|
|
|
/**
|
|
* @var IMinervaPagePermissions
|
|
*/
|
|
private $permissions;
|
|
|
|
/**
|
|
* @var LanguagesHelper
|
|
*/
|
|
private $languagesHelper;
|
|
|
|
/**
|
|
* Initialize the overflow menu visible on the User namespace
|
|
* @param Title $title
|
|
* @param MessageLocalizer $msgLocalizer
|
|
* @param SkinUserPageHelper $userPageHelper
|
|
* @param IMinervaPagePermissions $permissions
|
|
* @param LanguagesHelper $languagesHelper
|
|
*/
|
|
public function __construct(
|
|
Title $title,
|
|
MessageLocalizer $msgLocalizer,
|
|
SkinUserPageHelper $userPageHelper,
|
|
IMinervaPagePermissions $permissions,
|
|
LanguagesHelper $languagesHelper
|
|
) {
|
|
$this->title = $title;
|
|
$this->messageLocalizer = $msgLocalizer;
|
|
$this->pageUser = $userPageHelper->getPageUser();
|
|
$this->permissions = $permissions;
|
|
$this->languagesHelper = $languagesHelper;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
* @throws MWException
|
|
*/
|
|
public function getGroup( array $toolbox ): Group {
|
|
$group = new Group( 'p-tb' );
|
|
if ( $this->permissions->isAllowed( IMinervaPagePermissions::SWITCH_LANGUAGE ) ) {
|
|
$group->insertEntry( new LanguageSelectorEntry(
|
|
$this->title,
|
|
$this->languagesHelper->doesTitleHasLanguagesOrVariants( $this->title ),
|
|
$this->messageLocalizer,
|
|
MinervaUI::iconClass( 'language-switcher-base20', 'before',
|
|
'minerva-page-actions-language-switcher' ),
|
|
'minerva-page-actions-language-switcher'
|
|
) );
|
|
}
|
|
|
|
$possibleEntries = array_filter( [
|
|
$this->buildFromToolbox( 'user-groups', 'userGroup', 'userrights', $toolbox ),
|
|
$this->buildFromToolbox( 'logs', 'listBullet', 'log', $toolbox ),
|
|
$this->buildFromToolbox( 'info', 'infoFilled', 'info', $toolbox ),
|
|
$this->buildFromToolbox( 'permalink', 'link', 'permalink', $toolbox ),
|
|
$this->buildFromToolbox( 'backlinks', 'articleRedirect', 'whatlinkshere', $toolbox )
|
|
] );
|
|
|
|
foreach ( $possibleEntries as $menuEntry ) {
|
|
$group->insertEntry( $menuEntry );
|
|
}
|
|
Hooks::run( 'MobileMenu', [ 'pageactions.overflow', &$group ] );
|
|
return $group;
|
|
}
|
|
|
|
/**
|
|
* Build entry based on the $toolbox element
|
|
*
|
|
* @param string $name
|
|
* @param string $icon Icon CSS class name.
|
|
* @param string $toolboxIdx
|
|
* @param array $toolbox An array of common toolbox items from the sidebar menu
|
|
* @return IMenuEntry|null
|
|
*/
|
|
private function buildFromToolbox( $name, $icon, $toolboxIdx, array $toolbox ) {
|
|
return $this->build( $name, $icon, $toolbox[$toolboxIdx]['href'] ?? null );
|
|
}
|
|
|
|
/**
|
|
* Build single Menu entry
|
|
*
|
|
* @param string $name
|
|
* @param string $icon Wikimedia UI icon name.
|
|
* @param string|null $href
|
|
* @return IMenuEntry|null
|
|
*/
|
|
private function build( $name, $icon, $href ) {
|
|
return $href ?
|
|
SingleMenuEntry::create(
|
|
'page-actions-overflow-' . $name,
|
|
$this->messageLocalizer->msg( 'minerva-page-actions-' . $name ),
|
|
$href,
|
|
'wikimedia-ui-' . $icon . '-base20'
|
|
)->setIcon( '', 'before' )
|
|
->trackClicks( $name ) : null;
|
|
}
|
|
}
|