review/web_templates/review.html @ 2e65351af702
webui
Rough cut of line-level comments.
author |
Steve Losh <steve@stevelosh.com> |
date |
Thu, 22 Oct 2009 19:08:08 -0400 |
parents |
1cc8e18b1b43 |
children |
a3ad66636756 |
$def with (rd, rcset)
$ ctx = rd.target[rcset.node]
<h2>Changeset ${ ctx.rev() }: ${ ctx.description() }</h2>
$ review_level_comments = filter(lambda c: not c.filename, rcset.comments)
$for comment in review_level_comments:
<div class="comment">
<div class="avatar"><img height="52" width="52" src="http://www.gravatar.com/avatar/${ md5(email(comment.author)).hexdigest() }?s=52"/></div>
<div>
<div class="author"><a href="mailto:${ email(comment.author) }">${ templatefilters.person(comment.author) }</a> said:</div>
<div class="message">${ comment.message }</div>
</div>
</div>
<div id="comment-review">
<p class="comment-activate"><a href="">Add a comment on this changeset</a></p>
<form id="comment-review-form" method="post" action="">
<div class="field">
<label for="body">Add a comment on this changeset:</label>
<textarea cols="60" rows="6" name="body"></textarea>
</div>
<div class="buttons">
<input type="submit" class="button" value="Submit" />
</div>
</form>
</div>
$for filename, diff in rcset.diffs().iteritems():
<div class="filename-header">
<h3>${ filename }</h3>
</div>
$ file_level_comments = filter(lambda c: c.filename == filename and not c.lines, rcset.comments)
$for comment in file_level_comments:
<div class="comment">
<div class="avatar"><img height="52" width="52" src="http://www.gravatar.com/avatar/${ md5(email(comment.author)).hexdigest() }?s=52"/></div>
<div>
<div class="author"><a href="mailto:${ email(comment.author) }">${ templatefilters.person(comment.author) }</a> said:</div>
<div class="message">${ comment.message }</div>
</div>
</div>
<div id="comment-file">
<p class="comment-activate"><a href="">Add a comment on this file</a></p>
<form id="comment-file-form" method="post" action="">
<div class="field">
<label for="body">Add a comment on this file:</label>
<textarea cols="60" rows="6" name="body"></textarea>
</div>
<div class="buttons">
<input type="submit" class="button" value="Submit" />
</div>
<input type="hidden" name="filename" value="${ filename }" />
</form>
</div>
<div class="diff">
<table>
$ max_line = diff['max']
$ content = diff['content']
$ line_level_comments = filter(lambda c: c.filename == filename and c.lines, rcset.comments)
$ previous_n = -1
$for n, line in content:
$if n - 1 > previous_n:
$ skipped_count = n - previous_n
$if previous_n == -1:
$ skipped_count -= 1
<tr class="skipped">
<td><code>… skipped ${ skipped_count } lines …</code></td>
</tr>
$ kind = 'rem' if line[0] == '-' else 'add' if line[0] == '+' else 'con'
<tr class="${ kind }">
<td class="diff-line"><code>${ line[1:] or ' ' }</code></td>
</tr>
$ line_comments = filter(lambda c: max(c.lines) == n, line_level_comments)
$for comment in line_comments:
<tr><td class="comment">
<div class="avatar"><img height="52" width="52" src="http://www.gravatar.com/avatar/${ md5(email(comment.author)).hexdigest() }?s=52"/></div>
<div>
<div class="author"><a href="mailto:${ email(comment.author) }">${ templatefilters.person(comment.author) }</a> said:</div>
<div class="message">${ comment.message }</div>
</div>
</td></tr>
<tr class="comment-line">
<td>
<form id="comment-line-form" method="post" action="">
<div class="field">
<label for="body">Add a comment on this line:</label>
<textarea cols="60" rows="6" name="body"></textarea>
</div>
<div class="buttons">
<input type="submit" class="button" value="Submit" />
</div>
<input type="hidden" name="filename" value="${ filename }" />
<input type="hidden" name="lines" value="${ n }" />
</form>
</td>
</tr>
$ previous_n = n
$if previous_n < max_line:
$ skipped_count = max_line - previous_n
<tr class="skipped">
<td><code>… skipped ${ skipped_count } lines …</code></td>
</tr>
</table>
</div>