);
}
+ /**
+ * @deprecated since 1.28, use LinkRenderer::getLinkClasses() instead
+ */
public function getLinkColour( $t, $threshold ) {
+ wfDeprecated( __METHOD__, '1.28' );
return Linker::getLinkColour( $t, $threshold );
}
/**
* Return the CSS colour of a known link
*
+ * @deprecated since 1.28, use LinkRenderer::getLinkClasses() instead
+ *
* @since 1.16.3
* @param LinkTarget $t
* @param int $threshold User defined threshold
* @return string CSS class
*/
public static function getLinkColour( LinkTarget $t, $threshold ) {
- $linkCache = MediaWikiServices::getInstance()->getLinkCache();
- // Make sure the target is in the cache
- $id = $linkCache->addLinkObj( $t );
- if ( $id == 0 ) {
- // Doesn't exist
- return '';
- }
-
- if ( $linkCache->getGoodLinkFieldObj( $t, 'redirect' ) ) {
- # Page is a redirect
- return 'mw-redirect';
- } elseif ( $threshold > 0 && MWNamespace::isContent( $t->getNamespace() )
- && $linkCache->getGoodLinkFieldObj( $t, 'length' ) < $threshold
- ) {
- # Page is a stub
- return 'stub';
+ wfDeprecated( __METHOD__, '1.28' );
+ $services = MediaWikiServices::getInstance();
+ $linkRenderer = $services->getLinkRenderer();
+ if ( $threshold !== $linkRenderer->getStubThreshold() ) {
+ // Need to create a new instance with the right stub threshold...
+ $linkRenderer = $services->getLinkRendererFactory()->create();
+ $linkRenderer->setStubThreshold( $threshold );
}
- return '';
+ return $linkRenderer->getLinkClasses( $t );
}
/**
'LinkRendererFactory' => function( MediaWikiServices $services ) {
return new LinkRendererFactory(
- $services->getTitleFormatter()
+ $services->getTitleFormatter(),
+ $services->getLinkCache()
);
},
use Hooks;
use Html;
use HtmlArmor;
+use LinkCache;
use Linker;
use MediaWiki\MediaWikiServices;
+use MWNamespace;
use Sanitizer;
use Title;
use TitleFormatter;
*/
private $titleFormatter;
+ /**
+ * @var LinkCache
+ */
+ private $linkCache;
+
/**
* Whether to run the legacy Linker hooks
*
/**
* @param TitleFormatter $titleFormatter
+ * @param LinkCache $linkCache
*/
- public function __construct( TitleFormatter $titleFormatter ) {
+ public function __construct( TitleFormatter $titleFormatter, LinkCache $linkCache ) {
$this->titleFormatter = $titleFormatter;
+ $this->linkCache = $linkCache;
}
/**
}
/**
- * 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
if ( $target->isExternal() ) {
$classes[] = 'extiw';
}
- $colour = Linker::getLinkColour( $target, $this->stubThreshold );
+ $colour = $this->getLinkClasses( $target );
if ( $colour !== '' ) {
$classes[] = $colour;
}
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 '';
+ }
}
*/
namespace MediaWiki\Linker;
+use LinkCache;
use TitleFormatter;
use User;
*/
private $titleFormatter;
+ /**
+ * @var LinkCache
+ */
+ private $linkCache;
+
/**
* @param TitleFormatter $titleFormatter
+ * @param LinkCache $linkCache
*/
- public function __construct( TitleFormatter $titleFormatter ) {
+ public function __construct( TitleFormatter $titleFormatter, LinkCache $linkCache ) {
$this->titleFormatter = $titleFormatter;
+ $this->linkCache = $linkCache;
}
/**
* @return LinkRenderer
*/
public function create() {
- return new LinkRenderer( $this->titleFormatter );
+ return new LinkRenderer( $this->titleFormatter, $this->linkCache );
}
/**
$linkCache = LinkCache::singleton();
$output = $this->parent->getOutput();
$linkRenderer = $this->parent->getLinkRenderer();
- $threshold = $linkRenderer->getStubThreshold();
$dbr = wfGetDB( DB_SLAVE );
} else {
$id = $linkCache->getGoodLinkID( $pdbk );
if ( $id != 0 ) {
- $colours[$pdbk] = Linker::getLinkColour( $title, $threshold );
+ $colours[$pdbk] = $linkRenderer->getLinkClasses( $title );
$output->addLink( $title, $id );
$linkcolour_ids[$id] = $pdbk;
} elseif ( $linkCache->isBadLink( $pdbk ) ) {
$pdbk = $title->getPrefixedDBkey();
$linkCache->addGoodLinkObjFromRow( $title, $s );
$output->addLink( $title, $s->page_id );
- $colours[$pdbk] = Linker::getLinkColour( $title, $threshold );
+ $colours[$pdbk] = $linkRenderer->getLinkClasses( $title );
// add id to the extension todolist
$linkcolour_ids[$s->page_id] = $pdbk;
}
$variantMap = []; // maps $pdbkey_Variant => $keys (of link holders)
$output = $this->parent->getOutput();
$linkCache = LinkCache::singleton();
- $threshold = $this->parent->getOptions()->getStubThreshold();
$titlesToBeConverted = '';
$titlesAttrs = [];
);
$linkcolour_ids = [];
+ $linkRenderer = $this->parent->getLinkRenderer();
// for each found variants, figure out link holders and replace
foreach ( $varRes as $s ) {
$entry['pdbk'] = $varPdbk;
// set pdbk and colour
- $colours[$varPdbk] = Linker::getLinkColour( $variantTitle, $threshold );
+ $colours[$varPdbk] = $linkRenderer->getLinkClasses( $variantTitle );
$linkcolour_ids[$s->page_id] = $pdbk;
}
}
* @covers Linker::getLinkColour
*/
public function testGetLinkColour() {
+ $this->hideDeprecated( 'Linker::getLinkColour' );
$linkCache = MediaWikiServices::getInstance()->getLinkCache();
$foobarTitle = Title::makeTitle( NS_MAIN, 'FooBar' );
$redirectTitle = Title::makeTitle( NS_MAIN, 'Redirect' );
'wgArticlePath' => '/wiki/$1'
] );
- $this->linkRenderer = new LinkRenderer(
- MediaWikiServices::getInstance()->getTitleFormatter()
- );
+ $this->linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
}
public function testNewFromRecentChange() {
$rcCacheFactory = new RCCacheEntryFactory(
new RequestContext(),
[ 'diff' => 'diff', 'cur' => 'cur', 'last' => 'last' ],
- new LinkRenderer(
- MediaWikiServices::getInstance()->getTitleFormatter()
- )
+ MediaWikiServices::getInstance()->getLinkRenderer()
);
return $rcCacheFactory->newFromRecentChange( $recentChange, false );
}
*/
private $titleFormatter;
+ /**
+ * @var LinkCache
+ */
+ private $linkCache;
+
public function setUp() {
parent::setUp();
$this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
+ $this->linkCache = MediaWikiServices::getInstance()->getLinkCache();
}
public static function provideCreateFromLegacyOptions() {
* @dataProvider provideCreateFromLegacyOptions
*/
public function testCreateFromLegacyOptions( $options, $func, $val ) {
- $factory = new LinkRendererFactory( $this->titleFormatter );
+ $factory = new LinkRendererFactory( $this->titleFormatter, $this->linkCache );
$linkRenderer = $factory->createFromLegacyOptions(
$options
);
}
public function testCreate() {
- $factory = new LinkRendererFactory( $this->titleFormatter );
+ $factory = new LinkRendererFactory( $this->titleFormatter, $this->linkCache );
$this->assertInstanceOf( LinkRenderer::class, $factory->create() );
}
public function testCreateForUser() {
+ /** @var PHPUnit_Framework_MockObject_MockObject|User $user */
$user = $this->getMock( User::class, [ 'getStubThreshold' ] );
$user->expects( $this->once() )
->method( 'getStubThreshold' )
->willReturn( 15 );
- $factory = new LinkRendererFactory( $this->titleFormatter );
+ $factory = new LinkRendererFactory( $this->titleFormatter, $this->linkCache );
$linkRenderer = $factory->createForUser( $user );
$this->assertInstanceOf( LinkRenderer::class, $linkRenderer );
$this->assertEquals( 15, $linkRenderer->getStubThreshold() );
<?php
use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\Linker\LinkRendererFactory;
use MediaWiki\MediaWikiServices;
/**
class LinkRendererTest extends MediaWikiLangTestCase {
/**
- * @var TitleFormatter
+ * @var LinkRendererFactory
*/
- private $titleFormatter;
+ private $factory;
public function setUp() {
parent::setUp();
'wgScriptPath' => '/w',
'wgScript' => '/w/index.php',
] );
- $this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
+ $this->factory = MediaWikiServices::getInstance()->getLinkRendererFactory();
+
}
public function testMergeAttribs() {
$target = new TitleValue( NS_SPECIAL, 'Blankpage' );
- $linkRenderer = new LinkRenderer( $this->titleFormatter );
+ $linkRenderer = $this->factory->create();
$link = $linkRenderer->makeBrokenLink( $target, null, [
// Appended to class
'class' => 'foobar',
public function testMakeKnownLink() {
$target = new TitleValue( NS_MAIN, 'Foobar' );
- $linkRenderer = new LinkRenderer( $this->titleFormatter );
+ $linkRenderer = $this->factory->create();
// Query added
$this->assertEquals(
public function testMakeBrokenLink() {
$target = new TitleValue( NS_MAIN, 'Foobar' );
$special = new TitleValue( NS_SPECIAL, 'Foobar' );
- $linkRenderer = new LinkRenderer( $this->titleFormatter );
+ $linkRenderer = $this->factory->create();
// action=edit&redlink=1 added
$this->assertEquals(
}
public function testMakeLink() {
- $linkRenderer = new LinkRenderer( $this->titleFormatter );
+ $linkRenderer = $this->factory->create();
$foobar = new TitleValue( NS_SPECIAL, 'Foobar' );
$blankpage = new TitleValue( NS_SPECIAL, 'Blankpage' );
$this->assertEquals(
$linkRenderer->makeLink( $foobar, new HtmlArmor( '<script>evil()</script>' ) )
);
}
+
+ public function testGetLinkClasses() {
+ $titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
+ $linkCache = new LinkCache( $titleFormatter );
+ $foobarTitle = new TitleValue( NS_MAIN, 'FooBar' );
+ $redirectTitle = new TitleValue( NS_MAIN, 'Redirect' );
+ $userTitle = new TitleValue( NS_USER, 'Someuser' );
+ $linkCache->addGoodLinkObj(
+ 1, // id
+ $foobarTitle,
+ 10, // len
+ 0 // redir
+ );
+ $linkCache->addGoodLinkObj(
+ 2, // id
+ $redirectTitle,
+ 10, // len
+ 1 // redir
+ );
+
+ $linkCache->addGoodLinkObj(
+ 3, // id
+ $userTitle,
+ 10, // len
+ 0 // redir
+ );
+
+ $linkRenderer = new LinkRenderer( $titleFormatter, $linkCache );
+ $linkRenderer->setStubThreshold( 0 );
+ $this->assertEquals(
+ '',
+ $linkRenderer->getLinkClasses( $foobarTitle )
+ );
+
+ $linkRenderer->setStubThreshold( 20 );
+ $this->assertEquals(
+ 'stub',
+ $linkRenderer->getLinkClasses( $foobarTitle )
+ );
+
+ $linkRenderer->setStubThreshold( 0 );
+ $this->assertEquals(
+ 'mw-redirect',
+ $linkRenderer->getLinkClasses( $redirectTitle )
+ );
+
+ $linkRenderer->setStubThreshold( 20 );
+ $this->assertEquals(
+ '',
+ $linkRenderer->getLinkClasses( $userTitle )
+ );
+ }
+
}