X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Flinker%2FLinkRenderer.php;h=c203a16b3f65d9683b4b31253748c23527c29688;hb=00c8d18575b353a826b64c351ece9e381c51f663;hp=432dcb23dcec27c6ef6e845c57f090a4e4b980c4;hpb=a33815b27b8e1dba390a1f73fa9328b5a0e20612;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/linker/LinkRenderer.php b/includes/linker/LinkRenderer.php index 432dcb23dc..c203a16b3f 100644 --- a/includes/linker/LinkRenderer.php +++ b/includes/linker/LinkRenderer.php @@ -25,8 +25,10 @@ use DummyLinker; use Hooks; use Html; use HtmlArmor; +use LinkCache; use Linker; use MediaWiki\MediaWikiServices; +use MWNamespace; use Sanitizer; use Title; use TitleFormatter; @@ -34,6 +36,7 @@ use TitleFormatter; /** * Class that generates HTML links for pages. * + * @see https://www.mediawiki.org/wiki/Manual:LinkRenderer * @since 1.28 */ class LinkRenderer { @@ -62,6 +65,11 @@ class LinkRenderer { */ private $titleFormatter; + /** + * @var LinkCache + */ + private $linkCache; + /** * Whether to run the legacy Linker hooks * @@ -71,9 +79,11 @@ class LinkRenderer { /** * @param TitleFormatter $titleFormatter + * @param LinkCache $linkCache */ - public function __construct( TitleFormatter $titleFormatter ) { + public function __construct( TitleFormatter $titleFormatter, LinkCache $linkCache ) { $this->titleFormatter = $titleFormatter; + $this->linkCache = $linkCache; } /** @@ -225,7 +235,7 @@ class LinkRenderer { } /** - * If you have already looked up the proper CSS classes using Linker::getLinkColour() + * If you have already looked up the proper CSS classes using LinkRenderer::getLinkClasses() * or some other method, use this to avoid looking it up again. * * @param LinkTarget $target @@ -276,7 +286,7 @@ class LinkRenderer { if ( $target->isExternal() ) { $classes[] = 'extiw'; } - $colour = Linker::getLinkColour( $target, $this->stubThreshold ); + $colour = $this->getLinkClasses( $target ); if ( $colour !== '' ) { $classes[] = $colour; } @@ -391,16 +401,13 @@ class LinkRenderer { private function getLinkURL( LinkTarget $target, array $query = [] ) { // TODO: Use a LinkTargetResolver service instead of Title $title = Title::newFromLinkTarget( $target ); - $proto = $this->expandUrls !== false - ? $this->expandUrls - : PROTO_RELATIVE; if ( $this->forceArticlePath ) { $realQuery = $query; $query = []; } else { $realQuery = []; } - $url = $title->getLinkURL( $query, false, $proto ); + $url = $title->getLinkURL( $query, false, $this->expandUrls ); if ( $this->forceArticlePath && $realQuery ) { $url = wfAppendQuery( $url, $realQuery ); @@ -445,4 +452,30 @@ class LinkRenderer { return $ret; } + /** + * Return the CSS classes of a known link + * + * @param LinkTarget $target + * @return string CSS class + */ + public function getLinkClasses( LinkTarget $target ) { + // Make sure the target is in the cache + $id = $this->linkCache->addLinkObj( $target ); + if ( $id == 0 ) { + // Doesn't exist + return ''; + } + + if ( $this->linkCache->getGoodLinkFieldObj( $target, 'redirect' ) ) { + # Page is a redirect + return 'mw-redirect'; + } elseif ( $this->stubThreshold > 0 && MWNamespace::isContent( $target->getNamespace() ) + && $this->linkCache->getGoodLinkFieldObj( $target, 'length' ) < $this->stubThreshold + ) { + # Page is a stub + return 'stub'; + } + + return ''; + } }