* @return array Associative array of strings
*/
static function getSkinNames() {
- return SkinFactory::getDefaultInstance()->getSkinNames();
+ $skinFactory = MediaWikiServices::getInstance()->getSkinFactory();
+ return $skinFactory->getSkinNames();
}
/**
*/
public function getDefaultModules() {
$out = $this->getOutput();
- $config = $this->getConfig();
$user = $this->getUser();
// Modules declared in the $modules literal are loaded
'core' => [
'site',
'mediawiki.page.startup',
- 'mediawiki.user',
],
// modules that enhance the content in some way
'content' => [
'mediawiki.page.ready',
],
// modules relating to search functionality
- 'search' => [],
+ 'search' => [
+ 'mediawiki.searchSuggest',
+ ],
// modules relating to functionality relating to watching an article
'watch' => [],
// modules which relate to the current users preferences
// Preload jquery.tablesorter for mediawiki.page.ready
if ( strpos( $out->getHTML(), 'sortable' ) !== false ) {
$modules['content'][] = 'jquery.tablesorter';
+ $modules['styles']['content'][] = 'jquery.tablesorter.styles';
}
// Preload jquery.makeCollapsible for mediawiki.page.ready
$modules['watch'][] = 'mediawiki.page.watch.ajax';
}
- $modules['search'][] = 'mediawiki.searchSuggest';
-
if ( $user->getBoolOption( 'editsectiononrightclick' ) ) {
$modules['user'][] = 'mediawiki.action.view.rightClickEdit';
}
/**
* Outputs the HTML generated by other functions.
- * @param OutputPage|null $out
*/
- abstract function outputPage( OutputPage $out = null );
+ abstract function outputPage();
/**
* @param array $data
* @return string
*/
function getLogo() {
- global $wgLogo;
- return $wgLogo;
+ return $this->getConfig()->get( 'Logo' );
}
/**
* @return string HTML
*/
function getCategoryLinks() {
- global $wgUseCategoryBrowser;
-
$out = $this->getOutput();
$allCats = $out->getCategoryLinks();
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
- if ( !count( $allCats ) ) {
+ if ( $allCats === [] ) {
return '';
}
$colon = $this->msg( 'colon-separator' )->escaped();
if ( !empty( $allCats['normal'] ) ) {
- $t = $embed . implode( "{$pop}{$embed}", $allCats['normal'] ) . $pop;
+ $t = $embed . implode( $pop . $embed, $allCats['normal'] ) . $pop;
- $msg = $this->msg( 'pagecategories' )->numParams( count( $allCats['normal'] ) )->escaped();
+ $msg = $this->msg( 'pagecategories' )->numParams( count( $allCats['normal'] ) );
$linkPage = $this->msg( 'pagecategorieslink' )->inContentLanguage()->text();
$title = Title::newFromText( $linkPage );
- $link = $title ? Linker::link( $title, $msg ) : $msg;
+ $link = $title ? $linkRenderer->makeLink( $title, $msg->text() ) : $msg->escaped();
$s .= '<div id="mw-normal-catlinks" class="mw-normal-catlinks">' .
- $link . $colon . '<ul>' . $t . '</ul>' . '</div>';
+ $link . $colon . '<ul>' . $t . '</ul></div>';
}
# Hidden categories
$s .= "<div id=\"mw-hidden-catlinks\" class=\"mw-hidden-catlinks$class\">" .
$this->msg( 'hidden-categories' )->numParams( count( $allCats['hidden'] ) )->escaped() .
- $colon . '<ul>' . $embed . implode( "{$pop}{$embed}", $allCats['hidden'] ) . $pop . '</ul>' .
+ $colon . '<ul>' . $embed . implode( $pop . $embed, $allCats['hidden'] ) . $pop . '</ul>' .
'</div>';
}
# optional 'dmoz-like' category browser. Will be shown under the list
# of categories an article belong to
- if ( $wgUseCategoryBrowser ) {
+ if ( $this->getConfig()->get( 'UseCategoryBrowser' ) ) {
$s .= '<br /><hr />';
# get a big array of the parents tree
*/
function drawCategoryBrowser( $tree ) {
$return = '';
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
foreach ( $tree as $element => $parent ) {
if ( empty( $parent ) ) {
# add our current element to the list
$eltitle = Title::newFromText( $element );
- $return .= Linker::link( $eltitle, htmlspecialchars( $eltitle->getText() ) );
+ $return .= $linkRenderer->makeLink( $eltitle, $eltitle->getText() );
}
return $return;
*/
function getUndeleteLink() {
$action = $this->getRequest()->getVal( 'action', 'view' );
+ $title = $this->getTitle();
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
- if ( $this->getTitle()->userCan( 'deletedhistory', $this->getUser() ) &&
- ( !$this->getTitle()->exists() || $action == 'history' ) ) {
- $n = $this->getTitle()->isDeleted();
+ if ( ( !$title->exists() || $action == 'history' ) &&
+ $title->quickUserCan( 'deletedhistory', $this->getUser() )
+ ) {
+ $n = $title->isDeleted();
if ( $n ) {
if ( $this->getTitle()->quickUserCan( 'undelete', $this->getUser() ) ) {
}
return $this->msg( $msg )->rawParams(
- Linker::linkKnown(
+ $linkRenderer->makeKnownLink(
SpecialPage::getTitleFor( 'Undelete', $this->getTitle()->getPrefixedDBkey() ),
- $this->msg( 'restorelink' )->numParams( $n )->escaped() )
+ $this->msg( 'restorelink' )->numParams( $n )->text() )
)->escaped();
}
}
* @return string
*/
function subPageSubtitle( $out = null ) {
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
if ( $out === null ) {
$out = $this->getOutput();
}
return $subpages;
}
- if ( $out->isArticle() && MWNamespace::hasSubpages( $title->getNamespace() ) ) {
+ if (
+ $out->isArticle() && MediaWikiServices::getInstance()->getNamespaceInfo()->
+ hasSubpages( $title->getNamespace() )
+ ) {
$ptext = $title->getPrefixedText();
if ( strpos( $ptext, '/' ) !== false ) {
$links = explode( '/', $ptext );
$linkObj = Title::newFromText( $growinglink );
if ( is_object( $linkObj ) && $linkObj->isKnown() ) {
- $getlink = Linker::linkKnown(
- $linkObj,
- htmlspecialchars( $display )
+ $getlink = $linkRenderer->makeKnownLink(
+ $linkObj, $display
);
$c++;
* @return string
*/
function getCopyright( $type = 'detect' ) {
- global $wgRightsPage, $wgRightsUrl, $wgRightsText;
-
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
if ( $type == 'detect' ) {
if ( !$this->isRevisionCurrent()
&& !$this->msg( 'history_copyright' )->inContentLanguage()->isDisabled()
$msg = 'copyright';
}
- if ( $wgRightsPage ) {
- $title = Title::newFromText( $wgRightsPage );
- $link = Linker::linkKnown( $title, $wgRightsText );
- } elseif ( $wgRightsUrl ) {
- $link = Linker::makeExternalLink( $wgRightsUrl, $wgRightsText );
- } elseif ( $wgRightsText ) {
- $link = $wgRightsText;
+ $config = $this->getConfig();
+
+ if ( $config->get( 'RightsPage' ) ) {
+ $title = Title::newFromText( $config->get( 'RightsPage' ) );
+ $link = $linkRenderer->makeKnownLink(
+ $title, new HtmlArmor( $config->get( 'RightsText' ) )
+ );
+ } elseif ( $config->get( 'RightsUrl' ) ) {
+ $link = Linker::makeExternalLink( $config->get( 'RightsUrl' ), $config->get( 'RightsText' ) );
+ } elseif ( $config->get( 'RightsText' ) ) {
+ $link = $config->get( 'RightsText' );
} else {
# Give up now
return '';
* @return null|string
*/
function getCopyrightIcon() {
- global $wgRightsUrl, $wgRightsText, $wgRightsIcon, $wgFooterIcons;
-
$out = '';
+ $config = $this->getConfig();
- if ( $wgFooterIcons['copyright']['copyright'] ) {
- $out = $wgFooterIcons['copyright']['copyright'];
- } elseif ( $wgRightsIcon ) {
- $icon = htmlspecialchars( $wgRightsIcon );
+ $footerIcons = $config->get( 'FooterIcons' );
+ if ( $footerIcons['copyright']['copyright'] ) {
+ $out = $footerIcons['copyright']['copyright'];
+ } elseif ( $config->get( 'RightsIcon' ) ) {
+ $icon = htmlspecialchars( $config->get( 'RightsIcon' ) );
+ $url = $config->get( 'RightsUrl' );
- if ( $wgRightsUrl ) {
- $url = htmlspecialchars( $wgRightsUrl );
- $out .= '<a href="' . $url . '">';
+ if ( $url ) {
+ $out .= '<a href="' . htmlspecialchars( $url ) . '">';
}
- $text = htmlspecialchars( $wgRightsText );
+ $text = htmlspecialchars( $config->get( 'RightsText' ) );
$out .= "<img src=\"$icon\" alt=\"$text\" width=\"88\" height=\"31\" />";
- if ( $wgRightsUrl ) {
+ if ( $url ) {
$out .= '</a>';
}
}
* @return string
*/
function getPoweredBy() {
- global $wgResourceBasePath;
-
+ $resourceBasePath = $this->getConfig()->get( 'ResourceBasePath' );
$url1 = htmlspecialchars(
- "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
+ "$resourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
);
$url1_5 = htmlspecialchars(
- "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png"
+ "$resourceBasePath/resources/assets/poweredby_mediawiki_132x47.png"
);
$url2 = htmlspecialchars(
- "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png"
+ "$resourceBasePath/resources/assets/poweredby_mediawiki_176x62.png"
);
- $text = '<a href="//www.mediawiki.org/"><img src="' . $url1
+ $text = '<a href="https://www.mediawiki.org/"><img src="' . $url1
. '" srcset="' . $url1_5 . ' 1.5x, ' . $url2 . ' 2x" '
. 'height="31" width="88" alt="Powered by MediaWiki" /></a>';
Hooks::run( 'SkinGetPoweredBy', [ &$text, $this ] );
$html = htmlspecialchars( $icon["alt"] );
}
if ( $url ) {
- global $wgExternalLinkTarget;
$html = Html::rawElement( 'a',
- [ "href" => $url, "target" => $wgExternalLinkTarget ],
+ [ "href" => $url, "target" => $this->getConfig()->get( 'ExternalLinkTarget' ) ],
$html );
}
}
* @return string
*/
function mainPageLink() {
- $s = Linker::linkKnown(
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ $s = $linkRenderer->makeKnownLink(
Title::newMainPage(),
- $this->msg( 'mainpage' )->escaped()
+ $this->msg( 'mainpage' )->text()
);
return $s;
*/
public function footerLink( $desc, $page ) {
$title = $this->footerLinkTitle( $desc, $page );
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
if ( !$title ) {
return '';
}
- return Linker::linkKnown(
+ return $linkRenderer->makeKnownLink(
$title,
- $this->msg( $desc )->escaped()
+ $this->msg( $desc )->text()
);
}
* @throws MWException
*/
function getSkinStylePath( $name ) {
- global $wgStylePath;
-
if ( $this->stylename === null ) {
$class = static::class;
throw new MWException( "$class::\$stylename must be set to use getSkinStylePath()" );
}
- return "$wgStylePath/{$this->stylename}/$name";
+ return $this->getConfig()->get( 'StylePath' ) . "/{$this->stylename}/$name";
}
/* these are used extensively in SkinTemplate, but also some other places */
* @return array
*/
public function buildSidebar() {
- global $wgEnableSidebarCache, $wgSidebarCacheExpiry;
-
$callback = function ( $old = null, &$ttl = null ) {
$bar = [];
$this->addToSidebar( $bar, 'sidebar' );
$msgCache = MessageCache::singleton();
$wanCache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $config = $this->getConfig();
- $sidebar = $wgEnableSidebarCache
+ $sidebar = $config->get( 'EnableSidebarCache' )
? $wanCache->getWithSetCallback(
$wanCache->makeKey( 'sidebar', $this->getLanguage()->getCode() ),
- $wgSidebarCacheExpiry,
+ $config->get( 'SidebarCacheExpiry' ),
$callback,
[
'checkKeys' => [
$lines = explode( "\n", $text );
$heading = '';
- $messageTitle = $this->getConfig()->get( 'EnableSidebarCache' )
+ $config = $this->getConfig();
+ $messageTitle = $config->get( 'EnableSidebarCache' )
? Title::newMainPage() : $this->getTitle();
foreach ( $lines as $line ) {
$href = $link;
// Parser::getExternalLinkAttribs won't work here because of the Namespace things
- global $wgNoFollowLinks, $wgNoFollowDomainExceptions;
- if ( $wgNoFollowLinks && !wfMatchesDomainList( $href, $wgNoFollowDomainExceptions ) ) {
+ if ( $config->get( 'NoFollowLinks' ) &&
+ !wfMatchesDomainList( $href, $config->get( 'NoFollowDomainExceptions' ) )
+ ) {
$extraAttribs['rel'] = 'nofollow';
}
- global $wgExternalLinkTarget;
- if ( $wgExternalLinkTarget ) {
- $extraAttribs['target'] = $wgExternalLinkTarget;
+ if ( $config->get( 'ExternalLinkTarget' ) ) {
+ $extraAttribs['target'] = $config->get( 'ExternalLinkTarget' );
}
} else {
$title = Title::newFromText( $link );
$user = $this->getUser();
$newtalks = $user->getNewMessageLinks();
$out = $this->getOutput();
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
// Allow extensions to disable or modify the new messages alert
if ( !Hooks::run( 'GetNewMessagesAlert', [ &$newMessagesAlert, $newtalks, $user, $out ] ) ) {
// 999 signifies "more than one revision". We don't know how many, and even if we did,
// the number of revisions or authors is not necessarily the same as the number of
// "messages".
- $newMessagesLink = Linker::linkKnown(
+ $newMessagesLink = $linkRenderer->makeKnownLink(
$uTalkTitle,
- $this->msg( 'newmessageslinkplural' )->params( $plural )->escaped(),
+ $this->msg( 'newmessageslinkplural' )->params( $plural )->text(),
[],
$uTalkTitle->isRedirect() ? [ 'redirect' => 'no' ] : []
);
- $newMessagesDiffLink = Linker::linkKnown(
+ $newMessagesDiffLink = $linkRenderer->makeKnownLink(
$uTalkTitle,
- $this->msg( 'newmessagesdifflinkplural' )->params( $plural )->escaped(),
+ $this->msg( 'newmessagesdifflinkplural' )->params( $plural )->text(),
[],
$lastSeenRev !== null
? [ 'oldid' => $lastSeenRev->getId(), 'diff' => 'cur' ]
* should fall back to the next notice in its sequence
*/
private function getCachedNotice( $name ) {
- global $wgRenderHashAppend;
-
- $needParse = false;
+ $config = $this->getConfig();
if ( $name === 'default' ) {
// special case
- global $wgSiteNotice;
- $notice = $wgSiteNotice;
+ $notice = $config->get( 'SiteNotice' );
if ( empty( $notice ) ) {
return false;
}
$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 ) ),
+ $cache->makeKey( $name, $config->get( 'RenderHashAppend' ), md5( $notice ) ),
// TTL in seconds
600,
function () use ( $notice ) {
$links = [
'editsection' => [
- 'text' => $this->msg( 'editsection' )->inLanguage( $lang )->escaped(),
+ 'text' => $this->msg( 'editsection' )->inLanguage( $lang )->text(),
'targetTitle' => $nt,
'attribs' => $attribs,
- 'query' => [ 'action' => 'edit', 'section' => $section ],
- 'options' => [ 'noclasses', 'known' ]
+ 'query' => [ 'action' => 'edit', 'section' => $section ]
]
];
$result = '<span class="mw-editsection"><span class="mw-editsection-bracket">[</span>';
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
$linksHtml = [];
foreach ( $links as $k => $linkDetails ) {
- $linksHtml[] = Linker::link(
+ $linksHtml[] = $linkRenderer->makeKnownLink(
$linkDetails['targetTitle'],
$linkDetails['text'],
$linkDetails['attribs'],
- $linkDetails['query'],
- $linkDetails['options']
+ $linkDetails['query']
);
}