mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Avoid showing multiple 'Reset Layout' options under file menu. Fixes #1348
Also restructured code related to reset layout functionality.
This commit is contained in:
parent
62c1369938
commit
b0b21fd46c
@ -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;
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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;
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user