Georggi199 has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/332821 )

Change subject: Replaced all deprecated Linker methods with proper ones in core
......................................................................

Replaced all deprecated Linker methods with proper ones in core

Only avoided a few methods in DummyLinker and Linker. Should be all that was in 
core.
Extension are still to go. (Will go through them in coming days). Needs some 
testing,
especially with new HTMLArmor ($msg(..)->parse()) as I am not sure that is 100% 
correct way
to do it.

Change-Id: Ie3a718dc1eae1507f8829fcf419c64c6846d2cb6
---
M includes/CategoryViewer.php
M includes/EditPage.php
M includes/FileDeleteForm.php
M includes/Linker.php
M includes/MWGrants.php
M includes/OutputPage.php
M includes/Preferences.php
M includes/ProtectionForm.php
M includes/RevisionList.php
M includes/actions/InfoAction.php
M includes/diff/DifferenceEngine.php
M includes/gallery/TraditionalImageGallery.php
M includes/logging/LogFormatter.php
M includes/logging/LogPage.php
M includes/logging/MergeLogFormatter.php
M includes/logging/MoveLogFormatter.php
M includes/logging/PatrolLogFormatter.php
M includes/logging/ProtectLogFormatter.php
M includes/page/Article.php
M includes/page/ImageHistoryList.php
M includes/page/ImagePage.php
M includes/pager/IndexPager.php
M includes/skins/Skin.php
M includes/specialpage/PageQueryPage.php
M includes/specialpage/WantedQueryPage.php
M includes/specials/SpecialSearch.php
M includes/user/User.php
M tests/phpunit/includes/LinkerTest.php
M tests/phpunit/includes/logging/LogFormatterTest.php
29 files changed, 231 insertions(+), 140 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/21/332821/1

