diff --git a/library/Icinga/Web/Response.php b/library/Icinga/Web/Response.php index 182076f92a..555d3fa8b9 100644 --- a/library/Icinga/Web/Response.php +++ b/library/Icinga/Web/Response.php @@ -322,7 +322,9 @@ protected function prepare() if ($request->isXmlHttpRequest()) { if ($redirectUrl !== null) { if ($request->isGet() && Icinga::app()->getViewRenderer()->view->compact) { - $redirectUrl->getParams()->set('showCompact', true); + if ($redirectUrl->getParam('redirect') !== '__SELF__') { + $redirectUrl->getParams()->set('showCompact', true); + } } $encodedRedirectUrl = rawurlencode($redirectUrl->getAbsoluteUrl()); diff --git a/public/js/icinga/loader.js b/public/js/icinga/loader.js index cb512c03dc..97891a7f2b 100644 --- a/public/js/icinga/loader.js +++ b/public/js/icinga/loader.js @@ -637,6 +637,7 @@ var redirectionUrl = icinga.utils.addUrlFlag(url, 'renderLayout'); var r = this.loadUrl(redirectionUrl, $('#layout')); r.historyUrl = url; + r.referrer = referrer; if (parts.length) { r.loadNext = parts; } else if (!! document.location.hash) { @@ -789,14 +790,9 @@ this.icinga.ui.setWindowId(windowId); } - var referrer = req.referrer; - if (typeof referrer === 'undefined') { - referrer = req; - } - var autoSubmit = false; var currentUrl = this.icinga.utils.parseUrl(req.$target.data('icingaUrl')); - if (referrer.method === 'POST') { + if (req.method === 'POST') { var newUrl = this.icinga.utils.parseUrl(req.url); if (newUrl.path === currentUrl.path && this.icinga.utils.arraysEqual(newUrl.params, currentUrl.params)) { autoSubmit = true; @@ -816,7 +812,7 @@ let url = currentUrl.path + (locationQuery ? '?' + locationQuery : ''); if (req.autosubmit || autoSubmit) { // Also update a form's action if it doesn't differ from the container's url - var $form = $(referrer.forceFocus).closest('form'); + var $form = $(req.forceFocus).closest('form'); var formAction = $form.attr('action'); if (!! formAction) { formAction = this.icinga.utils.parseUrl(formAction); @@ -961,7 +957,7 @@ }); } - if (this.processRedirectHeader(req)) { + if ((textStatus === 'abort' && typeof req.referrer !== 'undefined') || this.processRedirectHeader(req)) { return; }