Skip to content
Snippets Groups Projects
Commit b1e7022c authored by Chris Hallberg's avatar Chris Hallberg
Browse files

Fix duplicating list display when adding new item to its first list.

- Only add to item/save queue if absent (prevents multiple placeholders)
- Namespace pending classes
- Fix overzealous de-queing
- De-chain jQuery manipulations for clarity
parent c4b41a60
Branches
Tags
No related merge requests found
...@@ -12,7 +12,7 @@ function linkCallnumbers(callnumber, callnumber_handler) { ...@@ -12,7 +12,7 @@ function linkCallnumbers(callnumber, callnumber_handler) {
return callnumber; return callnumber;
} }
function displayItemStatus(result, $item) { function displayItemStatus(result, $item) {
$item.removeClass('.ajax-pending'); $item.removeClass('js-item-pending');
$item.find('.status').empty().append(result.availability_message); $item.find('.status').empty().append(result.availability_message);
$item.find('.ajax-availability').removeClass('ajax-availability hidden'); $item.find('.ajax-availability').removeClass('ajax-availability hidden');
if (typeof(result.full_status) != 'undefined' if (typeof(result.full_status) != 'undefined'
...@@ -66,12 +66,11 @@ function displayItemStatus(result, $item) { ...@@ -66,12 +66,11 @@ function displayItemStatus(result, $item) {
} }
} }
function itemStatusFail(response, textStatus) { function itemStatusFail(response, textStatus) {
$('.ajax-pending').empty();
if (textStatus === 'abort' || typeof response.responseJSON === 'undefined') { if (textStatus === 'abort' || typeof response.responseJSON === 'undefined') {
return; return;
} }
// display the error message on each of the ajax status place holder // display the error message on each of the ajax status place holder
$('.ajax-pending').addClass('text-danger').append(response.responseJSON.data); $('.js-item-pending').addClass('text-danger').append(response.responseJSON.data);
} }
var itemStatusIds = []; var itemStatusIds = [];
...@@ -107,12 +106,15 @@ function runItemAjaxForQueue() { ...@@ -107,12 +106,15 @@ function runItemAjaxForQueue() {
} }
function itemQueueAjax(id, el) { function itemQueueAjax(id, el) {
if (el.hasClass('js-item-pending')) {
return;
}
clearTimeout(itemStatusTimer); clearTimeout(itemStatusTimer);
itemStatusIds.push(id); itemStatusIds.push(id);
itemStatusEls[id] = el; itemStatusEls[id] = el;
itemStatusTimer = setTimeout(runItemAjaxForQueue, itemStatusDelay); itemStatusTimer = setTimeout(runItemAjaxForQueue, itemStatusDelay);
el.addClass('ajax-pending').removeClass('hidden') el.addClass('js-item-pending').removeClass('hidden');
.find('.status').removeClass('hidden'); el.find('.status').removeClass('hidden');
} }
function checkItemStatus(el) { function checkItemStatus(el) {
......
...@@ -6,20 +6,19 @@ function displaySaveStatus(itemLists, $item) { ...@@ -6,20 +6,19 @@ function displaySaveStatus(itemLists, $item) {
var html = '<ul>' + itemLists.map(function convertToLi(l) { var html = '<ul>' + itemLists.map(function convertToLi(l) {
return '<li><a href="' + l.list_url + '">' + htmlEncode(l.list_title) + '</a></li>'; return '<li><a href="' + l.list_url + '">' + htmlEncode(l.list_title) + '</a></li>';
}).join('') + '</ul>'; }).join('') + '</ul>';
$item.find('.savedLists') $item.removeClass('js-save-pending');
.removeClass('ajax-pending').addClass('loaded') $item.find('.savedLists').addClass('loaded');
.find('.js-load').replaceWith(html); $item.find('.js-load').replaceWith(html);
} }
} }
function saveStatusFail(response, textStatus) { function saveStatusFail(response, textStatus) {
$('.ajax-pending').empty();
if (textStatus === 'abort' || typeof response.responseJSON === 'undefined') { if (textStatus === 'abort' || typeof response.responseJSON === 'undefined') {
$('.ajax-pending .savedLists').addClass('hidden'); $('.js-save-pending .savedLists').addClass('hidden');
return; return;
} }
// display the error message on each of the ajax status place holder // display the error message on each of the ajax status place holder
$('.ajax-pending .savedLists').addClass('alert-danger').append(response.responseJSON.data); $('.js-save-pending .savedLists').addClass('alert-danger').append(response.responseJSON.data);
} }
var saveStatusObjs = []; var saveStatusObjs = [];
...@@ -62,7 +61,6 @@ function runSaveAjaxForQueue() { ...@@ -62,7 +61,6 @@ function runSaveAjaxForQueue() {
} }
} }
} }
saveStatusObjs = [];
saveStatusRunning = false; saveStatusRunning = false;
}) })
.fail(function checkItemStatusFail(response, textStatus) { .fail(function checkItemStatusFail(response, textStatus) {
...@@ -71,13 +69,17 @@ function runSaveAjaxForQueue() { ...@@ -71,13 +69,17 @@ function runSaveAjaxForQueue() {
}); });
} }
function saveQueueAjax(obj, el) { function saveQueueAjax(obj, el) {
if (el.hasClass('js-save-pending')) {
return;
}
clearTimeout(saveStatusTimer); clearTimeout(saveStatusTimer);
saveStatusObjs.push(obj); saveStatusObjs.push(obj);
saveStatusEls[obj.source + '|' + obj.id] = el; saveStatusEls[obj.source + '|' + obj.id] = el;
saveStatusTimer = setTimeout(runSaveAjaxForQueue, saveStatusDelay); saveStatusTimer = setTimeout(runSaveAjaxForQueue, saveStatusDelay);
el.addClass('js-save-pending');
el.find('.savedLists') el.find('.savedLists')
.append('<span class="js-load">' + VuFind.translate('loading') + '...</span>') .removeClass('loaded hidden')
.addClass('ajax-pending').removeClass('loaded hidden'); .append('<span class="js-load">' + VuFind.translate('loading') + '...</span>');
el.find('.savedLists ul').remove(); el.find('.savedLists ul').remove();
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment