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

Reply via email to