X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fparser%2FParserOutput.php;h=be574f00330c56fcfc7b078aa41e5a7717f180c3;hp=3480a51f3c3ad7624dee2fe5b087aeaabb554293;hb=c8e482371407477ecd4f0a1b5778e565d3963a93;hpb=48ba60f482318674a5caac7c5399e40eb8fc3920 diff --git a/includes/parser/ParserOutput.php b/includes/parser/ParserOutput.php index 3480a51f3c..be574f0033 100644 --- a/includes/parser/ParserOutput.php +++ b/includes/parser/ParserOutput.php @@ -22,6 +22,12 @@ * @ingroup Parser */ class ParserOutput extends CacheTime { + /** + * Feature flag to indicate to extensions that MediaWiki core supports and + * uses getText() stateless transforms. + */ + const SUPPORTS_STATELESS_TRANSFORMS = 1; + /** * @var string $mText The output text */ @@ -144,9 +150,10 @@ class ParserOutput extends CacheTime { public $mSections = []; /** + * @deprecated since 1.31 Use getText() options. * @var bool $mEditSectionTokens prefix/suffix markers if edit sections were output as tokens. */ - public $mEditSectionTokens = false; + public $mEditSectionTokens = true; /** * @var array $mProperties Name/value pairs to be cached in the DB. @@ -164,6 +171,7 @@ class ParserOutput extends CacheTime { public $mTimestamp; /** + * @deprecated since 1.31 Use getText() options. * @var bool $mTOCEnabled Whether TOC should be shown, can't override __NOTOC__. */ public $mTOCEnabled = true; @@ -250,9 +258,41 @@ class ParserOutput extends CacheTime { return $this->mText; } - public function getText() { + /** + * Get the output HTML + * + * @param array $options (since 1.31) Transformations to apply to the HTML + * - allowTOC: (bool) Show the TOC, assuming there were enough headings + * to generate one and `__NOTOC__` wasn't used. Default is true, + * but might be statefully overridden. + * - enableSectionEditLinks: (bool) Include section edit links, assuming + * section edit link tokens are present in the HTML. Default is true, + * but might be statefully overridden. + * @return string HTML + */ + public function getText( $options = [] ) { + if ( !array_key_exists( 'allowTOC', $options ) && empty( $this->mTOCEnabled ) ) { + wfDeprecated( 'ParserOutput stateful allowTOC', '1.31' ); + } + + // Note that while $this->mEditSectionTokens formerly defaulted to false, + // ParserOptions->getEditSection() defaults to true and Parser copies + // that to us so true makes more sense as the stateless default. + if ( !array_key_exists( 'enableSectionEditLinks', $options ) && !$this->mEditSectionTokens ) { + wfDeprecated( 'ParserOutput stateful enableSectionEditLinks', '1.31' ); + } + + $options += [ + // empty() here because old cached versions might lack the field somehow. + // In that situation, the historical behavior (possibly buggy) is to remove the TOC. + 'allowTOC' => !empty( $this->mTOCEnabled ), + 'enableSectionEditLinks' => $this->mEditSectionTokens, + ]; $text = $this->mText; - if ( $this->mEditSectionTokens ) { + + Hooks::runWithoutAbort( 'ParserOutputPostCacheTransform', [ $this, &$text, &$options ] ); + + if ( $options['enableSectionEditLinks'] ) { $text = preg_replace_callback( self::EDITSECTION_REGEX, function ( $m ) { @@ -278,8 +318,7 @@ class ParserOutput extends CacheTime { $text = preg_replace( self::EDITSECTION_REGEX, '', $text ); } - // If you have an old cached version of this class - sorry, you can't disable the TOC - if ( isset( $this->mTOCEnabled ) && $this->mTOCEnabled ) { + if ( $options['allowTOC'] ) { $text = str_replace( [ Parser::TOC_START, Parser::TOC_END ], '', $text ); } else { $text = preg_replace( @@ -288,6 +327,7 @@ class ParserOutput extends CacheTime { $text ); } + return $text; } @@ -339,6 +379,9 @@ class ParserOutput extends CacheTime { return $this->mSections; } + /** + * @deprecated since 1.31 Use getText() options. + */ public function getEditSectionTokens() { return $this->mEditSectionTokens; } @@ -426,6 +469,9 @@ class ParserOutput extends CacheTime { return $this->mLimitReportJSData; } + /** + * @deprecated since 1.31 Use getText() options. + */ public function getTOCEnabled() { return $this->mTOCEnabled; } @@ -454,6 +500,9 @@ class ParserOutput extends CacheTime { return wfSetVar( $this->mSections, $toc ); } + /** + * @deprecated since 1.31 Use getText() options. + */ public function setEditSectionTokens( $t ) { return wfSetVar( $this->mEditSectionTokens, $t ); } @@ -470,6 +519,9 @@ class ParserOutput extends CacheTime { return wfSetVar( $this->mTimestamp, $timestamp ); } + /** + * @deprecated since 1.31 Use getText() options. + */ public function setTOCEnabled( $flag ) { return wfSetVar( $this->mTOCEnabled, $flag ); }