mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Overhaul the layout saving code so it includes the Query Tool and Debugger, and stores the layout when change events are detected rather than (unreliably) on exit. Fixes #4084
This commit is contained in:
committed by
Dave Page
parent
b917246be9
commit
6fb35f2649
@@ -29,6 +29,7 @@ from pgadmin.utils.ajax import bad_request
|
||||
from pgadmin.utils.ajax import make_json_response, \
|
||||
internal_server_error
|
||||
from pgadmin.utils.driver import get_driver
|
||||
from pgadmin.settings import get_setting
|
||||
|
||||
from config import PG_DEFAULT_DRIVER
|
||||
from pgadmin.model import db, DebuggerFunctionArguments
|
||||
@@ -589,6 +590,8 @@ def direct_new(trans_id):
|
||||
|
||||
function_arguments += ')'
|
||||
|
||||
layout = get_setting('Debugger/Layout')
|
||||
|
||||
return render_template(
|
||||
"debugger/direct.html",
|
||||
_=gettext,
|
||||
@@ -598,7 +601,8 @@ def direct_new(trans_id):
|
||||
is_desktop_mode=current_app.PGADMIN_RUNTIME,
|
||||
is_linux=is_linux_platform,
|
||||
client_platform=user_agent.platform,
|
||||
function_name_with_arguments=obj['function_name'] + function_arguments
|
||||
function_name_with_arguments=obj['function_name'] + function_arguments,
|
||||
layout=layout
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -1534,7 +1534,7 @@ define([
|
||||
|
||||
_.extend(DirectDebug.prototype, {
|
||||
/* We should get the transaction id from the server during initialization here */
|
||||
init: function(trans_id, debug_type, function_name_with_arguments) {
|
||||
load: function(trans_id, debug_type, function_name_with_arguments, layout) {
|
||||
// We do not want to initialize the module multiple times.
|
||||
var self = this;
|
||||
_.bindAll(pgTools.DirectDebug, 'messages');
|
||||
@@ -1554,6 +1554,7 @@ define([
|
||||
this.is_user_aborted_debugging = false;
|
||||
this.is_polling_required = true; // Flag to stop unwanted ajax calls
|
||||
this.function_name_with_arguments = function_name_with_arguments;
|
||||
this.layout = layout;
|
||||
|
||||
let browser = window.opener ?
|
||||
window.opener.pgAdmin.Browser : window.top.pgAdmin.Browser;
|
||||
@@ -1710,6 +1711,18 @@ define([
|
||||
}
|
||||
},
|
||||
|
||||
buildDefaultLayout: function(docker) {
|
||||
let code_editor_panel = docker.addPanel('code', wcDocker.DOCK.TOP);
|
||||
|
||||
let parameters_panel = docker.addPanel('parameters', wcDocker.DOCK.BOTTOM, code_editor_panel);
|
||||
docker.addPanel('local_variables',wcDocker.DOCK.STACKED, parameters_panel, {
|
||||
tabOrientation: wcDocker.TAB.TOP,
|
||||
});
|
||||
docker.addPanel('messages', wcDocker.DOCK.STACKED, parameters_panel);
|
||||
docker.addPanel('results', wcDocker.DOCK.STACKED, parameters_panel);
|
||||
docker.addPanel('stack_pane', wcDocker.DOCK.STACKED, parameters_panel);
|
||||
},
|
||||
|
||||
// Create the debugger layout with splitter and display the appropriate data received from server.
|
||||
intializePanels: function() {
|
||||
var self = this;
|
||||
@@ -1780,23 +1793,19 @@ define([
|
||||
stack_pane.load(self.docker);
|
||||
});
|
||||
|
||||
self.code_editor_panel = self.docker.addPanel('code', wcDocker.DOCK.TOP);
|
||||
self.parameters_panel = self.docker.addPanel(
|
||||
'parameters', wcDocker.DOCK.BOTTOM, self.code_editor_panel
|
||||
);
|
||||
self.local_variables_panel = self.docker.addPanel(
|
||||
'local_variables',
|
||||
wcDocker.DOCK.STACKED,
|
||||
self.parameters_panel, {
|
||||
tabOrientation: wcDocker.TAB.TOP,
|
||||
}
|
||||
);
|
||||
self.messages_panel = self.docker.addPanel(
|
||||
'messages', wcDocker.DOCK.STACKED, self.parameters_panel);
|
||||
self.results_panel = self.docker.addPanel(
|
||||
'results', wcDocker.DOCK.STACKED, self.parameters_panel);
|
||||
self.stack_pane_panel = self.docker.addPanel(
|
||||
'stack_pane', wcDocker.DOCK.STACKED, self.parameters_panel);
|
||||
// restore the layout if present else fallback to buildDefaultLayout
|
||||
pgBrowser.restore_layout(self.docker, self.layout, this.buildDefaultLayout.bind(this));
|
||||
|
||||
self.docker.on(wcDocker.EVENT.LAYOUT_CHANGED, function() {
|
||||
pgBrowser.save_current_layout('Debugger/Layout', self.docker);
|
||||
});
|
||||
|
||||
self.code_editor_panel = self.docker.findPanels('code')[0];
|
||||
self.parameters_panel = self.docker.findPanels('parameters')[0];
|
||||
self.local_variables_panel = self.docker.findPanels('local_variables')[0];
|
||||
self.messages_panel = self.docker.findPanels('messages')[0];
|
||||
self.results_panel = self.docker.findPanels('results')[0];
|
||||
self.stack_pane_panel = self.docker.findPanels('stack_pane')[0];
|
||||
|
||||
var editor_pane = $('<div id="stack_editor_pane" ' +
|
||||
'class="pg-panel-content info"></div>');
|
||||
|
||||
@@ -9,7 +9,7 @@ try {
|
||||
var pgDirectDebug = pgDirectDebug || pgAdmin.Tools.DirectDebug;
|
||||
var $ = pgDirectDebug.jquery;
|
||||
|
||||
pgDirectDebug.init({{ uniqueId }}, {{ debug_type }}, '{{ function_name_with_arguments }}');
|
||||
pgDirectDebug.load({{ uniqueId }}, {{ debug_type }}, '{{ function_name_with_arguments }}', '{{layout|safe}}');
|
||||
window.onbeforeunload = function(ev) {
|
||||
$.ajax({
|
||||
url: "{{ url_for('debugger.index') }}close/{{ uniqueId }}",
|
||||
|
||||
Reference in New Issue
Block a user