Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
237 changes: 114 additions & 123 deletions ietf/static/js/manage-review-requests.js
Original file line number Diff line number Diff line change
@@ -1,128 +1,119 @@
$(document)
.ready(function () {
var form = $("form.review-requests");
var saveButtons = form.find("[name=action][value^='save']");

function updateSaveButtons() {
saveButtons.prop("disabled", form.find("[name$='-action'][value][value!=']")
.length == 0);
}
/* 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 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
}
})

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();
// 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");

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;
});

form.find("[name$='-action'][value='assign']")
.each(function () {
var 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
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;

if (reviewerAssigned[v] == round)
found = v;
}
}

if (found)
select.val(found);
}

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();
});
if (found) {
select.val(found)
}
}

row.find('[name$="-action"]').val('assign')
setControlDisplay(row)
})

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)
})

form.find('.close-action button')
.on('click', function () {
const row = $(this).closest('.review-request')
row.find('[name$="-action"]').val('close')
setControlDisplay(row)
})

form.find('.close-controls .undo')
.on('click', function () {
const row = $(this).closest('.review-request')
row.find('[name$="-action"]').val('')
setControlDisplay(row)
})

form.find('.assign-action,.close-action')
.each(function () {
const row = $(this).closest('.review-request')
setControlDisplay(row)
})

updateSaveButtons()
})
34 changes: 21 additions & 13 deletions ietf/templates/group/manage_review_requests.html
Original file line number Diff line number Diff line change
Expand Up @@ -145,16 +145,24 @@ <h1>
<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"
Expand All @@ -170,9 +178,9 @@ <h1>
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 %}
Expand All @@ -191,11 +199,11 @@ <h1>
</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"
Expand Down