From 1bce6db10e99840cfbd10fa074c93d8d96d88412 Mon Sep 17 00:00:00 2001 From: Adam Roses Wight Date: Tue, 26 Jan 2016 21:17:21 -0800 Subject: [PATCH] Templatize Special:Contributions lines Bug: T122537 Change-Id: I11aac43de495881e10e393d075a231bd346ea547 --- includes/specials/SpecialContributions.php | 60 ++++++++++++------- .../SpecialContributionsLine.mustache | 6 ++ 2 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 includes/templates/SpecialContributionsLine.mustache diff --git a/includes/specials/SpecialContributions.php b/includes/specials/SpecialContributions.php index 5a351a7967..e7ef1684ea 100644 --- a/includes/specials/SpecialContributions.php +++ b/includes/specials/SpecialContributions.php @@ -1101,16 +1101,13 @@ class ContribsPager extends ReverseChronologicalPager { $userlink = ''; } + $flags = []; if ( $rev->getParentId() === 0 ) { - $nflag = ChangesList::flag( 'newpage' ); - } else { - $nflag = ''; + $flags[] = ChangesList::flag( 'newpage' ); } if ( $rev->isMinor() ) { - $mflag = ChangesList::flag( 'minor' ); - } else { - $mflag = ''; + $flags[] = ChangesList::flag( 'minor' ); } $del = Linker::getRevDeleteLink( $user, $rev, $page ); @@ -1121,15 +1118,6 @@ class ContribsPager extends ReverseChronologicalPager { $diffHistLinks = $this->msg( 'parentheses' ) ->rawParams( $difftext . $this->messages['pipe-separator'] . $histlink ) ->escaped(); - $ret = "{$del}{$d} {$diffHistLinks}{$chardiff}{$nflag}{$mflag} "; - $ret .= "{$link}{$userlink} {$comment} {$topmarktext}"; - - # Denote if username is redacted for this edit - if ( $rev->isDeleted( Revision::DELETED_USER ) ) { - $ret .= " " . - $this->msg( 'rev-deleted-user-contribs' )->escaped() . - ""; - } # Tags, if any. list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( @@ -1138,20 +1126,48 @@ class ContribsPager extends ReverseChronologicalPager { $this->getContext() ); $classes = array_merge( $classes, $newClasses ); - $ret .= " $tagSummary"; + + $templateParams = [ + 'articleLink' => $link, + 'charDifference' => $chardiff, + 'classes' => $classes, + 'diffHistLinks' => $diffHistLinks, + 'flags' => $flags, + 'logText' => $comment, + 'revDeleteLink' => $del, + 'tagSummary' => $tagSummary, + 'timestamp' => $d, + 'topmarktext' => $topmarktext, + 'userlink' => $userlink, + ]; + + # Denote if username is redacted for this edit + if ( $rev->isDeleted( Revision::DELETED_USER ) ) { + $templateParams['rev-deleted-user-contribs'] = + $this->msg( 'rev-deleted-user-contribs' )->escaped(); + } + + $templateParser = new TemplateParser(); + $ret = $templateParser->processTemplate( + 'SpecialContributionsLine', + $templateParams + ); } // Let extensions add data - Hooks::run( 'ContributionsLineEnding', [ $this, &$ret, $row, &$classes ] ); + Hooks::run( 'ContributionsLineEnding', [ $this, &$ret, $row, &$templateParams['classes'] ] ); - if ( $classes === [] && $ret === '' ) { + // TODO: Handle exceptions in the catch block above. Do any extensions rely on + // receiving empty rows? + + if ( $templateParams['classes'] === [] && $ret === '' ) { wfDebug( "Dropping Special:Contribution row that could not be formatted\n" ); - $ret = "\n"; - } else { - $ret = Html::rawElement( 'li', [ 'class' => $classes ], $ret ) . "\n"; + return "\n"; } - return $ret; + // FIXME: The signature of the ContributionsLineEnding hook makes it + // very awkward to move this LI wrapper into the template. + return Html::rawElement( 'li', [ 'class' => $templateParams['classes'] ], $ret ) . "\n"; } /** diff --git a/includes/templates/SpecialContributionsLine.mustache b/includes/templates/SpecialContributionsLine.mustache new file mode 100644 index 0000000000..7a334014aa --- /dev/null +++ b/includes/templates/SpecialContributionsLine.mustache @@ -0,0 +1,6 @@ +{{{ del }}}{{{ timestamp }}} +{{{ diffHistLinks }}}{{{ charDifference }}}{{# flags }}{{{ . }}}{{/ flags }} +{{{ articleLink }}}{{{ userlink }}} +{{{ logText }}} +{{{ topmarktext }}}{{# rev-deleted-user-contribs }} {{{ . }}}{{/ rev-deleted-user-contribs }} +{{{ tagSummary }}} -- 2.20.1