Adrian Heine has uploaded a new change for review.
https://gerrit.wikimedia.org/r/286421
Change subject: Move parser output post-processing from View to Repo
......................................................................
Move parser output post-processing from View to Repo
Change-Id: Ia2e42846738b22d0d604cd524b2384c8407ac85d
---
M repo/WikibaseRepo.entitytypes.php
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
M repo/includes/ParserOutput/DispatchingEntityViewFactory.php
M repo/includes/ParserOutput/EntityParserOutputGenerator.php
R repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
A repo/includes/ParserOutput/ParserOutputEntityTermsView.php
A repo/includes/ParserOutput/PlaceholderEmittingTermsListView.php
R repo/includes/ParserOutput/TextInjector.php
M repo/tests/phpunit/includes/ParserOutput/DispatchingEntityViewFactoryTest.php
M repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorTest.php
R repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
A repo/tests/phpunit/includes/ParserOutput/ParserOutputEntityTermsViewTest.php
R repo/tests/phpunit/includes/ParserOutput/TextInjectorTest.php
M view/resources/templates.php
M view/src/EntityTermsView.php
M view/src/EntityView.php
A view/src/TableTermsListView.php
M view/src/TermsListView.php
M view/src/ViewFactory.php
M view/tests/phpunit/EntityTermsViewTest.php
M view/tests/phpunit/ItemViewTest.php
M view/tests/phpunit/PropertyViewTest.php
R view/tests/phpunit/TableTermsListViewTest.php
M view/tests/phpunit/ViewFactoryTest.php
24 files changed, 589 insertions(+), 319 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/21/286421/1
diff --git a/repo/WikibaseRepo.entitytypes.php
b/repo/WikibaseRepo.entitytypes.php
index af53142..1fbe0d2 100644
--- a/repo/WikibaseRepo.entitytypes.php
+++ b/repo/WikibaseRepo.entitytypes.php
@@ -22,6 +22,7 @@
use Wikibase\LanguageFallbackChain;
use Wikibase\Repo\WikibaseRepo;
use Wikibase\View\EditSectionGenerator;
+use Wikibase\View\EntityTermsView;
return array(
'item' => array(
@@ -29,14 +30,16 @@
$languageCode,
LabelDescriptionLookup $labelDescriptionLookup,
LanguageFallbackChain $fallbackChain,
- EditSectionGenerator $editSectionGenerator
+ EditSectionGenerator $editSectionGenerator,
+ EntityTermsView $entityTermsView
) {
$viewFactory =
WikibaseRepo::getDefaultInstance()->getViewFactory();
return $viewFactory->newItemView(
$languageCode,
$labelDescriptionLookup,
$fallbackChain,
- $editSectionGenerator
+ $editSectionGenerator,
+ $entityTermsView
);
},
'content-model-id' => CONTENT_MODEL_WIKIBASE_ITEM,
@@ -53,14 +56,16 @@
$languageCode,
LabelDescriptionLookup $labelDescriptionLookup,
LanguageFallbackChain $fallbackChain,
- EditSectionGenerator $editSectionGenerator
+ EditSectionGenerator $editSectionGenerator,
+ EntityTermsView $entityTermsView
) {
$viewFactory =
WikibaseRepo::getDefaultInstance()->getViewFactory();
return $viewFactory->newPropertyView(
$languageCode,
$labelDescriptionLookup,
$fallbackChain,
- $editSectionGenerator
+ $editSectionGenerator,
+ $entityTermsView
);
},
'content-model-id' => CONTENT_MODEL_WIKIBASE_PROPERTY,
diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index fc1376a..2ca9873 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -16,10 +16,10 @@
use Wikibase\Repo\BabelUserLanguageLookup;
use Wikibase\Repo\MediaWikiLanguageDirectionalityLookup;
use Wikibase\Repo\MediaWikiLocalizedTextProvider;
+use Wikibase\Repo\ParserOutput\EntityViewPlaceholderExpander;
+use Wikibase\Repo\ParserOutput\TextInjector;
use Wikibase\Repo\WikibaseRepo;
-use Wikibase\View\EntityViewPlaceholderExpander;
use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\TextInjector;
/**
* Handler for the "OutputPageBeforeHTML" hook.
diff --git a/repo/includes/ParserOutput/DispatchingEntityViewFactory.php
b/repo/includes/ParserOutput/DispatchingEntityViewFactory.php
index 8b654dc..2c40517 100644
--- a/repo/includes/ParserOutput/DispatchingEntityViewFactory.php
+++ b/repo/includes/ParserOutput/DispatchingEntityViewFactory.php
@@ -7,6 +7,7 @@
use Wikibase\LanguageFallbackChain;
use Wikibase\View\EditSectionGenerator;
use Wikibase\View\EntityView;
+use Wikibase\View\EntityTermsView;
use Wikimedia\Assert\Assert;
/**
@@ -41,6 +42,7 @@
* @param LabelDescriptionLookup $labelDescriptionLookup
* @param LanguageFallbackChain $languageFallbackChain
* @param EditSectionGenerator $editSectionGenerator
+ * @param EntityTermsView $entityTermsView
*
* @throws OutOfBoundsException
* @return EntityView
@@ -50,7 +52,8 @@
$languageCode,
LabelDescriptionLookup $labelDescriptionLookup,
LanguageFallbackChain $languageFallbackChain,
- EditSectionGenerator $editSectionGenerator
+ EditSectionGenerator $editSectionGenerator,
+ EntityTermsView $entityTermsView
) {
if ( !isset( $this->entityViewFactoryCallbacks[$entityType] ) )
{
throw new OutOfBoundsException( "No EntityView is
registered for entity type '$entityType'" );
@@ -61,7 +64,8 @@
$languageCode,
$labelDescriptionLookup,
$languageFallbackChain,
- $editSectionGenerator
+ $editSectionGenerator,
+ $entityTermsView
);
Assert::postcondition(
diff --git a/repo/includes/ParserOutput/EntityParserOutputGenerator.php
b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
index 817eccd..0306ee9 100644
--- a/repo/includes/ParserOutput/EntityParserOutputGenerator.php
+++ b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
@@ -23,8 +23,8 @@
use Wikibase\Repo\View\RepoSpecialPageLinker;
use Wikibase\View\EmptyEditSectionGenerator;
use Wikibase\View\LocalizedTextProvider;
+use Wikibase\View\TableTermsListView;
use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\TermsListView;
use Wikibase\View\ToolbarEditSectionGenerator;
/**
@@ -279,12 +279,21 @@
$this->textProvider
) : new EmptyEditSectionGenerator();
+ $textInjector = new TextInjector();
+ $entityTermsView = new ParserOutputEntityTermsView(
+ $this->templateFactory,
+ $editSectionGenerator,
+ $this->textProvider,
+ $textInjector
+ );
+
$entityView = $this->entityViewFactory->newEntityView(
$entity->getType(),
$this->languageCode,
$labelDescriptionLookup,
$this->languageFallbackChain,
- $editSectionGenerator
+ $editSectionGenerator,
+ $entityTermsView
);
// Set the display title to display the label together with the
item's id
@@ -293,13 +302,13 @@
$html = $entityView->getHtml( $entity );
$parserOutput->setText( $html );
- $parserOutput->setExtensionData( 'wikibase-view-chunks',
$entityView->getPlaceholders() );
+ $parserOutput->setExtensionData( 'wikibase-view-chunks',
$textInjector->getMarkers() );
$parserOutput->setExtensionData( 'wikibase-terms-list-items',
$this->getTermsListItems( $entity ) );
}
private function getTermsListItems( EntityDocument $entity ) {
- $termsListView = new TermsListView(
+ $termsListView = new TableTermsListView(
TemplateFactory::getDefaultInstance(),
new LanguageNameLookup( $this->languageCode ),
new MediaWikiLocalizedTextProvider( $this->languageCode
),
diff --git a/view/src/EntityViewPlaceholderExpander.php
b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
similarity index 94%
rename from view/src/EntityViewPlaceholderExpander.php
rename to repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
index 5f65c5e..a54748c 100644
--- a/view/src/EntityViewPlaceholderExpander.php
+++ b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
@@ -1,6 +1,6 @@
<?php
-namespace Wikibase\View;
+namespace Wikibase\Repo\ParserOutput;
use InvalidArgumentException;
use MWException;
@@ -10,18 +10,16 @@
use Wikibase\DataModel\Term\DescriptionsProvider;
use Wikibase\DataModel\Term\LabelsProvider;
use Wikibase\Lib\LanguageNameLookup;
+use Wikibase\View\LanguageDirectionalityLookup;
+use Wikibase\View\LocalizedTextProvider;
+use Wikibase\View\TableTermsListView;
use Wikibase\View\Template\TemplateFactory;
/**
- * Utility for expanding the placeholders left in the HTML by EntityView.
+ * Utility for expanding placeholders left in the HTML
*
* This is used to inject any non-cacheable information into the HTML
* that was cached as part of the ParserOutput.
- *
- * @note This class encapsulated knowledge about which placeholders are used by
- * EntityView, and with what meaning.
- *
- * @see EntityView
*
* @since 0.5
*
@@ -182,7 +180,7 @@
*/
public function renderTermBox() {
- $termsListView = new TermsListView(
+ $termsListView = new TableTermsListView(
$this->templateFactory,
$this->languageNameLookup,
$this->textProvider,
diff --git a/repo/includes/ParserOutput/ParserOutputEntityTermsView.php
b/repo/includes/ParserOutput/ParserOutputEntityTermsView.php
new file mode 100644
index 0000000..055a76b
--- /dev/null
+++ b/repo/includes/ParserOutput/ParserOutputEntityTermsView.php
@@ -0,0 +1,84 @@
+<?php
+
+namespace Wikibase\Repo\ParserOutput;
+
+use Wikibase\DataModel\Entity\EntityId;
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\AliasesProvider;
+use Wikibase\DataModel\Term\DescriptionsProvider;
+use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\TermList;
+use Wikibase\View\EditSectionGenerator;
+use Wikibase\View\EntityTermsView;
+use Wikibase\View\LocalizedTextProvider;
+use Wikibase\View\Template\TemplateFactory;
+use Wikibase\View\TermsListView;
+
+/**
+ * An EntityTermsView that returns placeholders for some parts of the HTML
+ *
+ * @since 0.5
+ *
+ * @license GPL-2.0+
+ * @author Adrian Heine <[email protected]>
+ */
+class ParserOutputEntityTermsView extends EntityTermsView {
+
+ /**
+ * @var TextInjector
+ */
+ private $textInjector;
+
+ /**
+ * @param TemplateFactory $templateFactory
+ * @param EditSectionGenerator $sectionEditLinkGenerator
+ * @param LocalizedTextProvider $textProvider
+ */
+ public function __construct(
+ TemplateFactory $templateFactory,
+ EditSectionGenerator $sectionEditLinkGenerator,
+ LocalizedTextProvider $textProvider,
+ TextInjector $textInjector
+ ) {
+ $termsListView = new PlaceholderEmittingTermsListView(
$textInjector );
+ parent::__construct( $templateFactory,
$sectionEditLinkGenerator, $termsListView, $textProvider );
+ $this->textInjector = $textInjector;
+ }
+
+ /**
+ * @param string $mainLanguageCode Desired language of the label,
description and aliases in the
+ * title and header section. Not necessarily identical to the
interface language.
+ * @param LabelsProvider $labelsProvider
+ * @param DescriptionsProvider $descriptionsProvider
+ * @param AliasesProvider|null $aliasesProvider
+ * @param EntityId|null $entityId the id of the entity
+ * @param string $cssClasses
+ *
+ * @return string HTML
+ */
+ public function getHtml(
+ $mainLanguageCode,
+ LabelsProvider $labelsProvider,
+ DescriptionsProvider $descriptionsProvider,
+ AliasesProvider $aliasesProvider = null,
+ EntityId $entityId = null,
+ $cssClasses = ''
+ ) {
+ if ( $cssClasses !== '' ) {
+ $cssClasses .= ' ';
+ }
+ $cssClasses .= $this->textInjector->newMarker(
+
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class'
+ );
+
+ return parent::getHtml(
+ $mainLanguageCode,
+ $labelsProvider,
+ $descriptionsProvider,
+ $aliasesProvider,
+ $entityId,
+ $cssClasses
+ );
+ }
+
+}
diff --git a/repo/includes/ParserOutput/PlaceholderEmittingTermsListView.php
b/repo/includes/ParserOutput/PlaceholderEmittingTermsListView.php
new file mode 100644
index 0000000..3d800f1
--- /dev/null
+++ b/repo/includes/ParserOutput/PlaceholderEmittingTermsListView.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Wikibase\Repo\ParserOutput;
+
+use Wikibase\DataModel\Term\AliasesProvider;
+use Wikibase\DataModel\Term\DescriptionsProvider;
+use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\View\TermsListView;
+
+/**
+ * Generates a TextInjector marker instead of a terms list
+ *
+ * @since 0.5
+ *
+ * @license GPL-2.0+
+ * @author Adrian Heine <[email protected]>
+ */
+class PlaceholderEmittingTermsListView implements TermsListView {
+
+ /**
+ * @var TextInjector
+ */
+ private $textInjector;
+
+ /**
+ * @param TextInjector $textInjector
+ */
+ public function __construct(
+ TextInjector $textInjector
+ ) {
+ $this->textInjector = $textInjector;
+ }
+
+ /**
+ * @param LabelsProvider $labelsProvider
+ * @param DescriptionsProvider $descriptionsProvider
+ * @param AliasesProvider|null $aliasesProvider
+ * @param string[] $languageCodes The languages the user requested to
be shown
+ *
+ * @return string HTML
+ */
+ public function getHtml(
+ LabelsProvider $labelsProvider,
+ DescriptionsProvider $descriptionsProvider,
+ AliasesProvider $aliasesProvider = null,
+ array $languageCodes
+ ) {
+ return $this->textInjector->newMarker( 'termbox' );
+ }
+
+}
diff --git a/view/src/TextInjector.php
b/repo/includes/ParserOutput/TextInjector.php
similarity index 97%
rename from view/src/TextInjector.php
rename to repo/includes/ParserOutput/TextInjector.php
index 800719b..f85ea5e 100644
--- a/view/src/TextInjector.php
+++ b/repo/includes/ParserOutput/TextInjector.php
@@ -1,6 +1,6 @@
<?php
-namespace Wikibase\View;
+namespace Wikibase\Repo\ParserOutput;
/**
* Helper for injecting text by substituting placeholders.
diff --git
a/repo/tests/phpunit/includes/ParserOutput/DispatchingEntityViewFactoryTest.php
b/repo/tests/phpunit/includes/ParserOutput/DispatchingEntityViewFactoryTest.php
index 4916e55..44cc801 100644
---
a/repo/tests/phpunit/includes/ParserOutput/DispatchingEntityViewFactoryTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/DispatchingEntityViewFactoryTest.php
@@ -10,6 +10,7 @@
use Wikibase\LanguageFallbackChain;
use Wikibase\Repo\ParserOutput\DispatchingEntityViewFactory;
use Wikibase\View\EditSectionGenerator;
+use Wikibase\View\EntityTermsView;
use Wikibase\View\EntityView;
/**
@@ -36,13 +37,17 @@
$factory = new DispatchingEntityViewFactory(
array()
);
+ $entityTermsView = $this->getMockBuilder(
EntityTermsView::class )
+ ->disableOriginalConstructor()
+ ->getMock();
$factory->newEntityView(
'unknown',
'en',
$this->getMock( LabelDescriptionLookup::class ),
new LanguageFallbackChain( array() ),
- $this->getMock( EditSectionGenerator::class )
+ $this->getMock( EditSectionGenerator::class ),
+ $entityTermsView
);
}
@@ -57,13 +62,17 @@
}
)
);
+ $entityTermsView = $this->getMockBuilder(
EntityTermsView::class )
+ ->disableOriginalConstructor()
+ ->getMock();
$factory->newEntityView(
'foo',
'en',
$this->getMock( LabelDescriptionLookup::class ),
new LanguageFallbackChain( array() ),
- $this->getMock( EditSectionGenerator::class )
+ $this->getMock( EditSectionGenerator::class ),
+ $entityTermsView
);
}
@@ -71,6 +80,9 @@
$labelDescriptionLookup = $this->getMock(
LabelDescriptionLookup::class );
$languageFallbackChain = new LanguageFallbackChain( array() );
$editSectionGenerator = $this->getMock(
EditSectionGenerator::class );
+ $entityTermsView = $this->getMockBuilder(
EntityTermsView::class )
+ ->disableOriginalConstructor()
+ ->getMock();
$entityView = $this->getMockBuilder( EntityView::class )
->disableOriginalConstructor()
->getMockForAbstractClass();
@@ -78,18 +90,26 @@
$factory = new DispatchingEntityViewFactory(
array(
'foo' => function(
- $languageCodeParam,
- LabelDescriptionLookup
$labelDescriptionLookupParam,
- LanguageFallbackChain
$languageFallbackChainParam,
- EditSectionGenerator
$editSectionGeneratorParam
- ) use ( $labelDescriptionLookup,
$languageFallbackChain, $editSectionGenerator, $entityView ) {
- $this->assertEquals( 'en',
$languageCodeParam );
- $this->assertSame(
$labelDescriptionLookup, $labelDescriptionLookupParam );
- $this->assertSame(
$languageFallbackChain, $languageFallbackChainParam );
- $this->assertSame(
$editSectionGenerator, $editSectionGeneratorParam );
+ $languageCodeParam,
+ LabelDescriptionLookup
$labelDescriptionLookupParam,
+ LanguageFallbackChain
$languageFallbackChainParam,
+ EditSectionGenerator
$editSectionGeneratorParam,
+ EntityTermsView
$entityTermsViewParam
+ ) use(
+ $labelDescriptionLookup,
+ $languageFallbackChain,
+ $editSectionGenerator,
+ $entityTermsView,
+ $entityView
+ ) {
+ $this->assertEquals( 'en',
$languageCodeParam );
+ $this->assertSame(
$labelDescriptionLookup, $labelDescriptionLookupParam );
+ $this->assertSame(
$languageFallbackChain, $languageFallbackChainParam );
+ $this->assertSame(
$editSectionGenerator, $editSectionGeneratorParam );
+ $this->assertSame(
$entityTermsView, $entityTermsViewParam );
- return $entityView;
- }
+ return $entityView;
+ }
)
);
@@ -98,7 +118,8 @@
'en',
$labelDescriptionLookup,
$languageFallbackChain,
- $editSectionGenerator
+ $editSectionGenerator,
+ $entityTermsView
);
$this->assertSame( $entityView, $newEntityView );
diff --git
a/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorTest.php
b/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorTest.php
index 4c31202..ece1d71 100644
---
a/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorTest.php
@@ -50,11 +50,7 @@
$this->assertSame( '<TITLE>', $parserOutput->getTitleText(),
'title text' );
$this->assertSame( '<HTML>', $parserOutput->getText(), 'html
text' );
- $this->assertSame(
- '<PLACEHOLDERS>',
- $parserOutput->getExtensionData( 'wikibase-view-chunks'
),
- 'view chunks'
- );
+ $this->assertSame( [], $parserOutput->getExtensionData(
'wikibase-view-chunks' ), 'view chunks' );
$this->assertSame( array( '<JS>' ),
$parserOutput->getJsConfigVars(), 'config vars' );
@@ -244,7 +240,6 @@
->setMethods( array(
'getTitleHtml',
'getHtml',
- 'getPlaceholders',
) )
->disableOriginalConstructor()
->getMockForAbstractClass();
@@ -256,10 +251,6 @@
$entityView->expects( $this->any() )
->method( 'getHtml' )
->will( $this->returnValue( '<HTML>' ) );
-
- $entityView->expects( $this->any() )
- ->method( 'getPlaceholders' )
- ->will( $this->returnValue( '<PLACEHOLDERS>' ) );
return $entityView;
}
diff --git a/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
similarity index 94%
rename from view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
rename to
repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
index e0eeb95..32e04cf 100644
--- a/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
+++
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
@@ -1,6 +1,6 @@
<?php
-namespace Wikibase\View\Tests;
+namespace Wikibase\Repo\Tests\ParserOutput;
use PHPUnit_Framework_TestCase;
use User;
@@ -8,13 +8,13 @@
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Term\AliasesProvider;
use Wikibase\Lib\LanguageNameLookup;
-use Wikibase\View\EntityViewPlaceholderExpander;
+use Wikibase\Repo\ParserOutput\EntityViewPlaceholderExpander;
use Wikibase\View\DummyLocalizedTextProvider;
use Wikibase\View\LanguageDirectionalityLookup;
use Wikibase\View\Template\TemplateFactory;
/**
- * @covers Wikibase\View\EntityViewPlaceholderExpander
+ * @covers Wikibase\Repo\ParserOutput\EntityViewPlaceholderExpander
*
* @uses Wikibase\View\TermsListView
* @uses Wikibase\View\Template\Template
@@ -22,7 +22,6 @@
* @uses Wikibase\View\Template\TemplateRegistry
*
* @group Wikibase
- * @group WikibaseView
*
* @license GPL-2.0+
* @author Daniel Kinzler
diff --git
a/repo/tests/phpunit/includes/ParserOutput/ParserOutputEntityTermsViewTest.php
b/repo/tests/phpunit/includes/ParserOutput/ParserOutputEntityTermsViewTest.php
new file mode 100644
index 0000000..6429ffe
--- /dev/null
+++
b/repo/tests/phpunit/includes/ParserOutput/ParserOutputEntityTermsViewTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Wikibase\Repo\Tests\ParserOutput;
+
+use PHPUnit_Framework_TestCase;
+use Wikibase\DataModel\Entity\Property;
+use Wikibase\Repo\ParserOutput\ParserOutputEntityTermsView;
+use Wikibase\Repo\ParserOutput\TextInjector;
+use Wikibase\View\EditSectionGenerator;
+use Wikibase\View\LocalizedTextProvider;
+use Wikibase\View\Template\TemplateFactory;
+
+/**
+ * @covers Wikibase\Repo\ParserOutput\ParserOutputEntityTermsView
+ *
+ * @license GNU GPL v2+
+ * @author Adrian Heine <[email protected]>
+ */
+class ParserOutputEntityTermsViewTest extends PHPUnit_Framework_TestCase {
+
+ private function newEntityTermsView( TextInjector $textInjector ) {
+ return new ParserOutputEntityTermsView(
+ TemplateFactory::getDefaultInstance(),
+ $this->getMock( EditSectionGenerator::class ),
+ $this->getMock( LocalizedTextProvider::class ),
+ $textInjector
+ );
+ }
+
+ public function testGetHtml() {
+ $textInjector = new TextInjector();
+ $property = new Property( null, null, 'string' );
+
+ $entityTermsView = $this->newEntityTermsView( $textInjector );
+
+ $result = $entityTermsView->getHtml(
+ 'lkt',
+ $property,
+ $property,
+ $property
+ );
+
+ $this->assertEquals(
+ array_values( $textInjector->getMarkers() ),
+ [ [
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class' ],
[ 'termbox' ] ]
+ );
+ }
+
+}
diff --git a/view/tests/phpunit/TextInjectorTest.php
b/repo/tests/phpunit/includes/ParserOutput/TextInjectorTest.php
similarity index 87%
rename from view/tests/phpunit/TextInjectorTest.php
rename to repo/tests/phpunit/includes/ParserOutput/TextInjectorTest.php
index 4d1ac49..06ba794 100644
--- a/view/tests/phpunit/TextInjectorTest.php
+++ b/repo/tests/phpunit/includes/ParserOutput/TextInjectorTest.php
@@ -1,14 +1,14 @@
<?php
-namespace Wikibase\View\Tests;
+namespace Wikibase\Repo\ParserOutput\Tests;
-use Wikibase\View\TextInjector;
+use Wikibase\Repo\ParserOutput\TextInjector;
/**
- * @covers Wikibase\View\TextInjector
+ * @covers Wikibase\Repo\ParserOutput\TextInjector
*
* @group Wikibase
- * @group WikibaseView
+ * @group WikibaseRepo
*
* @license GPL-2.0+
* @author Daniel Kinzler
diff --git a/view/resources/templates.php b/view/resources/templates.php
index 1cae72c..e971bb4 100644
--- a/view/resources/templates.php
+++ b/view/resources/templates.php
@@ -166,14 +166,19 @@
$templates['wikibase-entitytermsview'] =
<<<HTML
<div class="wikibase-entitytermsview">
- <div class="wikibase-entitytermsview-heading">
- <!-- [0,*] wikibase-entitytermsview-heading-part -->$1
- </div>
+ <!-- wikibase-entitytermsview-heading -->$1
<!-- ? wikibase-toolbar -->$4
<div class="wikibase-entitytermsview-entitytermsforlanguagelistview
$3"><!-- wikibase-entitytermsforlanguagelistview -->$2</div>
</div>
HTML;
+ $templates['wikibase-entitytermsview-heading'] =
+<<<HTML
+<div class="wikibase-entitytermsview-heading">
+ <!-- [0,*] wikibase-entitytermsview-heading-part -->$1
+</div>
+HTML;
+
$templates['wikibase-entitytermsview-heading-part'] =
<<<HTML
<div class="wikibase-entitytermsview-heading-$1 $2">$3</div>
diff --git a/view/src/EntityTermsView.php b/view/src/EntityTermsView.php
index 63e7251..126081c 100644
--- a/view/src/EntityTermsView.php
+++ b/view/src/EntityTermsView.php
@@ -34,6 +34,11 @@
private $sectionEditLinkGenerator;
/**
+ * @var TermsListView
+ */
+ private $termsListView;
+
+ /**
* @var LocalizedTextProvider
*/
private $textProvider;
@@ -41,15 +46,18 @@
/**
* @param TemplateFactory $templateFactory
* @param EditSectionGenerator $sectionEditLinkGenerator
+ * @param TermsListView $termsListView
* @param LocalizedTextProvider $textProvider
*/
public function __construct(
TemplateFactory $templateFactory,
EditSectionGenerator $sectionEditLinkGenerator,
+ TermsListView $termsListView,
LocalizedTextProvider $textProvider
) {
$this->sectionEditLinkGenerator = $sectionEditLinkGenerator;
$this->templateFactory = $templateFactory;
+ $this->termsListView = $termsListView;
$this->textProvider = $textProvider;
}
@@ -60,8 +68,7 @@
* @param DescriptionsProvider $descriptionsProvider
* @param AliasesProvider|null $aliasesProvider
* @param EntityId|null $entityId the id of the entity
- * @param string $termBoxHtml
- * @param TextInjector $textInjector
+ * @param string $cssClasses
*
* @return string HTML
*/
@@ -71,8 +78,25 @@
DescriptionsProvider $descriptionsProvider,
AliasesProvider $aliasesProvider = null,
EntityId $entityId = null,
- $termBoxHtml,
- TextInjector $textInjector
+ $cssClasses = ''
+ ) {
+ return $this->templateFactory->render(
'wikibase-entitytermsview',
+ $this->getHeadingHtml( $mainLanguageCode,
$descriptionsProvider, $aliasesProvider ),
+ $this->termsListView->getHtml(
+ $labelsProvider,
+ $descriptionsProvider,
+ $aliasesProvider,
+ [ $mainLanguageCode ]
+ ),
+ $cssClasses,
+ $this->getHtmlForLabelDescriptionAliasesEditSection(
$mainLanguageCode, $entityId )
+ );
+ }
+
+ public function getHeadingHtml(
+ $languageCode,
+ DescriptionsProvider $descriptionsProvider,
+ AliasesProvider $aliasesProvider = null
) {
$headingPartsHtml = '';
@@ -80,8 +104,8 @@
$headingPartsHtml .= $this->templateFactory->render(
'wikibase-entitytermsview-heading-part',
'description',
- $descriptions->hasTermForLanguage( $mainLanguageCode )
? '' : 'wb-empty',
- $this->getDescriptionHtml( $mainLanguageCode,
$descriptions )
+ $descriptions->hasTermForLanguage( $languageCode ) ? ''
: 'wb-empty',
+ $this->getDescriptionHtml( $languageCode, $descriptions
)
);
if ( $aliasesProvider !== null ) {
@@ -89,20 +113,13 @@
$headingPartsHtml .= $this->templateFactory->render(
'wikibase-entitytermsview-heading-part',
'aliases',
- $aliasGroups->hasGroupForLanguage(
$mainLanguageCode ) ? '' : 'wb-empty',
- $this->getHtmlForAliases( $mainLanguageCode,
$aliasGroups )
+ $aliasGroups->hasGroupForLanguage(
$languageCode ) ? '' : 'wb-empty',
+ $this->getHtmlForAliases( $languageCode,
$aliasGroups )
);
}
- $marker = $textInjector->newMarker(
-
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class'
- );
-
- return $this->templateFactory->render(
'wikibase-entitytermsview',
- $headingPartsHtml,
- $termBoxHtml,
- $marker,
- $this->getHtmlForLabelDescriptionAliasesEditSection(
$mainLanguageCode, $entityId )
+ return $this->templateFactory->render(
'wikibase-entitytermsview-heading',
+ $headingPartsHtml
);
}
diff --git a/view/src/EntityView.php b/view/src/EntityView.php
index 812cdc5..f93f86f 100644
--- a/view/src/EntityView.php
+++ b/view/src/EntityView.php
@@ -44,11 +44,6 @@
protected $languageCode;
/**
- * @var TextInjector
- */
- private $textInjector;
-
- /**
* @param TemplateFactory $templateFactory
* @param EntityTermsView $entityTermsView
* @param LanguageDirectionalityLookup $languageDirectionalityLookup
@@ -64,27 +59,11 @@
$this->languageDirectionalityLookup =
$languageDirectionalityLookup;
$this->languageCode = $languageCode;
- $this->textInjector = new TextInjector();
$this->templateFactory = $templateFactory;
}
/**
- * Returns the placeholder map build while generating HTML.
- * The map returned here may be used with TextInjector.
- *
- * @return array[] string -> array
- */
- public function getPlaceholders() {
- return $this->textInjector->getMarkers();
- }
-
- /**
* Builds and returns the HTML representing a whole WikibaseEntity.
- *
- * @note: The HTML returned by this method may contain placeholders.
Such placeholders can be
- * expanded with the help of TextInjector::inject() calling back to
- * EntityViewPlaceholderExpander::getHtmlForPlaceholder()
- * @note: In order to keep the list of placeholders small, this calls
resetPlaceholders().
*
* @since 0.1
*
@@ -163,22 +142,11 @@
$entity,
$entity,
$entity instanceof AliasesProvider ? $entity :
null,
- $id,
- $this->getHtmlForTermBox(),
- $this->textInjector
+ $id
);
}
return '';
- }
-
- /**
- * @return string HTML
- */
- private function getHtmlForTermBox() {
- // Placeholder for a termbox for the present item.
- // EntityViewPlaceholderExpander must know about the parameters
used here.
- return $this->textInjector->newMarker( 'termbox' );
}
}
diff --git a/view/src/TableTermsListView.php b/view/src/TableTermsListView.php
new file mode 100644
index 0000000..c4a2ed4
--- /dev/null
+++ b/view/src/TableTermsListView.php
@@ -0,0 +1,201 @@
+<?php
+
+namespace Wikibase\View;
+
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\AliasesProvider;
+use Wikibase\DataModel\Term\DescriptionsProvider;
+use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\TermList;
+use Wikibase\Lib\LanguageNameLookup;
+use Wikibase\View\Template\TemplateFactory;
+
+/**
+ * Generates HTML to display terms of an entity in a list.
+ *
+ * @since 0.5
+ *
+ * @license GPL-2.0+
+ * @author Thiemo Mättig
+ * @author Bene* < [email protected] >
+ * @author H. Snater < [email protected] >
+ * @author Adrian Heine <[email protected]>
+ */
+class TableTermsListView implements TermsListView {
+
+ /**
+ * @var TemplateFactory
+ */
+ private $templateFactory;
+
+ /**
+ * @var LanguageDirectionalityLookup
+ */
+ private $languageDirectionalityLookup;
+
+ /**
+ * @var LanguageNameLookup
+ */
+ private $languageNameLookup;
+
+ /**
+ * @var LocalizedTextProvider
+ */
+ private $textProvider;
+
+ /**
+ * @param TemplateFactory $templateFactory
+ * @param LanguageNameLookup $languageNameLookup
+ * @param LocalizedTextProvider $textProvider
+ * @param LanguageDirectionalityLookup $languageDirectionalityLookup
+ */
+ public function __construct(
+ TemplateFactory $templateFactory,
+ LanguageNameLookup $languageNameLookup,
+ LocalizedTextProvider $textProvider,
+ LanguageDirectionalityLookup $languageDirectionalityLookup
+ ) {
+ $this->templateFactory = $templateFactory;
+ $this->languageNameLookup = $languageNameLookup;
+ $this->textProvider = $textProvider;
+ $this->languageDirectionalityLookup =
$languageDirectionalityLookup;
+ }
+
+ /**
+ * @param LabelsProvider $labelsProvider
+ * @param DescriptionsProvider $descriptionsProvider
+ * @param AliasesProvider|null $aliasesProvider
+ * @param string[] $languageCodes The languages the user requested to
be shown
+ *
+ * @return string HTML
+ */
+ public function getHtml(
+ LabelsProvider $labelsProvider,
+ DescriptionsProvider $descriptionsProvider,
+ AliasesProvider $aliasesProvider = null,
+ array $languageCodes
+ ) {
+ $entityTermsForLanguageViewsHtml = '';
+
+ foreach ( $languageCodes as $languageCode ) {
+ $entityTermsForLanguageViewsHtml .=
$this->getListItemHtml(
+ $labelsProvider,
+ $descriptionsProvider,
+ $aliasesProvider,
+ $languageCode
+ );
+ }
+
+ return $this->getListViewHtml( $entityTermsForLanguageViewsHtml
);
+ }
+
+ /**
+ * @param string $contentHtml
+ *
+ * @return string HTML
+ */
+ public function getListViewHtml( $contentHtml ) {
+ return $this->templateFactory->render(
'wikibase-entitytermsforlanguagelistview',
+ htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-language' ) ),
+ htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-label' ) ),
+ htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-description' ) ),
+ htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-aliases' ) ),
+ $contentHtml
+ );
+
+ }
+
+ /**
+ * @param LabelsProvider $labelsProvider
+ * @param DescriptionsProvider $descriptionsProvider
+ * @param AliasesProvider|null $aliasesProvider
+ * @param string $languageCode
+ *
+ * @return string HTML
+ */
+ public function getListItemHtml(
+ LabelsProvider $labelsProvider,
+ DescriptionsProvider $descriptionsProvider,
+ AliasesProvider $aliasesProvider = null,
+ $languageCode
+ ) {
+ $languageName = $this->languageNameLookup->getName(
$languageCode );
+ $labels = $labelsProvider->getLabels();
+ $descriptions = $descriptionsProvider->getDescriptions();
+ $hasLabel = $labels->hasTermForLanguage( $languageCode );
+ $hasDescription = $descriptions->hasTermForLanguage(
$languageCode );
+
+ return $this->templateFactory->render(
'wikibase-entitytermsforlanguageview',
+ 'tr',
+ 'td',
+ $languageCode,
+ htmlspecialchars( $languageName ),
+ $this->getTermView(
+ $labels,
+ 'wikibase-labelview', // Template
+ 'wikibase-label-empty', // Text key
+ $languageCode
+ ),
+ $this->getTermView(
+ $descriptions,
+ 'wikibase-descriptionview', // Template
+ 'wikibase-description-empty', // Text key
+ $languageCode
+ ),
+ $aliasesProvider ? $this->getAliasesView(
$aliasesProvider->getAliasGroups(), $languageCode ) : '',
+ '',
+ 'th'
+ );
+ }
+
+ private function getTermView( TermList $termList, $templateName,
$emptyTextKey, $languageCode ) {
+ $hasTerm = $termList->hasTermForLanguage( $languageCode );
+ $effectiveLanguage = $hasTerm ? $languageCode :
$this->textProvider->getLanguageOf( $emptyTextKey );
+ return $this->templateFactory->render( $templateName,
+ $hasTerm ? '' : 'wb-empty',
+ htmlspecialchars( $hasTerm
+ ? $termList->getByLanguage( $languageCode
)->getText()
+ : $this->textProvider->get( $emptyTextKey )
+ ),
+ '',
+ $this->languageDirectionalityLookup->getDirectionality(
$effectiveLanguage ) ?: 'auto',
+ $effectiveLanguage
+ );
+ }
+
+ /**
+ * @param AliasGroupList $aliasGroups
+ * @param string $languageCode
+ *
+ * @return string HTML
+ */
+ private function getAliasesView( AliasGroupList $aliasGroups,
$languageCode ) {
+ if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) {
+ return $this->templateFactory->render(
'wikibase-aliasesview',
+ 'wb-empty',
+ '',
+ '',
+ '', // No text, no language
+ ''
+ );
+ } else {
+ $aliasesHtml = '';
+ $aliases = $aliasGroups->getByLanguage( $languageCode
)->getAliases();
+ foreach ( $aliases as $alias ) {
+ $aliasesHtml .= $this->templateFactory->render(
+ 'wikibase-aliasesview-list-item',
+ htmlspecialchars( $alias )
+ );
+ }
+
+ return $this->templateFactory->render(
'wikibase-aliasesview',
+ '',
+ $aliasesHtml,
+ '',
+
$this->languageDirectionalityLookup->getDirectionality( $languageCode ) ?:
'auto',
+ $languageCode
+ );
+ }
+ }
+
+}
diff --git a/view/src/TermsListView.php b/view/src/TermsListView.php
index aa36ca1..d42a8e8 100644
--- a/view/src/TermsListView.php
+++ b/view/src/TermsListView.php
@@ -2,13 +2,9 @@
namespace Wikibase\View;
-use Wikibase\DataModel\Term\AliasGroupList;
use Wikibase\DataModel\Term\AliasesProvider;
use Wikibase\DataModel\Term\DescriptionsProvider;
use Wikibase\DataModel\Term\LabelsProvider;
-use Wikibase\DataModel\Term\TermList;
-use Wikibase\Lib\LanguageNameLookup;
-use Wikibase\View\Template\TemplateFactory;
/**
* Generates HTML to display terms of an entity in a list.
@@ -16,56 +12,15 @@
* @since 0.5
*
* @license GPL-2.0+
- * @author Thiemo Mättig
- * @author Bene* < [email protected] >
- * @author H. Snater < [email protected] >
* @author Adrian Heine <[email protected]>
*/
-class TermsListView {
-
- /**
- * @var TemplateFactory
- */
- private $templateFactory;
-
- /**
- * @var LanguageDirectionalityLookup
- */
- private $languageDirectionalityLookup;
-
- /**
- * @var LanguageNameLookup
- */
- private $languageNameLookup;
-
- /**
- * @var LocalizedTextProvider
- */
- private $textProvider;
-
- /**
- * @param TemplateFactory $templateFactory
- * @param LanguageNameLookup $languageNameLookup
- * @param LocalizedTextProvider $textProvider
- * @param LanguageDirectionalityLookup $languageDirectionalityLookup
- */
- public function __construct(
- TemplateFactory $templateFactory,
- LanguageNameLookup $languageNameLookup,
- LocalizedTextProvider $textProvider,
- LanguageDirectionalityLookup $languageDirectionalityLookup
- ) {
- $this->templateFactory = $templateFactory;
- $this->languageNameLookup = $languageNameLookup;
- $this->textProvider = $textProvider;
- $this->languageDirectionalityLookup =
$languageDirectionalityLookup;
- }
+interface TermsListView {
/**
* @param LabelsProvider $labelsProvider
* @param DescriptionsProvider $descriptionsProvider
* @param AliasesProvider|null $aliasesProvider
- * @param string[] $languageCodes The languages the user requested to
be shown
+ * @param string[] $languageCodes The languages in which terms should
be shown
*
* @return string HTML
*/
@@ -74,128 +29,6 @@
DescriptionsProvider $descriptionsProvider,
AliasesProvider $aliasesProvider = null,
array $languageCodes
- ) {
- $entityTermsForLanguageViewsHtml = '';
-
- foreach ( $languageCodes as $languageCode ) {
- $entityTermsForLanguageViewsHtml .=
$this->getListItemHtml(
- $labelsProvider,
- $descriptionsProvider,
- $aliasesProvider,
- $languageCode
- );
- }
-
- return $this->getListViewHtml( $entityTermsForLanguageViewsHtml
);
- }
-
- /**
- * @param string $contentHtml
- *
- * @return string HTML
- */
- public function getListViewHtml( $contentHtml ) {
- return $this->templateFactory->render(
'wikibase-entitytermsforlanguagelistview',
- htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-language' ) ),
- htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-label' ) ),
- htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-description' ) ),
- htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-aliases' ) ),
- $contentHtml
- );
-
- }
-
- /**
- * @param LabelsProvider $labelsProvider
- * @param DescriptionsProvider $descriptionsProvider
- * @param AliasesProvider|null $aliasesProvider
- * @param string $languageCode
- *
- * @return string HTML
- */
- public function getListItemHtml(
- LabelsProvider $labelsProvider,
- DescriptionsProvider $descriptionsProvider,
- AliasesProvider $aliasesProvider = null,
- $languageCode
- ) {
- $languageName = $this->languageNameLookup->getName(
$languageCode );
- $labels = $labelsProvider->getLabels();
- $descriptions = $descriptionsProvider->getDescriptions();
- $hasLabel = $labels->hasTermForLanguage( $languageCode );
- $hasDescription = $descriptions->hasTermForLanguage(
$languageCode );
-
- return $this->templateFactory->render(
'wikibase-entitytermsforlanguageview',
- 'tr',
- 'td',
- $languageCode,
- htmlspecialchars( $languageName ),
- $this->getTermView(
- $labels,
- 'wikibase-labelview', // Template
- 'wikibase-label-empty', // Text key
- $languageCode
- ),
- $this->getTermView(
- $descriptions,
- 'wikibase-descriptionview', // Template
- 'wikibase-description-empty', // Text key
- $languageCode
- ),
- $aliasesProvider ? $this->getAliasesView(
$aliasesProvider->getAliasGroups(), $languageCode ) : '',
- '',
- 'th'
- );
- }
-
- private function getTermView( TermList $termList, $templateName,
$emptyTextKey, $languageCode ) {
- $hasTerm = $termList->hasTermForLanguage( $languageCode );
- $effectiveLanguage = $hasTerm ? $languageCode :
$this->textProvider->getLanguageOf( $emptyTextKey );
- return $this->templateFactory->render( $templateName,
- $hasTerm ? '' : 'wb-empty',
- htmlspecialchars( $hasTerm
- ? $termList->getByLanguage( $languageCode
)->getText()
- : $this->textProvider->get( $emptyTextKey )
- ),
- '',
- $this->languageDirectionalityLookup->getDirectionality(
$effectiveLanguage ) ?: 'auto',
- $effectiveLanguage
- );
- }
-
- /**
- * @param AliasGroupList $aliasGroups
- * @param string $languageCode
- *
- * @return string HTML
- */
- private function getAliasesView( AliasGroupList $aliasGroups,
$languageCode ) {
- if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) {
- return $this->templateFactory->render(
'wikibase-aliasesview',
- 'wb-empty',
- '',
- '',
- '', // No text, no language
- ''
- );
- } else {
- $aliasesHtml = '';
- $aliases = $aliasGroups->getByLanguage( $languageCode
)->getAliases();
- foreach ( $aliases as $alias ) {
- $aliasesHtml .= $this->templateFactory->render(
- 'wikibase-aliasesview-list-item',
- htmlspecialchars( $alias )
- );
- }
-
- return $this->templateFactory->render(
'wikibase-aliasesview',
- '',
- $aliasesHtml,
- '',
-
$this->languageDirectionalityLookup->getDirectionality( $languageCode ) ?:
'auto',
- $languageCode
- );
- }
- }
+ );
}
diff --git a/view/src/ViewFactory.php b/view/src/ViewFactory.php
index e6940e1..cc11874 100644
--- a/view/src/ViewFactory.php
+++ b/view/src/ViewFactory.php
@@ -179,6 +179,7 @@
* @param LabelDescriptionLookup $labelDescriptionLookup
* @param LanguageFallbackChain $fallbackChain
* @param EditSectionGenerator $editSectionGenerator
+ * @param EntityTermsView $entityTermsView
*
* @return ItemView
*/
@@ -186,10 +187,9 @@
$languageCode,
LabelDescriptionLookup $labelDescriptionLookup,
LanguageFallbackChain $fallbackChain,
- EditSectionGenerator $editSectionGenerator
+ EditSectionGenerator $editSectionGenerator,
+ EntityTermsView $entityTermsView
) {
- $entityTermsView = $this->newEntityTermsView(
$editSectionGenerator );
-
$statementSectionsView = $this->newStatementSectionsView(
$languageCode,
$labelDescriptionLookup,
@@ -228,6 +228,7 @@
* @param LabelDescriptionLookup $labelDescriptionLookup
* @param LanguageFallbackChain $fallbackChain
* @param EditSectionGenerator $editSectionGenerator
+ * @param EntityTermsView $entityTermsView
*
* @return PropertyView
*/
@@ -235,10 +236,9 @@
$languageCode,
LabelDescriptionLookup $labelDescriptionLookup,
LanguageFallbackChain $fallbackChain,
- EditSectionGenerator $editSectionGenerator
+ EditSectionGenerator $editSectionGenerator,
+ EntityTermsView $entityTermsView
) {
- $entityTermsView = $this->newEntityTermsView(
$editSectionGenerator );
-
$statementSectionsView = $this->newStatementSectionsView(
$languageCode,
$labelDescriptionLookup,
@@ -315,6 +315,12 @@
return new EntityTermsView(
$this->templateFactory,
$editSectionGenerator,
+ new TableTermsListView(
+ $this->templateFactory,
+ $this->languageNameLookup,
+ $this->textProvider,
+ $this->languageDirectionalityLookup
+ ),
$this->textProvider
);
}
diff --git a/view/tests/phpunit/EntityTermsViewTest.php
b/view/tests/phpunit/EntityTermsViewTest.php
index 1a6c98b..f1790c6 100644
--- a/view/tests/phpunit/EntityTermsViewTest.php
+++ b/view/tests/phpunit/EntityTermsViewTest.php
@@ -6,12 +6,14 @@
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Term\Fingerprint;
+use Wikibase\Lib\LanguageNameLookup;
use Wikibase\View\EditSectionGenerator;
use Wikibase\View\EntityTermsView;
use Wikibase\View\DummyLocalizedTextProvider;
+use Wikibase\View\LanguageDirectionalityLookup;
use Wikibase\View\LocalizedTextProvider;
use Wikibase\View\Template\TemplateFactory;
-use Wikibase\View\TextInjector;
+use Wikibase\View\TableTermsListView;
/**
* @covers Wikibase\View\EntityTermsView
@@ -19,7 +21,7 @@
* @uses Wikibase\View\Template\Template
* @uses Wikibase\View\Template\TemplateFactory
* @uses Wikibase\View\Template\TemplateRegistry
- * @uses Wikibase\View\TextInjector
+ * @uses Wikibase\View\TableTermsListView
*
* @group Wikibase
* @group WikibaseView
@@ -32,7 +34,7 @@
private function getEntityTermsView(
$editSectionCalls = 0,
- $languageNameCalls = 0,
+ $languageNameCalls = 1,
LocalizedTextProvider $textProvider = null
) {
$editSectionGenerator = $this->getMock(
EditSectionGenerator::class );
@@ -40,11 +42,35 @@
->method( 'getLabelDescriptionAliasesEditSection' )
->will( $this->returnValue( '<EDITSECTION>' ) );
+ $languageNameLookup = $this->getMock( LanguageNameLookup::class
);
+ $languageNameLookup->expects( $this->exactly(
$languageNameCalls ) )
+ ->method( 'getName' )
+ ->will( $this->returnCallback( function( $languageCode
) {
+ return "<LANGUAGENAME-$languageCode>";
+ } ) );
+
+ $languageDirectionalityLookup = $this->getMock(
LanguageDirectionalityLookup::class );
+ $languageDirectionalityLookup->expects( $this->any() )
+ ->method( 'getDirectionality' )
+ ->will( $this->returnCallback( function( $languageCode
) {
+ return [
+ 'en' => 'ltr',
+ 'arc' => 'rtl',
+ 'lkt' => 'ltr'
+ ][ $languageCode ];
+ } ) );
+
$textProvider = $textProvider ?: new
DummyLocalizedTextProvider( 'lkt' );
return new EntityTermsView(
TemplateFactory::getDefaultInstance(),
$editSectionGenerator,
+ new TableTermsListView(
+ TemplateFactory::getDefaultInstance(),
+ $languageNameLookup,
+ $textProvider,
+ $languageDirectionalityLookup
+ ),
$textProvider
);
}
@@ -60,7 +86,7 @@
public function testGetHtml_containsDescriptionAndAliases() {
$entityTermsView = $this->getEntityTermsView( 1 );
$fingerprint = $this->getFingerprint();
- $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null, '', new TextInjector() );
+ $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null, '' );
$this->assertContains( '<DESCRIPTION>', $html );
$this->assertContains( '<ALIAS1>', $html );
@@ -81,8 +107,8 @@
* @dataProvider entityFingerprintProvider
*/
public function testGetHtml_isEditable( Fingerprint $fingerprint,
ItemId $entityId, $languageCode ) {
- $entityTermsView = $this->getEntityTermsView( 1, 0 );
- $html = $entityTermsView->getHtml( $languageCode, $fingerprint,
$fingerprint, $fingerprint, $entityId, '', new TextInjector() );
+ $entityTermsView = $this->getEntityTermsView( 1 );
+ $html = $entityTermsView->getHtml( $languageCode, $fingerprint,
$fingerprint, $fingerprint, $entityId, '' );
$this->assertContains( '<EDITSECTION>', $html );
}
@@ -93,7 +119,7 @@
$fingerprint->setAliasGroup( 'en', array( '<a href="#">evil
html</a>', '<b>bold</b>', '<i>italic</i>' ) );
$view = $this->getEntityTermsView( 1 );
- $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null, '', new TextInjector() );
+ $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null, '' );
$this->assertContains( 'evil html', $html, 'make sure it works'
);
$this->assertNotContains( 'href="#"', $html );
@@ -106,7 +132,7 @@
public function testGetHtml_isMarkedAsEmptyValue() {
$entityTermsView = $this->getEntityTermsView( 1 );
$fingerprint = new Fingerprint();
- $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null, '', new TextInjector() );
+ $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null, '' );
$this->assertContains( 'wb-empty', $html );
$this->assertContains( '(wikibase-description-empty)', $html );
@@ -116,7 +142,7 @@
public function testGetHtml_isNotMarkedAsEmpty() {
$entityTermsView = $this->getEntityTermsView( 1 );
$fingerprint = $this->getFingerprint();
- $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null, '', new TextInjector() );
+ $html = $entityTermsView->getHtml( 'en', $fingerprint,
$fingerprint, $fingerprint, null, '' );
$this->assertNotContains( 'wb-empty', $html );
$this->assertNotContains( '(wikibase-description-empty)', $html
);
@@ -128,7 +154,7 @@
$fingerprint->removeDescription( 'en' );
$view = $this->getEntityTermsView( 1 );
- $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null, '', new TextInjector() );
+ $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null, '' );
$this->assertContains( 'wb-empty', $html );
$this->assertContains( '(wikibase-description-empty)', $html );
@@ -140,7 +166,7 @@
$fingerprint->removeAliasGroup( 'en' );
$view = $this->getEntityTermsView( 1 );
- $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null, '', new TextInjector() );
+ $html = $view->getHtml( 'en', $fingerprint, $fingerprint,
$fingerprint, null, '' );
$this->assertContains( 'wb-empty', $html );
$this->assertNotContains( '(wikibase-description-empty)', $html
);
@@ -148,7 +174,7 @@
}
public function testGetTitleHtml_containsLabel() {
- $entityTermsView = $this->getEntityTermsView();
+ $entityTermsView = $this->getEntityTermsView( 0, 0 );
$fingerprint = $this->getFingerprint();
$html = $entityTermsView->getTitleHtml( 'en', $fingerprint,
null );
@@ -159,7 +185,7 @@
* @dataProvider entityFingerprintProvider
*/
public function testGetTitleHtml_withEntityId( Fingerprint
$fingerprint, ItemId $entityId ) {
- $entityTermsView = $this->getEntityTermsView();
+ $entityTermsView = $this->getEntityTermsView( 0, 0 );
$html = $entityTermsView->getTitleHtml( 'en', $fingerprint,
$entityId );
$idString = $entityId->getSerialization();
@@ -167,14 +193,14 @@
}
public function testGetTitleHtml_withoutEntityId() {
- $entityTermsView = $this->getEntityTermsView();
+ $entityTermsView = $this->getEntityTermsView( 0, 0 );
$html = $entityTermsView->getTitleHtml( 'en', new
Fingerprint(), null );
$this->assertNotContains( '(parentheses', $html );
}
public function testGetTitleHtml_labelIsEscaped() {
- $entityTermsView = $this->getEntityTermsView();
+ $entityTermsView = $this->getEntityTermsView( 0, 0 );
$fingerprint = new Fingerprint();
$fingerprint->setLabel( 'en', '<a href="#">evil html</a>' );
$html = $entityTermsView->getTitleHtml( 'en', $fingerprint,
null );
@@ -188,7 +214,7 @@
$fingerprint = $this->getFingerprint();
$fingerprint->removeLabel( 'en' );
- $entityTermsView = $this->getEntityTermsView();
+ $entityTermsView = $this->getEntityTermsView( 0, 0 );
$html = $entityTermsView->getTitleHtml( 'en', $fingerprint,
null );
$this->assertContains( 'wb-empty', $html );
@@ -198,7 +224,7 @@
public function testGetTitleHtml_isNotMarkedAsEmpty() {
$fingerprint = $this->getFingerprint();
- $entityTermsView = $this->getEntityTermsView();
+ $entityTermsView = $this->getEntityTermsView( 0, 0 );
$html = $entityTermsView->getTitleHtml( 'en', $fingerprint,
null );
$this->assertNotContains( 'wb-empty', $html );
diff --git a/view/tests/phpunit/ItemViewTest.php
b/view/tests/phpunit/ItemViewTest.php
index 54bff61..60b124d 100644
--- a/view/tests/phpunit/ItemViewTest.php
+++ b/view/tests/phpunit/ItemViewTest.php
@@ -22,7 +22,6 @@
* @uses Wikibase\View\Template\Template
* @uses Wikibase\View\Template\TemplateFactory
* @uses Wikibase\View\Template\TemplateRegistry
- * @uses Wikibase\View\TextInjector
*
* @group Wikibase
* @group WikibaseView
diff --git a/view/tests/phpunit/PropertyViewTest.php
b/view/tests/phpunit/PropertyViewTest.php
index 537253f..bc512c9 100644
--- a/view/tests/phpunit/PropertyViewTest.php
+++ b/view/tests/phpunit/PropertyViewTest.php
@@ -23,7 +23,6 @@
* @uses Wikibase\View\Template\Template
* @uses Wikibase\View\Template\TemplateFactory
* @uses Wikibase\View\Template\TemplateRegistry
- * @uses Wikibase\View\TextInjector
*
* @group Wikibase
* @group WikibaseView
diff --git a/view/tests/phpunit/TermsListViewTest.php
b/view/tests/phpunit/TableTermsListViewTest.php
similarity index 90%
rename from view/tests/phpunit/TermsListViewTest.php
rename to view/tests/phpunit/TableTermsListViewTest.php
index 6ac8e48..1e3a079 100644
--- a/view/tests/phpunit/TermsListViewTest.php
+++ b/view/tests/phpunit/TableTermsListViewTest.php
@@ -9,13 +9,13 @@
use Wikibase\DataModel\Term\Fingerprint;
use Wikibase\Lib\LanguageNameLookup;
use Wikibase\View\LanguageDirectionalityLookup;
-use Wikibase\View\TermsListView;
+use Wikibase\View\TableTermsListView;
use Wikibase\View\DummyLocalizedTextProvider;
use Wikibase\View\LocalizedTextProvider;
use Wikibase\View\Template\TemplateFactory;
/**
- * @covers Wikibase\View\TermsListView
+ * @covers Wikibase\View\TableTermsListView
*
* @uses Wikibase\View\Template\Template
* @uses Wikibase\View\Template\TemplateFactory
@@ -29,9 +29,9 @@
* @author Thiemo Mättig
* @author Adrian Heine <[email protected]>
*/
-class TermsListViewTest extends PHPUnit_Framework_TestCase {
+class TableTermsListViewTest extends PHPUnit_Framework_TestCase {
- private function getTermsListView(
+ private function getTableTermsListView(
$languageNameCalls = 0,
LocalizedTextProvider $textProvider = null
) {
@@ -55,7 +55,7 @@
][ $languageCode ];
} ) );
- return new TermsListView(
+ return new TableTermsListView(
TemplateFactory::getDefaultInstance(),
$languageNameLookup,
$textProvider,
@@ -71,7 +71,7 @@
return $fingerprint;
}
- public function getTermsListViewProvider() {
+ public function getTableTermsListViewProvider() {
$item = new Item(
new ItemId( 'Q1' ),
$this->getFingerprint( 'arc' )
@@ -97,9 +97,9 @@
}
/**
- * @dataProvider getTermsListViewProvider
+ * @dataProvider getTableTermsListViewProvider
*/
- public function testGetTermsListView(
+ public function testGetTableTermsListView(
EntityDocument $entity,
$languageCode,
$hasLabel,
@@ -107,7 +107,7 @@
$hasAliases
) {
$languageDirectionality = $languageCode === 'arc' ? 'rtl' :
'ltr';
- $view = $this->getTermsListView( 1 );
+ $view = $this->getTableTermsListView( 1 );
$html = $view->getHtml( $entity, $entity, $entity, [
$languageCode ] );
$this->assertContains(
'(wikibase-entitytermsforlanguagelistview-language)', $html );
@@ -159,7 +159,7 @@
$this->assertNotContains( '&', $html, 'no double escaping'
);
}
- public function testGetTermsListView_isEscaped() {
+ public function testGetTableTermsListView_isEscaped() {
$textProvider = $this->getMock( LocalizedTextProvider::class );
$textProvider->expects( $this->any() )
->method( 'get' )
@@ -171,19 +171,19 @@
new ItemId( 'Q1' ),
new Fingerprint()
);
- $view = $this->getTermsListView( 0, $textProvider );
+ $view = $this->getTableTermsListView( 0, $textProvider );
$html = $view->getHtml( $item, $item, $item, [] );
$this->assertContains( '"RAW"', $html );
$this->assertNotContains( '"RAW"', $html );
}
- public function testGetTermsListView_noAliasesProvider() {
+ public function testGetTableTermsListView_noAliasesProvider() {
$item = new Item(
new ItemId( 'Q1' ),
$this->getFingerprint()
);
- $view = $this->getTermsListView( 1 );
+ $view = $this->getTableTermsListView( 1 );
$html = $view->getHtml( $item, $item, null, array( 'en' ) );
$this->assertContains(
'(wikibase-entitytermsforlanguagelistview-language)', $html );
diff --git a/view/tests/phpunit/ViewFactoryTest.php
b/view/tests/phpunit/ViewFactoryTest.php
index 2029e0a..7607bd2 100644
--- a/view/tests/phpunit/ViewFactoryTest.php
+++ b/view/tests/phpunit/ViewFactoryTest.php
@@ -42,7 +42,6 @@
* @uses Wikibase\View\Template\Template
* @uses Wikibase\View\Template\TemplateFactory
* @uses Wikibase\View\Template\TemplateRegistry
- * @uses Wikibase\View\TextInjector
*
* @group Wikibase
* @group WikibaseView
@@ -105,22 +104,28 @@
}
public function testNewItemView() {
- $itemView = $this->newViewFactory()->newItemView(
+ $factory = $this->newViewFactory();
+ $editSectionGenerator = $this->getMock(
EditSectionGenerator::class );
+ $itemView = $factory->newItemView(
'de',
$this->getMock( LabelDescriptionLookup::class ),
new LanguageFallbackChain( array() ),
- $this->getMock( EditSectionGenerator::class )
+ $editSectionGenerator,
+ $factory->newEntityTermsView( $editSectionGenerator )
);
$this->assertInstanceOf( ItemView::class, $itemView );
}
public function testNewPropertyView() {
- $propertyView = $this->newViewFactory()->newPropertyView(
+ $factory = $this->newViewFactory();
+ $editSectionGenerator = $this->getMock(
EditSectionGenerator::class );
+ $propertyView = $factory->newPropertyView(
'de',
$this->getMock( LabelDescriptionLookup::class ),
new LanguageFallbackChain( array() ),
- $this->getMock( EditSectionGenerator::class )
+ $editSectionGenerator,
+ $factory->newEntityTermsView( $editSectionGenerator )
);
$this->assertInstanceOf( PropertyView::class, $propertyView );
--
To view, visit https://gerrit.wikimedia.org/r/286421
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia2e42846738b22d0d604cd524b2384c8407ac85d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Heine <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits