Skip to content

Commit 87ab07c

Browse files
committed
Patch UX Enhancement Refactor
In the interest of breaking up this major change to both UX, backend, and Workflow this patch separates out the main UX redesign choices for independent consideration. There is a new workflow display that will be polished and described once the final components have been incorporated. For now it simply places all of the action menu items on the screen; and incorporates a more coordinated and flow-oriented layout for the information in the existing key-value table. The #history-table is hidden by default but does include potentially useful information and so is expected to remain long-term. The status history field in the keyvalue-table may be moved here at some point. The elements from the #keyvalue-table that did not get incorporated into the workflow display are placed into a new workflow supplemental table. Unlike the key-value table, the new tables are horizontally compact. The #keyvalue-table is presently hidden but viewable. Conceptually, the contents of this table should never be needed in this view and at some point the table itself can be removed. For now it is left as a fallback. The existing action bar has been renamed the administrative bar. This will be visible only to staff and has minimal logic for showing and hiding UI widgets. That way, should the UI logic be faulty, it is generally still possible for staff to fix it. In this commit the contents of the bar remain unchanged, only the file name is different.
1 parent aa4f9e0 commit 87ab07c

File tree

8 files changed

+459
-198
lines changed

8 files changed

+459
-198
lines changed

media/commitfest/css/commitfest.css

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,23 @@ div.form-group div.controls input.threadpick-input {
9191
.search-bar {
9292
display: inline-block;
9393
}
94+
95+
.workflow table.table {
96+
width: auto;
97+
}
98+
99+
#keyvalue-table {
100+
display: none;
101+
}
102+
103+
#keyvalue-table.collapse.in {
104+
display: table;
105+
}
106+
107+
#history-table {
108+
display: none;
109+
}
110+
111+
#history-table.collapse.in {
112+
display: table;
113+
}

pgcommitfest/commitfest/templates/patch.html

