Hi,

PFA patch for issue RM1348.

Issue fixed: Not to show multiple 'Reset Layout' options under file menu.
Also restructured code related to reset layout functionality.

-- 
*Harshal Dhumal*
*Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
index 91aaa81..ae99ff6 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -12,8 +12,7 @@ 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,
-    onbeforeunload_flag = true;
+  var wcDocker = window.wcDocker;
   $ = $ || window.jQuery || window.$;
   Bootstrap = Bootstrap || window.Bootstrap;
 
@@ -256,19 +255,9 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
           }], false);
         $obj_mnu.append(create_submenu.$el);
       }
-      // Drop down menu for reset layout
-      var $file_mnu = navbar.find('li#mnu_file > ul.dropdown-menu').first();
-      if($file_mnu) {
-        $file_mnu.append('<li class="menu-item"><a href="#" onclick="pgAdmin.Browser.reset_current_layout()">' +
-                         '<i class="fa fa-retweet"></i>' +
-                         '<span>{{ _('Reset Layout') }}</span>' +
-                         '</a></li>'
-                        );
-      }
     },
     init: function() {
       var obj=this;
-      obj.save_layout = true;
       if (obj.initialized) {
         return;
       }
@@ -276,7 +265,7 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
 
       // Store the main browser layout
       $(window).bind('unload', function() {
-          if(obj.docker && obj.save_layout) {
+          if(obj.docker) {
             state = obj.docker.save();
             settings = { setting: "Browser/Layout", value: state };
             $.ajax({
@@ -650,38 +639,6 @@ 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 the current layout? This will cause the application to reload and any un-saved data will be lost.') }}',
-        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
-        }
-      );
-    },
     // General function to handle callbacks for object or dialog help.
     showHelp: function(type, url, node, item, label) {
       if (type == "object_help") {
@@ -736,18 +693,16 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
   });
 
   window.onbeforeunload = function(ev) {
-    var e = ev || window.event;
-    if(onbeforeunload_flag) {
-      var msg = '{{ _('Do you really want to leave the page?') }}';
+    var e = ev || window.event,
+        msg = '{{ _('Do you really want to leave the page?') }}';
 
-      // For IE and Firefox prior to version 4
-      if (e) {
-        e.returnValue = msg;
-      }
-
-      // For Safari
-      return msg;
+    // For IE and Firefox prior to version 4
+    if (e) {
+      e.returnValue = msg;
     }
+
+    // For Safari
+    return msg;
   };
 
   return pgAdmin.Browser;
diff --git a/web/pgadmin/settings/__init__.py b/web/pgadmin/settings/__init__.py
index a3f529e..97a34e8 100644
--- a/web/pgadmin/settings/__init__.py
+++ b/web/pgadmin/settings/__init__.py
@@ -13,14 +13,41 @@ from flask.ext.login import current_user
 
 from pgadmin.model import db, Setting
 import traceback
-from flask import Response, request, render_template
+from flask import Response, request, render_template, url_for
 from flask.ext.security import login_required
 
-from pgadmin.utils.ajax import make_json_response
+from pgadmin.utils.ajax import make_json_response, bad_request
 from pgadmin.utils import PgAdminModule
+from pgadmin.utils.menu import MenuItem
+from flask.ext.babel import gettext
 
 MODULE_NAME = 'settings'
 
+
+class SettingsModule(PgAdminModule):
+
+    def get_own_javascripts(self):
+        return [{
+            'name': 'pgadmin.settings',
+            'path': url_for('settings.index') + 'settings',
+            'when': None
+        }]
+
+    def get_own_menuitems(self):
+        return {
+            'file_items': [
+                MenuItem(name='mnu_resetlayout',
+                         priority=999,
+                         module="pgAdmin.Settings",
+                         callback='show',
+                         icon='fa fa-retweet',
+                         label=gettext('Reset Layout'))
+            ]
+        }
+
+blueprint = SettingsModule(MODULE_NAME, __name__)
+
+
 def store_setting(setting, value):
     """Set a configuration setting for the current user."""
     data = Setting(user_id=current_user.id, setting=setting, value=value)
@@ -28,6 +55,7 @@ def store_setting(setting, value):
     db.session.merge(data)
     db.session.commit()
 
+
 def get_setting(setting, default=None):
     """Retrieve a configuration setting for the current user, or return the
     default value specified by the caller."""
@@ -38,8 +66,11 @@ def get_setting(setting, default=None):
     else:
         return data.value
 
-# Initialise the module
-blueprint = PgAdminModule(MODULE_NAME, __name__, template_folder='templates', url_prefix='/' + MODULE_NAME)
+
+@blueprint.route("/")
+@login_required
+def index():
+    return bad_request(errormsg=_("This URL can not be called directly."))
 
 @blueprint.route("/settings.js")
 @login_required
@@ -116,17 +147,17 @@ def get(setting=None, default=None):
 @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)
-                    )
+
+    # 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)
 
diff --git a/web/pgadmin/settings/templates/settings/settings.js b/web/pgadmin/settings/templates/settings/settings.js
index ce09c79..7bc9b3f 100644
--- a/web/pgadmin/settings/templates/settings/settings.js
+++ b/web/pgadmin/settings/templates/settings/settings.js
@@ -1,13 +1,55 @@
-// Store a single setting
-function storeSetting(setting, value) {
-    $.post("{{ url_for('settings.store') }}", { setting: setting, value: value });
-}
-
-// Store a number of settings.
-// settings is a javascript object containing values for settingX and valueX,
-// along with a count value which equals the number of setting/value pairs. 
-// X is 1 based.
-function storeSetting(settings) {
-    $.post("{{ url_for('settings.store') }}", settings);
-}
+define(
+  ['jquery', 'alertify', 'pgadmin', 'underscore', 'backform', 'pgadmin.backform'],
 
+  // This defines the Preference/Options Dialog for pgAdmin IV.
+  function($, alertify, pgAdmin, _, Backform) {
+    pgAdmin = pgAdmin || window.pgAdmin || {};
+
+    /*
+     * Hmm... this module is already been initialized, we can refer to the old
+     * object from here.
+     */
+    if (pgAdmin.Settings)
+        return pgAdmin.Settings;
+
+    pgAdmin.Settings = {
+      init: function() {
+        if (this.initialized)
+          return;
+
+        this.initialized = true;
+      },
+      // We will force unload method to not to save current layout
+      // and reload the window
+      show: function() {
+        var obj = this;
+        alertify.confirm('{{ _('Reset layout') }}',
+          '{{ _('Are you sure you want to reset the current layout? This will cause the application to reload and any un-saved data will be lost.') }}',
+          function() {
+            // Delete the record from database as well, then only reload page
+            $.ajax({
+              url: '{{ url_for('settings.reset_layout') }}',
+              type: 'DELETE',
+              async: false,
+              success: function() {
+                // Prevent saving layout on server for next page reload.
+                $(window).unbind('unload');
+                window.onbeforeunload = null;
+                // Now reload page
+                location.reload(true);
+              },
+              error: function() {
+                console.log('Something went wrong on server while resetting layout');
+              }
+            });
+
+          },
+          function() {
+            // Do nothing as user canceled the operation.
+          }
+        );
+      }
+    };
+
+    return pgAdmin.Settings;
+  });
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to