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.
|
// Some scripts do export their object in the window only.
|
||||||
// Generally the one, which do no have AMD support.
|
// Generally the one, which do no have AMD support.
|
||||||
var wcDocker = window.wcDocker,
|
var wcDocker = window.wcDocker;
|
||||||
onbeforeunload_flag = true;
|
|
||||||
$ = $ || window.jQuery || window.$;
|
$ = $ || window.jQuery || window.$;
|
||||||
Bootstrap = Bootstrap || window.Bootstrap;
|
Bootstrap = Bootstrap || window.Bootstrap;
|
||||||
|
|
||||||
@ -256,19 +255,9 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
|
|||||||
}], false);
|
}], false);
|
||||||
$obj_mnu.append(create_submenu.$el);
|
$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() {
|
init: function() {
|
||||||
var obj=this;
|
var obj=this;
|
||||||
obj.save_layout = true;
|
|
||||||
if (obj.initialized) {
|
if (obj.initialized) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -276,7 +265,7 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
|
|||||||
|
|
||||||
// Store the main browser layout
|
// Store the main browser layout
|
||||||
$(window).bind('unload', function() {
|
$(window).bind('unload', function() {
|
||||||
if(obj.docker && obj.save_layout) {
|
if(obj.docker) {
|
||||||
state = obj.docker.save();
|
state = obj.docker.save();
|
||||||
settings = { setting: "Browser/Layout", value: state };
|
settings = { setting: "Browser/Layout", value: state };
|
||||||
$.ajax({
|
$.ajax({
|
||||||
@ -650,38 +639,6 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
|
|||||||
navbar.children('#mnu_obj').removeClass('hide');
|
navbar.children('#mnu_obj').removeClass('hide');
|
||||||
obj.enable_disable_menus();
|
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.
|
// General function to handle callbacks for object or dialog help.
|
||||||
showHelp: function(type, url, node, item, label) {
|
showHelp: function(type, url, node, item, label) {
|
||||||
if (type == "object_help") {
|
if (type == "object_help") {
|
||||||
@ -736,18 +693,16 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
window.onbeforeunload = function(ev) {
|
window.onbeforeunload = function(ev) {
|
||||||
var e = ev || window.event;
|
var e = ev || window.event,
|
||||||
if(onbeforeunload_flag) {
|
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
|
// For IE and Firefox prior to version 4
|
||||||
if (e) {
|
if (e) {
|
||||||
e.returnValue = msg;
|
e.returnValue = msg;
|
||||||
}
|
|
||||||
|
|
||||||
// For Safari
|
|
||||||
return msg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For Safari
|
||||||
|
return msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
return pgAdmin.Browser;
|
return pgAdmin.Browser;
|
||||||
|
@ -13,14 +13,41 @@ from flask.ext.login import current_user
|
|||||||
|
|
||||||
from pgadmin.model import db, Setting
|
from pgadmin.model import db, Setting
|
||||||
import traceback
|
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 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 import PgAdminModule
|
||||||
|
from pgadmin.utils.menu import MenuItem
|
||||||
|
from flask.ext.babel import gettext
|
||||||
|
|
||||||
MODULE_NAME = 'settings'
|
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):
|
def store_setting(setting, value):
|
||||||
"""Set a configuration setting for the current user."""
|
"""Set a configuration setting for the current user."""
|
||||||
data = Setting(user_id=current_user.id, setting=setting, value=value)
|
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.merge(data)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
def get_setting(setting, default=None):
|
def get_setting(setting, default=None):
|
||||||
"""Retrieve a configuration setting for the current user, or return the
|
"""Retrieve a configuration setting for the current user, or return the
|
||||||
default value specified by the caller."""
|
default value specified by the caller."""
|
||||||
@ -38,8 +66,11 @@ def get_setting(setting, default=None):
|
|||||||
else:
|
else:
|
||||||
return data.value
|
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")
|
@blueprint.route("/settings.js")
|
||||||
@login_required
|
@login_required
|
||||||
@ -116,17 +147,17 @@ def get(setting=None, default=None):
|
|||||||
@login_required
|
@login_required
|
||||||
def reset_layout():
|
def reset_layout():
|
||||||
"""Reset configuration setting"""
|
"""Reset configuration setting"""
|
||||||
if request.method == 'DELETE':
|
|
||||||
# There can be only one record at most
|
# There can be only one record at most
|
||||||
data = Setting.query.filter_by(user_id=current_user.id).first()
|
data = Setting.query.filter_by(user_id=current_user.id).first()
|
||||||
try:
|
try:
|
||||||
if data is not None:
|
if data is not None:
|
||||||
db.session.delete(data)
|
db.session.delete(data)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return make_json_response(
|
return make_json_response(
|
||||||
status=410, success=0, errormsg=str(e)
|
status=410, success=0, errormsg=str(e)
|
||||||
)
|
)
|
||||||
|
|
||||||
return make_json_response(result=request.form)
|
return make_json_response(result=request.form)
|
||||||
|
|
||||||
|
@ -1,13 +1,55 @@
|
|||||||
// Store a single setting
|
define(
|
||||||
function storeSetting(setting, value) {
|
['jquery', 'alertify', 'pgadmin', 'underscore', 'backform', 'pgadmin.backform'],
|
||||||
$.post("{{ url_for('settings.store') }}", { setting: setting, value: value });
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store a number of settings.
|
// This defines the Preference/Options Dialog for pgAdmin IV.
|
||||||
// settings is a javascript object containing values for settingX and valueX,
|
function($, alertify, pgAdmin, _, Backform) {
|
||||||
// along with a count value which equals the number of setting/value pairs.
|
pgAdmin = pgAdmin || window.pgAdmin || {};
|
||||||
// X is 1 based.
|
|
||||||
function storeSetting(settings) {
|
|
||||||
$.post("{{ url_for('settings.store') }}", settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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