Skip to content

Commit 3865c4b

Browse files
fix: restore function of unassigned review management page (ietf-tools#3774)
* style: reformat manage-review-requests.js as StandardJS style * refactor: use switch statement instead of if/else-if/else * style: remove needless line break * fix: fix jquery selectors to be less fragile and easier to read * fix: clean up bs5 HTML/CSS for review request buttons
1 parent 2859c43 commit 3865c4b

2 files changed

Lines changed: 135 additions & 136 deletions

File tree

Lines changed: 114 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -1,128 +1,119 @@
1-
$(document)
2-
.ready(function () {
3-
var form = $("form.review-requests");
4-
var saveButtons = form.find("[name=action][value^='save']");
5-
6-
function updateSaveButtons() {
7-
saveButtons.prop("disabled", form.find("[name$='-action'][value][value!=']")
8-
.length == 0);
9-
}
1+
/* global $ */
2+
$(function () {
3+
'use strict'
4+
const form = $('form.review-requests')
5+
const saveButtons = form.find('[name=action][value^="save"]')
6+
7+
function updateSaveButtons () {
8+
saveButtons.prop(
9+
'disabled',
10+
form.find('[name$="-action"][value][value!=""]').length === 0
11+
)
12+
}
13+
14+
function setControlDisplay (row) {
15+
const action = row.find('[name$="-action"]').val()
16+
switch (action) {
17+
case 'assign':
18+
row.find('.reviewer-controls').show()
19+
row.find('.close-controls').hide()
20+
row.find('.assign-action,.close-action').hide()
21+
break
22+
23+
case 'close':
24+
row.find('.reviewer-controls').hide()
25+
row.find('.close-controls').show()
26+
row.find('.assign-action,.close-action').hide()
27+
break
28+
29+
default:
30+
row.find('.reviewer-controls,.close-controls').hide()
31+
row.find('.assign-action,.close-action').show()
32+
}
33+
34+
updateSaveButtons()
35+
}
36+
37+
form.find('.assign-action button')
38+
.on('click', function () {
39+
const row = $(this).closest('.review-request')
40+
const select = row.find('.reviewer-controls [name$="-reviewer"]')
41+
if (!select.val()) {
42+
// collect reviewers already assigned in this session
43+
const reviewerAssigned = {}
44+
select.find('option')
45+
.each(function () {
46+
if (this.value) {
47+
reviewerAssigned[this.value] = 0
48+
}
49+
})
50+
51+
form.find('[name$="-action"][value="assign"]')
52+
.each(function () {
53+
const v = $(this)
54+
.closest('.review-request')
55+
.find('[name$="-reviewer"]')
56+
.val()
57+
if (v) {
58+
reviewerAssigned[v] += 1
59+
}
60+
})
1061

11-
function setControlDisplay(row) {
12-
var action = row.find("[name$='-action']")
13-
.val();
14-
if (action == "assign") {
15-
row.find(".reviewer-controls")
16-
.show();
17-
row.find(".close-controls")
18-
.hide();
19-
row.find(".assign-action,.close-action")
20-
.hide();
21-
} else if (action == "close") {
22-
row.find(".reviewer-controls")
23-
.hide();
24-
row.find(".close-controls")
25-
.show();
26-
row.find(".assign-action,.close-action")
27-
.hide();
28-
} else {
29-
row.find(".reviewer-controls,.close-controls")
30-
.hide();
31-
row.find(".assign-action,.close-action")
32-
.show();
62+
// by default, the select box contains a sorted list, so
63+
// we should be able to select the first, unless that
64+
// person has already been assigned to review in this
65+
// session
66+
let found = null
67+
const options = select.find('option').get()
68+
for (let round = 0; round < 100 && !found; ++round) {
69+
for (let i = 0; i < options.length && !found; ++i) {
70+
const v = options[i].value
71+
if (!v) {
72+
continue
3373
}
3474

35-
updateSaveButtons();
75+
if (reviewerAssigned[v] === round) {
76+
found = v
77+
}
78+
}
3679
}
3780

38-
form.find(".assign-action button")
39-
.on("click", function () {
40-
var row = $(this)
41-
.closest(".review-request");
42-
43-
var select = row.find(".reviewer-controls [name$='-reviewer']");
44-
if (!select.val()) {
45-
// collect reviewers already assigned in this session
46-
var reviewerAssigned = {};
47-
select.find("option")
48-
.each(function () {
49-
if (this.value)
50-
reviewerAssigned[this.value] = 0;
51-
});
52-
53-
form.find("[name$='-action'][value='assign']")
54-
.each(function () {
55-
var v = $(this)
56-
.closest(".review-request")
57-
.find("[name$='-reviewer']")
58-
.val();
59-
if (v)
60-
reviewerAssigned[v] += 1;
61-
});
62-
63-
// by default, the select box contains a sorted list, so
64-
// we should be able to select the first, unless that
65-
// person has already been assigned to review in this
66-
// session
67-
var found = null;
68-
var options = select.find("option")
69-
.get();
70-
for (var round = 0; round < 100 && !found; ++round) {
71-
for (var i = 0; i < options.length && !found; ++i) {
72-
var v = options[i].value;
73-
if (!v)
74-
continue;
75-
76-
if (reviewerAssigned[v] == round)
77-
found = v;
78-
}
79-
}
80-
81-
if (found)
82-
select.val(found);
83-
}
84-
85-
row.find("[name$='-action']")
86-
.val("assign");
87-
setControlDisplay(row);
88-
});
89-
90-
form.find(".reviewer-controls .undo")
91-
.on("click", function () {
92-
var row = $(this)
93-
.closest(".review-request");
94-
row.find("[name$='-action']")
95-
.val("");
96-
row.find("[name$='-reviewer']")
97-
.val($(this)
98-
.data("initial"));
99-
setControlDisplay(row);
100-
});
101-
102-
form.find(".close-action button")
103-
.on("click", function () {
104-
var row = $(this)
105-
.closest(".review-request");
106-
row.find("[name$='-action']")
107-
.val("close");
108-
setControlDisplay(row);
109-
});
110-
111-
form.find(".close-controls .undo")
112-
.on("click", function () {
113-
var row = $(this)
114-
.closest(".review-request");
115-
row.find("[name$='-action']")
116-
.val("");
117-
setControlDisplay(row);
118-
});
119-
120-
form.find("[class$='-action']")
121-
.each(function () {
122-
var row = $(this)
123-
.closest(".review-request");
124-
setControlDisplay(row);
125-
});
126-
127-
updateSaveButtons();
128-
});
81+
if (found) {
82+
select.val(found)
83+
}
84+
}
85+
86+
row.find('[name$="-action"]').val('assign')
87+
setControlDisplay(row)
88+
})
89+
90+
form.find('.reviewer-controls .undo')
91+
.on('click', function () {
92+
const row = $(this).closest('.review-request')
93+
row.find('[name$="-action"]').val('')
94+
row.find('[name$="-reviewer"]').val($(this).data('initial'))
95+
setControlDisplay(row)
96+
})
97+
98+
form.find('.close-action button')
99+
.on('click', function () {
100+
const row = $(this).closest('.review-request')
101+
row.find('[name$="-action"]').val('close')
102+
setControlDisplay(row)
103+
})
104+
105+
form.find('.close-controls .undo')
106+
.on('click', function () {
107+
const row = $(this).closest('.review-request')
108+
row.find('[name$="-action"]').val('')
109+
setControlDisplay(row)
110+
})
111+
112+
form.find('.assign-action,.close-action')
113+
.each(function () {
114+
const row = $(this).closest('.review-request')
115+
setControlDisplay(row)
116+
})
117+
118+
updateSaveButtons()
119+
})

ietf/templates/group/manage_review_requests.html

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,24 @@ <h1>
145145
<span class="fw-bold">Abstract:</span>
146146
{{ r.doc.abstract|linkify|urlize_ietf_docs }}
147147
</div>
148-
{% if r.form.non_field_errors %}
149-
<div class="alert alert-danger my-3">
150-
{% for e in r.form.non_field_errors %}{{ e }}{% endfor %}
148+
</div>
149+
{% if r.form.non_field_errors %}
150+
<div class="row">
151+
<div class="col-sm-12">
152+
<div class="alert alert-danger my-3">
153+
{% for e in r.form.non_field_errors %}{{ e }}{% endfor %}
154+
</div>
151155
</div>
152-
{% endif %}
153-
<input type="hidden" name="reviewrequest" value="{{ r.pk }}">
154-
<input type="hidden"
155-
name="{{ r.form.prefix }}-existing_reviewer"
156-
value="{{ r.reviewer_id|default:"" }}">
157-
<div class="assign-action">
156+
</div>
157+
{% endif %}
158+
</div>
159+
<input type="hidden" name="reviewrequest" value="{{ r.pk }}">
160+
<input type="hidden"
161+
name="{{ r.form.prefix }}-existing_reviewer"
162+
value="{{ r.reviewer_id|default:"" }}">
163+
<div class="card-footer">
164+
<div class="d-flex">
165+
<div class="assign-action mx-1">
158166
{% if r.reviewer %}
159167
<button type="button"
160168
class="btn btn-sm btn-primary btn-success"
@@ -170,9 +178,9 @@ <h1>
170178
Assign reviewer
171179
</button>
172180
{% endif %}
181+
{% bootstrap_field r.form.action layout="horizontal" size="sm" %}
173182
</div>
174-
{% bootstrap_field r.form.action layout="horizontal" size="sm" %}
175-
<div class="reviewer-controls">
183+
<div class="reviewer-controls mx-1 flex-fill">
176184
{% if r.form.review_type %}
177185
{% bootstrap_field r.form.review_type layout="horizontal" size="sm" %}
178186
{% endif %}
@@ -191,11 +199,11 @@ <h1>
191199
</div>
192200
{% endif %}
193201
</div>
194-
<div class="close-action">
202+
<div class="close-action mx-1">
195203
<button type="button" class="btn btn-sm btn-primary btn-danger">Close</button>
196204
{% if r.doc.past_telechat_date %}(was on {{ r.doc.past_telechat_date }} telechat){% endif %}
197205
</div>
198-
<div class="close-controls">
206+
<div class="close-controls mx-1 flex-fill">
199207
{% bootstrap_field r.form.close layout="horizontal" size="sm" %}
200208
{% bootstrap_field r.form.close_comment layout="horizontal" size="sm" %}
201209
<button type="button"

0 commit comments

Comments
 (0)