diff --git a/includes/MinervaHooks.php b/includes/MinervaHooks.php index 4516b77..da29d2d 100644 --- a/includes/MinervaHooks.php +++ b/includes/MinervaHooks.php @@ -234,9 +234,12 @@ class MinervaHooks { SkinOptions::OPTION_OVERFLOW_SUBMENU => $featureManager->isFeatureAvailableForCurrentUser( self::FEATURE_OVERFLOW_PAGE_ACTIONS ), + SkinOptions::OPTION_TABS_ON_SPECIALS => false, ] ); + Hooks::run( 'SkinMinervaOptionsInit', [ $skin, $skinOptions ] ); } } + /** * ResourceLoaderGetConfigVars hook handler. * Used for setting JS variables which are pulled in dynamically with RL diff --git a/includes/SkinOptions.php b/includes/SkinOptions.php index ce0fb06..d0e63ab 100644 --- a/includes/SkinOptions.php +++ b/includes/SkinOptions.php @@ -35,6 +35,7 @@ final class SkinOptions { const OPTIONS_TALK_AT_TOP = 'talkAtTop'; const OPTIONS_HISTORY_PAGE_ACTIONS = 'historyInPageActions'; const OPTION_OVERFLOW_SUBMENU = 'overflowSubmenu'; + const OPTION_TABS_ON_SPECIALS = 'tabsOnSpecials'; /** @var array skin specific options */ private $skinOptions = [ diff --git a/includes/skins/MinervaTemplate.php b/includes/skins/MinervaTemplate.php index 55987c0..7e19af4 100644 --- a/includes/skins/MinervaTemplate.php +++ b/includes/skins/MinervaTemplate.php @@ -229,9 +229,7 @@ class MinervaTemplate extends BaseTemplate { $internalBanner = $data[ 'internalBanner' ]; $preBodyHtml = isset( $data['prebodyhtml'] ) ? $data['prebodyhtml'] : ''; $hasHeadingHolder = $internalBanner || $preBodyHtml || isset( $data['page_actions'] ); - $hasPageActions = !$this->isSpecialPage && !$this->isMainPage && - Action::getActionName( RequestContext::getMain() ) === 'view'; - $hasTalkTabs = $hasPageActions && !$this->isMainPageTalk; + $hasPageActions = $this->hasPageActions( $data['skin']->getContext() ); // prepare template data $templateData = [ @@ -268,7 +266,8 @@ class MinervaTemplate extends BaseTemplate { 'secondaryactionshtml' => $this->getSecondaryActionsHtml(), 'footer' => $this->getFooterTemplateData( $data ), 'isBeta' => $skinOptions->get( SkinOptions::OPTIONS_MOBILE_BETA ), - 'tabs' => $hasTalkTabs && $skinOptions->get( SkinOptions::OPTIONS_TALK_AT_TOP ) ? [ + 'tabs' => $this->showTalkTabs( $hasPageActions, $skinOptions ) && + $skinOptions->get( SkinOptions::OPTIONS_TALK_AT_TOP ) ? [ 'items' => array_values( $data['content_navigation']['namespaces'] ), ] : false, ]; @@ -280,4 +279,27 @@ class MinervaTemplate extends BaseTemplate { isSpecialPage && !$this->isMainPage && + Action::getActionName( $context ) === 'view'; + } + + /** + * @param bool $hasPageActions + * @param SkinOptions $skinOptions + * @return bool + */ + private function showTalkTabs( $hasPageActions, SkinOptions $skinOptions ) { + $hasTalkTabs = $hasPageActions && !$this->isMainPageTalk; + if ( !$hasTalkTabs && $this->isSpecialPage && + $skinOptions->get( SkinOptions::OPTION_TABS_ON_SPECIALS ) ) { + $hasTalkTabs = true; + } + return $hasTalkTabs; + } }