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