Lines changed: 50 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -1,206 +1,59 @@
11
{%extends "base.html"%}
22
{%load commitfest%}
33
{%block contents%}
4-
{%include "patch_commands.inc"%}
5-
<table class="table table-bordered">
6-
<tbody>
7-
<tr>
8-
<th>ID</th>
9-
<td><a href="/patch/{{patch.id}}">{{patch.id}}</a></td>
10-
</tr>
11-
<tr>
12-
<th>Title</th>
13-
<td>{{patch.name}}</td>
14-
</tr>
15-
<tr>
16-
<th>CI (CFBot)</th>
17-
<td>
18-
{%if not cfbot_branch %}
19-
<span class="label label-default">Not processed</span></a>
20-
{%elif cfbot_branch.needs_rebase_since %}
21-
<a href="{{cfbot_branch.apply_url}}">
22-
<span class="label label-warning" title="View git apply logs">Needs rebase!</span></a>
23-
Needs rebase {% cfsince cfbot_branch.needs_rebase_since %}. {%if cfbot_branch.failing_since and cfbot_branch.failing_since != cfbot_branch.needs_rebase_since %}Failing {% cfsince cfbot_branch.failing_since %}. {%endif%}<br>Additional links previous successfully applied patch (outdated):<br>
24-
<a href="https://github.com/postgresql-cfbot/postgresql/compare/cf/{{patch.id}}~1...cf/{{patch.id}}" title="View previous successfully applied patch set on GitHub"><img class="github-logo" src="/media/commitfest/github-mark.svg"/></a>
25-
<a href="https://cirrus-ci.com/github/postgresql-cfbot/postgresql/cf%2F{{patch.id}}">
26-
<span class="label label-default">Summary</span></a>
27-
{%else%}
28-
<a href="https://github.com/postgresql-cfbot/postgresql/compare/cf/{{patch.id}}~1...cf/{{patch.id}}" title="View last patch set on GitHub"><img class="github-logo" src="/media/commitfest/github-mark.svg"/></a>
29-
<a href="https://cirrus-ci.com/github/postgresql-cfbot/postgresql/cf%2F{{patch.id}}">
30-
<span class="label label-default">Summary</span></a>
31-
{%for c in cfbot_tasks %}
32-
{%if c.status == 'COMPLETED'%}
33-
<a href="https://cirrus-ci.com/task/{{c.task_id}}" title="{{c.task_name}}: {{c.status}}"><img src="/media/commitfest/new_success.svg"/></a>
34-
{%elif c.status == 'CREATED' or c.status == 'SCHEDULED' %}
35-
<a href="https://cirrus-ci.com/task/{{c.task_id}}" title="{{c.task_name}}: {{c.status}}"><img src="/media/commitfest/waiting_to_start.svg"/></a>
36-
{%elif c.status == 'EXECUTING' %}
37-
<a href="https://cirrus-ci.com/task/{{c.task_id}}" title="{{c.task_name}}: {{c.status}}"><img src="/media/commitfest/running.svg"/></a>
38-
{%else %}
39-
<a href="https://cirrus-ci.com/task/{{c.task_id}}" title="{{c.task_name}}: {{c.status}}"><img src="/media/commitfest/new_failure.svg"/></a>
40-
{%endif%}
41-
{%endfor%}
42-
{%endif%}
43-
{%if cfbot_branch %}
44-
<button class="btn btn-default" title="This adds the following to your clipboard (needs to be run in an existing git repo):
45-
git remote add commitfest https://github.com/postgresql-cfbot/postgresql.git
46-
git fetch commitfest cf/{{patch.id}}
47-
git checkout commitfest/cf/{{patch.id}}" onclick="addGitCheckoutToClipboard({{patch.id}})">Copy git checkout commands</button>
48-
{%endif%}
49-
</a>
50-
</td>
51-
</tr>
52-
<tr>
53-
<th>Stats (from CFBot)</th>
54-
<td>
55-
{%if cfbot_branch and cfbot_branch.commit_id %}
56-
{%if cfbot_branch.version %}
57-
Patch version: {{ cfbot_branch.version }},
58-
{%endif%}
59-
Patch count: {{ cfbot_branch.patch_count }},
60-
First patch: <span class="additions">+{{ cfbot_branch.first_additions }}</span><span class="deletions">&#8722;{{ cfbot_branch.first_deletions }}</span>,
61-
All patches: <span class="additions">+{{ cfbot_branch.all_additions }}</span><span class="deletions">&#8722;{{ cfbot_branch.all_deletions }}</span>
62-
{%else%}
63-
Unknown
64-
{%endif%}
65-
</tr>
66-
<tr>
67-
<th>Topic</th>
68-
<td>{{patch.topic}}</td>
69-
</tr>
70-
<tr>
71-
<th>Created</th>
72-
<td>{{patch.created}}</td>
73-
</tr>
74-
<tr>
75-
<th style="white-space: nowrap;">Last modified</th>
76-
<td>{{patch.modified}} ({% cfwhen patch.modified %})</td>
77-
</tr>
78-
<tr>
79-
<th style="white-space: nowrap;">Latest email</th>
80-
<td>{%if patch.lastmail%}{{patch.lastmail}} ({% cfwhen patch.lastmail %}){%endif%}</td>
81-
</tr>
82-
<tr>
83-
<th>Status</th>
84-
<td>{%for c in patch_commitfests %}
85-
<div style="margin-bottom: 3px;"><a href="/{{c.commitfest.id}}/">{{c.commitfest}}</a>: <span class="label label-{{c.status|patchstatuslabel}}">{{c.statusstring}}</span></div>
86-
{%endfor%}
87-
</td>
88-
</tr>
89-
<tr>
90-
<th>Target version</th>
91-
<td>{%if patch.targetversion%}<span class="label label-default">{{patch.targetversion}}</span>{%endif%}</td>
92-
</tr>
93-
<tr>
94-
<th>Authors</th>
95-
<td>{{patch.authors_string}}</td>
96-
</tr>
97-
<tr>
98-
<th>Reviewers</th>
99-
<td>{{patch.reviewers_string}}<a href="reviewer/{{is_reviewer|yesno:"remove,become"}}/" class="btn btn-default pull-right">{{is_reviewer|yesno:"Remove from reviewers,Become reviewer"}}</a></td>
100-
</tr>
101-
<tr>
102-
<th>Committer</th>
103-
<td>{%if patch.committer%}{{patch.committer.fullname}}{%endif%}
104-
{%if is_committer%}<a href="committer/{{is_this_committer|yesno:"remove,become"}}/" class="btn btn-default pull-right">{{is_this_committer|yesno:"Unclaim as committer,Claim as committer"}}</a>{%endif%}
105-
</td>
106-
</tr>
107-
<tr>
108-
<th>Links</th>
109-
{%if patch.wikilink%}
110-
<a href="{{patch.wikilink}}">Wiki</a>{%endif%}{%if patch.gitlink%}
111-
<a href="{{patch.gitlink}}">Git</a>
112-
{%endif%}</td>
113-
</tr>
114-
<tr>
115-
<th>Emails</th>
116-
<td>
117-
{%if user.is_authenticated%}
118-
<div style="float:right"><button class="btn btn-default" onclick="attachThread({{cf.id}},{{patch.id}})">Attach thread</button></div>
119-
{%else%}
120-
<div style="float:right"><button class="btn btn-default" onclick="location.href='/account/login/?next=/{{cf.id}}/{{patch.id}}/%3Fattachthreadnow'">Attach thread</button></div>
121-
{%endif%}
122-
<dl>
123-
{%for t in patch.mailthread_set.all%}
124-
<dt><a href="https://www.postgresql.org/message-id/flat/{{t.messageid}}">{{t.subject}}</a> <button type="button" class="close close-nofloat" title="Detach this thread" onclick="detachThread({{cf.id}},{{patch.id}},'{{t.messageid}}')">&times;</button></dt>
125-
<dd>
126-
First at <a href="https://www.postgresql.org/message-id/{{t.messageid}}">{{t.firstmessage}}</a> by {{t.firstauthor|hidemail}}<br/>
127-
Latest at <a href="https://www.postgresql.org/message-id/{{t.latestmsgid}}">{{t.latestmessage}}</a> by {{t.latestauthor|hidemail}}<br/>
128-
{%for ta in t.mailthreadattachment_set.all%}
129-
{%if forloop.first%}
130-
Latest attachment (<a href="https://www.postgresql.org/message-id/attachment/{{ta.attachmentid}}/{{ta.filename}}">{{ta.filename}}</a>) at <a href="https://www.postgresql.org/message-id/{{ta.messageid}}">{{ta.date}}</a> from {{ta.author|hidemail}} <button type="button" class="btn btn-default btn-xs" data-toggle="collapse" data-target="#att{{t.pk}}" title="Show all attachments"><i class="glyphicon glyphicon-plus"></i></button>
131-
<div id="att{{t.pk}}" class="collapse">
132-
{%endif%}
133-
&nbsp;&nbsp;&nbsp;&nbsp;Attachment (<a href="https://www.postgresql.org/message-id/attachment/{{ta.attachmentid}}/{{ta.filename}}">{{ta.filename}}</a>) at <a href="https://www.postgresql.org/message-id/{{ta.messageid}}">{{ta.date}}</a> from {{ta.author|hidemail}} (Patch: {{ta.ispatch|yesno:"Yes,No,Pending check"}})<br/>
134-
{%if forloop.last%}</div>{%endif%}
135-
{%endfor%}
136-
<div>
137-
{%for a in t.mailthreadannotation_set.all%}
138-
{%if forloop.first%}
139-
<h4>Annotations</h4>
140-
<table class="table table-bordered table-striped table-condensed small">
141-
<thead>
142-
<tr>
143-
<th>When</th>
144-
<th>Who</th>
145-
<th>Mail</th>
146-
<th>Annotation</th>
147-
</tr>
148-
</thead>
149-
<tbody>
150-
{%endif%}
151-
<tr>
152-
<td>{{a.date}}</td>
153-
<td style="white-space: nowrap">{{a.user_string}}</td>
154-
<td style="white-space: nowrap">From {{a.mailauthor}}<br/>at <a href="https://www.postgresql.org/message-id/{{a.msgid}}">{{a.maildate}}</a></td>
155-
<td width="99%">{{a.annotationtext}} <button type="button" class="close" title="Delete this annotation" onclick="deleteAnnotation({{a.id}})">&times;</button></td>
156-
</tr>
157-
{%if forloop.last%}
158-
</body>
159-
</table>
160-
{%endif%}
161-
{%endfor%}
162-
{%if user.is_authenticated%}<button class="btn btn-xs btn-default" onclick="addAnnotation({{t.id}})">Add annotation</button>{%endif%}
163-
</div>
164-
</dd>
165-
{%endfor%}
166-
</dl>
167-
</td>
168-
</tr>
169-
<tr>
170-
<th>History</th>
171-
<td>
172-
<div style="max-height: 200px; overflow-y: scroll;">
173-
<table class="table table-bordered table-striped table-condensed">
174-
<thead>
175-
<tr>
176-
<th>When</th>
177-
<th>Who</th>
178-
<th>What</th>
179-
</tr>
180-
</thead>
181-
<tbody>
182-
{%for h in patch.history %}
183-
<tr>
184-
<td style="white-space: nowrap;">{{h.date}}</td>
185-
<td style="white-space: nowrap;">{{h.by_string}}</td>
186-
<td width="99%">{{h.what}}</td>
187-
</tr>
188-
{%endfor%}
189-
</tbody>
190-
</table>
191-
</div>
192-
{%if user.is_authenticated%}
193-
<a href="{{is_subscribed|yesno:"unsubscribe,subscribe"}}/" class="btn btn-default">{{is_subscribed|yesno:"Unsubscribe from patch update emails,Subscribe to patch update emails"}}</a>
194-
{%endif%}
195-
</td>
196-
</tr>
197-
</tbody>
198-
</table>
4+
{%include "patch_administrative.inc"%}
5+
{%include "patch_workflow.inc"%}
6+
7+
<div class="workflow">
8+
<table class="table table-bordered">
9+
<tbody>
10+
{%include "patch_tr_email.inc"%}
11+
{%include "patch_tr_cfbot.inc"%}
12+
<tr>
13+
<th>Links</th>
14+
<td>
15+
{%if patch.wikilink%}
16+
<a href="{{patch.wikilink}}">Wiki</a>
17+
{%endif%}
18+
{%if patch.gitlink%}
19+
<a href="{{patch.gitlink}}">Git</a>
20+
{%endif%}
21+
<a class="btn btn-default pull-right" href="edit/">Edit</a>
22+
</td>
23+
</tr>
24+
</tbody>
25+
</table>
26+
</div>
19927

