From 0051f108b954b52b9981d5d85862ac1f292db80c Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Sat, 15 Oct 2016 19:17:08 -0700 Subject: [PATCH] Re-add human readable parser limit report This mostly reverts commit 1255654ed5a89ed57491bda38f544ed87e3bc601. This re-adds the human readable parser limit report, and makes a few adjustments necessary for it to work properly. * In EditPage::getPreviewLimitReport(), only generate the HTML report, the JS variable will be added by OutputPage * If there are multiple calls to OutputPage::addParserOutputMetadata(), only use the limit report data from the first one. * Only add the wgPageParseReport variable if limit report data is available. Bug: T142210 Change-Id: Iad2646acde79b8a59710bb9fd5fbbfea5a39c341 --- includes/EditPage.php | 50 ++++++++++++++++++++++++++++++++++------- includes/OutputPage.php | 18 +++++++++------ 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/includes/EditPage.php b/includes/EditPage.php index 1c13d56e2f..0d8def3486 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -2787,9 +2787,8 @@ ERROR; $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'hiddencats' ], Linker::formatHiddenCategories( $this->page->getHiddenCategories() ) ) ); - if ( $this->mParserOutput ) { - $wgOut->setLimitReportData( $this->mParserOutput->getLimitReportData() ); - } + $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'limitreport' ], + self::getPreviewLimitReport( $this->mParserOutput ) ) ); $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' ); @@ -3567,12 +3566,47 @@ HTML return ''; } - return ResourceLoader::makeInlineScript( - ResourceLoader::makeConfigSetScript( - [ 'wgPageParseReport' => $output->getLimitReportData() ], - true - ) + $limitReport = Html::rawElement( 'div', [ 'class' => 'mw-limitReportExplanation' ], + wfMessage( 'limitreport-title' )->parseAsBlock() ); + + // Show/hide animation doesn't work correctly on a table, so wrap it in a div. + $limitReport .= Html::openElement( 'div', [ 'class' => 'preview-limit-report-wrapper' ] ); + + $limitReport .= Html::openElement( 'table', [ + 'class' => 'preview-limit-report wikitable' + ] ) . + Html::openElement( 'tbody' ); + + foreach ( $output->getLimitReportData()['limitreport'] 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" ] + ); + 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() ) . + Html::closeElement( 'tr' ); + } + } + } + + $limitReport .= Html::closeElement( 'tbody' ) . + Html::closeElement( 'table' ) . + Html::closeElement( 'div' ); + + return $limitReport; } protected function showStandardInputs( &$tabindex = 2 ) { diff --git a/includes/OutputPage.php b/includes/OutputPage.php index a69c0e6692..50f9eb91fb 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -1782,7 +1782,9 @@ class OutputPage extends ContextSource { } // Include profiling data - $this->setLimitReportData( $parserOutput->getLimitReportData() ); + 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. @@ -2929,12 +2931,14 @@ class OutputPage extends ContextSource { } } - $chunks[] = ResourceLoader::makeInlineScript( - ResourceLoader::makeConfigSetScript( - [ 'wgPageParseReport' => $this->limitReportData ], - true - ) - ); + if ( $this->limitReportData ) { + $chunks[] = ResourceLoader::makeInlineScript( + ResourceLoader::makeConfigSetScript( + [ 'wgPageParseReport' => $this->limitReportData ], + true + ) + ); + } return self::combineWrappedStrings( $chunks ); } -- 2.20.1