review/templates/changeset.html @ a150f425c074

web: style the signoff list
author Steve Losh <steve@stevelosh.com>
date Sat, 12 Jun 2010 23:49:19 -0400
parents fcbf8d764330
children 4a6d47faac16
{% extends "base.html" %}

{% block id %}changeset{% endblock %}
{% block title %}Changeset {{ rev.rev() }} of {% endblock %}

{% block content %}
    <h2>Changeset {{ rev.rev() }}: {{ rev.description().splitlines()[0] }}</h2>

    {% if utils['len'](rev.description().splitlines()) > 1 %}
        <div class="fulldesc">{{ "\n".join(rev.description().splitlines()[1:]).strip() }}</div>
    {% endif %}

    {% with %}
        {% set comments = rcset.review_level_comments() %}

        {% if comments %}
            <div class="review-level-comments">
                {% for comment in comments %}
                    <div class="comment group">
                        {{ macros.gravatar(comment, utils) }}
                        <div>
                            <div class="author">
                                <a href="mailto:${ email(comment.author) }">{{ utils['templatefilters'].person(comment.author) }}</a>
                                said:
                            </div>
                            <div class="message">{{ comment.message }}</div>
                        </div>
                    </div>
                {% endfor %}
            </div>
        {% endif %}
    {% endwith %}

    {% if not read_only %}
        <div class="add-review-comment togglebox group">
            <span class="activate"><a class="button" href="#"><span>Add a comment on this changeset</span></a></span>
            <form class="disabled" id="comment-review-form" method="POST" action="">
                <div class="field">
                    <label class="infield" for="id_comment-review-form_body">Comment</label>
                    <textarea autocomplete="off" id="id_comment-review-form_body" cols="60" rows="6" name="new-comment-body"></textarea>
                </div>
                <a class="submit button" href="#"><span>Post Comment</span></a>
                <a class="cancel button" href="#"><span>Cancel</span></a>
            </form>
        </div>
    {% endif %}

    <h2>Signoffs</h2>

    {% with %}
        {% set signoffs = rcset.signoffs %}

        {% if signoffs %}
            <div class="signoffs">
                {% for signoff in signoffs %}
                    <div class="signoff group {{ signoff.opinion or 'neutral' }}">
                        {{ macros.gravatar(signoff, utils) }}
                        <div class="signoff-opinion {{ signoff.opinion or "neutral" }}">{{ signoff.opinion or "meh" }}</div>
                        
                        <div>
                            <div class="author">
                                <a href="mailto:${ email(signoff.author) }">{{ utils['templatefilters'].person(signoff.author) }}</a>
                                signed off as <span class="opinion">{{ signoff.opinion or "neutral" }}</span> on this changeset, saying:
                            </div>
                            <div class="message">{{ signoff.message }}</div>
                        </div>
                    </div>
                {% endfor %}
            </div>
        {% endif %}
    {% endwith %}

    {% if not read_only %}
        <div class="add-signoff togglebox group">
            <span class="activate">
                {% if cu_signoff %}
                    <a class="button" href="#"><span>Change your signoff</span></a>
                {% else %}
                    <a class="button" href="#"><span>Sign off on this changeset</span></a>
                {% endif %}
            </span>
            <form id="signoff-form" class="disabled" method="POST" action="">
                <p class="sign-off-as">Sign off as:</p>
                <div class="field">
                    <input id="id_signoff-form_yes" type="radio" name="signoff" value="yes" {% if cu_signoff and cu_signoff.opinion == 'yes' %}checked{% endif %}/><label class="radio" for="id_signoff-form_yes">Yes</label>
                    <input id="id_signoff-form_no"type="radio" name="signoff" value="no" {% if cu_signoff and cu_signoff.opinion == 'no' %}checked{% endif %}/><label class="radio" for="id_signoff-form_no">No</label>
                    <input id="id_signoff-form_neutral"type="radio" name="signoff" value="neutral" {% if cu_signoff and cu_signoff.opinion == '' %}checked{% endif %}/><label class="radio" for="id_signoff-form_neutral">Neutral</label>
                </div>
                <div class="field">
                    <label class="infield" for="id_signoff-form_body">Signoff message</label>
                    <textarea id="id_signoff-form_body" cols="60" rows="6" name="new-signoff-body">{% if cu_signoff %}{{ cu_signoff.message }}{% endif %}</textarea>
                </div>
                <div class="buttons">
                    <a class="submit button" href="#"><span>Add Signoff</span></a>
                    <a class="cancel button" href="#"><span>Cancel</span></a>
                </div>
            </form>
        </div>
    {% endif %}

    <h2>Files</h2>

    {% for filename in rcset.files() %}
        <div class="file-review">
            <div class="filename-header">
                <a class="fold-file" href="">&nbsp;&nbsp;&nbsp;&darr;</a>
                <h3>{{ filename }}</h3>
            </div>

            <div class="file-review-contents">
                {% for comment in rcset.file_level_comments(filename) %}
                    <div class="comment">
                        {{ macros.gravatar(comment, utils) }}
                        <div>
                            <div class="author">
                                <a href="mailto:{{ utils['email'](comment.author) }}">
                                    {{ utils['templatefilters'].person(comment.author) }}</a>
                                    said:
                            </div>
                            <div class="message">{{ comment.message }}</div>
                        </div>
                    </div>
                {% endfor %}

                {% if not read_only %}
                    <div id="comment-file" class="input">
                        <p class="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="new-comment-body"></textarea>
                            </div>
                            <div class="buttons">
                                <input type="submit" class="button" value="Submit" />
                                <span class="cancel"><a href="#">Cancel</a></span>
                            </div>
                            <input type="hidden" name="filename" value="{{ filename }}" />
                        </form>
                    </div>
                {% endif %}

                <div class="diff">
                    <table>
                        <tbody>
                            {% set annotated_diff = rcset.annotated_diff(filename) %}
                            {# We need to ignore the first item from this generator, because
                               we don't care about providing a line-number prefix (for now!). #}
                            {% set ignore_this_variable = annotated_diff.next() %}

                            {% for line in annotated_diff %}
                                {% if line['skipped'] %}
                                    <tr class="skipped">
                                        <td><code>&hellip; skipped {{ line['skipped'] }} lines &hellip;</code></td>
                                    </tr>
                                    {% for comment in line['comments'] %}
                                        <tr><td class="comment">
                                            {{ macros.gravatar(comment, utils) }}
                                            <div>
                                                <div class="author">
                                                    <a href="mailto:{{ utils['email'](comment.author) }}">
                                                        {{ utils['templatefilters'].person(comment.author) }}
                                                    </a>
                                                    said (on a skipped line):
                                                </div>
                                                <div class="message">{{ comment.message|escape }}</div>
                                            </div>
                                        </td></tr>
                                    {% endfor %}
                                {% else %}
                                    <tr class="{{ utils['line_type'](line['content']) }}{% if not read_only %} commentable {% endif %}">
                                        <td class="diff-line"><div class="line-data"><span class="linenumber">{{ line['number'] }}</span><span class="filename">{{ filename }}</span></div><code>{{ line['number'] }}: {{ line['content'][1:]|escape }}</code></td>
                                    </tr>

                                    {% for comment in line['comments'] %}
                                        <tr><td class="comment">
                                            {{ macros.gravatar(comment, utils) }}
                                            <div>
                                                <div class="author">
                                                    <a href="mailto:{{ utils['email'](comment.author) }}">
                                                        {{ utils['templatefilters'].person(comment.author) }}
                                                    </a>
                                                    said:
                                                </div>
                                                <div class="message">{{ comment.message }}</div>
                                            </div>
                                        </td></tr>
                                    {% endfor %}
                                {% endif %}
                            {% endfor %}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    {% endfor %}
{% endblock %}