Merge "Add HTML template for change comment emails"

This commit is contained in:
Wyatt Allen
2016-10-19 20:23:49 +00:00
committed by Gerrit Code Review
6 changed files with 179 additions and 1 deletions

View File

@@ -106,7 +106,9 @@ public class SitePathInitializer {
extractMailExample("ChangeFooterHtml.soy");
extractMailExample("ChangeSubject.soy");
extractMailExample("Comment.soy");
extractMailExample("CommentHtml.soy");
extractMailExample("CommentFooter.soy");
extractMailExample("CommentFooterHtml.soy");
extractMailExample("DeleteReviewer.soy");
extractMailExample("DeleteReviewerHtml.soy");
extractMailExample("DeleteVote.soy");

View File

@@ -136,11 +136,17 @@ public class CommentSender extends ReplyToChangeSender {
@Override
public void formatChange() throws EmailException {
appendText(textTemplate("Comment"));
if (useHtml()) {
appendHtml(soyHtmlTemplate("CommentHtml"));
}
}
@Override
public void formatFooter() throws EmailException {
appendText(textTemplate("CommentFooter"));
if (useHtml()) {
appendHtml(soyHtmlTemplate("CommentFooterHtml"));
}
}
/**
@@ -469,6 +475,7 @@ public class CommentSender extends ReplyToChangeSender {
commentData.put("isRobotComment", true);
commentData.put("robotId", robotComment.robotId);
commentData.put("robotRunId", robotComment.robotRunId);
commentData.put("robotUrl", robotComment.url);
} else {
commentData.put("isRobotComment", false);
}
@@ -521,4 +528,9 @@ public class CommentSender extends ReplyToChangeSender {
return "";
}
}
@Override
protected boolean supportsHtml() {
return true;
}
}

View File

@@ -44,7 +44,9 @@ public class MailSoyTofuProvider implements Provider<SoyTofu> {
"ChangeFooterHtml.soy",
"ChangeSubject.soy",
"Comment.soy",
"CommentHtml.soy",
"CommentFooter.soy",
"CommentFooterHtml.soy",
"DeleteReviewer.soy",
"DeleteReviewerHtml.soy",
"DeleteVote.soy",

View File

@@ -26,6 +26,11 @@
* @param projectName
*/
{template .ChangeFooterHtml autoescape="strict" kind="html"}
{let $footerStyle kind="css"}
color: #555;
margin: 10px 0 0 0;
{/let}
{if $email.changeUrl or $email.settingsUrl}
<p>
{if $email.changeUrl}
@@ -38,7 +43,7 @@
</p>
{/if}
<p style="color: #555;">
<p style="{$footerStyle}">
Gerrit-MessageType: {$messageClass}<br/>
Gerrit-Change-Id: {$changeId}<br/>
Gerrit-PatchSet: {$patchSet.patchSetId}<br/>

View File

@@ -0,0 +1,35 @@
/**
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
{namespace com.google.gerrit.server.mail.template}
/**
* @param commentFiles
*/
{template .CommentFooterHtml autoescape="strict" kind="html"}
{let $footerStyle kind="css"}
color: #555;
margin: 0;
{/let}
<p style="{$footerStyle}">
{if length($commentFiles) > 0}
Gerrit-HasComments: Yes
{else}
Gerrit-HasComments: No
{/if}
</p>
{/template}

View File

@@ -0,0 +1,122 @@
/**
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
{namespace com.google.gerrit.server.mail.template}
/**
* @param change
* @param commentFiles
* @param coverLetter
* @param email
* @param fromName
*/
{template .CommentHtml autoescape="strict" kind="html"}
{let $commentHeaderStyle kind="css"}
margin-bottom: 4px;
{/let}
{let $blockquoteStyle kind="css"}
border-left: 1px solid #aaa;
margin: 10px 0;
padding: 0 10px;
{/let}
{let $messageStyle kind="css"}
white-space: pre-wrap;
{/let}
{let $ulStyle kind="css"}
padding-left: 20px;
{/let}
<p>
{$fromName} has posted comments on this change.
</p>
{if $email.changeUrl}
<p>
{call .ViewChangeButton data="all" /}
</p>
{/if}
<p>
Change subject: {$change.subject}
</p>
<hr/>
{if $coverLetter}
<pre>{$coverLetter}</pre>
{/if}
<ul style="{$ulStyle}">
{foreach $group in $commentFiles}
<li>
<p>
<strong><a href="{$group.link}">{$group.title}:</a></strong>
</p>
<ul style="{$ulStyle}">
{foreach $comment in $group.comments}
<li>
{if $comment.isRobotComment}
<p style="{$commentHeaderStyle}">
Robot Comment from{sp}
{if $comment.robotUrl}<a href="{$comment.robotUrl}">{/if}
{$comment.robotId}
{if $comment.robotUrl}</a>{/if}{sp}
(run ID {$comment.robotRunId}):
</p>
{/if}
<p style="{$commentHeaderStyle}">
{if length($comment.lines) > 0}
Patch Set #{$group.patchSetId}, Line {$comment.startLine}:{sp}
{/if}
{if length($comment.lines) == 1}
<code>{$comment.lines[0]}</code>
{/if}
</p>
{if length($comment.lines) > 1}
<p>
<blockquote style="{$blockquoteStyle}">
<pre>
{foreach $line in $comment.lines}
{$line}{\n}
{/foreach}
</pre>
</blockquote>
</p>
{/if}
{if $comment.parentMessage}
<p>
<blockquote style="{$blockquoteStyle}">
{$comment.parentMessage}
</blockquote>
</p>
{/if}
<p style="{$messageStyle}">
{$comment.message}
</p>
</li>
{/foreach}
</ul>
</li>
{/foreach}
</ul>
{/template}