Refactor exam candidate edit script: improve user feedback on add/remove actions and streamline sorting logic

This commit is contained in:
Ross
2025-12-15 11:22:47 +00:00
parent 7a4cf3627d
commit 7e4e66a74f
+40 -40
View File
@@ -94,53 +94,53 @@
type: "POST", type: "POST",
dataType: "json", dataType: "json",
}) })
.done(function (data) { .done(function (data) {
if (data.status == "success") { if (data.status == "success") {
if (data.added) { if (data.added) {
parentLi.addClass('current'); parentLi.addClass('current');
toastr.info(`User ${btn.dataset.cid} added to exam`) toastr.info(`User ${btn.dataset.cid} added to exam`)
} else {
parentLi.removeClass('current');
toastr.info(`User ${btn.dataset.cid} removed from exam`)
}
} else { } else {
parentLi.removeClass('current'); toastr.error(data.status)
toastr.info(`User ${btn.dataset.cid} removed from exam`)
} }
} 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 // Sorting
let currentSort = { key: 'cid', dir: 'asc' }; let currentSort = { key: 'cid', dir: 'asc' };
function updateCarets() { function updateCarets() {
$('.sort-btn').each(function(){ $('.sort-btn').each(function(){
const key = $(this).data('key'); const key = $(this).data('key');
const caret = $(this).find('.sort-caret'); const caret = $(this).find('.sort-caret');
caret.text(''); caret.text('');
if (currentSort.key === key) caret.text(currentSort.dir === 'asc' ? ' ▲' : ' ▼'); if (currentSort.key === key) caret.text(currentSort.dir === 'asc' ? ' ▲' : ' ▼');
}); });
} }
function sortList(key) { function sortList(key) {
const $ul = $('#cid-users-list'); const $ul = $('#cid-users-list');
const items = $ul.children('li').get(); const items = $ul.children('li').get();
const dir = (currentSort.key === key && currentSort.dir === 'asc') ? 'desc' : 'asc'; const dir = (currentSort.key === key && currentSort.dir === 'asc') ? 'desc' : 'asc';
items.sort(function(a,b){ items.sort(function(a,b){
const va = ($(a).data(key) || '').toString().toLowerCase(); const va = ($(a).data(key) || '').toString().toLowerCase();
const vb = ($(b).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;
if (va > vb) return dir === 'asc' ? 1 : -1; if (va > vb) return dir === 'asc' ? 1 : -1;
return 0; return 0;
}); });
// re-append // re-append
for (let i=0;i<items.length;i++) $ul.append(items[i]); for (let i=0;i<items.length;i++) $ul.append(items[i]);
currentSort = { key: key, dir: dir }; currentSort = { key: key, dir: dir };
updateCarets();
}
$('.sort-btn').on('click', function(){ sortList($(this).data('key')); });
// initialize caret
updateCarets(); updateCarets();
}
$('.sort-btn').on('click', function(){ sortList($(this).data('key')); });
// initialize caret
updateCarets();
</script> </script>
<style> <style>