Use HookHandlers for MobileFrontend hooks

The use of "HookHandlers" attribute in extension.json makes it possible
to inject services into hook handler classes in a future patch.

Bug: T315823
Change-Id: I9422f0cf7d5c14db544ea67c564d34e9eca3813b
This commit is contained in:
Umherirrender 2023-08-15 17:02:31 +02:00
parent ce29be7f36
commit 7701ce2641
3 changed files with 116 additions and 98 deletions

View file

@ -39,11 +39,8 @@ use MediaWiki\ResourceLoader\ResourceLoader;
use MediaWiki\Skins\Hook\SkinPageReadyConfigHook;
use MediaWiki\SpecialPage\Hook\SpecialPageBeforeExecuteHook;
use MobileContext;
use MobileFrontend\Features\Feature;
use MobileFrontend\Features\FeaturesManager;
use OldChangesList;
use OutputPage;
use RuntimeException;
use Skin;
use SpecialPage;
use User;
@ -64,7 +61,7 @@ class Hooks implements
SpecialPageBeforeExecuteHook,
UserLogoutCompleteHook
{
private const FEATURE_OVERFLOW_PAGE_ACTIONS = 'MinervaOverflowInPageActions';
public const FEATURE_OVERFLOW_PAGE_ACTIONS = 'MinervaOverflowInPageActions';
/**
* ResourceLoaderRegisterModules hook handler.
@ -128,81 +125,6 @@ class Hooks implements
}
}
/**
* Register mobile web beta features
* @see https://www.mediawiki.org/wiki/
* Extension:MobileFrontend/MobileFrontendFeaturesRegistration
*
* @param FeaturesManager $featureManager
*/
public static function onMobileFrontendFeaturesRegistration( $featureManager ) {
$config = MediaWikiServices::getInstance()->getConfigFactory()
->makeConfig( 'minerva' );
try {
$featureManager->registerFeature(
new Feature(
'MinervaShowCategories',
'skin-minerva',
$config->get( 'MinervaShowCategories' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaPageIssuesNewTreatment',
'skin-minerva',
$config->get( 'MinervaPageIssuesNewTreatment' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaTalkAtTop',
'skin-minerva',
$config->get( 'MinervaTalkAtTop' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaDonateLink',
'skin-minerva',
$config->get( 'MinervaDonateLink' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaHistoryInPageActions',
'skin-minerva',
$config->get( 'MinervaHistoryInPageActions' )
)
);
$featureManager->registerFeature(
new Feature(
self::FEATURE_OVERFLOW_PAGE_ACTIONS,
'skin-minerva',
$config->get( self::FEATURE_OVERFLOW_PAGE_ACTIONS )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaAdvancedMainMenu',
'skin-minerva',
$config->get( 'MinervaAdvancedMainMenu' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaPersonalMenu',
'skin-minerva',
$config->get( 'MinervaPersonalMenu' )
)
);
} catch ( RuntimeException $e ) {
// features already registered...
// due to a bug it's possible for this to run twice
// https://phabricator.wikimedia.org/T165068
}
}
/**
* Invocation of hook SpecialPageBeforeExecute
*
@ -255,7 +177,7 @@ class Hooks implements
* @param MobileContext $mobileContext
* @param Skin $skin
*/
private static function setMinervaSkinOptions(
public static function setMinervaSkinOptions(
MobileContext $mobileContext, Skin $skin
) {
// setSkinOptions is not available
@ -343,18 +265,6 @@ class Hooks implements
}
}
/**
* BeforePageDisplayMobile hook handler.
*
* @param MobileContext $mobileContext
* @param Skin $skin
*/
public static function onRequestContextCreateSkinMobile(
MobileContext $mobileContext, Skin $skin
) {
self::setMinervaSkinOptions( $mobileContext, $skin );
}
/**
* ResourceLoaderGetConfigVars hook handler.
* Used for setting JS variables which are pulled in dynamically with RL

View file

@ -0,0 +1,109 @@
<?php
namespace MediaWiki\Minerva;
use MediaWiki\MediaWikiServices;
use MobileContext;
use MobileFrontend\Features\Feature;
use MobileFrontend\Features\FeaturesManager;
use MobileFrontend\Hooks\MobileFrontendFeaturesRegistrationHook;
use MobileFrontend\Hooks\RequestContextCreateSkinMobileHook;
use RuntimeException;
use Skin;
/**
* Hooks from MobileFrontend extension,
* which is optional to use with this skin.
*/
class MobileFrontendHooks implements
MobileFrontendFeaturesRegistrationHook,
RequestContextCreateSkinMobileHook
{
/**
* Register mobile web beta features
* @see https://www.mediawiki.org/wiki/
* Extension:MobileFrontend/MobileFrontendFeaturesRegistration
*
* @param FeaturesManager $featureManager
*/
public function onMobileFrontendFeaturesRegistration( FeaturesManager $featureManager ) {
$config = MediaWikiServices::getInstance()->getConfigFactory()
->makeConfig( 'minerva' );
try {
$featureManager->registerFeature(
new Feature(
'MinervaShowCategories',
'skin-minerva',
$config->get( 'MinervaShowCategories' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaPageIssuesNewTreatment',
'skin-minerva',
$config->get( 'MinervaPageIssuesNewTreatment' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaTalkAtTop',
'skin-minerva',
$config->get( 'MinervaTalkAtTop' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaDonateLink',
'skin-minerva',
$config->get( 'MinervaDonateLink' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaHistoryInPageActions',
'skin-minerva',
$config->get( 'MinervaHistoryInPageActions' )
)
);
$featureManager->registerFeature(
new Feature(
Hooks::FEATURE_OVERFLOW_PAGE_ACTIONS,
'skin-minerva',
$config->get( Hooks::FEATURE_OVERFLOW_PAGE_ACTIONS )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaAdvancedMainMenu',
'skin-minerva',
$config->get( 'MinervaAdvancedMainMenu' )
)
);
$featureManager->registerFeature(
new Feature(
'MinervaPersonalMenu',
'skin-minerva',
$config->get( 'MinervaPersonalMenu' )
)
);
} catch ( RuntimeException $e ) {
// features already registered...
// due to a bug it's possible for this to run twice
// https://phabricator.wikimedia.org/T165068
}
}
/**
* BeforePageDisplayMobile hook handler.
*
* @param MobileContext $mobileContext
* @param Skin $skin
*/
public function onRequestContextCreateSkinMobile(
MobileContext $mobileContext, Skin $skin
) {
Hooks::setMinervaSkinOptions( $mobileContext, $skin );
}
}

View file

@ -137,6 +137,9 @@
"HookHandlers": {
"main": {
"class": "MediaWiki\\Minerva\\Hooks"
},
"mobilefrontend": {
"class": "MediaWiki\\Minerva\\MobileFrontendHooks"
}
},
"Hooks": {
@ -144,12 +147,8 @@
"SkinPageReadyConfig": "main",
"UserLogoutComplete": "main",
"FetchChangesList": "main",
"MobileFrontendFeaturesRegistration": [
"MediaWiki\\Minerva\\Hooks::onMobileFrontendFeaturesRegistration"
],
"RequestContextCreateSkinMobile": [
"MediaWiki\\Minerva\\Hooks::onRequestContextCreateSkinMobile"
],
"MobileFrontendFeaturesRegistration": "mobilefrontend",
"RequestContextCreateSkinMobile": "mobilefrontend",
"PreferencesGetLayout": "main",
"SpecialPageBeforeExecute": "main",
"ResourceLoaderGetConfigVars": "main",