[Phpmyadmin-git] [SCM] phpMyAdmin branch, master, updated. RELEASE_3_4_0BETA3-820-g52820d2

Madhura Jayaratne madhuracj at users.sourceforge.net
Sat Feb 19 20:50:11 CET 2011


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 at 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 at 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 at gmail.com>
Date:   Sun Feb 20 01:03:07 2011 +0530

    Tab and white space clean up.

commit 81974e6d93d3a7ead5d9d20ccb66a06e80d76f8e
Author: Madhura Jayaratne <madhura.cj at 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 at 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
-- 
phpMyAdmin




More information about the Git mailing list