* Skin::linkKnown() (use MediaWiki\Linker\LinkRenderer instead)
* Skin::userLink() (use Linker::userLink() instead)
* Skin::userToolLinks() (use Linker::userToolLinks() instead)
-* The 'ParserLimitReportFormat' hook was removed.
* Disabled "bug 2702" HTML tidying of parsed UI messages on wikis where Tidy is
disabled.
* DifferenceEngine::generateDiffBody() was removed (deprecated since 1.21).
] ) .
Html::openElement( 'tbody' );
- foreach ( $output->getLimitReportData()['limitreport'] as $key => $value ) {
+ foreach ( $output->getLimitReportData() as $key => $value ) {
if ( Hooks::run( 'ParserLimitReportFormat',
[ $key, &$value, &$limitReport, true, true ]
) ) {
- $keyMsg = wfMessage( "limitreport-$key" );
- $valueMsg = wfMessage(
- [ "limitreport-$key-value-html", "limitreport-$key-value" ]
- );
+ $keyMsg = wfMessage( $key );
+ $valueMsg = wfMessage( [ "$key-value-html", "$key-value" ] );
if ( !$valueMsg->exists() ) {
$valueMsg = new RawMessage( '$1' );
}
if ( !$keyMsg->isDisabled() && !$valueMsg->isDisabled() ) {
- // If it's a value/limit array, convert it for $1/$2
- if ( is_array( $value ) && isset( $value['value'] ) ) {
- $value = [ $value['value'], $value['limit'] ];
- }
$limitReport .= Html::openElement( 'tr' ) .
Html::rawElement( 'th', null, $keyMsg->parse() ) .
Html::rawElement( 'td', null, $valueMsg->params( $value )->parse() ) .
*/
private $copyrightUrl;
- /** @var array Profiling data */
- private $limitReportData = [];
-
/**
* Constructor for OutputPage. This should not be called directly.
* Instead a new RequestContext should be created and it will implicitly create
}
}
- // Enable OOUI if requested via ParserOutput
+ // enable OOUI if requested via ParserOutput
if ( $parserOutput->getEnableOOUI() ) {
$this->enableOOUI();
}
- // Include profiling data
- if ( !$this->limitReportData ) {
- $this->setLimitReportData( $parserOutput->getLimitReportData() );
- }
-
// Link flags are ignored for now, but may in the future be
// used to mark individual language links.
$linkFlags = [];
}
}
- if ( $this->limitReportData ) {
- $chunks[] = ResourceLoader::makeInlineScript(
- ResourceLoader::makeConfigSetScript(
- [ 'wgPageParseReport' => $this->limitReportData ],
- true
- )
- );
- }
-
return self::combineWrappedStrings( $chunks );
}
'mediawiki.widgets.styles',
] );
}
-
- /**
- * @param array $data Data from ParserOutput::getLimitReportData()
- * @since 1.28
- */
- public function setLimitReportData( array $data ) {
- $this->limitReportData = $data;
- }
}
[ $this->mHighestExpansionDepth, $this->mOptions->getMaxPPExpandDepth() ]
);
$this->mOutput->setLimitReportData( 'limitreport-expensivefunctioncount',
- [ $this->mExpensiveFunctionCount,
- $this->mOptions->getExpensiveParserFunctionLimit() ]
+ [ $this->mExpensiveFunctionCount, $this->mOptions->getExpensiveParserFunctionLimit() ]
);
Hooks::run( 'ParserLimitReportPrepare', [ $this, $this->mOutput ] );
- $limitReport = '';
- Hooks::run( 'ParserLimitReport', [ $this, &$limitReport ] );
- if ( $limitReport != '' ) {
- // Sanitize for comment. Note '‐' in the replacement is U+2010,
- // which looks much like the problematic '-'.
- $limitReport = str_replace( [ '-', '&' ], [ '‐', '&' ], $limitReport );
- $text .= "\n<!-- \nNewPP limit report\n$limitReport-->\n";
+ $limitReport = "NewPP limit report\n";
+ if ( $wgShowHostnames ) {
+ $limitReport .= 'Parsed by ' . wfHostname() . "\n";
+ }
+ $limitReport .= 'Cached time: ' . $this->mOutput->getCacheTime() . "\n";
+ $limitReport .= 'Cache expiry: ' . $this->mOutput->getCacheExpiry() . "\n";
+ $limitReport .= 'Dynamic content: ' .
+ ( $this->mOutput->hasDynamicContent() ? 'true' : 'false' ) .
+ "\n";
+
+ foreach ( $this->mOutput->getLimitReportData() as $key => $value ) {
+ if ( Hooks::run( 'ParserLimitReportFormat',
+ [ $key, &$value, &$limitReport, false, false ]
+ ) ) {
+ $keyMsg = wfMessage( $key )->inLanguage( 'en' )->useDatabase( false );
+ $valueMsg = wfMessage( [ "$key-value-text", "$key-value" ] )
+ ->inLanguage( 'en' )->useDatabase( false );
+ if ( !$valueMsg->exists() ) {
+ $valueMsg = new RawMessage( '$1' );
+ }
+ if ( !$keyMsg->isDisabled() && !$valueMsg->isDisabled() ) {
+ $valueMsg->params( $value );
+ $limitReport .= "{$keyMsg->text()}: {$valueMsg->text()}\n";
+ }
+ }
}
+ // Since we're not really outputting HTML, decode the entities and
+ // then re-encode the things that need hiding inside HTML comments.
+ $limitReport = htmlspecialchars_decode( $limitReport );
+ Hooks::run( 'ParserLimitReport', [ $this, &$limitReport ] );
+
+ // Sanitize for comment. Note '‐' in the replacement is U+2010,
+ // which looks much like the problematic '-'.
+ $limitReport = str_replace( [ '-', '&' ], [ '‐', '&' ], $limitReport );
+ $text .= "\n<!-- \n$limitReport-->\n";
- // Add on template profiling data in human/machine readable way
+ // Add on template profiling data
$dataByFunc = $this->mProfiler->getFunctionStats();
uasort( $dataByFunc, function ( $a, $b ) {
return $a['real'] < $b['real']; // descending order
} );
- $profileReport = [];
+ $profileReport = "Transclusion expansion time report (%,ms,calls,template)\n";
foreach ( array_slice( $dataByFunc, 0, 10 ) as $item ) {
- $profileReport[] = sprintf( "%6.2f%% %8.3f %6d %s",
- $item['%real'], $item['real'], $item['calls'], $item['name'] );
+ $profileReport .= sprintf( "%6.2f%% %8.3f %6d - %s\n",
+ $item['%real'], $item['real'], $item['calls'],
+ htmlspecialchars( $item['name'] ) );
}
- $this->mOutput->setLimitReportData( 'limitreport-timingprofile', $profileReport );
+ $text .= "\n<!-- \n$profileReport-->\n";
- // Add other cache related metadata
- if ( $wgShowHostnames ) {
- $this->mOutput->setLimitReportData( 'cachereport-origin', wfHostname() );
- }
- $this->mOutput->setLimitReportData( 'cachereport-timestamp',
- $this->mOutput->getCacheTime() );
- $this->mOutput->setLimitReportData( 'cachereport-ttl',
- $this->mOutput->getCacheExpiry() );
- $this->mOutput->setLimitReportData( 'cachereport-transientcontent',
- $this->mOutput->hasDynamicContent() );
-
- if ( $this->mGeneratedPPNodeCount
- > $this->mOptions->getMaxGeneratedPPNodeCount() / 10
- ) {
+ if ( $this->mGeneratedPPNodeCount > $this->mOptions->getMaxGeneratedPPNodeCount() / 10 ) {
wfDebugLog( 'generated-pp-node-count', $this->mGeneratedPPNodeCount . ' ' .
$this->mTitle->getPrefixedDBkey() );
}
*/
private $mExtensionData = [];
- /** @var array $mLimitReportData Parser limit report data. */
+ /**
+ * @var array $mLimitReportData Parser limit report data.
+ */
private $mLimitReportData = [];
/**
/**
* Sets parser limit report data for a key
*
- * If $value consist of a list of two floats, it will be interpreted as
- * (actual value, maximum allowed value). The presence of a "-" in $key will cause
- * the first part of the key to be interpreted as a namespace.
+ * The key is used as the prefix for various messages used for formatting:
+ * - $key: The label for the field in the limit report
+ * - $key-value-text: Message used to format the value in the "NewPP limit
+ * report" HTML comment. If missing, uses $key-format.
+ * - $key-value-html: Message used to format the value in the preview
+ * limit report table. If missing, uses $key-format.
+ * - $key-value: Message used to format the value. If missing, uses "$1".
+ *
+ * Note that all values are interpreted as wikitext, and so should be
+ * encoded with htmlspecialchars() as necessary, but should avoid complex
+ * HTML for sanity of display in the "NewPP limit report" comment.
*
* @since 1.22
- * @param string $key Data key
- * @param mixed $value Data value One of (float, string, bool, JSON serializable array)
+ * @param string $key Message key
+ * @param mixed $value Appropriate for Message::params()
*/
public function setLimitReportData( $key, $value ) {
- if ( is_array( $value ) ) {
- if ( array_keys( $value ) === [ 0, 1 ]
- && is_numeric( $value[0] )
- && is_numeric( $value[1] )
- ) {
- $data = [ 'value' => $value[0], 'limit' => $value[1] ];
- } else {
- $data = $value;
- }
- } else {
- $data = $value;
- }
-
- if ( strpos( $key, '-' ) ) {
- list( $ns, $name ) = explode( '-', $key, 2 );
- $this->mLimitReportData[$ns][$name] = $data;
- } else {
- $this->mLimitReportData[$key] = $data;
- }
+ $this->mLimitReportData[$key] = $value;
}
/**
* the given value.
*
* @param array $configuration List of configuration values keyed by variable name
- * @param bool $pretty Pretty-print with extra whitespace
* @return string
*/
- public static function makeConfigSetScript( array $configuration, $pretty = null ) {
+ public static function makeConfigSetScript( array $configuration ) {
return Xml::encodeJsCall(
'mw.config.set',
[ $configuration ],
- ( $pretty === null ) ? ResourceLoader::inDebugMode() : $pretty
+ ResourceLoader::inDebugMode()
);
}