fix: restore function of unassigned review management page (#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
This commit is contained in:
parent
2859c43677
commit
3865c4bc9c
|
@ -1,128 +1,119 @@
|
|||
$(document)
|
||||
.ready(function () {
|
||||
var form = $("form.review-requests");
|
||||
var saveButtons = form.find("[name=action][value^='save']");
|
||||
/* global $ */
|
||||
$(function () {
|
||||
'use strict'
|
||||
const form = $('form.review-requests')
|
||||
const saveButtons = form.find('[name=action][value^="save"]')
|
||||
|
||||
function updateSaveButtons() {
|
||||
saveButtons.prop("disabled", form.find("[name$='-action'][value][value!=']")
|
||||
.length == 0);
|
||||
}
|
||||
function updateSaveButtons () {
|
||||
saveButtons.prop(
|
||||
'disabled',
|
||||
form.find('[name$="-action"][value][value!=""]').length === 0
|
||||
)
|
||||
}
|
||||
|
||||
function setControlDisplay(row) {
|
||||
var action = row.find("[name$='-action']")
|
||||
.val();
|
||||
if (action == "assign") {
|
||||
row.find(".reviewer-controls")
|
||||
.show();
|
||||
row.find(".close-controls")
|
||||
.hide();
|
||||
row.find(".assign-action,.close-action")
|
||||
.hide();
|
||||
} else if (action == "close") {
|
||||
row.find(".reviewer-controls")
|
||||
.hide();
|
||||
row.find(".close-controls")
|
||||
.show();
|
||||
row.find(".assign-action,.close-action")
|
||||
.hide();
|
||||
} else {
|
||||
row.find(".reviewer-controls,.close-controls")
|
||||
.hide();
|
||||
row.find(".assign-action,.close-action")
|
||||
.show();
|
||||
function setControlDisplay (row) {
|
||||
const action = row.find('[name$="-action"]').val()
|
||||
switch (action) {
|
||||
case 'assign':
|
||||
row.find('.reviewer-controls').show()
|
||||
row.find('.close-controls').hide()
|
||||
row.find('.assign-action,.close-action').hide()
|
||||
break
|
||||
|
||||
case 'close':
|
||||
row.find('.reviewer-controls').hide()
|
||||
row.find('.close-controls').show()
|
||||
row.find('.assign-action,.close-action').hide()
|
||||
break
|
||||
|
||||
default:
|
||||
row.find('.reviewer-controls,.close-controls').hide()
|
||||
row.find('.assign-action,.close-action').show()
|
||||
}
|
||||
|
||||
updateSaveButtons()
|
||||
}
|
||||
|
||||
form.find('.assign-action button')
|
||||
.on('click', function () {
|
||||
const row = $(this).closest('.review-request')
|
||||
const select = row.find('.reviewer-controls [name$="-reviewer"]')
|
||||
if (!select.val()) {
|
||||
// collect reviewers already assigned in this session
|
||||
const reviewerAssigned = {}
|
||||
select.find('option')
|
||||
.each(function () {
|
||||
if (this.value) {
|
||||
reviewerAssigned[this.value] = 0
|
||||
}
|
||||
})
|
||||
|
||||
form.find('[name$="-action"][value="assign"]')
|
||||
.each(function () {
|
||||
const v = $(this)
|
||||
.closest('.review-request')
|
||||
.find('[name$="-reviewer"]')
|
||||
.val()
|
||||
if (v) {
|
||||
reviewerAssigned[v] += 1
|
||||
}
|
||||
})
|
||||
|
||||
// by default, the select box contains a sorted list, so
|
||||
// we should be able to select the first, unless that
|
||||
// person has already been assigned to review in this
|
||||
// session
|
||||
let found = null
|
||||
const options = select.find('option').get()
|
||||
for (let round = 0; round < 100 && !found; ++round) {
|
||||
for (let i = 0; i < options.length && !found; ++i) {
|
||||
const v = options[i].value
|
||||
if (!v) {
|
||||
continue
|
||||
}
|
||||
|
||||
updateSaveButtons();
|
||||
if (reviewerAssigned[v] === round) {
|
||||
found = v
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
form.find(".assign-action button")
|
||||
.on("click", function () {
|
||||
var row = $(this)
|
||||
.closest(".review-request");
|
||||
if (found) {
|
||||
select.val(found)
|
||||
}
|
||||
}
|
||||
|
||||
var select = row.find(".reviewer-controls [name$='-reviewer']");
|
||||
if (!select.val()) {
|
||||
// collect reviewers already assigned in this session
|
||||
var reviewerAssigned = {};
|
||||
select.find("option")
|
||||
.each(function () {
|
||||
if (this.value)
|
||||
reviewerAssigned[this.value] = 0;
|
||||
});
|
||||
row.find('[name$="-action"]').val('assign')
|
||||
setControlDisplay(row)
|
||||
})
|
||||
|
||||
form.find("[name$='-action'][value='assign']")
|
||||
.each(function () {
|
||||
var v = $(this)
|
||||
.closest(".review-request")
|
||||
.find("[name$='-reviewer']")
|
||||
.val();
|
||||
if (v)
|
||||
reviewerAssigned[v] += 1;
|
||||
});
|
||||
form.find('.reviewer-controls .undo')
|
||||
.on('click', function () {
|
||||
const row = $(this).closest('.review-request')
|
||||
row.find('[name$="-action"]').val('')
|
||||
row.find('[name$="-reviewer"]').val($(this).data('initial'))
|
||||
setControlDisplay(row)
|
||||
})
|
||||
|
||||
// by default, the select box contains a sorted list, so
|
||||
// we should be able to select the first, unless that
|
||||
// person has already been assigned to review in this
|
||||
// session
|
||||
var found = null;
|
||||
var options = select.find("option")
|
||||
.get();
|
||||
for (var round = 0; round < 100 && !found; ++round) {
|
||||
for (var i = 0; i < options.length && !found; ++i) {
|
||||
var v = options[i].value;
|
||||
if (!v)
|
||||
continue;
|
||||
form.find('.close-action button')
|
||||
.on('click', function () {
|
||||
const row = $(this).closest('.review-request')
|
||||
row.find('[name$="-action"]').val('close')
|
||||
setControlDisplay(row)
|
||||
})
|
||||
|
||||
if (reviewerAssigned[v] == round)
|
||||
found = v;
|
||||
}
|
||||
}
|
||||
form.find('.close-controls .undo')
|
||||
.on('click', function () {
|
||||
const row = $(this).closest('.review-request')
|
||||
row.find('[name$="-action"]').val('')
|
||||
setControlDisplay(row)
|
||||
})
|
||||
|
||||
if (found)
|
||||
select.val(found);
|
||||
}
|
||||
form.find('.assign-action,.close-action')
|
||||
.each(function () {
|
||||
const row = $(this).closest('.review-request')
|
||||
setControlDisplay(row)
|
||||
})
|
||||
|
||||
row.find("[name$='-action']")
|
||||
.val("assign");
|
||||
setControlDisplay(row);
|
||||
});
|
||||
|
||||
form.find(".reviewer-controls .undo")
|
||||
.on("click", function () {
|
||||
var row = $(this)
|
||||
.closest(".review-request");
|
||||
row.find("[name$='-action']")
|
||||
.val("");
|
||||
row.find("[name$='-reviewer']")
|
||||
.val($(this)
|
||||
.data("initial"));
|
||||
setControlDisplay(row);
|
||||
});
|
||||
|
||||
form.find(".close-action button")
|
||||
.on("click", function () {
|
||||
var row = $(this)
|
||||
.closest(".review-request");
|
||||
row.find("[name$='-action']")
|
||||
.val("close");
|
||||
setControlDisplay(row);
|
||||
});
|
||||
|
||||
form.find(".close-controls .undo")
|
||||
.on("click", function () {
|
||||
var row = $(this)
|
||||
.closest(".review-request");
|
||||
row.find("[name$='-action']")
|
||||
.val("");
|
||||
setControlDisplay(row);
|
||||
});
|
||||
|
||||
form.find("[class$='-action']")
|
||||
.each(function () {
|
||||
var row = $(this)
|
||||
.closest(".review-request");
|
||||
setControlDisplay(row);
|
||||
});
|
||||
|
||||
updateSaveButtons();
|
||||
});
|
||||
updateSaveButtons()
|
||||
})
|
||||
|
|
|
@ -145,16 +145,24 @@
|
|||
<span class="fw-bold">Abstract:</span>
|
||||
{{ r.doc.abstract|linkify|urlize_ietf_docs }}
|
||||
</div>
|
||||
{% if r.form.non_field_errors %}
|
||||
<div class="alert alert-danger my-3">
|
||||
{% for e in r.form.non_field_errors %}{{ e }}{% endfor %}
|
||||
</div>
|
||||
{% if r.form.non_field_errors %}
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="alert alert-danger my-3">
|
||||
{% for e in r.form.non_field_errors %}{{ e }}{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<input type="hidden" name="reviewrequest" value="{{ r.pk }}">
|
||||
<input type="hidden"
|
||||
name="{{ r.form.prefix }}-existing_reviewer"
|
||||
value="{{ r.reviewer_id|default:"" }}">
|
||||
<div class="assign-action">
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<input type="hidden" name="reviewrequest" value="{{ r.pk }}">
|
||||
<input type="hidden"
|
||||
name="{{ r.form.prefix }}-existing_reviewer"
|
||||
value="{{ r.reviewer_id|default:"" }}">
|
||||
<div class="card-footer">
|
||||
<div class="d-flex">
|
||||
<div class="assign-action mx-1">
|
||||
{% if r.reviewer %}
|
||||
<button type="button"
|
||||
class="btn btn-sm btn-primary btn-success"
|
||||
|
@ -170,9 +178,9 @@
|
|||
Assign reviewer
|
||||
</button>
|
||||
{% endif %}
|
||||
{% bootstrap_field r.form.action layout="horizontal" size="sm" %}
|
||||
</div>
|
||||
{% bootstrap_field r.form.action layout="horizontal" size="sm" %}
|
||||
<div class="reviewer-controls">
|
||||
<div class="reviewer-controls mx-1 flex-fill">
|
||||
{% if r.form.review_type %}
|
||||
{% bootstrap_field r.form.review_type layout="horizontal" size="sm" %}
|
||||
{% endif %}
|
||||
|
@ -191,11 +199,11 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="close-action">
|
||||
<div class="close-action mx-1">
|
||||
<button type="button" class="btn btn-sm btn-primary btn-danger">Close</button>
|
||||
{% if r.doc.past_telechat_date %}(was on {{ r.doc.past_telechat_date }} telechat){% endif %}
|
||||
</div>
|
||||
<div class="close-controls">
|
||||
<div class="close-controls mx-1 flex-fill">
|
||||
{% bootstrap_field r.form.close layout="horizontal" size="sm" %}
|
||||
{% bootstrap_field r.form.close_comment layout="horizontal" size="sm" %}
|
||||
<button type="button"
|
||||
|
|
Loading…
Reference in a new issue