<type>
<name>com.woltlab.wcf.article.content</name>
<definitionname>com.woltlab.wcf.message</definitionname>
+ <enableToc>1</enableToc>
</type>
<type>
<name>com.woltlab.wcf.article</name>
<?php
declare(strict_types=1);
namespace wcf\system\html\output;
+use wcf\data\object\type\ObjectTypeCache;
use wcf\system\html\output\node\HtmlOutputNodeProcessor;
use wcf\system\html\AbstractHtmlProcessor;
use wcf\system\message\embedded\object\MessageEmbeddedObjectManager;
* @since 3.0
*/
class HtmlOutputProcessor extends AbstractHtmlProcessor {
+ /**
+ * generate the table of contents
+ * @var bool
+ * @since 3.2
+ */
+ public $enableToc = false;
+
/**
* output node processor instance
* @var HtmlOutputNodeProcessor
parent::setContext($objectType, $objectID);
MessageEmbeddedObjectManager::getInstance()->setActiveMessage($objectType, $objectID, $this->languageID);
+ $objectType = ObjectTypeCache::getInstance()->getObjectTypeByName('com.woltlab.wcf.message', $objectType);
+ $this->enableToc = (!empty($objectType->additionalData['enableToc']));
}
/**
use wcf\system\event\EventHandler;
use wcf\system\html\node\AbstractHtmlNodeProcessor;
use wcf\system\html\node\IHtmlNode;
+use wcf\system\html\output\HtmlOutputProcessor;
+use wcf\system\html\toc\HtmlToc;
use wcf\util\DOMUtil;
use wcf\util\StringUtil;
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @package WoltLabSuite\Core\System\Html\Output\Node
* @since 3.0
+ * @method HtmlOutputProcessor getHtmlProcessor()
*/
class HtmlOutputNodeProcessor extends AbstractHtmlNodeProcessor {
/**
* @inheritDoc
*/
public function getHtml() {
- $html = parent::getHtml();
+ $toc = '';
+ if ($this->getHtmlProcessor()->enableToc && $this->outputType === 'text/html') {
+ $context = $this->getHtmlProcessor()->getContext();
+ $idPrefix = substr(sha1($context['objectType'] . '-' . $context['objectID']), 0, 8);
+
+ $toc = HtmlToc::forMessage($this->getDocument(), $idPrefix);
+ }
+
+ $html = $toc . parent::getHtml();
if ($this->outputType === 'text/plain') {
$html = StringUtil::trim($html);