Merge remote-tracking branch 'origin/master' into drizzle
[phpmyadmin.git] / js / indexes.js
blob9b64d9204806e59fe05500a03a0aeed4a2191240
1 /* vim: set expandtab sw=4 ts=4 sts=4: */
2 /**
3  * function used for index manipulation pages
4  *
5  */
7 /**
8  * Ensures indexes names are valid according to their type and, for a primary
9  * key, lock index name to 'PRIMARY'
10  *
11  * @return  boolean  false if there is no index form, true else
12  */
13 function checkIndexName()
15     if (typeof(document.forms['index_frm']) == 'undefined') {
16         return false;
17     }
19     // Gets the elements pointers
20     var the_idx_name = document.forms['index_frm'].elements['index'];
21     var the_idx_type = document.forms['index_frm'].elements['index_type'];
23     // Index is a primary key
24     if (the_idx_type.options[0].value == 'PRIMARY' && the_idx_type.options[0].selected) {
25         document.forms['index_frm'].elements['index'].value = 'PRIMARY';
26         if (typeof(the_idx_name.disabled) != 'undefined') {
27             document.forms['index_frm'].elements['index'].disabled = true;
28         }
29     }
31     // Other cases
32     else {
33         if (the_idx_name.value == 'PRIMARY') {
34             document.forms['index_frm'].elements['index'].value = '';
35         }
36         if (typeof(the_idx_name.disabled) != 'undefined') {
37             document.forms['index_frm'].elements['index'].disabled = false;
38         }
39     }
41     return true;
42 } // end of the 'checkIndexName()' function
44 onload = checkIndexName;
46 /**
47  * Hides/shows the inputs and submits appropriately depending
48  * on whether the index type chosen is 'SPATIAL' or not.
49  */
50 function checkIndexType()
52     /**
53      * @var Object Dropdown to select the index type.
54      */
55     $select_index_type = $('#select_index_type');
56     /**
57      * @var Object Table header for the size column.
58      */
59     $size_header = $('thead tr th:nth-child(2)');
60     /**
61      * @var Object Inputs to specify the columns for the index.
62      */
63     $column_inputs = $('select[name="index[columns][names][]"]');
64     /**
65      * @var Object Inputs to specify sizes for columns of the index.
66      */
67     $size_inputs = $('input[name="index[columns][sub_parts][]"]');
68     /**
69      * @var Object Span containg the controllers to add more columns
70      */
71     $add_more = $('#addMoreColumns');
73     if ($select_index_type.val() == 'SPATIAL') {
74         // Disable and hide the size column
75         $size_header.hide();
76         $size_inputs.each(function(){
77             $(this)
78                 .attr('disabled', true)
79                 .parent('td').hide();
80         });
82         // Disable and hide the columns of the index other than the first one
83         var initial = true;
84         $column_inputs.each(function() {
85             $column_input = $(this);
86             if (! initial) {
87                 $column_input
88                     .attr('disabled', true)
89                     .parent('td').hide();
90             } else {
91                 initial = false;
92             }
93         });
95         // Hide controllers to add more columns
96         $add_more.hide();
97     } else {
98         // Enable and show the size column
99         $size_header.show();
100         $size_inputs.each(function() {
101             $(this)
102                 .attr('disabled', false)
103                 .parent('td').show();
104         });
106         // Enable and show the columns of the index
107         $column_inputs.each(function() {
108             $(this)
109                 .attr('disabled', false)
110                 .parent('td').show();
111         });
113         // Show controllers to add more columns
114         $add_more.show();
115     }
118 /**#@+
119  * @namespace   jQuery
120  */
123  * @description <p>Ajax scripts for table index page</p>
125  * Actions ajaxified here:
126  * <ul>
127  * <li>Showing/hiding inputs depending on the index type chosen</li>
128  * </ul>
130  * @name        document.ready
131  * @memberOf    jQuery
132  */
133 $(document).ready(function() {
134     checkIndexType();
135     $('#select_index_type').bind('change', checkIndexType);
138 /**#@- */