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