Merge "Add action=query&meta=languageinfo API module"
[lhc/web/wiklou.git] / includes / Revision / RevisionRenderer.php
index 265ad13..f97390a 100644 (file)
@@ -50,15 +50,24 @@ class RevisionRenderer {
        /** @var ILoadBalancer */
        private $loadBalancer;
 
+       /** @var SlotRoleRegistry */
+       private $roleRegistery;
+
        /** @var string|bool */
        private $wikiId;
 
        /**
         * @param ILoadBalancer $loadBalancer
+        * @param SlotRoleRegistry $roleRegistry
         * @param bool|string $wikiId
         */
-       public function __construct( ILoadBalancer $loadBalancer, $wikiId = false ) {
+       public function __construct(
+               ILoadBalancer $loadBalancer,
+               SlotRoleRegistry $roleRegistry,
+               $wikiId = false
+       ) {
                $this->loadBalancer = $loadBalancer;
+               $this->roleRegistery = $roleRegistry;
                $this->wikiId = $wikiId;
 
                $this->saveParseLogger = new NullLogger();
@@ -184,8 +193,6 @@ class RevisionRenderer {
                        return $rrev->getSlotParserOutput( SlotRecord::MAIN );
                }
 
-               // TODO: put fancy layout logic here, see T200915.
-
                // move main slot to front
                if ( isset( $slots[SlotRecord::MAIN] ) ) {
                        $slots = [ SlotRecord::MAIN => $slots[SlotRecord::MAIN] ] + $slots;
@@ -201,6 +208,7 @@ class RevisionRenderer {
                        $out = $rrev->getSlotParserOutput( $role, $hints );
                        $slotOutput[$role] = $out;
 
+                       // XXX: should the SlotRoleHandler be able to intervene here?
                        $combinedOutput->mergeInternalMetaDataFrom( $out, $role );
                        $combinedOutput->mergeTrackingMetaDataFrom( $out );
                }
@@ -210,6 +218,16 @@ class RevisionRenderer {
                        $first = true;
                        /** @var ParserOutput $out */
                        foreach ( $slotOutput as $role => $out ) {
+                               $roleHandler = $this->roleRegistery->getRoleHandler( $role );
+
+                               // TODO: put more fancy layout logic here, see T200915.
+                               $layout = $roleHandler->getOutputLayoutHints();
+                               $display = $layout['display'] ?? 'section';
+
+                               if ( $display === 'none' ) {
+                                       continue;
+                               }
+
                                if ( $first ) {
                                        // skip header for the first slot
                                        $first = false;
@@ -219,6 +237,8 @@ class RevisionRenderer {
                                        $html .= Html::rawElement( 'h1', [ 'class' => 'mw-slot-header' ], $headText );
                                }
 
+                               // XXX: do we want to put a wrapper div around the output?
+                               // Do we want to let $roleHandler do that?
                                $html .= $out->getRawText();
                                $combinedOutput->mergeHtmlMetaDataFrom( $out );
                        }