diff --git a/Hooks.php b/Hooks.php new file mode 100644 index 0000000..82121d3 --- /dev/null +++ b/Hooks.php @@ -0,0 +1,29 @@ +() + */ + +class VectorHooks { + /** + * BeforePageDisplayMobile hook handler + * + * Make Vector responsive when operating in mobile mode (useformat=mobile) + * + * @see https://www.mediawiki.org/wiki/Extension:MobileFrontend/BeforePageDisplayMobile + * @param OutputPage $out + * @param SkinTemplate $sk + */ + public static function onBeforePageDisplayMobile( OutputPage $out, $sk ) { + // This makes Vector behave in responsive mode when MobileFrontend is installed + if ( $sk instanceof SkinVector ) { + $sk->enableResponsiveMode(); + } + } +} diff --git a/SkinVector.php b/SkinVector.php index 8af200f..1733bb6 100644 --- a/SkinVector.php +++ b/SkinVector.php @@ -34,11 +34,24 @@ class SkinVector extends SkinTemplate { * @var Config */ private $vectorConfig; + private $responsiveMode = false; public function __construct() { $this->vectorConfig = ConfigFactory::getDefaultInstance()->makeConfig( 'vector' ); } + /** + * Enables the responsive mode + */ + public function enableResponsiveMode() { + if ( !$this->responsiveMode ) { + $out = $this->getOutput(); + $out->addMeta( 'viewport', 'width=device-width, initial-scale=1' ); + $out->addModuleStyles( 'skins.vector.styles.responsive' ); + $this->responsiveMode = true; + } + } + /** * Initializes output page and sets up skin-specific parameters * @param OutputPage $out Object to initialize @@ -47,8 +60,7 @@ class SkinVector extends SkinTemplate { parent::initPage( $out ); if ( $this->vectorConfig->get( 'VectorResponsive' ) ) { - $out->addMeta( 'viewport', 'width=device-width, initial-scale=1' ); - $out->addModuleStyles( 'skins.vector.styles.responsive' ); + $this->enableResponsiveMode(); } $out->addModules( 'skins.vector.js' ); diff --git a/skin.json b/skin.json index 6eba1ab..3f016a7 100644 --- a/skin.json +++ b/skin.json @@ -25,9 +25,15 @@ ] }, "AutoloadClasses": { + "VectorHooks": "Hooks.php", "SkinVector": "SkinVector.php", "VectorTemplate": "VectorTemplate.php" }, + "Hooks": { + "BeforePageDisplayMobile": [ + "VectorHooks::onBeforePageDisplayMobile" + ] + }, "@note": "When modifying skins.vector.styles definition, make sure the installer still works", "ResourceModules": { "skins.vector.styles": {