Skip to content
Snippets Groups Projects
Commit 0ce2040e authored by Chris Hallberg's avatar Chris Hallberg Committed by Demian Katz
Browse files

Add data attributes to flash messages (#853)

- This allows us to lightbox-ignore some messages, which gives better control over when the lightbox pops up in response to a flash message vs. causing a full-page reload.
parent 92908ef1
No related merge requests found
......@@ -390,6 +390,7 @@ class MyResearchController extends AbstractBase
/**
* Add account blocks to the flash messenger as errors.
* These messages are lightbox ignored.
*
* @param \VuFind\ILS\Connection $catalog Catalog connection
* @param array $patron Patron details
......@@ -402,7 +403,10 @@ class MyResearchController extends AbstractBase
&& $blocks = $catalog->getAccountBlocks($patron)
) {
foreach ($blocks as $block) {
$this->flashMessenger()->addMessage($block, 'error');
$this->flashMessenger()->addMessage(
[ 'msg' => $block, 'dataset' => [ 'lightbox-ignore' => '1' ] ],
'error'
);
}
}
}
......
......@@ -82,7 +82,14 @@ class Flashmessages extends AbstractHelper
$this->fm->getMessages($ns), $this->fm->getCurrentMessages($ns)
);
foreach (array_unique($messages, SORT_REGULAR) as $msg) {
$html .= '<div class="' . $this->getClassForNamespace($ns) . '">';
$html .= '<div class="' . $this->getClassForNamespace($ns) . '"';
if (isset($msg['dataset'])) {
foreach ($msg['dataset'] as $attr => $value) {
$html .= ' data-' . $attr . '="'
. htmlspecialchars($value) . '"';
}
}
$html .= '>';
// Advanced form:
if (is_array($msg)) {
// Use a different translate helper depending on whether
......
......@@ -71,9 +71,12 @@ VuFind.register('lightbox', function Lightbox() {
}
// Isolate successes
var htmlDiv = $('<div/>').html(content);
var alerts = htmlDiv.find('.flash-message.alert-success');
var alerts = htmlDiv.find('.flash-message.alert-success:not([data-lightbox-ignore])');
if (alerts.length > 0) {
showAlert(alerts[0].innerHTML, 'success');
var msgs = alerts.toArray().map(function getSuccessHtml(el) {
return el.innerHTML;
}).join('<br/>');
showAlert(msgs, 'success');
return;
}
// Deframe HTML
......@@ -131,21 +134,25 @@ VuFind.register('lightbox', function Lightbox() {
VuFind.refreshPage();
return;
}
var testDiv = $('<div/>').html(content);
var errorMsgs = testDiv.find('.flash-message.alert-danger:not([data-lightbox-ignore])');
// Place Hold error isolation
if (obj.url.match(/\/Record/) && (obj.url.match(/Hold\?/) || obj.url.match(/Request\?/))) {
var testDiv = $('<div/>').html(content);
var error = testDiv.find('.flash-message.alert-danger');
if (error.length && testDiv.find('.record').length) {
showAlert(error[0].innerHTML, 'danger');
if (obj.url.match(/\/Record\/.*(Hold|Request)\?/)) {
if (errorMsgs.length && testDiv.find('.record').length) {
var msgs = errorMsgs.toArray().map(function getAlertHtml(el) {
return el.innerHTML;
}).join('<br/>');
showAlert(msgs, 'danger');
return false;
}
}
if ( // Close the lightbox after deliberate login
obj.method // is a form
&& ((obj.url.match(/MyResearch/) && !obj.url.match(/Bulk/) && !obj.url.match(/Delete/) && !obj.url.match(/Recover/)) // that matches login/create account
|| obj.url.match(/catalogLogin/)) // or catalog login for holds
&& $('<div/>').html(content).find('.flash-message.alert-danger').length === 0 // skip failed logins
obj.method && ( // is a form
obj.url.match(/catalogLogin/) // catalog login for holds
|| obj.url.match(/MyResearch\/(?!Bulk|Delete|Recover)/) // or that matches login/create account
) && errorMsgs.length === 0 // skip failed logins
) {
var eventResult = _emit('VuFind.lightbox.login', {
originalUrl: _originalUrl,
formUrl: obj.url
......
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