From 8d0138cfb67168f5f2849e1ffeadf0a5d4710d62 Mon Sep 17 00:00:00 2001 From: Aris Feryanto Date: Thu, 28 Jul 2011 17:54:21 +0800 Subject: [PATCH 1/2] Grid edit: better modification checking for relation field, when 'Relational display column' is chosen --- js/makegrid.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/js/makegrid.js b/js/makegrid.js index e8f82b9acf..a7aee649fb 100644 --- a/js/makegrid.js +++ b/js/makegrid.js @@ -655,6 +655,9 @@ //handle relations $editArea.addClass('edit_area_loading'); + // initialize the original data + $td.data('original_data', null); + /** * @var post_params Object containing parameters for the POST request */ @@ -672,6 +675,12 @@ $.post('sql.php', post_params, function(data) { $editArea.removeClass('edit_area_loading'); + // save original_data + var value = $(data.dropdown).val(); + $td.data('original_data', value); + // update the text input field, in case where the "Relational display column" is checked + $(g.cEdit).find('input[type=text]').val(value); + $editArea.append(data.dropdown); $editArea.append('
' + g.cellEditHint + '
'); }) // end $.post() From a752c74d59b88cb40fa35ca9681e305974cd0ade Mon Sep 17 00:00:00 2001 From: Aris Feryanto Date: Thu, 28 Jul 2011 18:05:32 +0800 Subject: [PATCH 2/2] Grid edit: better AJAX request handling --- js/makegrid.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/js/makegrid.js b/js/makegrid.js index a7aee649fb..5651453f14 100644 --- a/js/makegrid.js +++ b/js/makegrid.js @@ -32,6 +32,7 @@ saveCellsAtOnce: false, // $cfg[saveCellsAtOnce] isCellEdited: false, // true if at least one cell has been edited saveCellWarning: '', // string, warning text when user want to leave a page with unsaved edited data + lastXHR : null, // last XHR object used in AJAX request // functions dragStartRsz: function(e, obj) { // start column resize @@ -510,6 +511,14 @@ g.saveOrPostEditedCell(); return; } + + // cancel any previous request + if (g.lastXHR != null) { + g.lastXHR.abort(); + g.lastXHR = null; + } + + // hide the cell editing area $(g.cEdit).hide(); $(g.cEdit).find('input[type=text]').blur(); g.isCellEditActive = false; @@ -673,7 +682,7 @@ 'relation_key_or_display_column' : relation_key_or_display_column } - $.post('sql.php', post_params, function(data) { + g.lastXHR = $.post('sql.php', post_params, function(data) { $editArea.removeClass('edit_area_loading'); // save original_data var value = $(data.dropdown).val(); @@ -707,7 +716,7 @@ 'token' : window.parent.token, 'curr_value' : curr_value } - $.post('sql.php', post_params, function(data) { + g.lastXHR = $.post('sql.php', post_params, function(data) { $editArea.removeClass('edit_area_loading'); $editArea.append(data.dropdown); $editArea.append('
' + g.cellEditHint + '
'); @@ -736,7 +745,7 @@ 'curr_value' : curr_value } - $.post('sql.php', post_params, function(data) { + g.lastXHR = $.post('sql.php', post_params, function(data) { $editArea.removeClass('edit_area_loading'); $editArea.append(data.select); $editArea.append('
' + g.cellEditHint + '
'); @@ -772,7 +781,7 @@ var sql_query = 'SELECT `' + field_name + '` FROM `' + window.parent.table + '` WHERE ' + PMA_urldecode(where_clause); // Make the Ajax call and get the data, wrap it and insert it - $.post('sql.php', { + g.lastXHR = $.post('sql.php', { 'token' : window.parent.token, 'server' : window.parent.server, 'db' : window.parent.db,