Skip to content

Commit

Permalink
OutputPage: Move hardcoded default modules to Skin::getDefaultModules
Browse files Browse the repository at this point in the history
These modules should not be hardcoded in OutputPage::output() which
makes them impossible to override and also very hard to retrieve
through the API for action=parse. Move these instead to Skin which
is where all other default module loading happens already.

Moving these modules is in preparation for customising ApiParse
to support "really" returning all would-be loaded modules on a page
when setting 'useskin', which is also needed for Live Preview
and in theory for ajax navigation and other scenarios where there
is a delay between the "initial" page rendering, and a later re-render
which may not have all all the necessary modules.

Bug: T130632
Change-Id: Ic4afccf0cd0d428d7fbc36d4e747415af3ab49f5
  • Loading branch information
Krinkle committed May 21, 2017
1 parent 5c249f5 commit 0048c3e
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 18 deletions.
20 changes: 2 additions & 18 deletions includes/OutputPage.php
Expand Up @@ -2405,26 +2405,10 @@ public function output( $return = false ) {
}

$sk = $this->getSkin();
// add skin specific modules
$modules = $sk->getDefaultModules();

// Enforce various default modules for all pages and all skins
$coreModules = [
// Keep this list as small as possible
'site',
'mediawiki.page.startup',
'mediawiki.user',
];

// Support for high-density display images if enabled
if ( $config->get( 'ResponsiveImages' ) ) {
$coreModules[] = 'mediawiki.hidpi';
}

$this->addModules( $coreModules );
foreach ( $modules as $group ) {
foreach ( $sk->getDefaultModules() as $group ) {
$this->addModules( $group );
}

MWDebug::addModules( $this );

// Avoid PHP 7.1 warning of passing $this by reference
Expand Down
14 changes: 14 additions & 0 deletions includes/skins/Skin.php
Expand Up @@ -158,8 +158,17 @@ public function getDefaultModules() {
global $wgUseAjax, $wgEnableAPI, $wgEnableWriteAPI;

$out = $this->getOutput();
$config = $this->getConfig();
$user = $out->getUser();
$modules = [
// modules not specific to any specific skin or page
'core' => [
// Enforce various default modules for all pages and all skins
// Keep this list as small as possible
'site',
'mediawiki.page.startup',
'mediawiki.user',
],
// modules that enhance the page content in some way
'content' => [
'mediawiki.page.ready',
Expand All @@ -172,6 +181,11 @@ public function getDefaultModules() {
'user' => [],
];

// Support for high-density display images if enabled
if ( $config->get( 'ResponsiveImages' ) ) {
$modules['core'][] = 'mediawiki.hidpi';
}

// Preload jquery.tablesorter for mediawiki.page.ready
if ( strpos( $out->getHTML(), 'sortable' ) !== false ) {
$modules['content'][] = 'jquery.tablesorter';
Expand Down

0 comments on commit 0048c3e

Please sign in to comment.