* @file
*/
+use MediaWiki\MediaWikiServices;
+
/**
* @defgroup Skins Skins
*/
static function normalizeKey( $key ) {
global $wgDefaultSkin, $wgFallbackSkin;
- $skinNames = Skin::getSkinNames();
+ $skinNames = self::getSkinNames();
// Make keys lowercase for case-insensitive matching.
$skinNames = array_change_key_case( $skinNames, CASE_LOWER );
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',
],
- // modules that exist for legacy reasons
- 'legacy' => ResourceLoaderStartUpModule::getLegacyModules(),
// modules relating to search functionality
'search' => [],
// modules relating to functionality relating to watching an article
'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';
$modules['content'][] = 'jquery.makeCollapsible';
}
+ if ( $out->isTOCEnabled() ) {
+ $modules['content'][] = 'mediawiki.toc';
+ }
+
// Add various resources if required
if ( $wgUseAjax && $wgEnableAPI ) {
if ( $wgEnableWriteAPI && $user->isLoggedIn()
return $wgLogo;
}
+ /**
+ * Whether the logo should be preloaded with an HTTP link header or not
+ * @since 1.29
+ * @return bool
+ */
+ public function shouldPreloadLogo() {
+ return false;
+ }
+
/**
* @return string HTML
*/
};
if ( $wgEnableSidebarCache ) {
- $cache = ObjectCache::getMainWANInstance();
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
$sidebar = $cache->getWithSetCallback(
$cache->makeKey( 'sidebar', $this->getLanguage()->getCode() ),
MessageCache::singleton()->isDisabled()
* @return string
*/
function getNewtalks() {
-
$newMessagesAlert = '';
$user = $this->getUser();
$newtalks = $user->getNewMessageLinks();
* should fall back to the next notice in its sequence
*/
private function getCachedNotice( $name ) {
- global $wgRenderHashAppend, $parserMemc, $wgContLang;
+ global $wgRenderHashAppend, $wgContLang;
$needParse = false;
$notice = $msg->plain();
}
- // Use the extra hash appender to let eg SSL variants separately cache.
- $key = wfMemcKey( $name . $wgRenderHashAppend );
- $cachedNotice = $parserMemc->get( $key );
- if ( is_array( $cachedNotice ) ) {
- if ( md5( $notice ) == $cachedNotice['hash'] ) {
- $notice = $cachedNotice['html'];
- } else {
- $needParse = true;
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $parsed = $cache->getWithSetCallback(
+ // Use the extra hash appender to let eg SSL variants separately cache
+ // Key is verified with md5 hash of unparsed wikitext
+ $cache->makeKey( $name, $wgRenderHashAppend, md5( $notice ) ),
+ // TTL in seconds
+ 600,
+ function () use ( $notice ) {
+ return $this->getOutput()->parse( $notice );
}
- } else {
- $needParse = true;
- }
-
- if ( $needParse ) {
- $parsed = $this->getOutput()->parse( $notice );
- $parserMemc->set( $key, [ 'html' => $parsed, 'hash' => md5( $notice ) ], 600 );
- $notice = $parsed;
- }
+ );
- $notice = Html::rawElement( 'div', [ 'id' => 'localNotice',
- 'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ], $notice );
- return $notice;
+ return Html::rawElement(
+ 'div',
+ [
+ 'id' => 'localNotice',
+ 'lang' => $wgContLang->getHtmlCode(),
+ 'dir' => $wgContLang->getDir()
+ ],
+ $parsed
+ );
}
/**