| OLD | NEW |
| 1 {%extends "base.html"%} | 1 {%extends "base.html"%} |
| 2 {%block body%} | 2 {%block body%} |
| 3 <h2>Issue: {{issue.subject}} {%if issue.closed %} (Closed) {%endif%}</h2> | 3 <h2>Issue: {{issue.subject}} {%if issue.closed %} (Closed) {%endif%}</h2> |
| 4 | 4 |
| 5 {%if issue.draft_count%} | 5 {%if issue.draft_count%} |
| 6 <div class="error">You have <b>{{issue.draft_count}} draft</b> | 6 <div class="error">You have <b>{{issue.draft_count}} draft</b> |
| 7 comment{{issue.draft_count|pluralize}}. | 7 comment{{issue.draft_count|pluralize}}. |
| 8 Drafts are not viewable by others; use | 8 Drafts are not viewable by others; use |
| 9 <a class="novisit" href="{%url codereview.views.publish issue.key.id%}"> | 9 <a class="novisit" href="{%url codereview.views.publish issue.key.id%}"> |
| 10 Publish+Mail Comments</a> to let others view them. | 10 Publish+Mail Comments</a> to let others view them. |
| 11 </div> | 11 </div> |
| 12 {%endif%} | 12 {%endif%} |
| 13 | 13 |
| 14 <div style="float: left; padding-right: 1em"> | 14 <div style="float: left; padding-right: 1em"> |
| 15 <div> | 15 <div> |
| 16 <i>Created:</i> {{issue.created|timesince}} ago by | 16 <i>Created:</i> {{issue.created|timesince}} ago by |
| 17 <b>{{issue.owner|nickname}}</b>; | 17 <b>{{issue.owner|nickname}}</b>; |
| 18 <i>Last updated:</i> {{issue.modified|timesince}} ago | 18 <i>Last updated:</i> {{issue.modified|timesince}} ago |
| 19 </div> | 19 </div> |
| 20 <div><i>SVN Base:</i> {{issue.base}}</div> | 20 <div><i>SVN Base:</i> {{issue.base}}</div> |
| 21 <div><i>Reviewers:</i> {{issue.reviewers|nicknames}}</div> | 21 <div><i>Reviewers:</i> {{issue.reviewers|nicknames}}</div> |
| 22 {%if last_patchset and first_patch%} |
| 22 <div> | 23 <div> |
| 23 {%ifequal issue.owner user %} | |
| 24 <a class="novisit" href="{%url codereview.views.edit issue.key.id%}">Edit | |
| 25 Issue</a> | |
| 26 {%else%} | |
| 27 <span class="disabled">Can't Edit</span> | |
| 28 {%endifequal%} | |
| 29 | | |
| 30 {%if user%} | |
| 31 <a class="novisit" href="{%url codereview.views.publish issue.key.id%}">Publis
h+Mail | |
| 32 Comments</a> | |
| 33 {%else%} | |
| 34 <span class="disabled">Can't Publish+Mail</span> | |
| 35 {%endif%} | |
| 36 {%if last_patchset and first_patch%} | |
| 37 | | |
| 38 <a class="novisit" | 24 <a class="novisit" |
| 39 href="{%url codereview.views.diff issue.key.id,last_patchset.key.id,first_p
atch.key.id%}"> | 25 href="{%url codereview.views.diff issue.key.id,last_patchset.key.id,first_p
atch.key.id%}"> |
| 40 <b>Start Review</b></a> | 26 <b>Start Review</b></a> |
| 41 {%endif%} | |
| 42 </div> | 27 </div> |
| 28 {%endif%} |
| 43 </div> | 29 </div> |
| 44 | 30 |
| 45 {%if issue.description%} | 31 {%if issue.description%} |
| 46 <div style="float: left"><i>Description:</i> | 32 <div style="float: left"><i>Description:</i> |
| 47 <pre style="background-color: #e5ecf9; margin-top: 0; padding: 3px; overflow: au
to"> | 33 <pre style="background-color: #e5ecf9; margin-top: 0; padding: 3px; overflow: au
to"> |
| 48 {{issue.description|wordwrap:"80"|urlize}}</pre> | 34 {{issue.description|wordwrap:"80"|urlize}}</pre> |
| 49 </div> | 35 </div> |
| 50 {%endif%} | 36 {%endif%} |
| 51 <div style="clear:both"></div> | 37 <div style="clear:both"></div> |
| 52 | 38 |
| 53 {%for patchset in patchsets%} | 39 {%for patchset in patchsets%} |
| 54 <h3> | 40 <h3> |
| 55 <a id="ps-{{patchset.key.id}}-pointer" | 41 <a id="ps-{{patchset.key.id}}-pointer" |
| 56 href="javascript:M_toggleSection('ps-{{patchset.key.id}}')" | 42 href="javascript:M_toggleSection('ps-{{patchset.key.id}}')" |
| 57 class="toggled-section"> | 43 class="toggled-section"> |
| 58 Patch Set {{forloop.counter}}: | 44 Patch Set {{forloop.counter}}: |
| 59 {%if patchset.message%}{{patchset.message}}{%endif%}</a></h3> | 45 {%if patchset.message%}{{patchset.message}}{%endif%}</a></h3> |
| 60 {%if patchset.n_comments or patchset.n_drafts%} | 46 {%if patchset.n_comments or patchset.n_drafts%} |
| 61 <div> | 47 <div> |
| 62 <i>Total comments:</i> {{patchset.n_comments}} | 48 <i>Total comments:</i> {{patchset.n_comments}} |
| 63 {%if patchset.n_drafts%} | 49 {%if patchset.n_drafts%} |
| 64 <span style="color:red"> | 50 <span style="color:red"> |
| 65 <b>+ {{patchset.n_drafts}} draft{{patchset.n_drafts|pluralize}}</b></span> | 51 <b>+ {{patchset.n_drafts}} draft{{patchset.n_drafts|pluralize}}</b></span> |
| 66 </div> | 52 </div> |
| 67 {%endif%} | 53 {%endif%} |
| 68 {%endif%} | 54 {%endif%} |
| 69 <div id="ps-{{patchset.key.id}}" | 55 <div id="ps-{{patchset.key.id}}" |
| 70 style="{%if forloop.last or patchset.n_drafts%}{%else%}display:none{%endif%
}"> | 56 style="{%if forloop.last or patchset.n_drafts%}{%else%}display:none{%endif%
}"> |
| 71 {%if patchset.url%} | 57 {%if patchset.url%} |
| 72 <div>Downloaded from: <a href="{{patchset.url}}">{{patchset.url}}</a></div> | 58 <div>Downloaded from: <a href="{{patchset.url}}">{{patchset.url}}</a></div> |
| 73 {%endif%} | 59 {%endif%} |
| 74 <div> | 60 <div> |
| 75 <i>Created:</i> {{patchset.created|timesince}} ago | 61 <i>Created:</i> {{patchset.created|timesince}} ago |
| 76 {%ifnotequal patchset.owner issue.owner%} | 62 {%ifnotequal patchset.owner issue.owner%} |
| 77 by <b>{{patchset.owner|nickname}}</b>{%endifnotequal%} | 63 by <b>{{patchset.owner|nickname}}</b>{%endifnotequal%} |
| 78 </div> | 64 </div> |
| 79 <div> | 65 <div> |
| 80 <a href="{%url codereview.views.download issue.key.id,patchset.key.id%}">Downl
oad raw patch set</a> | 66 <a href="{%url codereview.views.download issue.key.id,patchset.key.id%}">Downl
oad raw patch set</a> |
| 81 </div> | 67 </div> |
| 82 <table id="queues"> | 68 <table id="queues"> |
| 83 <tr> | 69 <tr> |
| 84 <th>Raw unified diffs</th> | 70 <th>Raw unified diffs</th> |
| 85 <th colspan="2">Stats</th> | 71 <th colspan="2">Stats</th> |
| 86 <th>Side-by-side diffs with inline comments</th> | 72 <th>Side-by-side diffs with inline comments</th> |
| 87 {%for patch in patchset.patches%} | 73 {%for patch in patchset.patches%} |
| 88 <tr> | 74 <tr> |
| 89 <td> | 75 <td> |
| 90 <a class="noul" | 76 <a class="noul" |
| 91 href="{%url codereview.views.patch issue.key.id,patch.patchset.key.id,pat
ch.key.id%}"> | 77 href="{%url codereview.views.patch issue.key.id,patch.patchset.key.id,pat
ch.key.id%}"> |
| 92 {{patch.filename}}</a> | 78 {{patch.filename}}</a> |
| 93 </td> | 79 </td> |
| 94 <td>{{patch.num_chunks}} chunk{{patch.num_chunks|pluralize}}</td> | 80 <td>{{patch.num_chunks}} chunk{{patch.num_chunks|pluralize}}</td> |
| 95 <td>{{patch.num_lines}} line{{patch.num_lines|pluralize}}</td> | 81 <td>{{patch.num_lines}} line{{patch.num_lines|pluralize}}</td> |
| 96 <td> | 82 <td> |
| 97 {%if patch.num_comments or patch.num_drafts%}<b>{%endif%} | 83 {%if patch.num_comments or patch.num_drafts%}<b>{%endif%} |
| 98 <a class="noul" href="{%url codereview.views.diff issue.key.id,patch.patchset.
key.id,patch.key.id%}"> | 84 <a class="noul" href="{%url codereview.views.diff issue.key.id,patch.patchset.
key.id,patch.key.id%}"> |
| 99 {{patch.num_comments}} comment{{patch.num_comments|pluralize}} | 85 {{patch.num_comments}} comment{{patch.num_comments|pluralize}} |
| 100 {%if patch.num_drafts%}<span style="color:red">+ | 86 {%if patch.num_drafts%}<span style="color:red">+ |
| 101 {{patch.num_drafts}} draft{{patch.num_drafts|pluralize}}</span> | 87 {{patch.num_drafts}} draft{{patch.num_drafts|pluralize}}</span> |
| 102 {%endif%} | 88 {%endif%} |
| 103 </a> | 89 </a> |
| 104 {%if patch.num_comments or patch.num_drafts%}</b>{%endif%} | 90 {%if patch.num_comments or patch.num_drafts%}</b>{%endif%} |
| 105 </td> | 91 </td> |
| 106 <td> | 92 <td> |
| 107 {%for other in patchsets%} | 93 {%for other in patchsets%} |
| 108 {%ifnotequal other patchset%} | 94 {%ifnotequal other patchset%} |
| 109 <a href="/{{issue.key.id}}/diff2/{{other.key.id}}:{{patchset.key.id}}/{{
patch.key.id}}">delta from patch set {{forloop.counter}}</a> | 95 <a href="/{{issue.key.id}}/diff2/{{other.key.id}}:{{patchset.key.id}}/{{
patch.key.id}}">delta from patch set {{forloop.counter}}</a> |
| 110 {%endifnotequal%} | 96 {%endifnotequal%} |
| 111 {%endfor%} | 97 {%endfor%} |
| 112 </td> | 98 </td> |
| 113 </tr> | 99 </tr> |
| 114 {%endfor%} | 100 {%endfor%} |
| 115 </table> | 101 </table> |
| 116 </div> | 102 </div> |
| 117 {%endfor%} | 103 {%endfor%} |
| 118 | 104 |
| 119 {%ifequal user issue.owner%} | 105 {%ifequal user issue.owner%} |
| 120 <h3> | 106 <h3> |
| 121 <a id="add-pointer" | 107 <a id="add-pointer" |
| 122 href="javascript:M_toggleSection('add')" | 108 href="javascript:M_toggleSection('add')" |
| 123 class="toggled-section"> | 109 class="toggled-section"> |
| 124 Add Another Patch Set</a> | 110 Add Another Patch Set</a> |
| 125 </h3> | 111 </h3> |
| 126 | 112 |
| 127 <form id="add" style="{%if not form.errors%}display:none{%endif%}" | 113 <form id="add" style="{%if not form.errors%}display:none{%endif%}" |
| 128 action="{%url codereview.views.add issue.key.id%}" method="post" | 114 action="{%url codereview.views.add issue.key.id%}" method="post" |
| 129 enctype="multipart/form-data"> | 115 enctype="multipart/form-data"> |
| 130 <table> | 116 <table> |
| 131 {{form}} | 117 {{form}} |
| 132 <tr> | 118 <tr> |
| 133 <td><input type="submit" value="Add Patch Set"></td> | 119 <td><input type="submit" value="Add Patch Set"></td> |
| 134 <td> | 120 <td> |
| 135 You can also add a patch set to this issue using | 121 You can also add a patch set to this issue using |
| 136 <code>upload.py -i {{issue.key.id}}</code> | 122 <code>upload.py -i {{issue.key.id}}</code> |
| 137 </td> | 123 </td> |
| 138 </tr> | 124 </tr> |
| 139 </table> | 125 </table> |
| 140 </form> | 126 </form> |
| 141 {%endifequal%} | 127 {%endifequal%} |
| 142 | 128 |
| 143 {%if messages%} | 129 {%if messages%} |
| 144 <h2>Messages</h2> | 130 <h2>Messages</h2> |
| 145 | 131 |
| 146 <a href="javascript:M_showAllComments('cl', {{messages|length}})"> | 132 <a href="javascript:M_showAllComments('cl', {{messages|length}})"> |
| 147 Expand All Comments</a> | 133 Expand All Comments</a> |
| 148 | | 134 | |
| 149 <a href="javascript:M_hideAllComments('cl', {{messages|length}})"> | 135 <a href="javascript:M_hideAllComments('cl', {{messages|length}})"> |
| 150 Collapse All Comments</a> | 136 Collapse All Comments</a> |
| 151 | 137 |
| 152 {%for message in messages%} | 138 {%for message in messages%} |
| 153 <div class="comment_title" | 139 <div class="comment_title" |
| 154 onclick="M_switchChangelistComment({{forloop.counter0}})"> | 140 onclick="M_switchChangelistComment({{forloop.counter0}})"> |
| 155 From: {{message.sender|nickname}} | 141 From: {{message.sender|nickname}} |
| 156 <span id="cl-preview-{{forloop.counter0}}" class="extra"> | 142 <span id="cl-preview-{{forloop.counter0}}" class="extra"> |
| 157 {{message.date|timesince}} ago | 143 {{message.date|timesince}} ago |
| 158 </span> | 144 </span> |
| 159 </div> | 145 </div> |
| 160 <div id="cl-comment-{{forloop.counter0}}" style="display: none;"> | 146 <div id="cl-comment-{{forloop.counter0}}" style="display: none;"> |
| 161 <div>Subject: {{message.subject}}</div> | 147 <div>Subject: {{message.subject}}</div> |
| 162 <div>To: {{message.recipients|nicknames}}</div> | 148 <div>To: {{message.recipients|nicknames}}</div> |
| 163 <div>Date: {{message.date|timesince}} ago</div> | 149 <div>Date: {{message.date|timesince}} ago</div> |
| 164 <pre>{{message.text|wordwrap:"80"|urlize}}</pre> | 150 <pre>{{message.text|wordwrap:"80"|urlize}}</pre> |
| 165 </div> | 151 </div> |
| 166 {%endfor%} | 152 {%endfor%} |
| 167 | 153 |
| 168 <div style="border-top: thin solid;"></div> | 154 <div style="border-top: thin solid;"></div> |
| 169 | 155 |
| 170 <a href="javascript:M_showAllComments('cl', {{messages|length}})"> | 156 <a href="javascript:M_showAllComments('cl', {{messages|length}})"> |
| 171 Expand All Comments</a> | 157 Expand All Comments</a> |
| 172 | | 158 | |
| 173 <a href="javascript:M_hideAllComments('cl', {{messages|length}})"> | 159 <a href="javascript:M_hideAllComments('cl', {{messages|length}})"> |
| 174 Collapse All Comments</a> | 160 Collapse All Comments</a> |
| 175 {%endif%} | 161 {%endif%} |
| 176 | 162 |
| 177 <script language="JavaScript" type="text/javascript"><!-- | 163 <script language="JavaScript" type="text/javascript"><!-- |
| 178 document.onkeypress = function(evt) { return M_changelistKeyPress(evt); } | 164 document.onkeypress = function(evt) { return M_changelistKeyPress(evt); } |
| 179 // --> | 165 // --> |
| 180 </script> | 166 </script> |
| 181 | 167 |
| 182 {%endblock%} | 168 {%endblock%} |
| OLD | NEW |