From b36d5d153bb77141b5f40634c2ea2a03601acaab Mon Sep 17 00:00:00 2001 From: Akshay Joshi Date: Tue, 18 Jun 2019 14:46:28 +0100 Subject: [PATCH] Ensure the debugger control buttons are only enabled once initialisation is complete. Fixes #4360 --- docs/en_US/release_notes_4_9.rst | 3 +- web/pgadmin/tools/debugger/__init__.py | 4 +- .../tools/debugger/static/js/direct.js | 102 ++++++------------ .../debugger/templates/debugger/direct.html | 19 ++-- 4 files changed, 52 insertions(+), 76 deletions(-) diff --git a/docs/en_US/release_notes_4_9.rst b/docs/en_US/release_notes_4_9.rst index 4b335c0b5..48c4245f1 100644 --- a/docs/en_US/release_notes_4_9.rst +++ b/docs/en_US/release_notes_4_9.rst @@ -33,4 +33,5 @@ Bug fixes | `Bug #4349 `_ - Ensure strings are properly encoded in the Query History. | `Bug #4350 `_ - Ensure we include the CSRF token when uploading files. | `Bug #4357 `_ - Fix connection restoration issue when pgAdmin server is restarted and the page is refreshed. -| `Bug #4365 `_ - Fix help links for backup globals and backup server. +| `Bug #4360 `_ - Ensure the debugger control buttons are only enabled once initialisation is complete. +| `Bug #4365 `_ - Fix help links for backup globals and backup server. \ No newline at end of file diff --git a/web/pgadmin/tools/debugger/__init__.py b/web/pgadmin/tools/debugger/__init__.py index 9a01ac323..d4365dcd2 100644 --- a/web/pgadmin/tools/debugger/__init__.py +++ b/web/pgadmin/tools/debugger/__init__.py @@ -839,7 +839,7 @@ def restart_debugging(trans_id): de_inst.debugger_data['restart_debug'] = 1 de_inst.update_session() - de_inst.function_data = { + de_inst.function_data.update({ 'server_id': de_inst.debugger_data['server_id'], 'database_id': de_inst.debugger_data['database_id'], 'schema_id': de_inst.debugger_data['schema_id'], @@ -851,7 +851,7 @@ def restart_debugging(trans_id): 'proargdefaults': de_inst.function_data['default_value'], 'proargnames': de_inst.function_data['args_name'], 'require_input': de_inst.function_data['require_input'] - } + }) return make_json_response( data={ diff --git a/web/pgadmin/tools/debugger/static/js/direct.js b/web/pgadmin/tools/debugger/static/js/direct.js index 77ee45eae..fab16604a 100644 --- a/web/pgadmin/tools/debugger/static/js/direct.js +++ b/web/pgadmin/tools/debugger/static/js/direct.js @@ -39,6 +39,26 @@ define([ this.trigger('pgDebugger:button:state:' + btn, enable); }, + enable_toolbar_buttons: function() { + var self = this; + self.enable('stop', true); + self.enable('step_over', true); + self.enable('step_into', true); + self.enable('toggle_breakpoint', true); + self.enable('clear_all_breakpoints', true); + self.enable('continue', true); + }, + + disable_toolbar_buttons: function() { + var self = this; + self.enable('stop', false); + self.enable('step_over', false); + self.enable('step_into', false); + self.enable('toggle_breakpoint', false); + self.enable('clear_all_breakpoints', false); + self.enable('continue', false); + }, + /* Function to set the breakpoint and send the line no. which is set to server trans_id :- Unique Transaction ID, line_no - line no. to set the breakpoint, @@ -405,12 +425,7 @@ define([ // Enable all the buttons as we got the results // TODO: Fix this properly so a timeout isn't required. setTimeout(function() { - self.enable('stop', true); - self.enable('step_over', true); - self.enable('step_into', true); - self.enable('continue', true); - self.enable('toggle_breakpoint', true); - self.enable('clear_all_breakpoints', true); + self.enable_toolbar_buttons(); }, 500); } } else if (res.data.status === 'Busy') { @@ -422,12 +437,7 @@ define([ ); // As we are waiting for another session to invoke the target,disable all the buttons - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('continue', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); + self.disable_toolbar_buttons(); pgTools.DirectDebug.first_time_indirect_debug = false; self.poll_result(trans_id); } else { @@ -648,12 +658,7 @@ define([ var self = this, baseUrl = url_for('debugger.restart', {'trans_id': trans_id}); - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', false); + self.disable_toolbar_buttons(); // Clear msg tab pgTools.DirectDebug @@ -725,12 +730,7 @@ define([ // Continue the execution until the next breakpoint Continue: function(trans_id) { var self = this; - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', false); + self.disable_toolbar_buttons(); //Check first if previous execution was completed or not if (pgTools.DirectDebug.direct_execution_completed && @@ -767,12 +767,7 @@ define([ Step_over: function(trans_id) { var self = this; - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', false); + self.disable_toolbar_buttons(); // Make ajax call to listen the database message var baseUrl = url_for('debugger.execute_query', { @@ -803,12 +798,7 @@ define([ Step_into: function(trans_id) { var self = this; - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', false); + self.disable_toolbar_buttons(); // Make ajax call to listen the database message var baseUrl = url_for('debugger.execute_query', { @@ -839,12 +829,7 @@ define([ Stop: function(trans_id) { var self = this; - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', false); + self.disable_toolbar_buttons(); // Make ajax call to listen the database message var baseUrl = url_for( @@ -890,12 +875,7 @@ define([ toggle_breakpoint: function(trans_id) { var self = this; - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', false); + self.disable_toolbar_buttons(); var info = pgTools.DirectDebug.editor.lineInfo(self.active_line_no); @@ -936,12 +916,8 @@ define([ return marker; }()); } - self.enable('stop', true); - self.enable('step_over', true); - self.enable('step_into', true); - self.enable('toggle_breakpoint', true); - self.enable('clear_all_breakpoints', true); - self.enable('continue', true); + + self.enable_toolbar_buttons(); } else if (res.data.status === 'NotConnected') { Alertify.alert( gettext('Debugger Error'), @@ -965,12 +941,7 @@ define([ if ((br_list.length == 1) && (br_list[0].linenumber == -1)) return; - self.enable('stop', false); - self.enable('step_over', false); - self.enable('step_into', false); - self.enable('toggle_breakpoint', false); - self.enable('clear_all_breakpoints', false); - self.enable('continue', false); + self.disable_toolbar_buttons(); var breakpoint_list = new Array(); @@ -1004,12 +975,7 @@ define([ } } } - self.enable('stop', true); - self.enable('step_over', true); - self.enable('step_into', true); - self.enable('toggle_breakpoint', true); - self.enable('clear_all_breakpoints', true); - self.enable('continue', true); + self.enable_toolbar_buttons(); }) .fail(function() { Alertify.alert( @@ -1561,7 +1527,7 @@ define([ let browser = window.opener ? window.opener.pgAdmin.Browser : window.top.pgAdmin.Browser; - this.preferences = browser.get_preferences_for_module('sqleditor'); + this.preferences = browser.get_preferences_for_module('debugger'); this.docker = new wcDocker( '#container', { @@ -1592,6 +1558,7 @@ define([ .done(function(res) { if (res.data.status) { self.intializePanels(); + controller.enable_toolbar_buttons(); controller.poll_result(trans_id); } }) @@ -1656,6 +1623,7 @@ define([ .done(function(res) { if (res.data.status === 'Success') { self.intializePanels(); + controller.enable_toolbar_buttons(); // If status is Success then find the port number to attach the executer. controller.start_execution(trans_id, res.data.result); } else if (res.data.status === 'Busy') { diff --git a/web/pgadmin/tools/debugger/templates/debugger/direct.html b/web/pgadmin/tools/debugger/templates/debugger/direct.html index f4965c4f4..1dc1cbe76 100644 --- a/web/pgadmin/tools/debugger/templates/debugger/direct.html +++ b/web/pgadmin/tools/debugger/templates/debugger/direct.html @@ -54,19 +54,23 @@ try { @@ -74,13 +78,15 @@ try { @@ -88,7 +94,8 @@ try {