Adrian Heine has uploaded a new change for review.
https://gerrit.wikimedia.org/r/284358
Change subject: [WIP] Put termbox rows into parser output
......................................................................
[WIP] Put termbox rows into parser output
Current implementation needs a parser cache purge.
Bug: T132662
Change-Id: Ib0451a1a2e59fd5c244491adc803d759a791387d
---
M repo/Wikibase.hooks.php
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
M repo/includes/ParserOutput/EntityParserOutputGenerator.php
M view/src/EntityViewPlaceholderExpander.php
M view/src/TermsListView.php
5 files changed, 75 insertions(+), 20 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/58/284358/1
diff --git a/repo/Wikibase.hooks.php b/repo/Wikibase.hooks.php
index 1f5877e..7e9bcf2 100644
--- a/repo/Wikibase.hooks.php
+++ b/repo/Wikibase.hooks.php
@@ -802,6 +802,12 @@
$out->setProperty( 'wikibase-view-chunks',
$placeholders );
}
+ // Set in EntityParserOutputGenerator.
+ $termsListItems = $parserOutput->getExtensionData(
'wikibase-view-terms-list-items' );
+ if ( $termsListItems !== null ) {
+ $out->setProperty( 'wikibase-view-terms-list-items',
$termsListItems );
+ }
+
// Used in ViewEntityAction and EditEntityAction to override
the page HTML title
// with the label, if available, or else the id. Passed via
parser output
// and output page to save overhead of fetching content and
accessing an entity
diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index 133497b..a267d2d 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -9,6 +9,7 @@
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\UserLanguageLookup;
use Wikibase\Repo\BabelUserLanguageLookup;
+use Wikibase\Repo\Content\EntityContentFactory;
use Wikibase\Repo\MediaWikiLocalizedTextProvider;
use Wikibase\Repo\WikibaseRepo;
use Wikibase\View\EntityViewPlaceholderExpander;
@@ -56,12 +57,18 @@
private $outputPageEntityIdReader;
/**
+ * @var EntityContentFactory
+ */
+ private $entityContentFactory;
+
+ /**
* @param TemplateFactory $templateFactory
* @param UserLanguageLookup $userLanguageLookup
* @param ContentLanguages $termsLanguages
* @param EntityRevisionLookup $entityRevisionLookup
* @param LanguageNameLookup $languageNameLookup
* @param OutputPageEntityIdReader $outputPageEntityIdReader
+ * @param EntityContentFactory $entityContentFactory
*/
public function __construct(
TemplateFactory $templateFactory,
@@ -69,7 +76,8 @@
ContentLanguages $termsLanguages,
EntityRevisionLookup $entityRevisionLookup,
LanguageNameLookup $languageNameLookup,
- OutputPageEntityIdReader $outputPageEntityIdReader
+ OutputPageEntityIdReader $outputPageEntityIdReader,
+ EntityContentFactory $entityContentFactory
) {
$this->templateFactory = $templateFactory;
$this->userLanguageLookup = $userLanguageLookup;
@@ -77,6 +85,7 @@
$this->entityRevisionLookup = $entityRevisionLookup;
$this->languageNameLookup = $languageNameLookup;
$this->outputPageEntityIdReader = $outputPageEntityIdReader;
+ $this->entityContentFactory = $entityContentFactory;
}
/**
@@ -87,6 +96,8 @@
$wikibaseRepo = WikibaseRepo::getDefaultInstance();
+ $entityContentFactory =
$wikibaseRepo->getEntityContentFactory();
+
return new self(
TemplateFactory::getDefaultInstance(),
new BabelUserLanguageLookup,
@@ -94,9 +105,10 @@
$wikibaseRepo->getEntityRevisionLookup(),
new LanguageNameLookup( $wgLang->getCode() ),
new OutputPageEntityIdReader(
- $wikibaseRepo->getEntityContentFactory(),
+ $entityContentFactory,
$wikibaseRepo->getEntityIdParser()
- )
+ ),
+ $entityContentFactory
);
}
@@ -160,11 +172,12 @@
$languageCode = $out->getLanguage()->getCode();
$entityId =
$this->outputPageEntityIdReader->getEntityIdFromOutputPage( $out );
- $revisionId = $out->getRevisionId();
- $entity = $this->entityRevisionLookup->getEntityRevision(
$entityId, $revisionId )->getEntity();
- $labelsProvider = $entity;
- $descriptionsProvider = $entity;
- $aliasesProvider = $entity instanceof AliasesProvider ? $entity
: null;
+ $emptyEntity =
$this->entityContentFactory->getContentHandlerForType(
$entityId->getEntityType() )->makeEmptyEntity();
+ $labelsProvider = $emptyEntity;
+ $descriptionsProvider = $emptyEntity;
+ $aliasesProvider = $emptyEntity instanceof AliasesProvider ?
$emptyEntity : null;
+
+ $termsListItems = $out->getProperty(
'wikibase-view-terms-list-items' );
return new EntityViewPlaceholderExpander(
$this->templateFactory,
@@ -172,9 +185,10 @@
$labelsProvider,
$descriptionsProvider,
$aliasesProvider,
- array_merge( [ $languageCode ], $termsLanguages ),
+ array_unique( array_merge( [ $languageCode ],
$termsLanguages ) ),
$this->languageNameLookup,
- new MediaWikiLocalizedTextProvider(
$out->getLanguage()->getCode() )
+ new MediaWikiLocalizedTextProvider(
$out->getLanguage()->getCode() ),
+ $termsListItems
);
}
diff --git a/repo/includes/ParserOutput/EntityParserOutputGenerator.php
b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
index a3aece4..26c1a56 100644
--- a/repo/includes/ParserOutput/EntityParserOutputGenerator.php
+++ b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
@@ -9,16 +9,19 @@
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Term\FingerprintProvider;
use Wikibase\LanguageFallbackChain;
+use Wikibase\Lib\LanguageNameLookup;
use Wikibase\Lib\Store\EntityInfo;
use Wikibase\Lib\Store\EntityInfoBuilderFactory;
use Wikibase\Lib\Store\EntityInfoTermLookup;
use Wikibase\Lib\Store\EntityTitleLookup;
use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookup;
use Wikibase\Repo\LinkedData\EntityDataFormatProvider;
+use Wikibase\Repo\MediaWikiLocalizedTextProvider;
use Wikibase\Repo\View\RepoSpecialPageLinker;
use Wikibase\View\EmptyEditSectionGenerator;
use Wikibase\View\LocalizedTextProvider;
use Wikibase\View\Template\TemplateFactory;
+use Wikibase\View\TermsListView;
use Wikibase\View\ToolbarEditSectionGenerator;
/**
@@ -287,6 +290,29 @@
$html = $entityView->getHtml( $entity );
$parserOutput->setText( $html );
$parserOutput->setExtensionData( 'wikibase-view-chunks',
$entityView->getPlaceholders() );
+
+ $termsListView = new TermsListView(
+ TemplateFactory::getDefaultInstance(),
+ new LanguageNameLookup( $this->languageCode ),
+ new MediaWikiLocalizedTextProvider( $this->languageCode
)
+ );
+ $allLanguages = array_unique(
+ array_keys( $entity->getLabels()->toTextArray() ) +
+ array_keys( $entity->getDescriptions()->toTextArray() )
+
+ array_keys( $entity->getAliasGroups()->toTextArray() )
+ );
+ $parserOutput->setExtensionData(
+ 'wikibase-view-terms-list-items',
+ array_combine(
+ $allLanguages,
+ array_map(
+ function( $languageCode ) use(
$termsListView, $entity ) {
+ return
$termsListView->getListItemHtml( $entity, $entity, $entity, $languageCode );
+ },
+ $allLanguages
+ )
+ )
+ );
}
/**
diff --git a/view/src/EntityViewPlaceholderExpander.php
b/view/src/EntityViewPlaceholderExpander.php
index 2832a8d..e9c192b 100644
--- a/view/src/EntityViewPlaceholderExpander.php
+++ b/view/src/EntityViewPlaceholderExpander.php
@@ -89,7 +89,8 @@
AliasesProvider $aliasesProvider = null,
array $termsLanguages,
LanguageNameLookup $languageNameLookup,
- LocalizedTextProvider $textProvider
+ LocalizedTextProvider $textProvider,
+ array $termsListItems
) {
$this->user = $user;
$this->labelsProvider = $labelsProvider;
@@ -99,6 +100,7 @@
$this->termsLanguages = $termsLanguages;
$this->languageNameLookup = $languageNameLookup;
$this->textProvider = $textProvider;
+ $this->termsListItems = $termsListItems;
}
/**
@@ -172,14 +174,21 @@
$this->textProvider
);
- $html = $termsListView->getHtml(
- $this->labelsProvider,
- $this->descriptionsProvider,
- $this->aliasesProvider,
- $this->termsLanguages
- );
+ $contentHtml = '';
+ foreach( $this->termsLanguages as $languageCode ) {
+ if ( isset( $this->termsListItems[ $languageCode ] ) ) {
+ $contentHtml .= $this->termsListItems[
$languageCode ];
+ } else {
+ $contentHtml .= $termsListView->getListItemHtml(
+ $this->labelsProvider,
+ $this->descriptionsProvider,
+ $this->aliasesProvider,
+ $languageCode
+ );
+ }
+ }
- return $html;
+ return $termsListView->getListViewHtml( $contentHtml );
}
}
diff --git a/view/src/TermsListView.php b/view/src/TermsListView.php
index 02471a6..e729a3a 100644
--- a/view/src/TermsListView.php
+++ b/view/src/TermsListView.php
@@ -86,7 +86,7 @@
*
* @return string HTML
*/
- private function getListViewHtml( $contentHtml ) {
+ public function getListViewHtml( $contentHtml ) {
return $this->templateFactory->render(
'wikibase-entitytermsforlanguagelistview',
htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-language' ) ),
htmlspecialchars( $this->textProvider->get(
'wikibase-entitytermsforlanguagelistview-label' ) ),
@@ -105,7 +105,7 @@
*
* @return string HTML
*/
- private function getListItemHtml(
+ public function getListItemHtml(
LabelsProvider $labelsProvider,
DescriptionsProvider $descriptionsProvider,
AliasesProvider $aliasesProvider = null,
--
To view, visit https://gerrit.wikimedia.org/r/284358
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib0451a1a2e59fd5c244491adc803d759a791387d
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