Skip to content
Snippets Groups Projects
Commit 56a1745d authored by Mathias Maaß's avatar Mathias Maaß Committed by André Lahmann
Browse files

refs #23463 [finc] VF7: update account menu

parent 87dc7497
No related merge requests found
...@@ -15,6 +15,7 @@ VuFind.register('account', function Account() { ...@@ -15,6 +15,7 @@ VuFind.register('account', function Account() {
var MISSING = -2 * Math.PI; // no data available var MISSING = -2 * Math.PI; // no data available
var INACTIVE = -3 * Math.PI; // status element missing var INACTIVE = -3 * Math.PI; // status element missing
var _statuses = {}; var _statuses = {};
var _pendingNotifications = {};
// Account Icons // Account Icons
var ICON_LEVELS = { var ICON_LEVELS = {
...@@ -41,7 +42,7 @@ VuFind.register('account', function Account() { ...@@ -41,7 +42,7 @@ VuFind.register('account', function Account() {
// Clearing save forces AJAX update next page load // Clearing save forces AJAX update next page load
var clearCache = function clearCache(name) { var clearCache = function clearCache(name) {
if (typeof name === "undefined") { if (typeof name === "undefined" || name === '') {
for (var sub in _submodules) { for (var sub in _submodules) {
if (Object.prototype.hasOwnProperty.call(_submodules, sub)) { if (Object.prototype.hasOwnProperty.call(_submodules, sub)) {
clearCache(sub); clearCache(sub);
...@@ -60,12 +61,16 @@ VuFind.register('account', function Account() { ...@@ -60,12 +61,16 @@ VuFind.register('account', function Account() {
var accountStatus = ICON_LEVELS.NONE; var accountStatus = ICON_LEVELS.NONE;
for (var sub in _submodules) { for (var sub in _submodules) {
if (Object.prototype.hasOwnProperty.call(_submodules, sub)) { if (Object.prototype.hasOwnProperty.call(_submodules, sub)) {
var status = _getStatus(sub);
if (status === INACTIVE) {
continue;
}
var $element = $(_submodules[sub].selector); var $element = $(_submodules[sub].selector);
if (!$element) { if (!$element.length === 0) {
// This could happen if the DOM is changed dynamically
_statuses[sub] = INACTIVE; _statuses[sub] = INACTIVE;
continue; continue;
} }
var status = _getStatus(sub);
if (status === MISSING) { if (status === MISSING) {
$element.addClass('hidden'); $element.addClass('hidden');
} else { } else {
...@@ -130,13 +135,28 @@ VuFind.register('account', function Account() { ...@@ -130,13 +135,28 @@ VuFind.register('account', function Account() {
} }
}; };
var notify = function notify(module, status) {
if (Object.prototype.hasOwnProperty.call(_submodules, module) && typeof _submodules[module].updateNeeded !== 'undefined') {
if (_submodules[module].updateNeeded(_getStatus(module), status)) {
clearCache(module);
_load(module);
}
} else {
// We currently support only a single pending notification for each module
_pendingNotifications[module] = status;
}
};
var init = function init() { var init = function init() {
// Update information when certain actions are performed // Update information when certain actions are performed
$("[data-clear-account-cache]").submit(function dataClearCache() { $("form[data-clear-account-cache]").submit(function dataClearCacheForm() {
clearCache($(this).attr("data-clear-account-cache"));
});
$("a[data-clear-account-cache]").click(function dataClearCacheLink() {
clearCache($(this).attr("data-clear-account-cache")); clearCache($(this).attr("data-clear-account-cache"));
}); });
$("#library_card").change(function clearChangeLibraryCard() { $("select[data-clear-account-cache]").change(function dataClearCacheSelect() {
clearCache(/* all */); clearCache($(this).attr("data-clear-account-cache"));
}); });
}; };
...@@ -152,11 +172,17 @@ VuFind.register('account', function Account() { ...@@ -152,11 +172,17 @@ VuFind.register('account', function Account() {
} else { } else {
_statuses[name] = INACTIVE; _statuses[name] = INACTIVE;
} }
if (typeof _pendingNotifications[name] !== 'undefined' && _pendingNotifications[name] !== null) {
var status = _pendingNotifications[name];
_pendingNotifications[name] = null;
notify(name, status);
}
}; };
return { return {
init: init, init: init,
clearCache: clearCache, clearCache: clearCache,
notify: notify,
// if user is logged out, clear cache instead of register // if user is logged out, clear cache instead of register
register: userIsLoggedIn ? register : clearCache register: userIsLoggedIn ? register : clearCache
}; };
...@@ -174,6 +200,9 @@ $(document).ready(function registerAccountAjax() { ...@@ -174,6 +200,9 @@ $(document).ready(function registerAccountAjax() {
} }
$element.html('<span class="badge overdue">' + status.display + '</span>'); $element.html('<span class="badge overdue">' + status.display + '</span>');
return ICON_LEVELS.DANGER; return ICON_LEVELS.DANGER;
},
updateNeeded: function updateNeeded(currentStatus, status) {
return status.value !== currentStatus.value;
} }
}); });
...@@ -184,19 +213,22 @@ $(document).ready(function registerAccountAjax() { ...@@ -184,19 +213,22 @@ $(document).ready(function registerAccountAjax() {
var html = ''; var html = '';
var level = ICON_LEVELS.NONE; var level = ICON_LEVELS.NONE;
if (status.ok > 0) { if (status.ok > 0) {
html += '<span class="badge ok" data-toggle="tooltip" title="' + VuFind.translate('Checked Out Items') + '">' + status.ok + '</span>'; html += '<span class="badge ok" data-toggle="tooltip" title="' + VuFind.translate('account_normal_checkouts') + '">' + status.ok + '</span>';
} }
if (status.warn > 0) { if (status.warn > 0) {
html += '<span class="badge warn" data-toggle="tooltip" title="' + VuFind.translate('renew_item_due_tooltip') + '">' + status.warn + '</span>'; html += '<span class="badge warn" data-toggle="tooltip" title="' + VuFind.translate('account_checkouts_due') + '">' + status.warn + '</span>';
level = ICON_LEVELS.WARNING; level = ICON_LEVELS.WARNING;
} }
if (status.overdue > 0) { if (status.overdue > 0) {
html += '<span class="badge overdue" data-toggle="tooltip" title="' + VuFind.translate('renew_item_overdue_tooltip') + '">' + status.overdue + '</span>'; html += '<span class="badge overdue" data-toggle="tooltip" title="' + VuFind.translate('account_checkouts_overdue') + '">' + status.overdue + '</span>';
level = ICON_LEVELS.DANGER; level = ICON_LEVELS.DANGER;
} }
$element.html(html); $element.html(html);
$('[data-toggle="tooltip"]', $element).tooltip(); $('[data-toggle="tooltip"]', $element).tooltip();
return level; return level;
},
updateNeeded: function updateNeeded(currentStatus, status) {
return status.ok !== currentStatus.ok || status.warn !== currentStatus.warn || status.overdue !== currentStatus.overdue;
} }
}); });
...@@ -207,15 +239,18 @@ $(document).ready(function registerAccountAjax() { ...@@ -207,15 +239,18 @@ $(document).ready(function registerAccountAjax() {
render: function render($element, status, ICON_LEVELS) { render: function render($element, status, ICON_LEVELS) {
var level = ICON_LEVELS.NONE; var level = ICON_LEVELS.NONE;
if (status.available > 0) { if (status.available > 0) {
$element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('hold_available') + '"></i>'); $element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('account_requests_available') + '"></i>');
level = ICON_LEVELS.GOOD; level = ICON_LEVELS.GOOD;
} else if (status.in_transit > 0) { } else if (status.in_transit > 0) {
$element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>'); $element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('account_requests_in_transit') + '"></i>');
} else { } else {
$element.addClass("holds-status hidden"); $element.addClass("holds-status hidden");
} }
$('[data-toggle="tooltip"]', $element).tooltip(); $('[data-toggle="tooltip"]', $element).tooltip();
return level; return level;
},
updateNeeded: function updateNeeded(currentStatus, status) {
return status.available !== currentStatus.available || status.in_transit !== currentStatus.in_transit;
} }
}); });
...@@ -227,19 +262,22 @@ $(document).ready(function registerAccountAjax() { ...@@ -227,19 +262,22 @@ $(document).ready(function registerAccountAjax() {
var html = ''; var html = '';
var level = ICON_LEVELS.NONE; var level = ICON_LEVELS.NONE;
if (status.ok > 0) { if (status.ok > 0) {
html += '<span class="badge ok" data-toggle="tooltip" title="' + VuFind.translate('Permanent Checked Out Items') + '">' + status.ok + '</span>'; html += '<span class="badge ok" data-toggle="tooltip" title="' + VuFind.translate('account_normal_checkouts') + '">' + status.ok + '</span>';
} }
if (status.warn > 0) { if (status.warn > 0) {
html += '<span class="badge warn" data-toggle="tooltip" title="' + VuFind.translate('renew_item_due_tooltip') + '">' + status.warn + '</span>'; html += '<span class="badge warn" data-toggle="tooltip" title="' + VuFind.translate('account_checkouts_due') + '">' + status.warn + '</span>';
level = ICON_LEVELS.WARNING; level = ICON_LEVELS.WARNING;
} }
if (status.overdue > 0) { if (status.overdue > 0) {
html += '<span class="badge overdue" data-toggle="tooltip" title="' + VuFind.translate('renew_item_overdue_tooltip') + '">' + status.overdue + '</span>'; html += '<span class="badge overdue" data-toggle="tooltip" title="' + VuFind.translate('account_checkouts_overdue') + '">' + status.overdue + '</span>';
level = ICON_LEVELS.DANGER; level = ICON_LEVELS.DANGER;
} }
$element.html(html); $element.html(html);
$('[data-toggle="tooltip"]', $element).tooltip(); $('[data-toggle="tooltip"]', $element).tooltip();
return level; return level;
},
updateNeeded: function updateNeeded(currentStatus, status) {
return status.ok !== currentStatus.ok || status.warn !== currentStatus.warn || status.overdue !== currentStatus.overdue;
} }
}); });
...@@ -249,15 +287,18 @@ $(document).ready(function registerAccountAjax() { ...@@ -249,15 +287,18 @@ $(document).ready(function registerAccountAjax() {
render: function render($element, status, ICON_LEVELS) { render: function render($element, status, ICON_LEVELS) {
var level = ICON_LEVELS.NONE; var level = ICON_LEVELS.NONE;
if (status.available > 0) { if (status.available > 0) {
$element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('hold_available') + '"></i>'); $element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('account_requests_available') + '"></i>');
level = ICON_LEVELS.GOOD; level = ICON_LEVELS.GOOD;
} else if (status.in_transit > 0) { } else if (status.in_transit > 0) {
$element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>'); $element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('account_requests_in_transit') + '"></i>');
} else { } else {
$element.addClass("holds-status hidden"); $element.addClass("holds-status hidden");
} }
$('[data-toggle="tooltip"]', $element).tooltip(); $('[data-toggle="tooltip"]', $element).tooltip();
return level; return level;
},
updateNeeded: function updateNeeded(currentStatus, status) {
return status.available !== currentStatus.available || status.in_transit !== currentStatus.in_transit;
} }
}); });
...@@ -267,15 +308,18 @@ $(document).ready(function registerAccountAjax() { ...@@ -267,15 +308,18 @@ $(document).ready(function registerAccountAjax() {
render: function render($element, status, ICON_LEVELS) { render: function render($element, status, ICON_LEVELS) {
var level = ICON_LEVELS.NONE; var level = ICON_LEVELS.NONE;
if (status.available > 0) { if (status.available > 0) {
$element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('hold_available') + '"></i>'); $element.html('<i class="fa fa-bell text-success" data-toggle="tooltip" title="' + VuFind.translate('account_requests_available') + '"></i>');
level = ICON_LEVELS.GOOD; level = ICON_LEVELS.GOOD;
} else if (status.in_transit > 0) { } else if (status.in_transit > 0) {
$element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('request_in_transit') + '"></i>'); $element.html('<i class="fa fa-clock-o text-warning" data-toggle="tooltip" title="' + VuFind.translate('account_requests_in_transit') + '"></i>');
} else { } else {
$element.addClass("holds-status hidden"); $element.addClass("holds-status hidden");
} }
$('[data-toggle="tooltip"]', $element).tooltip(); $('[data-toggle="tooltip"]', $element).tooltip();
return level; return level;
},
updateNeeded: function updateNeeded(currentStatus, status) {
return status.available !== currentStatus.available || status.in_transit !== currentStatus.in_transit;
} }
}); });
...@@ -289,6 +333,9 @@ $(document).ready(function registerAccountAjax() { ...@@ -289,6 +333,9 @@ $(document).ready(function registerAccountAjax() {
: '' : ''
$element.html(html) $element.html(html)
return ICON_LEVELS.GOOD; return ICON_LEVELS.GOOD;
},
updateNeeded: function updateNeeded(currentStatus, status) {
return status.total !== currentStatus.total;
} }
}); });
}); });
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