From e8f1fede77c5d593f57b3aaec3bfe2353e117314 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20Dziewo=C5=84ski?= Date: Thu, 8 May 2014 22:10:13 +0200 Subject: [PATCH] OutputPage: Add addParserOutputContent() for more fine-grained control We previously had addParserOutput(), which added everything and did some other magic, and addParserOutputNoText() which, as the same says, added everything but the text. I renamed addParserOutputNoText() to addParserOutputMetadata() and created two more functions: * addParserOutputText(): This is almost identical to adding the raw HTML, but calls the OutputPageBeforeHTML hook like other addParserOutput*() methods. * addParserOutputContent(): Like addParserOutputText(), but also adds the ResourceLoader modules and variables associated with the parser output. This is important especially for some extensions like TemplateData or SyntaxHighlight which add styles to the page to enhance the display. Change-Id: Iead541886fd1ccdbdf1cb06af71b34cd04644985 --- includes/OutputPage.php | 55 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 8fd78121db..612dc329da 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -1621,11 +1621,25 @@ class OutputPage extends ContextSource { } /** - * Add a ParserOutput object, but without Html + * Add a ParserOutput object, but without Html. * + * @deprecated since 1.24, use addParserOutputMetadata() instead. * @param ParserOutput $parserOutput */ public function addParserOutputNoText( &$parserOutput ) { + wfDeprecated( __METHOD__, '1.24' ); + $this->addParserOutputMetadata( $parserOutput ); + } + + /** + * Add all metadata associated with a ParserOutput object, but without the actual HTML. This + * includes categories, language links, ResourceLoader modules, effects of certain magic words, + * and so on. + * + * @since 1.24 + * @param ParserOutput $parserOutput + */ + public function addParserOutputMetadata( &$parserOutput ) { $this->mLanguageLinks += $parserOutput->getLanguageLinks(); $this->addCategoryLinks( $parserOutput->getCategories() ); $this->mNewSectionLink = $parserOutput->getNewSection(); @@ -1673,21 +1687,50 @@ class OutputPage extends ContextSource { } /** - * Add a ParserOutput object + * Add the HTML and enhancements for it (like ResourceLoader modules) associated with a + * ParserOutput object, without any other metadata. + * + * @since 1.24 + * @param ParserOutput $parserOutput + */ + public function addParserOutputContent( &$parserOutput ) { + $this->addParserOutputText( $parserOutput ); + + $this->addModules( $parserOutput->getModules() ); + $this->addModuleScripts( $parserOutput->getModuleScripts() ); + $this->addModuleStyles( $parserOutput->getModuleStyles() ); + $this->addModuleMessages( $parserOutput->getModuleMessages() ); + + $this->addJsConfigVars( $parserOutput->getJsConfigVars() ); + } + + /** + * Add the HTML associated with a ParserOutput object, without any metadata. + * + * @since 1.24 + * @param ParserOutput $parserOutput + */ + public function addParserOutputText( &$parserOutput ) { + $text = $parserOutput->getText(); + wfRunHooks( 'OutputPageBeforeHTML', array( &$this, &$text ) ); + $this->addHTML( $text ); + } + + /** + * Add everything from a ParserOutput object. * * @param ParserOutput $parserOutput */ function addParserOutput( &$parserOutput ) { - $this->addParserOutputNoText( $parserOutput ); + $this->addParserOutputMetadata( $parserOutput ); $parserOutput->setTOCEnabled( $this->mEnableTOC ); // Touch section edit links only if not previously disabled if ( $parserOutput->getEditSectionTokens() ) { $parserOutput->setEditSectionTokens( $this->mEnableSectionEditLinks ); } - $text = $parserOutput->getText(); - wfRunHooks( 'OutputPageBeforeHTML', array( &$this, &$text ) ); - $this->addHTML( $text ); + + $this->addParserOutputText( $parserOutput ); } /** -- 2.20.1