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>&hellip; skipped ${ skipped_count } lines &hellip;</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>&hellip; skipped ${ skipped_count } lines &hellip;</code></td>
                </tr>
        </table>
    </div>