Refactor exam candidate edit script: improve user feedback on add/remove actions and streamline sorting logic
This commit is contained in:
@@ -94,53 +94,53 @@
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
})
|
||||
.done(function (data) {
|
||||
if (data.status == "success") {
|
||||
if (data.added) {
|
||||
parentLi.addClass('current');
|
||||
toastr.info(`User ${btn.dataset.cid} added to exam`)
|
||||
.done(function (data) {
|
||||
if (data.status == "success") {
|
||||
if (data.added) {
|
||||
parentLi.addClass('current');
|
||||
toastr.info(`User ${btn.dataset.cid} added to exam`)
|
||||
} else {
|
||||
parentLi.removeClass('current');
|
||||
toastr.info(`User ${btn.dataset.cid} removed from exam`)
|
||||
}
|
||||
} else {
|
||||
parentLi.removeClass('current');
|
||||
toastr.info(`User ${btn.dataset.cid} removed from exam`)
|
||||
toastr.error(data.status)
|
||||
}
|
||||
} else {
|
||||
toastr.error(data.status)
|
||||
}
|
||||
})
|
||||
.fail(function (data) {
|
||||
toastr.error((data && data.responseJSON && data.responseJSON.status) ? data.responseJSON.status : 'Request failed');
|
||||
});
|
||||
})
|
||||
.fail(function (data) {
|
||||
toastr.error((data && data.responseJSON && data.responseJSON.status) ? data.responseJSON.status : 'Request failed');
|
||||
});
|
||||
});
|
||||
});
|
||||
// Sorting
|
||||
let currentSort = { key: 'cid', dir: 'asc' };
|
||||
function updateCarets() {
|
||||
$('.sort-btn').each(function(){
|
||||
const key = $(this).data('key');
|
||||
const caret = $(this).find('.sort-caret');
|
||||
caret.text('');
|
||||
if (currentSort.key === key) caret.text(currentSort.dir === 'asc' ? ' ▲' : ' ▼');
|
||||
});
|
||||
}
|
||||
function sortList(key) {
|
||||
const $ul = $('#cid-users-list');
|
||||
const items = $ul.children('li').get();
|
||||
const dir = (currentSort.key === key && currentSort.dir === 'asc') ? 'desc' : 'asc';
|
||||
items.sort(function(a,b){
|
||||
const va = ($(a).data(key) || '').toString().toLowerCase();
|
||||
const vb = ($(b).data(key) || '').toString().toLowerCase();
|
||||
if (va < vb) return dir === 'asc' ? -1 : 1;
|
||||
if (va > vb) return dir === 'asc' ? 1 : -1;
|
||||
return 0;
|
||||
});
|
||||
let currentSort = { key: 'cid', dir: 'asc' };
|
||||
function updateCarets() {
|
||||
$('.sort-btn').each(function(){
|
||||
const key = $(this).data('key');
|
||||
const caret = $(this).find('.sort-caret');
|
||||
caret.text('');
|
||||
if (currentSort.key === key) caret.text(currentSort.dir === 'asc' ? ' ▲' : ' ▼');
|
||||
});
|
||||
}
|
||||
function sortList(key) {
|
||||
const $ul = $('#cid-users-list');
|
||||
const items = $ul.children('li').get();
|
||||
const dir = (currentSort.key === key && currentSort.dir === 'asc') ? 'desc' : 'asc';
|
||||
items.sort(function(a,b){
|
||||
const va = ($(a).data(key) || '').toString().toLowerCase();
|
||||
const vb = ($(b).data(key) || '').toString().toLowerCase();
|
||||
if (va < vb) return dir === 'asc' ? -1 : 1;
|
||||
if (va > vb) return dir === 'asc' ? 1 : -1;
|
||||
return 0;
|
||||
});
|
||||
// re-append
|
||||
for (let i=0;i<items.length;i++) $ul.append(items[i]);
|
||||
currentSort = { key: key, dir: dir };
|
||||
updateCarets();
|
||||
}
|
||||
$('.sort-btn').on('click', function(){ sortList($(this).data('key')); });
|
||||
// initialize caret
|
||||
for (let i=0;i<items.length;i++) $ul.append(items[i]);
|
||||
currentSort = { key: key, dir: dir };
|
||||
updateCarets();
|
||||
}
|
||||
$('.sort-btn').on('click', function(){ sortList($(this).data('key')); });
|
||||
// initialize caret
|
||||
updateCarets();
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
Reference in New Issue
Block a user