diff --git a/web/pgadmin/browser/templates/browser/index.html b/web/pgadmin/browser/templates/browser/index.html
index 69d3ecc..5f890d6 100644
--- a/web/pgadmin/browser/templates/browser/index.html
+++ b/web/pgadmin/browser/templates/browser/index.html
@@ -69,9 +69,11 @@ try {
{{ _('Change Password') }}
{% if is_admin %}
- {{ _('Users') }}
+ {{ _('Manage Users') }}
{% endif %}
+ {{ _('Reset Layout') }}
+
{{ _('Logout') }}
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
index ad0f165..b645b66 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -12,7 +12,8 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
// Some scripts do export their object in the window only.
// Generally the one, which do no have AMD support.
- var wcDocker = window.wcDocker;
+ var wcDocker = window.wcDocker,
+ onbeforeunload_flag = true;
$ = $ || window.jQuery || window.$;
Bootstrap = Bootstrap || window.Bootstrap;
@@ -258,19 +259,19 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
},
init: function() {
var obj=this;
-
+ obj.save_layout = true;
if (obj.initialized) {
return;
}
obj.initialized = true;
// Store the main browser layout
- $(window).bind('unload', function() {
- if(obj.docker) {
- state = obj.docker.save();
- settings = { setting: "Browser/Layout", value: state };
- $.post("{{ url_for('settings.store') }}", settings);
- }
+ $(window).on('unload', function() {
+ if(obj.docker && obj.save_layout) {
+ state = obj.docker.save();
+ settings = { setting: "Browser/Layout", value: state };
+ $.post("{{ url_for('settings.store') }}", settings);
+ }
return true;
});
@@ -634,21 +635,55 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
navbar.children('#mnu_obj').removeClass('hide');
obj.enable_disable_menus();
+ },
+ // We will force unload method to not to save current layout
+ // and reload the window
+ reset_current_layout: function() {
+ var obj = this;
+ alertify.confirm('{{ _('Reset layout') }}',
+ '{{ _('Are you sure you want to reset current layout and reload page again?') }}',
+ function() {
+ // User clicked OK button...
+ var current_url = document.URL;
+
+ // Delete the record from database as well, then only reload page
+ $.ajax({
+ url: '{{ url_for('settings.reset_layout') }}',
+ type: 'DELETE',
+ async: false,
+ error: function() {
+ console.log('Something went wrong on server while resetting layout');
+ }
+ });
+
+ // Toggle flag which will prevents save again
+ obj.save_layout = false;
+ // Flag will prevent onbeforeunload function to be called
+ onbeforeunload_flag = false;
+ // Now reload page
+ location.reload(true);
+ },
+ function() {
+ // Do nothing as user cancel the operation
+ }
+ );
}
});
+
window.onbeforeunload = function(ev) {
var e = ev || window.event;
+ if(onbeforeunload_flag) {
+ var msg = '{{ _('Do you really want to leave the page?') }}';
- var msg = '{{ _('Do you really want to leave the page?') }}';
+ // For IE and Firefox prior to version 4
+ if (e) {
+ e.returnValue = msg;
+ }
- // For IE and Firefox prior to version 4
- if (e) {
- e.returnValue = msg;
+ // For Safari
+ return msg;
}
-
- // For Safari
- return msg;
};
return pgAdmin.Browser;
diff --git a/web/pgadmin/settings/__init__.py b/web/pgadmin/settings/__init__.py
index a245aff..a3f529e 100644
--- a/web/pgadmin/settings/__init__.py
+++ b/web/pgadmin/settings/__init__.py
@@ -110,3 +110,23 @@ def get(setting=None, default=None):
errormsg=errormsg,
info=info,
result=request.form)
+
+
+@blueprint.route("/reset_layout", methods=['DELETE'])
+@login_required
+def reset_layout():
+ """Reset configuration setting"""
+ if request.method == 'DELETE':
+ # There can be only one record at most
+ data = Setting.query.filter_by(user_id=current_user.id).first()
+ try:
+ if data is not None:
+ db.session.delete(data)
+ db.session.commit()
+ except Exception as e:
+ return make_json_response(
+ status=410, success=0, errormsg=str(e)
+ )
+
+ return make_json_response(result=request.form)
+