From 05ae33003056c866bafaf891c920696e48609286 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Mon, 22 Apr 2019 11:30:33 +0530 Subject: [PATCH] Improvement for 'beforeunload' event, bind the event only from where it is required. --- web/pgadmin/browser/static/js/browser.js | 41 ++++++++++--------- .../tools/debugger/static/js/direct.js | 2 + .../tools/sqleditor/static/js/sqleditor.js | 2 + 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 62610bec2..66c3d33da 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -539,6 +539,28 @@ define('pgadmin.browser', [ obj.Events.on('pgadmin:browser:tree:update', obj.onUpdateTreeNode, obj); obj.Events.on('pgadmin:browser:tree:refresh', obj.onRefreshTreeNode, obj); + obj.bind_beforeunload(); + }, + + bind_beforeunload: function() { + $(window).on('beforeunload', function(e) { + /* Can open you in new tab */ + let openerBrowser = window.opener ? + window.opener.pgAdmin.Browser : window.top.pgAdmin.Browser; + + let tree_save_interval = pgBrowser.get_preference('browser', 'browser_tree_state_save_interval'), + confirm_on_refresh_close = openerBrowser.get_preference('browser', 'confirm_on_refresh_close'); + + if (!_.isUndefined(tree_save_interval) && tree_save_interval.value !== -1) + pgAdmin.Browser.browserTreeState.save_state(); + + if(!_.isUndefined(confirm_on_refresh_close) && confirm_on_refresh_close.value) { + /* This message will not be displayed in Chrome, Firefox, Safari as they have disabled it*/ + let msg = S(gettext('Are you sure you want to close the %s browser?')).sprintf(pgBrowser.utils.app_name).value(); + e.originalEvent.returnValue = msg; + return msg; + } + }); }, add_menu_category: function( @@ -1944,24 +1966,5 @@ define('pgadmin.browser', [ pgAdmin.Browser.editor_shortcut_keys.Tab = 'insertSoftTab'; } - $(window).on('beforeunload', function(e) { - /* Can open you in new tab */ - let openerBrowser = window.opener ? - window.opener.pgAdmin.Browser : window.top.pgAdmin.Browser; - - let tree_save_interval = pgBrowser.get_preference('browser', 'browser_tree_state_save_interval'), - confirm_on_refresh_close = openerBrowser.get_preference('browser', 'confirm_on_refresh_close'); - - if (!_.isUndefined(tree_save_interval) && tree_save_interval.value !== -1) - pgAdmin.Browser.browserTreeState.save_state(); - - if(!_.isUndefined(confirm_on_refresh_close) && confirm_on_refresh_close.value) { - /* This message will not be displayed in Chrome, Firefox, Safari as they have disabled it*/ - let msg = S(gettext('Are you sure you want to close the %s browser?')).sprintf(pgBrowser.utils.app_name).value(); - e.originalEvent.returnValue = msg; - return msg; - } - }); - return pgAdmin.Browser; }); diff --git a/web/pgadmin/tools/debugger/static/js/direct.js b/web/pgadmin/tools/debugger/static/js/direct.js index 2a9347e6f..d0bcf3ee6 100644 --- a/web/pgadmin/tools/debugger/static/js/direct.js +++ b/web/pgadmin/tools/debugger/static/js/direct.js @@ -1572,6 +1572,8 @@ define([ }); this.panels = []; + pgBrowser.bind_beforeunload(); + // Below code will be executed for indirect debugging // indirect debugging - 0 and for direct debugging - 1 if (trans_id != undefined && !debug_type) { diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js index cd259b804..fcc31cf39 100644 --- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js +++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js @@ -552,6 +552,8 @@ define('tools.querytool', [ }; }); + pgBrowser.bind_beforeunload(); + /* If the screen width is small and we hover over the Explain Options, * the submenu goes behind the screen on the right side. * Below logic will make it appear on the left.