mediawiki-skins-Vector/includes/SkinVector.php
jdlrobson 4091a6729f Document setupTemplate method and mark Vector as @final
Various skins may extend SkinVector (although none are in production)
(https://github.com/search?q=%22extends+SkinVector%22&type=Code)
This makes it clear we no longer support that behaviour.

Because of the skins that are extending SkinVector currently we have
not resorted to using the final keyword at this time.

Depends-On: Ie3759c2acbf53c628577f6b05cfed17e0998a6bb
Bug: T248399
Change-Id: I2af8b2930c80f888791247bdaa2ae1c80576317e
2020-03-25 18:04:16 +00:00

102 lines
2.9 KiB
PHP

<?php
/**
* Vector - Modern version of MonoBook with fresh look and many usability
* improvements.
*
* 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
* @ingroup Skins
*/
use Vector\Constants;
/**
* Skin subclass for Vector
* @ingroup Skins
* @final skins extending SkinVector are not supported
* @unstable
*/
class SkinVector extends SkinTemplate {
public $skinname = 'vector';
public $stylename = 'Vector';
public $template = 'VectorTemplate';
private $responsiveMode = false;
/**
* 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
*/
public function initPage( OutputPage $out ) {
parent::initPage( $out );
if ( $this->getConfig()->get( 'VectorResponsive' ) ) {
$this->enableResponsiveMode();
}
}
/**
* @inheritDoc
* @return array
*/
public function getDefaultModules() {
$modules = parent::getDefaultModules();
// add vector skin styles and vector module
$module = $this->getUser()->getOption( Constants::PREF_KEY_SKIN_VERSION )
=== Constants::SKIN_VERSION_LEGACY ? 'skins.vector.styles.legacy' : 'skins.vector.styles';
$modules['styles']['skin'][] = $module;
$modules['core'][] = 'skins.vector.js';
return $modules;
}
/**
* Set up the VectorTemplate. Overrides the default behaviour of SkinTemplate allowing
* the safe calling of constructor with additional arguments. If dropping this method
* please ensure that VectorTemplate constructor arguments match those in SkinTemplate.
*
* @internal
* @param string $classname
* @return VectorTemplate
*/
protected function setupTemplate( $classname ) {
$template = new VectorTemplate( $this->getConfig() );
$template->setTemplateParser( new TemplateParser( __DIR__ . '/templates' ) );
return $template;
}
/**
* Whether the logo should be preloaded with an HTTP link header or not
* @since 1.29
* @return bool
*/
public function shouldPreloadLogo() {
return true;
}
}