/**
* 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 );
}
/**
*
* If the option noBrackets is set the rollback link wont be enclosed in "[]".
*
- * See the "mediawiki.page.rollback" module for the client-side handling of this link.
- *
* @since 1.16.3. $context added in 1.20. $options added in 1.21
*
* @param Revision $rev
$inner = $context->msg( 'brackets' )->rawParams( $inner )->escaped();
}
- $context->getOutput()->addModules( 'mediawiki.page.rollback' );
-
return '<span class="mw-rollback-link">' . $inner . '</span>';
}
$query = [
'action' => 'rollback',
'from' => $rev->getUserText(),
+ 'token' => $context->getUser()->getEditToken( 'rollback' ),
];
$attrs = [
'data-mw' => 'interface',
return $store;
},
+ 'WatchedItemQueryService' => function( MediaWikiServices $services ) {
+ return new WatchedItemQueryService( $services->getDBLoadBalancer() );
+ },
+
'LinkCache' => function( MediaWikiServices $services ) {
return new LinkCache(
$services->getTitleFormatter()
'LinkRendererFactory' => function( MediaWikiServices $services ) {
return new LinkRendererFactory(
- $services->getTitleFormatter()
+ $services->getTitleFormatter(),
+ $services->getLinkCache()
);
},
}
/**
+ * @covers MediaWiki\Linker\LinkRenderer::runLegacyBeginHook
* @dataProvider provideLinkBeginHook
*/
public function testLinkBeginHook( $callback, $expected ) {
}
/**
+ * @covers MediaWiki\Linker\LinkRenderer::buildAElement
* @dataProvider provideLinkEndHook
*/
public function testLinkEndHook( $callback, $expected ) {
* @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' );
use MediaWiki\MediaWikiServices;
/**
- * @covers LinkRendererFactory
+ * @covers MediaWiki\Linker\LinkRendererFactory
*/
class LinkRendererFactoryTest extends MediaWikiLangTestCase {
*/
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;
/**
- * @covers LinkRenderer
+ * @covers MediaWiki\Linker\LinkRenderer
*/
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 )
+ );
+ }
+
}