200-
<div class="dropup" >
201-
{%include "patch_commands.inc"%}
28+
<div>
29+
<button class="btn btn-default" data-toggle="collapse" data-target="#history-table">Toggle History Table</button>
30+
<button class="btn btn-default" data-toggle="collapse" data-target="#keyvalue-table">Toggle Key-Value Table</button>
20231
</div>
20332

33+
<div id="history-table" class="table table-bordered">
34+
<h3>History</h3>
35+
<table class="table table-bordered table-striped table-condensed">
36+
<thead>
37+
<tr>
38+
<th>When</th>
39+
<th>Who</th>
40+
<th>What</th>
41+
</tr>
42+
</thead>
43+
<tbody>
44+
{%for h in patch.history %}
45+
<tr>
46+
<td style="white-space: nowrap;">{{h.date}}</td>
47+
<td style="white-space: nowrap;">{{h.by_string}}</td>
48+
<td width="99%">{{h.what}}</td>
49+
</tr>
50+
{%endfor%}
51+
</tbody>
52+
</table>
53+
</div>
54+
55+
{%include "patch_table_keyvalue.inc"%}
56+
20457
{%comment%}commit dialog{%endcomment%}
20558
<div class="modal fade" id="commitModal" role="dialog">
20659
<div class="modal-dialog modal-lg">

0 commit comments

Comments
 (0)