mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-09-25 18:59:04 +02:00
js: Don't trigger beforerender or rendered for discarded content
A listener for `rendered` should not need to check if the content really changed. Though, if such a listener is not triggered anymore, `beforerender` listeners also must not be triggered, as they might assume that the content is really being updated and their accompanied `rendered` listener is triggered. (e.g. input-enrichment.js) This might be breaking change and any `Behavior.renderHook` implementation needs to be checked against it. Potentially also in third party modules. As if such an implementation updates the container on its own, `beforerender` listeners only have access to the updated container after this change, while they had access to the original beforehand. `rendered` listeners should not be that much affected, as for them the change results in the same behavior as if no update has ever been scheduled for the container. fixes #5056
This commit is contained in:
parent
d311005089
commit
ef4bd5653c
@ -873,7 +873,7 @@
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.renderContentToContainer(
|
||||
let rendered = this.renderContentToContainer(
|
||||
req.responseText,
|
||||
req.$target,
|
||||
req.action,
|
||||
@ -882,6 +882,10 @@
|
||||
req.autosubmit || autoSubmit,
|
||||
req.scripted
|
||||
);
|
||||
|
||||
if (! rendered) {
|
||||
req.discarded = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (oldNotifications) {
|
||||
@ -905,6 +909,14 @@
|
||||
req = reqOrError;
|
||||
}
|
||||
|
||||
req.$target.data('lastUpdate', (new Date()).getTime());
|
||||
delete this.requests[req.$target.attr('id')];
|
||||
this.icinga.ui.fadeNotificationsAway();
|
||||
|
||||
if (req.discarded) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove 'impact' class if there was such
|
||||
if (req.$target.hasClass('impact')) {
|
||||
req.$target.removeClass('impact');
|
||||
@ -957,10 +969,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
req.$target.data('lastUpdate', (new Date()).getTime());
|
||||
delete this.requests[req.$target.attr('id')];
|
||||
this.icinga.ui.fadeNotificationsAway();
|
||||
|
||||
var extraUpdates = req.getResponseHeader('X-Icinga-Extra-Updates');
|
||||
if (!! extraUpdates && req.getResponseHeader('X-Icinga-Redirect-Http') !== 'yes') {
|
||||
$.each(extraUpdates.split(','), function (idx, el) {
|
||||
@ -1253,8 +1261,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
$container.trigger('beforerender', [content, action, autorefresh, scripted, autoSubmit]);
|
||||
|
||||
var discard = false;
|
||||
$.each(_this.icinga.behaviors, function(name, behavior) {
|
||||
if (behavior.renderHook) {
|
||||
@ -1272,6 +1278,8 @@
|
||||
});
|
||||
|
||||
if (! discard) {
|
||||
$container.trigger('beforerender', [content, action, autorefresh, scripted, autoSubmit]);
|
||||
|
||||
if ($container.closest('.dashboard').length) {
|
||||
var title = $('h1', $container).first().detach();
|
||||
$container.html(title).append(content);
|
||||
@ -1337,6 +1345,8 @@
|
||||
|
||||
// Re-enable all click events (disabled as of performance reasons)
|
||||
// $('*').off('click');
|
||||
|
||||
return ! discard;
|
||||
},
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user