diff --git a/includes/CategoryViewer.php b/includes/CategoryViewer.php
index facf847..31369b0 100644
--- a/includes/CategoryViewer.php
+++ b/includes/CategoryViewer.php
@@ -632,11 +632,12 @@
        private function pagingLinks( $first, $last, $type = '' ) {
                $prevLink = $this->msg( 'prev-page' )->text();
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $first != '' ) {
                        $prevQuery = $this->query;
                        $prevQuery["{$type}until"] = $first;
                        unset( $prevQuery["{$type}from"] );
-                       $prevLink = Linker::linkKnown(
+                       $prevLink = $linkRenderer->makeKnownLink(
                                $this->addFragmentToTitle( $this->title, $type 
),
                                $prevLink,
                                [],
@@ -650,7 +651,7 @@
                        $lastQuery = $this->query;
                        $lastQuery["{$type}from"] = $last;
                        unset( $lastQuery["{$type}until"] );
-                       $nextLink = Linker::linkKnown(
+                       $nextLink = $linkRenderer->makeKnownLink(
                                $this->addFragmentToTitle( $this->title, $type 
),
                                $nextLink,
                                [],
diff --git a/includes/EditPage.php b/includes/EditPage.php
index acbd130..1711cc8 100644
--- a/includes/EditPage.php
+++ b/includes/EditPage.php
@@ -3581,6 +3581,7 @@
         */
        public function getCancelLink() {
                $cancelParams = [];
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( !$this->isConflict && $this->oldid > 0 ) {
                        $cancelParams['oldid'] = $this->oldid;
                } elseif ( $this->getContextTitle()->isRedirect() ) {
@@ -3588,9 +3589,9 @@
                }
                $attrs = [ 'id' => 'mw-editform-cancel' ];
 
-               return Linker::linkKnown(
+               return $linkRenderer->makeKnownLink(
                        $this->getContextTitle(),
-                       $this->context->msg( 'cancel' )->parse(),
+                       new HTMLArmor( $this->context->msg( 'cancel' )->parse() 
),
                        Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ),
                        $cancelParams
                );
diff --git a/includes/FileDeleteForm.php b/includes/FileDeleteForm.php
index f850152..82af081 100644
--- a/includes/FileDeleteForm.php
+++ b/includes/FileDeleteForm.php
@@ -21,6 +21,7 @@
  * @author Rob Church <robc...@gmail.com>
  * @ingroup Media
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * File deletion user interface
@@ -301,9 +302,10 @@
 
                        if ( $wgUser->isAllowed( 'editinterface' ) ) {
                                $title = wfMessage( 
'filedelete-reason-dropdown' )->inContentLanguage()->getTitle();
-                               $link = Linker::linkKnown(
+                               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                               $link = $linkRenderer->makeKnownLink(
                                        $title,
-                                       wfMessage( 'filedelete-edit-reasonlist' 
)->escaped(),
+                                       wfMessage( 'filedelete-edit-reasonlist' 
)->text(),
                                        [],
                                        [ 'action' => 'edit' ]
                                );
diff --git a/includes/Linker.php b/includes/Linker.php
index 794e2e9..5bd9b6e 100644
--- a/includes/Linker.php
+++ b/includes/Linker.php
@@ -329,7 +329,8 @@
 
                if ( $file && !$file->allowInlineDisplay() ) {
                        wfDebug( __METHOD__ . ': ' . $title->getPrefixedDBkey() 
. " does not allow inline display\n" );
-                       return self::link( $title );
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                       return $linkRenderer->makeLink( $title );
                }
 
                // Clean up parameters
@@ -696,6 +697,7 @@
                }
                $encLabel = htmlspecialchars( $label );
                $currentExists = $time ? ( wfFindFile( $title ) != false ) : 
false;
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
 
                if ( ( $wgUploadMissingFileUrl || $wgUploadNavigationUrl || 
$wgEnableUploads )
                        && !$currentExists
@@ -705,12 +707,11 @@
                        if ( $redir ) {
                                // We already know it's a redirect, so mark it
                                // accordingly
-                               return self::link(
+                               return $linkRenderer->makeKnownLink(
                                        $title,
-                                       $encLabel,
+                                       $label,
                                        [ 'class' => 'mw-redirect' ],
-                                       wfCgiToArray( $query ),
-                                       [ 'known', 'noclasses' ]
+                                       wfCgiToArray( $query )
                                );
                        }
 
@@ -721,7 +722,7 @@
                                $encLabel . '</a>';
                }
 
-               return self::link( $title, $encLabel, [], wfCgiToArray( $query 
), [ 'known', 'noclasses' ] );
+               return $linkRenderer->makeKnownLink( $title, $label, [], 
wfCgiToArray( $query ) );
        }
 
        /**
@@ -887,6 +888,7 @@
         */
        public static function userLink( $userId, $userName, $altUserName = 
false ) {
                $classes = 'mw-userlink';
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $userId == 0 ) {
                        $page = SpecialPage::getTitleFor( 'Contributions', 
$userName );
                        if ( $altUserName === false ) {
@@ -898,9 +900,9 @@
                }
 
                // Wrap the output with <bdi> tags for directionality isolation
-               return self::link(
+               return $linkRenderer->makeLink(
                        $page,
-                       '<bdi>' . htmlspecialchars( $altUserName !== false ? 
$altUserName : $userName ) . '</bdi>',
+                       '<bdi>' . ( $altUserName !== false ? $altUserName : 
$userName ) . '</bdi>',
                        [ 'class' => $classes ]
                );
        }
@@ -925,6 +927,7 @@
                $talkable = !( $wgDisableAnonTalk && 0 == $userId );
                $blockable = !( $flags & self::TOOL_LINKS_NOBLOCK );
                $addEmailLink = $flags & self::TOOL_LINKS_EMAIL && $userId;
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
 
                $items = [];
                if ( $talkable ) {
@@ -944,7 +947,7 @@
                        }
                        $contribsPage = SpecialPage::getTitleFor( 
'Contributions', $userText );
 
-                       $items[] = self::link( $contribsPage, wfMessage( 
'contribslink' )->escaped(), $attribs );
+                       $items[] = $linkRenderer->makeLink( $contribsPage, 
wfMessage( 'contribslink' )->text(), $attribs );
                }
                if ( $blockable && $wgUser->isAllowed( 'block' ) ) {
                        $items[] = self::blockLink( $userId, $userText );
@@ -986,7 +989,8 @@
         */
        public static function userTalkLink( $userId, $userText ) {
                $userTalkPage = Title::makeTitle( NS_USER_TALK, $userText );
-               $userTalkLink = self::link( $userTalkPage, wfMessage( 
'talkpagelinktext' )->escaped() );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $userTalkLink = $linkRenderer->makeLink( $userTalkPage, 
wfMessage( 'talkpagelinktext' )->text() );
                return $userTalkLink;
        }
 
@@ -998,7 +1002,8 @@
         */
        public static function blockLink( $userId, $userText ) {
                $blockPage = SpecialPage::getTitleFor( 'Block', $userText );
-               $blockLink = self::link( $blockPage, wfMessage( 'blocklink' 
)->escaped() );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $blockLink = $linkRenderer->makeLink( $blockPage, wfMessage( 
'blocklink' )->text() );
                return $blockLink;
        }
 
@@ -1009,7 +1014,8 @@
         */
        public static function emailLink( $userId, $userText ) {
                $emailPage = SpecialPage::getTitleFor( 'Emailuser', $userText );
-               $emailLink = self::link( $emailPage, wfMessage( 'emaillink' 
)->escaped() );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $emailLink = $linkRenderer->makeLink( $emailPage, wfMessage( 
'emaillink' )->text() );
                return $emailLink;
        }
 
@@ -1328,7 +1334,9 @@
                                /* escape = */ false // Already escaped
                        );
                } else {
-                       $link = Linker::link( $title, $text, [], [], $options );
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRendererFactory()->createFromLegacyOptions(
+                               $options );
+                       $link = $linkRenderer->makeLink( $title, $text, [], [] 
);
                }
 
                return $link;
@@ -1783,7 +1791,6 @@
                        'data-mw' => 'interface',
                        'title' => $context->msg( 'tooltip-rollback' )->text(),
                ];
-               $options = [ 'known', 'noclasses' ];
 
                if ( $context->getRequest()->getBool( 'bot' ) ) {
                        $query['bot'] = '1';
@@ -1800,6 +1807,7 @@
                        }
                }
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( !$disableRollbackEditCount
                        && is_int( $wgShowRollbackEditCount )
                        && $wgShowRollbackEditCount > 0
@@ -1815,10 +1823,10 @@
                                $html = $context->msg( 'rollbacklinkcount' 
)->numParams( $editCount )->parse();
                        }
 
-                       return self::link( $title, $html, $attrs, $query, 
$options );
+                       return $linkRenderer->makeLink( $title, new HtmlArmor( 
$html ), $attrs, $query );
                } else {
                        $html = $context->msg( 'rollbacklink' )->escaped();
-                       return self::link( $title, $html, $attrs, $query, 
$options );
+                       return $linkRenderer->makeLink( $title, new HtmlArmor( 
$html ), $attrs, $query );
                }
        }
 
@@ -1880,10 +1888,11 @@
                        $outText .= wfMessage( 'hiddencategories' )->numParams( 
count( $hiddencats ) )->parseAsBlock();
                        $outText .= "</div><ul>\n";
 
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                        foreach ( $hiddencats as $titleObj ) {
                                # If it's hidden, it must exist - no need to 
check with a LinkBatch
                                $outText .= '<li>'
-                                       . self::link( $titleObj, null, [], [], 
'known' )
+                                       . $linkRenderer->makeKnownLink( 
$titleObj, null, [], [] )
                                        . "</li>\n";
                        }
                        $outText .= '</ul>';
@@ -2046,9 +2055,10 @@
        public static function revDeleteLink( $query = [], $restricted = false, 
$delete = true ) {
                $sp = SpecialPage::getTitleFor( 'Revisiondelete' );
                $msgKey = $delete ? 'rev-delundel' : 'rev-showdeleted';
-               $html = wfMessage( $msgKey )->escaped();
+               $text = wfMessage( $msgKey )->text();
                $tag = $restricted ? 'strong' : 'span';
-               $link = self::link( $sp, $html, [], $query, [ 'known', 
'noclasses' ] );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $link = $linkRenderer->makeKnownLink( $sp, $text, [], $query );
                return Xml::tags(
                        $tag,
                        [ 'class' => 'mw-revdelundel-link' ],
diff --git a/includes/MWGrants.php b/includes/MWGrants.php
index 58efdc7..c7c54fd 100644
--- a/includes/MWGrants.php
+++ b/includes/MWGrants.php
@@ -17,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * A collection of public static functions to deal with grants.
@@ -178,9 +179,10 @@
         * @return string (proto-relative) HTML link
         */
        public static function getGrantsLink( $grant, $lang = null ) {
-               return \Linker::linkKnown(
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               return $linkRenderer->makeKnownLink(
                        \SpecialPage::getTitleFor( 'Listgrants', false, $grant 
),
-                       htmlspecialchars( self::grantName( $grant, $lang ) )
+                       self::grantName( $grant, $lang )
                );
        }
 
diff --git a/includes/OutputPage.php b/includes/OutputPage.php
index 211f44b..0937d2a 100644
--- a/includes/OutputPage.php
+++ b/includes/OutputPage.php
@@ -2515,9 +2515,10 @@
                                        $query['returntoquery'] = wfArrayToCgi( 
$returntoquery );
                                }
                        }
-                       $loginLink = Linker::linkKnown(
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                       $loginLink = $linkRenderer->makeKnownLink(
                                SpecialPage::getTitleFor( 'Userlogin' ),
-                               $this->msg( 'loginreqlink' )->escaped(),
+                               $this->msg( 'loginreqlink' )->text(),
                                [],
                                $query
                        );
diff --git a/includes/Preferences.php b/includes/Preferences.php
index 263ff5b..91768ec 100644
--- a/includes/Preferences.php
+++ b/includes/Preferences.php
@@ -495,9 +495,9 @@
                                        } else {
                                                $disableEmailPrefs = true;
                                                $emailauthenticated = 
$context->msg( 'emailnotauthenticated' )->parse() . '<br />' .
-                                                       Linker::linkKnown(
+                                                       
$linkRenderer->makeKnownLink(
                                                                
SpecialPage::getTitleFor( 'Confirmemail' ),
-                                                               $context->msg( 
'emailconfirmlink' )->escaped()
+                                                               $context->msg( 
'emailconfirmlink' )->text()
                                                        ) . '<br />';
                                                $emailauthenticationclass = 
"mw-email-not-authenticated";
                                        }
@@ -956,11 +956,12 @@
                                'raw' => [ 'EditWatchlist', 'raw' ],
                                'clear' => [ 'EditWatchlist', 'clear' ],
                        ];
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                        foreach ( $editWatchlistModes as $editWatchlistMode => 
$mode ) {
                                // Messages: prefs-editwatchlist-edit, 
prefs-editwatchlist-raw, prefs-editwatchlist-clear
-                               $editWatchlistLinks[] = Linker::linkKnown(
+                               $editWatchlistLinks[] = 
$linkRenderer->makeKnownLink(
                                        SpecialPage::getTitleFor( $mode[0], 
$mode[1] ),
-                                       $context->msg( 
"prefs-editwatchlist-{$editWatchlistMode}" )->parse()
+                                       new HtmlArmor( $context->msg( 
"prefs-editwatchlist-{$editWatchlistMode}" )->parse() )
                                );
                        }
 
diff --git a/includes/ProtectionForm.php b/includes/ProtectionForm.php
index 454ffcc..a68c36f 100644
--- a/includes/ProtectionForm.php
+++ b/includes/ProtectionForm.php
@@ -22,6 +22,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Handles the page protection UI and backend
@@ -543,9 +544,10 @@
                $out .= Xml::closeElement( 'fieldset' );
 
                if ( $user->isAllowed( 'editinterface' ) ) {
-                       $link = Linker::linkKnown(
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                       $link = $linkRenderer->makeKnownLink(
                                $context->msg( 'protect-dropdown' 
)->inContentLanguage()->getTitle(),
-                               $context->msg( 'protect-edit-reasonlist' 
)->escaped(),
+                               $context->msg( 'protect-edit-reasonlist' 
)->text(),
                                [],
                                [ 'action' => 'edit' ]
                        );
diff --git a/includes/RevisionList.php b/includes/RevisionList.php
index 052fd16..53cf6998 100644
--- a/includes/RevisionList.php
+++ b/includes/RevisionList.php
@@ -363,13 +363,14 @@
         * @return string
         */
        protected function getRevisionLink() {
-               $date = htmlspecialchars( 
$this->list->getLanguage()->userTimeAndDate(
-                       $this->revision->getTimestamp(), $this->list->getUser() 
) );
+               $date = $this->list->getLanguage()->userTimeAndDate(
+                       $this->revision->getTimestamp(), $this->list->getUser() 
);
 
                if ( $this->isDeleted() && !$this->canViewContent() ) {
-                       return $date;
+                       return htmlspecialchars( $date );
                }
-               return Linker::linkKnown(
+               $linkRenderer = $this->getLinkRenderer();
+               return $linkRenderer->makeKnownLink(
                        $this->list->title,
                        $date,
                        [],
@@ -391,9 +392,10 @@
                if ( $this->isDeleted() && !$this->canViewContent() ) {
                        return $this->context->msg( 'diff' )->escaped();
                } else {
-                       return Linker::linkKnown(
+                       $linkRenderer = $this->getLinkRenderer();
+                       return $linkRenderer->makeKnownLink(
                                        $this->list->title,
-                                       $this->list->msg( 'diff' )->escaped(),
+                                       $this->list->msg( 'diff' )->text(),
                                        [],
                                        [
                                                'diff' => 
$this->revision->getId(),
diff --git a/includes/actions/InfoAction.php b/includes/actions/InfoAction.php
index 5fb83b3..c66416a 100644
--- a/includes/actions/InfoAction.php
+++ b/includes/actions/InfoAction.php
@@ -388,7 +388,7 @@
                        $prefixIndex = SpecialPage::getTitleFor(
                                'Prefixindex', $title->getPrefixedText() . '/' 
);
                        $pageInfo['header-basic'][] = [
-                               Linker::link( $prefixIndex, $this->msg( 
'pageinfo-subpages-name' )->escaped() ),
+                               $linkRenderer->makeLink( $prefixIndex, 
$this->msg( 'pageinfo-subpages-name' )->text() ),
                                $this->msg( 'pageinfo-subpages-value' )
                                        ->numParams(
                                                
$pageCounts['subpages']['total'],
diff --git a/includes/diff/DifferenceEngine.php 
b/includes/diff/DifferenceEngine.php
index 559a5ec..7c4e862 100644
--- a/includes/diff/DifferenceEngine.php
+++ b/includes/diff/DifferenceEngine.php
@@ -20,6 +20,7 @@
  * @file
  * @ingroup DifferenceEngine
  */
+use MediaWiki\MediaWikiServices;
 
 /** @deprecated use class constant instead */
 define( 'MW_DIFF_VERSION', '1.11a' );
@@ -242,6 +243,7 @@
                $out = $this->getOutput();
                $out->allowClickjacking();
                $out->setRobotPolicy( 'noindex,nofollow' );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
 
                // Allow extensions to add any extra output here
                Hooks::run( 'DifferenceEngineShowDiffPage', [ $out ] );
@@ -331,9 +333,9 @@
 
                        # Make "previous revision link"
                        if ( $samePage && $this->mOldRev->getPrevious() ) {
-                               $prevlink = Linker::linkKnown(
+                               $prevlink = $linkRenderer->makeKnownLink(
                                        $this->mOldPage,
-                                       $this->msg( 'previousdiff' )->escaped(),
+                                       $this->msg( 'previousdiff' )->text(),
                                        [ 'id' => 'differences-prevlink' ],
                                        [ 'diff' => 'prev', 'oldid' => 
$this->mOldid ] + $query
                                );
@@ -379,9 +381,9 @@
                # Make "next revision link"
                # Skip next link on the top revision
                if ( $samePage && !$this->mNewRev->isCurrent() ) {
-                       $nextlink = Linker::linkKnown(
+                       $nextlink = $linkRenderer->makeKnownLink(
                                $this->mNewPage,
-                               $this->msg( 'nextdiff' )->escaped(),
+                               $this->msg( 'nextdiff' )->text(),
                                [ 'id' => 'differences-nextlink' ],
                                [ 'diff' => 'next', 'oldid' => $this->mNewid ] 
+ $query
                        );
@@ -489,10 +491,11 @@
                        if ( !$linkInfo ) {
                                $this->mMarkPatrolledLink = '';
                        } else {
+                               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                                $this->mMarkPatrolledLink = ' <span 
class="patrollink" data-mw="interface">[' .
-                                       Linker::linkKnown(
+                                       $linkRenderer->makeKnownLink(
                                                $this->mNewPage,
-                                               $this->msg( 
'markaspatrolleddiff' )->escaped(),
+                                               $this->msg( 
'markaspatrolleddiff' )->text(),
                                                [],
                                                [
                                                        'action' => 
'markpatrolled',
@@ -1072,6 +1075,7 @@
                $timestamp = $lang->userTimeAndDate( $revtimestamp, $user );
                $dateofrev = $lang->userDate( $revtimestamp, $user );
                $timeofrev = $lang->userTime( $revtimestamp, $user );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
 
                $header = $this->msg(
                        $rev->isCurrent() ? 'currentrev-asof' : 'revisionasof',
@@ -1086,7 +1090,7 @@
 
                $title = $rev->getTitle();
 
-               $header = Linker::linkKnown( $title, $header, [],
+               $header = $linkRenderer->makeKnownLink( $title, new HtmlArmor( 
$header ), [],
                        [ 'oldid' => $rev->getId() ] );
 
                if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) {
@@ -1096,9 +1100,9 @@
                        }
 
                        $key = $title->quickUserCan( 'edit', $user ) ? 
'editold' : 'viewsourceold';
-                       $msg = $this->msg( $key )->escaped();
+                       $msg = $this->msg( $key )->text();
                        $editLink = $this->msg( 'parentheses' )->rawParams(
-                               Linker::linkKnown( $title, $msg, [], $editQuery 
) )->escaped();
+                               $linkRenderer->makeKnownLink( $title, $msg, [], 
$editQuery ) )->escaped();
                        $header .= ' ' . Html::rawElement(
                                'span',
                                [ 'class' => 'mw-diff-edit' ],
diff --git a/includes/gallery/TraditionalImageGallery.php 
b/includes/gallery/TraditionalImageGallery.php
index 1fd7b0a..66c7b8f 100644
--- a/includes/gallery/TraditionalImageGallery.php
+++ b/includes/gallery/TraditionalImageGallery.php
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 class TraditionalImageGallery extends ImageGalleryBase {
        /**
@@ -46,6 +47,7 @@
                        [ 'class' => 'gallery mw-gallery-' . $this->mMode ], 
$this->mAttribs );
 
                $modules = $this->getModules();
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
 
                if ( $this->mParser ) {
                        $this->mParser->getOutput()->addModules( $modules );
@@ -116,9 +118,9 @@
                                # The image is blacklisted, just show it as a 
text link.
                                $thumbhtml = "\n\t\t\t" . '<div class="thumb" 
style="height: ' .
                                        ( $this->getThumbPadding() + 
$this->mHeights ) . 'px;">' .
-                                       Linker::linkKnown(
+                                       $linkRenderer->makeKnownLink(
                                                $nt,
-                                               htmlspecialchars( 
$nt->getText() )
+                                               $nt->getText()
                                        ) .
                                        '</div>';
                        } else {
@@ -187,9 +189,9 @@
 
                        $textlink = $this->mShowFilename ?
                                // Preloaded into LinkCache above
-                               Linker::linkKnown(
+                               $linkRenderer->makeKnownLink(
                                        $nt,
-                                       htmlspecialchars(
+                                       (
                                                $this->mCaptionLength !== true ?
                                                        $lang->truncate( 
$nt->getText(), $this->mCaptionLength ) :
                                                        $nt->getText()
diff --git a/includes/logging/LogFormatter.php 
b/includes/logging/LogFormatter.php
index a64fee1..9ef532a 100644
--- a/includes/logging/LogFormatter.php
+++ b/includes/logging/LogFormatter.php
@@ -22,6 +22,7 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 
2.0 or later
  * @since 1.19
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Implements the default log formatting.
@@ -610,7 +611,8 @@
         */
        protected function makePageLink( Title $title = null, $parameters = [], 
$html = null ) {
                if ( !$this->plaintext ) {
-                       $link = Linker::link( $title, $html, [], $parameters );
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                       $link = $linkRenderer->makeKnownLink( $title, new 
HtmlArmor( $html ), [], $parameters );
                } else {
                        if ( !$title instanceof Title ) {
                                throw new MWException( "Expected title, got 
null" );
diff --git a/includes/logging/LogPage.php b/includes/logging/LogPage.php
index 64102b7..94dcc15 100644
--- a/includes/logging/LogPage.php
+++ b/includes/logging/LogPage.php
@@ -22,6 +22,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Class to simplify the use of log pages.
@@ -297,22 +298,23 @@
                        return $title->getPrefixedText();
                }
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $title->isSpecialPage() ) {
                        list( $name, $par ) = SpecialPageFactory::resolveAlias( 
$title->getDBkey() );
 
                        # Use the language name for log titles, rather than 
Log/X
                        if ( $name == 'Log' ) {
                                $logPage = new LogPage( $par );
-                               $titleLink = Linker::link( $title, 
$logPage->getName()->escaped() );
+                               $titleLink = $linkRenderer->makeLink( $title, 
$logPage->getName()->text() );
                                $titleLink = wfMessage( 'parentheses' )
                                        ->inLanguage( $lang )
                                        ->rawParams( $titleLink )
                                        ->escaped();
                        } else {
-                               $titleLink = Linker::link( $title );
+                               $titleLink = $linkRenderer->makeLink( $title );
                        }
                } else {
-                       $titleLink = Linker::link( $title );
+                       $titleLink = $linkRenderer->makeLink( $title );
                }
 
                return $titleLink;
diff --git a/includes/logging/MergeLogFormatter.php 
b/includes/logging/MergeLogFormatter.php
index b0edd4c..5687cb9 100644
--- a/includes/logging/MergeLogFormatter.php
+++ b/includes/logging/MergeLogFormatter.php
@@ -21,6 +21,7 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 
2.0 or later
  * @since 1.25
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * This class formats merge log entries.
@@ -52,11 +53,12 @@
                        return '';
                }
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                // Show unmerge link
                $params = $this->extractParameters();
-               $revert = Linker::linkKnown(
+               $revert = $linkRenderer->makeKnownLink(
                        SpecialPage::getTitleFor( 'MergeHistory' ),
-                       $this->msg( 'revertmerge' )->escaped(),
+                       $this->msg( 'revertmerge' )->text(),
                        [],
                        [
                                'target' => $params[3],
diff --git a/includes/logging/MoveLogFormatter.php 
b/includes/logging/MoveLogFormatter.php
index afbf8e9..40fc787 100644
--- a/includes/logging/MoveLogFormatter.php
+++ b/includes/logging/MoveLogFormatter.php
@@ -22,6 +22,7 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 
2.0 or later
  * @since 1.22
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * This class formats move log entries.
@@ -71,9 +72,10 @@
                        return '';
                }
 
-               $revert = Linker::linkKnown(
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $revert = $linkRenderer->makeKnownLink(
                        SpecialPage::getTitleFor( 'Movepage' ),
-                       $this->msg( 'revertmove' )->escaped(),
+                       $this->msg( 'revertmove' )->text(),
                        [],
                        [
                                'wpOldTitle' => $destTitle->getPrefixedDBkey(),
diff --git a/includes/logging/PatrolLogFormatter.php 
b/includes/logging/PatrolLogFormatter.php
index 5b933ce..70807e2 100644
--- a/includes/logging/PatrolLogFormatter.php
+++ b/includes/logging/PatrolLogFormatter.php
@@ -22,6 +22,7 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 
2.0 or later
  * @since 1.22
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * This class formats patrol log entries.
@@ -54,7 +55,8 @@
                                'oldid' => $oldid,
                                'diff' => 'prev'
                        ];
-                       $revlink = Linker::link( $target, htmlspecialchars( 
$revision ), [], $query );
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                       $revlink = $linkRenderer->makeLink( $target, $revision, 
[], $query );
                } else {
                        $revlink = htmlspecialchars( $revision );
                }
diff --git a/includes/logging/ProtectLogFormatter.php 
b/includes/logging/ProtectLogFormatter.php
index 0458297..1da96bf 100644
--- a/includes/logging/ProtectLogFormatter.php
+++ b/includes/logging/ProtectLogFormatter.php
@@ -21,6 +21,7 @@
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 
2.0 or later
  * @since 1.26
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * This class formats protect log entries.
@@ -84,11 +85,12 @@
                        return '';
                }
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                // Show history link for all changes after the protection
                $title = $this->entry->getTarget();
                $links = [
-                       Linker::link( $title,
-                               $this->msg( 'hist' )->escaped(),
+                       $linkRenderer->makeLink( $title,
+                               $this->msg( 'hist' )->text(),
                                [],
                                [
                                        'action' => 'history',
@@ -99,9 +101,9 @@
 
                // Show change protection link
                if ( $this->context->getUser()->isAllowed( 'protect' ) ) {
-                       $links[] = Linker::linkKnown(
+                       $links[] = $linkRenderer->makeKnownLink(
                                $title,
-                               $this->msg( 'protect_change' )->escaped(),
+                               $this->msg( 'protect_change' )->text(),
                                [],
                                [ 'action' => 'protect' ]
                        );
diff --git a/includes/page/Article.php b/includes/page/Article.php
index 4bcb655..4e7ee5a 100644
--- a/includes/page/Article.php
+++ b/includes/page/Article.php
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Class for viewing MediaWiki article and history.
@@ -867,6 +868,7 @@
                }
                $redirectTargetUrl = $this->getTitle()->getLinkURL( $query );
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( isset( $this->mRedirectedFrom ) ) {
                        // Avoid PHP 7.1 warning of passing $this by reference
                        $articlePage = $this;
@@ -874,7 +876,7 @@
                        // This is an internally redirected page view.
                        // We'll need a backlink to the source page for 
navigation.
                        if ( Hooks::run( 'ArticleViewRedirect', [ &$articlePage 
] ) ) {
-                               $redir = Linker::linkKnown(
+                               $redir = $linkRenderer->makeKnownLink(
                                        $this->mRedirectedFrom,
                                        null,
                                        [],
@@ -1103,9 +1105,10 @@
                        $outputPage->addModules( 'mediawiki.page.patrol.ajax' );
                }
 
-               $link = Linker::linkKnown(
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $link = $linkRenderer->makeKnownLink(
                        $title,
-                       $markPatrolledMsg->escaped(),
+                       $markPatrolledMsg->text(),
                        [],
                        [
                                'action' => 'markpatrolled',
@@ -1351,19 +1354,20 @@
                                ->parse() .
                        "</div>";
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                $lnk = $current
                        ? $context->msg( 'currentrevisionlink' )->escaped()
-                       : Linker::linkKnown(
+                       : $linkRenderer->makeKnownLink(
                                $this->getTitle(),
-                               $context->msg( 'currentrevisionlink' 
)->escaped(),
+                               $context->msg( 'currentrevisionlink' )->text(),
                                [],
                                $extraParams
                        );
                $curdiff = $current
                        ? $context->msg( 'diff' )->escaped()
-                       : Linker::linkKnown(
+                       : $linkRenderer->makeKnownLink(
                                $this->getTitle(),
-                               $context->msg( 'diff' )->escaped(),
+                               $context->msg( 'diff' )->text(),
                                [],
                                [
                                        'diff' => 'cur',
@@ -1372,9 +1376,9 @@
                        );
                $prev = $this->getTitle()->getPreviousRevisionID( $oldid );
                $prevlink = $prev
-                       ? Linker::linkKnown(
+                       ? $linkRenderer->makeKnownLink(
                                $this->getTitle(),
-                               $context->msg( 'previousrevision' )->escaped(),
+                               $context->msg( 'previousrevision' )->text(),
                                [],
                                [
                                        'direction' => 'prev',
@@ -1383,9 +1387,9 @@
                        )
                        : $context->msg( 'previousrevision' )->escaped();
                $prevdiff = $prev
-                       ? Linker::linkKnown(
+                       ? $linkRenderer->makeKnownLink(
                                $this->getTitle(),
-                               $context->msg( 'diff' )->escaped(),
+                               $context->msg( 'diff' )->text(),
                                [],
                                [
                                        'diff' => 'prev',
@@ -1395,9 +1399,9 @@
                        : $context->msg( 'diff' )->escaped();
                $nextlink = $current
                        ? $context->msg( 'nextrevision' )->escaped()
-                       : Linker::linkKnown(
+                       : $linkRenderer->makeKnownLink(
                                $this->getTitle(),
-                               $context->msg( 'nextrevision' )->escaped(),
+                               $context->msg( 'nextrevision' )->text(),
                                [],
                                [
                                        'direction' => 'next',
@@ -1406,9 +1410,9 @@
                        );
                $nextdiff = $current
                        ? $context->msg( 'diff' )->escaped()
-                       : Linker::linkKnown(
+                       : $linkRenderer->makeKnownLink(
                                $this->getTitle(),
-                               $context->msg( 'diff' )->escaped(),
+                               $context->msg( 'diff' )->text(),
                                [],
                                [
                                        'diff' => 'next',
@@ -1468,16 +1472,27 @@
                }
 
                $html = '<ul class="redirectText">';
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                /** @var Title $title */
                foreach ( $target as $title ) {
-                       $html .= '<li>' . Linker::link(
-                               $title,
-                               htmlspecialchars( $title->getFullText() ),
-                               [],
-                               // Make sure wiki page redirects are not 
followed
-                               $title->isRedirect() ? [ 'redirect' => 'no' ] : 
[],
-                               ( $forceKnown ? [ 'known', 'noclasses' ] : [] )
-                       ) . '</li>';
+                       if ( $forceKnown ) {
+                               $html .= '<li>' . $linkRenderer->makeKnownLink(
+                                               $title,
+                                               $title->getFullText(),
+                                               [],
+                                               // Make sure wiki page 
redirects are not followed
+                                               $title->isRedirect() ? [ 
'redirect' => 'no' ] : []
+                                       ) . '</li>';
+                       } else {
+                               $html .= '<li>' . $linkRenderer->makeLink(
+                                               $title,
+                                               $title->getFullText(),
+                                               [],
+                                               // Make sure wiki page 
redirects are not followed
+                                               $title->isRedirect() ? [ 
'redirect' => 'no' ] : []
+                                       ) . '</li>';
+                       }
+
                }
                $html .= '</ul>';
 
@@ -1637,12 +1652,13 @@
                                __METHOD__
                        );
 
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                        // @todo FIXME: i18n issue/patchwork message
                        $context->getOutput()->addHTML(
                                '<strong class="mw-delete-warning-revisions">' .
                                $context->msg( 'historywarning' )->numParams( 
$revisions )->parse() .
-                               $context->msg( 'word-separator' )->escaped() . 
Linker::linkKnown( $title,
-                                       $context->msg( 'history' )->escaped(),
+                               $context->msg( 'word-separator' )->escaped() . 
$linkRenderer->makeKnownLink( $title,
+                                       $context->msg( 'history' )->text(),
                                        [],
                                        [ 'action' => 'history' ] ) .
                                '</strong>'
@@ -1756,9 +1772,10 @@
                        Xml::closeElement( 'form' );
 
                        if ( $user->isAllowed( 'editinterface' ) ) {
-                               $link = Linker::linkKnown(
+                               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                               $link = $linkRenderer->makeKnownLink(
                                        $ctx->msg( 'deletereason-dropdown' 
)->inContentLanguage()->getTitle(),
-                                       wfMessage( 'delete-edit-reasonlist' 
)->escaped(),
+                                       wfMessage( 'delete-edit-reasonlist' 
)->text(),
                                        [],
                                        [ 'action' => 'edit' ]
                                );
diff --git a/includes/page/ImageHistoryList.php 
b/includes/page/ImageHistoryList.php
index bb8ed24..2f40f63 100644
--- a/includes/page/ImageHistoryList.php
+++ b/includes/page/ImageHistoryList.php
@@ -17,6 +17,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Builds the image revision log shown on image pages
@@ -124,6 +125,7 @@
                $local = $this->current->isLocal();
                $row = $selected = '';
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                // Deletion link
                if ( $local && ( $user->isAllowedAny( 'delete', 
'deletedhistory' ) ) ) {
                        $row .= '<td>';
@@ -133,9 +135,9 @@
                                if ( !$iscur ) {
                                        $q['oldimage'] = $img;
                                }
-                               $row .= Linker::linkKnown(
+                               $row .= $linkRenderer->makeKnownLink(
                                        $this->title,
-                                       $this->msg( $iscur ? 
'filehist-deleteall' : 'filehist-deleteone' )->escaped(),
+                                       $this->msg( $iscur ? 
'filehist-deleteall' : 'filehist-deleteone' )->text(),
                                        [], $q
                                );
                        }
@@ -173,9 +175,9 @@
                        if ( $file->isDeleted( File::DELETED_FILE ) ) {
                                $row .= $this->msg( 'filehist-revert' 
)->escaped();
                        } else {
-                               $row .= Linker::linkKnown(
+                               $row .= $linkRenderer->makeKnownLink(
                                        $this->title,
-                                       $this->msg( 'filehist-revert' 
)->escaped(),
+                                       $this->msg( 'filehist-revert' )->text(),
                                        [],
                                        [
                                                'action' => 'revert',
@@ -200,7 +202,7 @@
                                $this->preventClickjacking();
                                $revdel = SpecialPage::getTitleFor( 
'Revisiondelete' );
                                # Make a link to review the image
-                               $url = Linker::linkKnown(
+                               $url = $linkRenderer->makeKnownLink(
                                        $revdel,
                                        $lang->userTimeAndDate( $timestamp, 
$user ),
                                        [],
diff --git a/includes/page/ImagePage.php b/includes/page/ImagePage.php
index b60b010..15138a0 100644
--- a/includes/page/ImagePage.php
+++ b/includes/page/ImagePage.php
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * Class for viewing MediaWiki file description pages
@@ -308,6 +309,7 @@
                $maxWidth = $max[0];
                $maxHeight = $max[1];
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $this->displayImg->exists() ) {
                        # image
                        $page = $request->getIntOrNull( 'page' );
@@ -435,7 +437,7 @@
                                                $label = $out->parse( 
$this->getContext()->msg( 'imgmultipageprev' )->text(), false );
                                                // on the client side, this 
link is generated in ajaxifyPageNavigation()
                                                // in the 
mediawiki.page.image.pagination module
-                                               $link = Linker::linkKnown(
+                                               $link = 
$linkRenderer->makeKnownLink(
                                                        $this->getTitle(),
                                                        $label,
                                                        [],
@@ -455,7 +457,7 @@
 
                                        if ( $page < $count ) {
                                                $label = 
$this->getContext()->msg( 'imgmultipagenext' )->text();
-                                               $link = Linker::linkKnown(
+                                               $link = 
$linkRenderer->makeKnownLink(
                                                        $this->getTitle(),
                                                        $label,
                                                        [],
@@ -873,6 +875,7 @@
                // Sort the list by namespace:title
                usort( $rows, [ $this, 'compare' ] );
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                // Create links for every element
                $currentCount = 0;
                foreach ( $rows as $element ) {
@@ -886,7 +889,7 @@
                        if ( isset( $redirects[$element->page_title] ) ) {
                                $query['redirect'] = 'no';
                        }
-                       $link = Linker::linkKnown(
+                       $link = $linkRenderer->makeKnownLink(
                                Title::makeTitle( $element->page_namespace, 
$element->page_title ),
                                null, [], $query
                        );
@@ -907,7 +910,7 @@
                                                break;
                                        }
 
-                                       $link2 = Linker::linkKnown( 
Title::makeTitle( $row->page_namespace, $row->page_title ) );
+                                       $link2 = $linkRenderer->makeKnownLink( 
Title::makeTitle( $row->page_namespace, $row->page_title ) );
                                        $li .= Html::rawElement(
                                                'li',
                                                [ 'class' => 
'mw-imagepage-linkstoimage-ns' . $element->page_namespace ],
@@ -956,13 +959,14 @@
                );
                $out->addHTML( "<ul class='mw-imagepage-duplicates'>\n" );
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                /**
                 * @var $file File
                 */
                foreach ( $dupes as $file ) {
                        $fromSrc = '';
                        if ( $file->isLocal() ) {
-                               $link = Linker::linkKnown( $file->getTitle() );
+                               $link = $linkRenderer->makeKnownLink( 
$file->getTitle() );
                        } else {
                                $link = Linker::makeExternalLink( 
$file->getDescriptionUrl(),
                                        $file->getTitle()->getPrefixedText() );
diff --git a/includes/pager/IndexPager.php b/includes/pager/IndexPager.php
index 395cee5..4507b34 100644
--- a/includes/pager/IndexPager.php
+++ b/includes/pager/IndexPager.php
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Pager
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * IndexPager is an efficient pager which uses a (roughly unique) index in the
@@ -476,7 +477,8 @@
                        $attrs['class'] = "mw-{$type}link";
                }
 
-               return Linker::linkKnown(
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               return $linkRenderer->makeKnownLink(
                        $this->getTitle(),
                        $text,
                        $attrs,
diff --git a/includes/skins/Skin.php b/includes/skins/Skin.php
index 96812ea..782802d 100644
--- a/includes/skins/Skin.php
+++ b/includes/skins/Skin.php
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * @defgroup Skins Skins
@@ -452,13 +453,14 @@
                $s = '';
                $colon = $this->msg( 'colon-separator' )->escaped();
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( !empty( $allCats['normal'] ) ) {
                        $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'] ) )->text();
                        $linkPage = wfMessage( 'pagecategorieslink' 
)->inContentLanguage()->text();
                        $title = Title::newFromText( $linkPage );
-                       $link = $title ? Linker::link( $title, $msg ) : $msg;
+                       $link = $title ? $linkRenderer->makeLink( $title, $msg 
) : $msg;
                        $s .= '<div id="mw-normal-catlinks" 
class="mw-normal-catlinks">' .
                                $link . $colon . '<ul>' . $t . '</ul>' . 
'</div>';
                }
@@ -507,6 +509,7 @@
        function drawCategoryBrowser( $tree ) {
                $return = '';
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                foreach ( $tree as $element => $parent ) {
                        if ( empty( $parent ) ) {
                                # element start a new list
@@ -518,7 +521,7 @@
 
                        # 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;
@@ -645,10 +648,11 @@
                                        $msg = 'viewdeleted';
                                }
 
+                               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                                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();
                        }
                }
@@ -671,6 +675,7 @@
                        return $subpages;
                }
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $out->isArticle() && MWNamespace::hasSubpages( 
$title->getNamespace() ) ) {
                        $ptext = $title->getPrefixedText();
                        if ( strpos( $ptext, '/' ) !== false ) {
@@ -687,9 +692,9 @@
                                        $linkObj = Title::newFromText( 
$growinglink );
 
                                        if ( is_object( $linkObj ) && 
$linkObj->isKnown() ) {
-                                               $getlink = Linker::linkKnown(
+                                               $getlink = 
$linkRenderer->makeKnownLink(
                                                        $linkObj,
-                                                       htmlspecialchars( 
$display )
+                                                       $display
                                                );
 
                                                $c++;
@@ -760,9 +765,10 @@
                        $msg = 'copyright';
                }
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                if ( $wgRightsPage ) {
                        $title = Title::newFromText( $wgRightsPage );
-                       $link = Linker::linkKnown( $title, $wgRightsText );
+                       $link = $linkRenderer->makeKnownLink( $title, 
$wgRightsText );
                } elseif ( $wgRightsUrl ) {
                        $link = Linker::makeExternalLink( $wgRightsUrl, 
$wgRightsText );
                } elseif ( $wgRightsText ) {
@@ -917,9 +923,10 @@
         * @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;
@@ -937,9 +944,10 @@
                        return '';
                }
 
-               return Linker::linkKnown(
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               return $linkRenderer->makeKnownLink(
                        $title,
-                       $this->msg( $desc )->escaped()
+                       $this->msg( $desc )->text()
                );
        }
 
@@ -1385,16 +1393,17 @@
                        // 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(
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                       $newMessagesLink = $linkRenderer->makeKnownLink(
                                $uTalkTitle,
-                               $this->msg( 'newmessageslinkplural' )->params( 
$plural )->escaped(),
+                               $this->msg( 'newmessageslinkplural' )->params( 
$plural )->text(),
                                [],
                                [ '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' ]
@@ -1560,12 +1569,14 @@
 
                $linksHtml = [];
                foreach ( $links as $k => $linkDetails ) {
-                       $linksHtml[] = Linker::link(
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRendererFactory()->createFromLegacyOptions(
+                               $linkDetails['options']
+                       );
+                       $linksHtml[] = $linkRenderer->makeLink(
                                $linkDetails['targetTitle'],
                                $linkDetails['text'],
                                $linkDetails['attribs'],
-                               $linkDetails['query'],
-                               $linkDetails['options']
+                               $linkDetails['query']
                        );
                }
 
diff --git a/includes/specialpage/PageQueryPage.php 
b/includes/specialpage/PageQueryPage.php
index 3bb3f85..dc95d34 100644
--- a/includes/specialpage/PageQueryPage.php
+++ b/includes/specialpage/PageQueryPage.php
@@ -52,8 +52,9 @@
                $title = Title::makeTitleSafe( $row->namespace, $row->title );
 
                if ( $title instanceof Title ) {
+                       $linkRenderer = $this->getLinkRenderer();
                        $text = $wgContLang->convert( $title->getPrefixedText() 
);
-                       return Linker::link( $title, htmlspecialchars( $text ) 
);
+                       return $linkRenderer->makeLink( $title, $text );
                } else {
                        return Html::element( 'span', [ 'class' => 
'mw-invalidtitle' ],
                                Linker::getInvalidTitleDescription( 
$this->getContext(), $row->namespace, $row->title ) );
diff --git a/includes/specialpage/WantedQueryPage.php 
b/includes/specialpage/WantedQueryPage.php
index 00fca12..ae06920 100644
--- a/includes/specialpage/WantedQueryPage.php
+++ b/includes/specialpage/WantedQueryPage.php
@@ -113,8 +113,9 @@
         * @return string
         */
        private function makeWlhLink( $title, $result ) {
+               $linkRenderer = $this->getLinkRenderer();
                $wlh = SpecialPage::getTitleFor( 'Whatlinkshere', 
$title->getPrefixedText() );
-               $label = $this->msg( 'nlinks' )->numParams( $result->value 
)->escaped();
-               return Linker::link( $wlh, $label );
+               $label = $this->msg( 'nlinks' )->numParams( $result->value 
)->text();
+               return $linkRenderer->makeLink( $wlh, $label );
        }
 }
diff --git a/includes/specials/SpecialSearch.php 
b/includes/specials/SpecialSearch.php
index 255e618..f91a989 100644
--- a/includes/specials/SpecialSearch.php
+++ b/includes/specials/SpecialSearch.php
@@ -843,7 +843,8 @@
                        $parsed = wfParseUrl( wfExpandUrl( $interwiki ? 
$interwiki->getURL() : '/' ) );
                        $caption = $this->msg( 'search-interwiki-default', 
$parsed['host'] )->text();
                }
-               $searchLink = Linker::linkKnown(
+               $linkRenderer = $this->getLinkRenderer();
+               $searchLink = $linkRenderer->makeKnownLink(
                        Title::newFromText( "$iwPrefix:Special:Search" ),
                        $this->msg( 'search-interwiki-more' )->text(),
                        [],
diff --git a/includes/user/User.php b/includes/user/User.php
index fed64c2..f1d9590 100644
--- a/includes/user/User.php
+++ b/includes/user/User.php
@@ -4833,7 +4833,8 @@
                }
                $title = self::getGroupPage( $group );
                if ( $title ) {
-                       return Linker::link( $title, htmlspecialchars( $text ) 
);
+                       $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+                       return $linkRenderer->makeLink( $title, $text );
                } else {
                        return htmlspecialchars( $text );
                }
diff --git a/tests/phpunit/includes/LinkerTest.php 
b/tests/phpunit/includes/LinkerTest.php
index 3edf99f..41376e7 100644
--- a/tests/phpunit/includes/LinkerTest.php
+++ b/tests/phpunit/includes/LinkerTest.php
@@ -377,7 +377,8 @@
 
                $this->setMwGlobals( 'wgHooks', [ 'LinkBegin' => [ $callback ] 
] );
                $title = SpecialPage::getTitleFor( 'Blankpage' );
-               $out = Linker::link( $title );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $out = $linkRenderer->makeLink( $title );
                $this->assertEquals( $expected, $out );
        }
 
@@ -420,8 +421,9 @@
 
                $this->setMwGlobals( 'wgHooks', [ 'LinkEnd' => [ $callback ] ] 
);
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                $title = SpecialPage::getTitleFor( 'Blankpage' );
-               $out = Linker::link( $title );
+               $out = $linkRenderer->makeLink( $title );
                $this->assertEquals( $expected, $out );
        }
 
@@ -454,24 +456,29 @@
                        0 // redir
                );
 
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $linkRenderer->setStubThreshold( 0 );
                $this->assertEquals(
                        '',
-                       Linker::getLinkColour( $foobarTitle, 0 )
+                       $linkRenderer->getLinkClasses( $foobarTitle )
                );
 
+               $linkRenderer->setStubThreshold( 20 );
                $this->assertEquals(
                        'stub',
-                       Linker::getLinkColour( $foobarTitle, 20 )
+                       $linkRenderer->getLinkClasses( $foobarTitle )
                );
 
+               $linkRenderer->setStubThreshold( 0 );
                $this->assertEquals(
                        'mw-redirect',
-                       Linker::getLinkColour( $redirectTitle, 0 )
+                       $linkRenderer->getLinkClasses( $redirectTitle )
                );
 
+               $linkRenderer->setStubThreshold( 20 );
                $this->assertEquals(
                        '',
-                       Linker::getLinkColour( $userTitle, 20 )
+                       $linkRenderer->getLinkClasses( $userTitle )
                );
        }
 }
diff --git a/tests/phpunit/includes/logging/LogFormatterTest.php 
b/tests/phpunit/includes/logging/LogFormatterTest.php
index a21a3ff..bca81cc 100644
--- a/tests/phpunit/includes/logging/LogFormatterTest.php
+++ b/tests/phpunit/includes/logging/LogFormatterTest.php
@@ -1,4 +1,5 @@
 <?php
+use MediaWiki\MediaWikiServices;
 
 /**
  * @group Database
@@ -101,7 +102,8 @@
                        $this->user->getEditCount()
                );
 
-               $titleLink = Linker::link( $this->title, null, [], [] );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $titleLink = $linkRenderer->makeLink( $this->title, null, [], 
[] );
 
                // $paramsWithoutTools and $paramsWithTools should be only 
different
                // in index 0
@@ -121,8 +123,9 @@
         * @covers LogFormatter::getActionText
         */
        public function testLogParamsTypeRaw() {
-               $params = [ '4:raw:raw' => Linker::link( $this->title, null, 
[], [] ) ];
-               $expected = Linker::link( $this->title, null, [], [] );
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
+               $params = [ '4:raw:raw' => $linkRenderer->makeLink( 
$this->title, null, [], [] ) ];
+               $expected = $linkRenderer->makeLink( $this->title, null, [], [] 
);
 
                $entry = $this->newLogEntry( 'param', $params );
                $formatter = LogFormatter::newFromEntry( $entry );
@@ -211,8 +214,9 @@
         * @covers LogFormatter::getActionText
         */
        public function testLogParamsTypeTitleLink() {
+               $linkRenderer = 
MediaWikiServices::getInstance()->getLinkRenderer();
                $params = [ '4:title-link:titleLink' => $this->title->getText() 
];
-               $expected = Linker::link( $this->title, null, [], [] );
+               $expected = $linkRenderer->makeLink( $this->title, null, [], [] 
);
 
                $entry = $this->newLogEntry( 'param', $params );
                $formatter = LogFormatter::newFromEntry( $entry );

-- 
To view, visit https://gerrit.wikimedia.org/r/332821
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie3a718dc1eae1507f8829fcf419c64c6846d2cb6
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Georggi199 <bmp2...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to