tocData = $tocData; $this->localizer = $localizer; // ToC is pinned by default, hardcoded for now $this->isPinned = true; $this->config = $config; $this->pinnableHeader = new VectorComponentPinnableHeader( $this->localizer, $this->isPinned, 'vector-toc', null, false, 'h2' ); } /** * In tableOfContents.js we have tableOfContents::getTableOfContentsSectionsData(), * that yields the same result as this function, please make sure to keep them in sync. * @inheritDoc */ public function getTemplateData(): array { // If the table of contents has no items, we won't output it. // empty array is interpreted by Mustache as falsey. if ( empty( $this->tocData ) || empty( $this->tocData[ 'array-sections' ] ) ) { return []; } // Populate button labels for collapsible TOC sections foreach ( $this->tocData[ 'array-sections' ] as &$section ) { if ( $section['is-top-level-section'] && $section['is-parent-section'] ) { $section['vector-button-label'] = $this->localizer->msg( 'vector-toc-toggle-button-label', $section['line'] )->text(); } } $pinnableContainer = new VectorComponentPinnableContainer( self::ID ); $pinnableElement = new VectorComponentPinnableElement( self::ID ); return $pinnableElement->getTemplateData() + $pinnableContainer->getTemplateData() + array_merge( $this->tocData, [ 'is-vector-toc-beginning-enabled' => $this->config->get( 'VectorTableOfContentsBeginning' ), 'vector-is-collapse-sections-enabled' => $this->tocData[ 'number-section-count'] >= $this->config->get( 'VectorTableOfContentsCollapseAtCount' ), 'data-pinnable-header' => $this->pinnableHeader->getTemplateData(), ] ); } }