diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
index 91aaa8124..ae99ff697 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('
'
- );
- }
},
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 a3f529ee6..97a34e8a5 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 ce09c79d8..7bc9b3fee 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 });
-}
+define(
+ ['jquery', 'alertify', 'pgadmin', 'underscore', 'backform', 'pgadmin.backform'],
-// 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);
-}
+ // 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;
+ });