diff --git a/includes/menu/LanguageSelectorEntry.php b/includes/menu/LanguageSelectorEntry.php new file mode 100644 index 000000000..b8113bfa7 --- /dev/null +++ b/includes/menu/LanguageSelectorEntry.php @@ -0,0 +1,101 @@ +title = $title; + $this->doesPageHaveLanguages = $doesPageHaveLanguages; + $this->messageLocalizer = $messageLocalizer; + } + + /** + * @inheritDoc + */ + public function getName() { + return 'language-selector'; + } + + /** + * @inheritDoc + */ + public function getCSSClasses(): array { + return []; + } + + /** + * @inheritDoc + */ + public function getComponents(): array { + $switcherLink = false; + $switcherClasses = ' language-selector'; + + if ( $this->doesPageHaveLanguages ) { + $switcherLink = SpecialPage::getTitleFor( + 'MobileLanguages', + $this->title + )->getLocalURL(); + } else { + $switcherClasses .= ' disabled'; + } + $iconClass = MinervaUI::iconClass( 'language-switcher', 'element', $switcherClasses ); + + return [ + [ + 'href' => $switcherLink, + 'class' => $iconClass, + 'text' => $this->messageLocalizer->msg( 'mobile-frontend-language-article-heading' ), + 'title' => $this->messageLocalizer->msg( 'mobile-frontend-language-article-heading' ) + ] + + ]; + } +} diff --git a/includes/menu/PageActions/ToolbarBuilder.php b/includes/menu/PageActions/ToolbarBuilder.php index 5f50f55b8..b1f22be70 100644 --- a/includes/menu/PageActions/ToolbarBuilder.php +++ b/includes/menu/PageActions/ToolbarBuilder.php @@ -23,6 +23,7 @@ namespace MediaWiki\Minerva\Menu\PageActions; use ExtensionRegistry; use Hooks; use MediaWiki\Minerva\Menu\Group; +use MediaWiki\Minerva\Menu\LanguageSelectorEntry; use MediaWiki\Permissions\PermissionManager; use MessageLocalizer; use MinervaUI; @@ -85,7 +86,9 @@ class ToolbarBuilder { $group = new Group(); if ( $this->skin->isAllowedPageAction( 'switch-language' ) ) { - $group->insertEntry( $this->createSwitchLanguageAction( $doesPageHaveLanguages ) ); + $group->insertEntry( + new LanguageSelectorEntry( $this->title, $doesPageHaveLanguages, $this->messageLocalizer ) + ); } if ( $this->skin->isAllowedPageAction( 'watch' ) ) { @@ -147,38 +150,6 @@ class ToolbarBuilder { ->setNodeID( 'ca-edit' ); } - /** - * Creates the "switch-language" action: the icon that, when tapped, opens the language - * switcher. - * @param bool $doesPageHaveLanguages Whether the page is also available in other - * languages or variants - * @return PageActionMenuEntry A menu entry object that represents a map of HTML attributes - * and a 'text' property to be used with the pageActionMenu.mustache template. - * @throws MWException - */ - protected function createSwitchLanguageAction( $doesPageHaveLanguages ) { - $languageSwitcherLink = false; - $languageSwitcherClasses = ' language-selector'; - - if ( $doesPageHaveLanguages ) { - $languageSwitcherLink = SpecialPage::getTitleFor( - 'MobileLanguages', - $this->title - )->getLocalURL(); - } else { - $languageSwitcherClasses .= ' disabled'; - } - $entry = new PageActionMenuEntry( - 'page-actions-languages', - $languageSwitcherLink, - MinervaUI::iconClass( 'language-switcher', 'element', $languageSwitcherClasses ), - $this->messageLocalizer->msg( 'mobile-frontend-language-article-heading' ) - ); - return $entry->setTitle( - $this->messageLocalizer->msg( 'mobile-frontend-language-article-heading' ) - ); - } - /** * Creates the "watch" or "unwatch" action: the well-known star icon that, when tapped, will * add the page to or remove the page from the user's watchlist; or, if the user is logged out,