The branch, master has been updated via 52820d2d7044d862bff9e22eb7acb7abc739ee5e (commit) via 7bed3852899c1ddcb605103e9a0ebe20dd587a4f (commit) via c5b0afd16eec37241ec34de24de329d684aec525 (commit) via 81974e6d93d3a7ead5d9d20ccb66a06e80d76f8e (commit) via 8e64a94360c47b33f7b05d5efc278a3d5a6011a2 (commit) from 4c7aa9cfee0f6135501242fb5708cfed40cc6be0 (commit)
- Log ----------------------------------------------------------------- commit 52820d2d7044d862bff9e22eb7acb7abc739ee5e Merge: 7bed3852899c1ddcb605103e9a0ebe20dd587a4f 4c7aa9cfee0f6135501242fb5708cfed40cc6be0 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Sun Feb 20 01:19:32 2011 +0530
Merge branch 'master' of ssh://phpmyadmin.git.sourceforge.net/gitroot/phpmyadmin/phpmyadmin
commit 7bed3852899c1ddcb605103e9a0ebe20dd587a4f Author: Madhura Jayaratne madhura.cj@gmail.com Date: Sun Feb 20 01:05:37 2011 +0530
Uncheck 'null checkbox' when the editor area is changed.
commit c5b0afd16eec37241ec34de24de329d684aec525 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Sun Feb 20 01:03:07 2011 +0530
Tab and white space clean up.
commit 81974e6d93d3a7ead5d9d20ccb66a06e80d76f8e Author: Madhura Jayaratne madhura.cj@gmail.com Date: Sun Feb 20 00:46:29 2011 +0530
CSS styles for null checkbox and for NULL values in table cells.
commit 8e64a94360c47b33f7b05d5efc278a3d5a6011a2 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Sat Feb 19 22:50:43 2011 +0530
Bug #3185756 [AJAX] Inline edit and NULL columns
-----------------------------------------------------------------------
Summary of changes: js/sql.js | 253 ++++++++++++++++++------------- libraries/display_tbl.lib.php | 3 +- themes/original/css/theme_right.css.php | 14 ++ 3 files changed, 160 insertions(+), 110 deletions(-)
diff --git a/js/sql.js b/js/sql.js index 219b28c..2e896ee 100644 --- a/js/sql.js +++ b/js/sql.js @@ -227,9 +227,9 @@ $(document).ready(function() { $form = $(this); PMA_ajaxShowMessage();
- if (! $form.find('input:hidden').is('#ajax_request_hidden')) { - $form.append('<input type="hidden" id="ajax_request_hidden" name="ajax_request" value="true" />'); - } + if (! $form.find('input:hidden').is('#ajax_request_hidden')) { + $form.append('<input type="hidden" id="ajax_request_hidden" name="ajax_request" value="true" />'); + }
$.post($(this).attr('action'), $(this).serialize() , function(data) { if(data.success == true) { @@ -429,14 +429,57 @@ $(document).ready(function() { * @see getFieldName() */ var field_name = getFieldName($this_field, disp_mode); + /** + * @var relation_curr_value String current value of the field (for fields that are foreign keyed). + */ + var relation_curr_value = $this_field.find('a').text(); + /** + * @var enum_curr_value String current value of the field (for fields that are of type enum). + */ + var enum_curr_value = $this_field.text(); + + if($this_field.is(':not(.not_null)')){ + // add a checkbox to mark null for all the field that are nullable. + $this_field.html('<div class="null_div">Null :<input type="checkbox" class="checkbox_null_'+ field_name +'"></div>'); + // check the 'checkbox_null_<field_name>' if the value is null + if($this_field.is('.null')) { + $('.checkbox_null_' + field_name).attr('checked', true); + } + + // if the select/editor is changed un-check the 'checkbox_null_<field_name>'. + if ($this_field.is('.enum, .set')) { + var $editor = $this_field.find('select'); + } else if ($this_field.is('.relation')) { + var $editor = $this_field.find('select'); + } else { + var $editor = $this_field.find('textarea'); + } + $editor.live('change', function(e) { + $('.checkbox_null_' + field_name).attr('checked', false); + }) + + // if 'chechbox_null_<field_name>' is clicked empty the select/editor. + $('.checkbox_null_' + field_name).bind('click', function(e) { + if ($this_field.is('.enum, .set')) { + $this_field.find('select').selectedIndex = -1; + } else if ($this_field.is('.relation')) { + $this_field.find('select').attr('value', ''); + } else { + $this_field.find('textarea').empty(); + } + }) + + } else { + $this_field.html('<div class="null_div"></div>'); + }
// In each input sibling, wrap the current value in a textarea // and store the current value in a hidden span if($this_field.is(':not(.truncated, .transformed, .relation, .enum, .null)')) { // handle non-truncated, non-transformed, non-relation values // We don't need to get any more data, just wrap the value - $this_field.html('<textarea>'+data_value+'</textarea>') - .append('<span class="original_data">'+data_value+'</span>'); + $this_field.append('<textarea>'+data_value+'</textarea>'); + $this_field.append('<span class="original_data">'+data_value+'</span>'); $(".original_data").hide(); } else if($this_field.is('.truncated, .transformed')) { @@ -457,8 +500,8 @@ $(document).ready(function() { 'inline_edit' : true }, function(data) { if(data.success == true) { - $this_field.html('<textarea>'+data.value+'</textarea>') - .append('<span class="original_data">'+data_value+'</span>'); + $this_field.append('<textarea>'+data.value+'</textarea>'); + $this_field.append('<span class="original_data">'+data_value+'</span>'); $(".original_data").hide(); } else { @@ -471,11 +514,6 @@ $(document).ready(function() { //handle relations
/** - * @var curr_value String containing the current value of this relational field - */ - var curr_value = $this_field.find('a').text(); - - /** * @var post_params Object containing parameters for the POST request */ var post_params = { @@ -485,22 +523,18 @@ $(document).ready(function() { 'table' : window.parent.table, 'column' : field_name, 'token' : window.parent.token, - 'curr_value' : curr_value + 'curr_value' : relation_curr_value }
$.post('sql.php', post_params, function(data) { - $this_field.html(data.dropdown) - .append('<span class="original_data">'+data_value+'</span>'); + $this_field.append(data.dropdown); + $this_field.append('<span class="original_data">'+data_value+'</span>'); $(".original_data").hide(); }) // end $.post() } else if($this_field.is('.enum')) { /** @lends jQuery */ //handle enum fields - /** - * @var curr_value String containing the current value of this relational field - */ - var curr_value = $this_field.text();
/** * @var post_params Object containing parameters for the POST request @@ -512,19 +546,19 @@ $(document).ready(function() { 'table' : window.parent.table, 'column' : field_name, 'token' : window.parent.token, - 'curr_value' : curr_value + 'curr_value' : enum_curr_value }
$.post('sql.php', post_params, function(data) { - $this_field.html(data.dropdown) - .append('<span class="original_data">'+data_value+'</span>'); + $this_field.append(data.dropdown); + $this_field.append('<span class="original_data">'+data_value+'</span>'); $(".original_data").hide(); }) // end $.post() } else if($this_field.is('.null')) { //handle null fields - $this_field.html('<textarea></textarea>') - .append('<span class="original_data">NULL</span>'); + $this_field.append('<textarea></textarea>'); + $this_field.append('<span class="original_data">NULL</span>'); $(".original_data").hide(); } }) @@ -585,10 +619,6 @@ $(document).ready(function() {
// Collect values of all fields to submit, we don't know which changed /** - * @var params_to_submit Array containing the name/value pairs of all fields - */ - var params_to_submit = {}; - /** * @var relation_fields Array containing the name/value pairs of relational fields */ var relation_fields = {}; @@ -601,6 +631,11 @@ $(document).ready(function() { */ var transformation_fields = false;
+ /** + * @var sql_query String containing the SQL query to update this row + */ + var sql_query = 'UPDATE ' + window.parent.table + ' SET '; + $input_siblings.each(function() { /** @lends jQuery */ /** @@ -621,50 +656,43 @@ $(document).ready(function() { if($this_field.is('.transformed')) { transformation_fields = true; } + /** + * @var is_null String capturing whether 'checkbox_null_<field_name>' is checked. + */ + var is_null = $this_field.find('input:checkbox').is(':checked'); + var value;
- if($this_field.is(":not(.relation, .enum)")) { - this_field_params[field_name] = $this_field.find('textarea').val(); - if($this_field.is('.transformed')) { - $.extend(transform_fields, this_field_params); - } - } - else { - // results from a drop-down - $test_element = $this_field.find('select'); - if ($test_element.length != 0) { - this_field_params[field_name] = $test_element.val(); + if (is_null) { + sql_query += ' ' + field_name + "=NULL , "; + } else { + if($this_field.is(":not(.relation, .enum)")) { + this_field_params[field_name] = $this_field.find('textarea').val(); + if($this_field.is('.transformed')) { + $.extend(transform_fields, this_field_params); + } } + else { + // results from a drop-down + $test_element = $this_field.find('select'); + if ($test_element.length != 0) { + this_field_params[field_name] = $test_element.val(); + }
- // results from Browse foreign value - $test_element = $this_field.find('span.curr_value'); - if ($test_element.length != 0) { - this_field_params[field_name] = $test_element.text(); - } + // results from Browse foreign value + $test_element = $this_field.find('span.curr_value'); + if ($test_element.length != 0) { + this_field_params[field_name] = $test_element.text(); + }
- if($this_field.is('.relation')) { - $.extend(relation_fields, this_field_params); + if($this_field.is('.relation')) { + $.extend(relation_fields, this_field_params); + } } - }
- $.extend(params_to_submit, this_field_params); + sql_query += ' ' + field_name + "='" + this_field_params[field_name].replace(/'/g, "''") + "' , "; + } })
- /** - * @var sql_query String containing the SQL query to update this row - */ - var sql_query = 'UPDATE ' + window.parent.table + ' SET '; - - // $.each() not used here since it cause problems when there is a column - // in the table with the name 'length'. See bug #3184827 - var value; - for (var key in params_to_submit) { - value = params_to_submit[key]; - if (value.length == 0) { - sql_query += ' ' + key + "=NULL, "; - } else { - sql_query += ' ' + key + "='" + value.replace(/'/g, "''") + "' , "; - } - } //Remove the last ',' appended in the above loop sql_query = sql_query.replace(/,\s$/, ''); sql_query += ' WHERE ' + PMA_urldecode(where_clause); @@ -706,57 +734,64 @@ $(document).ready(function() { $input_siblings.each(function() { // Inline edit post has been successful. $this_sibling = $(this); - if($this_sibling.is(':not(.relation, .enum)')) { - /** - * @var new_html String containing value of the data field after edit - */ - var new_html = $this_sibling.find('textarea').val(); - - if($this_sibling.is('.transformed')) { - var field_name = getFieldName($this_sibling, disp_mode); - $.each(data.transformations, function(key, value) { - if(key == field_name) { - if($this_sibling.is('.text_plain, .application_octetstream')) { - new_html = value; - return false; + + var is_null = $this_sibling.find('input:checkbox').is(':checked'); + if (is_null) { + $this_sibling.html('NULL'); + $this_sibling.addClass('null'); + } else { + $this_sibling.removeClass('null'); + if($this_sibling.is(':not(.relation, .enum)')) { + /** + * @var new_html String containing value of the data field after edit + */ + var new_html = $this_sibling.find('textarea').val(); + + if($this_sibling.is('.transformed')) { + var field_name = getFieldName($this_sibling, disp_mode); + $.each(data.transformations, function(key, value) { + if(key == field_name) { + if($this_sibling.is('.text_plain, .application_octetstream')) { + new_html = value; + return false; + } + else { + var new_value = $this_sibling.find('textarea').val(); + new_html = $(value).append(new_value); + return false; + } } - else { - var new_value = $this_sibling.find('textarea').val(); + }) + } + } + else { + var new_html = ''; + var new_value = ''; + $test_element = $this_sibling.find('select'); + if ($test_element.length != 0) { + new_value = $test_element.val(); + } + + $test_element = $this_sibling.find('span.curr_value'); + if ($test_element.length != 0) { + new_value = $test_element.text(); + } + + if($this_sibling.is('.relation')) { + var field_name = getFieldName($this_sibling, disp_mode); + $.each(data.relations, function(key, value) { + if(key == field_name) { new_html = $(value).append(new_value); return false; } - } - }) - } - } - else { - var new_html = ''; - var new_value = ''; - $test_element = $this_sibling.find('select'); - if ($test_element.length != 0) { - new_value = $test_element.val(); - } - - $test_element = $this_sibling.find('span.curr_value'); - if ($test_element.length != 0) { - new_value = $test_element.text(); - } - - - if($this_sibling.is('.relation')) { - var field_name = getFieldName($this_sibling, disp_mode); - $.each(data.relations, function(key, value) { - if(key == field_name) { - new_html = $(value).append(new_value); - return false; - } - }) - } - if($this_sibling.is('.enum')) { - new_html = new_value; + }) + } + if($this_sibling.is('.enum')) { + new_html = new_value; + } } + $this_sibling.html(new_html); } - $this_sibling.html(new_html); }) } else { diff --git a/libraries/display_tbl.lib.php b/libraries/display_tbl.lib.php index a06ac63..6fa24cd 100644 --- a/libraries/display_tbl.lib.php +++ b/libraries/display_tbl.lib.php @@ -1234,11 +1234,12 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) { // 2. Displays the rows' values for ($i = 0; $i < $fields_cnt; ++$i) { $meta = $fields_meta[$i]; + $not_null_class = $meta->not_null ? 'not_null' : ''; $pointer = $i; $is_field_truncated = false; //If the previous column had blob data, we need to reset the class // to $inline_edit_class - $class = 'data ' . $inline_edit_class . ' ' . $alternating_color_class; + $class = 'data ' . $inline_edit_class . ' ' . $not_null_class . ' ' . $alternating_color_class;
// See if this column should get highlight because it's used in the // where-query. diff --git a/themes/original/css/theme_right.css.php b/themes/original/css/theme_right.css.php index 272221d..b1bc753 100644 --- a/themes/original/css/theme_right.css.php +++ b/themes/original/css/theme_right.css.php @@ -159,6 +159,12 @@ fieldset.tblFooters { clear: both; }
+div.null_div { + height: 20px; + text-align: center; + font-style:normal; +} + fieldset .formelement { float: <?php echo $left; ?>; margin-<?php echo $right; ?>: 0.5em; @@ -235,6 +241,14 @@ th.condition { border: 1px solid <?php echo $GLOBALS['cfg']['BrowseMarkerBackground']; ?>; }
+/** + * cells with the value NULL + */ +td.null { + font-style: italic; + text-align: <?php echo $right; ?>; +} + table .value { text-align: <?php echo $right; ?>; white-space: normal;
hooks/post-receive