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",
|
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>
|
||||||
|
|||||||
Reference in New Issue
Block a user