1 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 * @fileoverview functions used on the table structure page
4 * @name Table Structure
8 * @required js/functions.js
12 * AJAX scripts for tbl_structure.php
14 * Actions ajaxified here:
17 * Drop Primary Key/Index
20 $(document).ready(function() {
23 * Attach Event Handler for 'Drop Column'
25 * @uses $.PMA_confirm()
26 * @uses PMA_ajaxShowMessage()
27 * (see $GLOBALS['cfg']['AjaxEnable'])
29 $(".drop_column_anchor").live('click', function(event) {
30 event.preventDefault();
33 * @var curr_table_name String containing the name of the current table
35 var curr_table_name = window.parent.table;
37 * @var curr_row Object reference to the currently selected row (i.e. field in the table)
39 var curr_row = $(this).parents('tr');
41 * @var curr_column_name String containing name of the field referred to by {@link curr_row}
43 var curr_column_name = $(curr_row).children('th').children('label').text();
45 * @var question String containing the question to be asked for confirmation
47 var question = PMA_messages['strDoYouReally'] + ' :\n ALTER TABLE `' + curr_table_name + '` DROP `' + curr_column_name + '`';
49 $(this).PMA_confirm(question, $(this).attr('href'), function(url) {
51 PMA_ajaxShowMessage(PMA_messages['strDroppingColumn']);
53 $.get(url, {'is_js_confirmed' : 1, 'ajax_request' : true}, function(data) {
54 if(data.success == true) {
55 PMA_ajaxShowMessage(data.message);
56 $(curr_row).hide("medium").remove();
59 PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error);
62 }); // end $.PMA_confirm()
63 }) ; //end of Drop Column Anchor action
66 * Ajax Event handler for 'Add Primary Key'
68 * @uses $.PMA_confirm()
69 * @uses PMA_ajaxShowMessage()
70 * (see $GLOBALS['cfg']['AjaxEnable'])
72 $(".action_primary a").live('click', function(event) {
73 event.preventDefault();
76 * @var curr_table_name String containing the name of the current table
78 var curr_table_name = window.parent.table;
80 * @var curr_column_name String containing name of the field referred to by {@link curr_row}
82 var curr_column_name = $(this).parents('tr').children('th').children('label').text();
84 * @var question String containing the question to be asked for confirmation
86 var question = PMA_messages['strDoYouReally'] + ' :\n ALTER TABLE `' + curr_table_name + '` ADD PRIMARY KEY(`' + curr_column_name + '`)';
88 $(this).PMA_confirm(question, $(this).attr('href'), function(url) {
90 PMA_ajaxShowMessage(PMA_messages['strAddingPrimaryKey']);
92 $.get(url, {'is_js_confirmed' : 1, 'ajax_request' : true}, function(data) {
93 if(data.success == true) {
94 PMA_ajaxShowMessage(data.message);
96 if (typeof data.reload != 'undefined') {
97 window.parent.frame_content.location.reload();
101 PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error);
104 }) // end $.PMA_confirm()
105 })//end Add Primary Key
108 * Ajax Event handler for 'Drop Primary Key/Index'
110 * @uses $.PMA_confirm()
111 * @uses PMA_ajaxShowMessage()
112 * (see $GLOBALS['cfg']['AjaxEnable'])
114 $('.drop_primary_key_index_anchor').live('click', function(event) {
115 event.preventDefault();
120 * @var $curr_row Object containing reference to the current field's row
122 var $curr_row = $anchor.parents('tr');
123 /** @var Number of columns in the key */
124 var rows = $anchor.parents('td').attr('rowspan') || 1;
125 /** @var Rows that should be hidden */
126 var $rows_to_hide = $curr_row;
127 for (var i = 1, $last_row = $curr_row.next(); i < rows; i++, $last_row = $last_row.next()) {
128 $rows_to_hide = $rows_to_hide.add($last_row);
131 var question = $curr_row.children('td').children('.drop_primary_key_index_msg').val();
133 $anchor.PMA_confirm(question, $anchor.attr('href'), function(url) {
135 PMA_ajaxShowMessage(PMA_messages['strDroppingPrimaryKeyIndex']);
137 $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) {
138 if(data.success == true) {
139 PMA_ajaxShowMessage(data.message);
140 $rows_to_hide.hide("medium").remove();
143 PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error);
146 }) // end $.PMA_confirm()
147 }) //end Drop Primary Key/Index
150 *Ajax event handler for muti column change
152 $("#fieldsForm.ajax .mult_submit[value=change]").live('click', function(event){
153 event.preventDefault();
155 /*Check whether atleast one row is selected for change*/
156 if ($("#tablestructure tbody tr").hasClass("marked")) {
157 /*Define the action and $url variabls for the post method*/
158 var $form = $("#fieldsForm");
159 var action = $form.attr('action');
160 var url = $form.serialize()+"&ajax_request=true&submit_mult=change";
161 /*Calling for the changeColumns fucntion*/
162 changeColumns(action,url);
164 PMA_ajaxShowMessage(PMA_messages['strNoRowSelected']);
169 *Ajax event handler for single column change
171 $("#fieldsForm.ajax #tablestructure tbody tr td.edit a").live('click', function(event){
172 event.preventDefault();
173 /*Define the action and $url variabls for the post method*/
174 var action = "tbl_alter.php";
175 var url = $(this).attr('href');
176 if (url.substring(0, 13) == "tbl_alter.php") {
177 url = url.substring(14, url.length);
179 url = url + "&ajax_request=true";
180 /*Calling for the changeColumns fucntion*/
181 changeColumns(action,url);
185 *Ajax event handler for index edit
187 $("#table_index tbody tr td.edit_index.ajax").live('click', function(event){
188 event.preventDefault();
189 var url = $(this).find("a").attr("href");
190 if (url.substring(0, 16) == "tbl_indexes.php?") {
191 url = url.substring(16, url.length );
193 url = url + "&ajax_request=true";
195 /*Remove the hidden dialogs if there are*/
196 if ($('#edit_index_dialog').length != 0) {
197 $('#edit_index_dialog').remove();
199 var $div = $('<div id="edit_index_dialog"></div>');
202 * @var button_options Object that stores the options passed to jQueryUI
205 var button_options = {};
206 // in the following function we need to use $(this)
207 button_options[PMA_messages['strCancel']] = function() {$(this).dialog('close').remove();}
209 var button_options_error = {};
210 button_options_error[PMA_messages['strOK']] = function() {$(this).dialog('close').remove();}
211 var $msgbox = PMA_ajaxShowMessage();
213 $.get( "tbl_indexes.php" , url , function(data) {
214 //in the case of an error, show the error message returned.
215 if (data.success != undefined && data.success == false) {
219 title: PMA_messages['strEdit'],
222 open: PMA_verifyTypeOfAllColumns,
224 buttons : button_options_error
225 })// end dialog options
230 title: PMA_messages['strEdit'],
233 open: PMA_verifyTypeOfAllColumns,
235 buttons : button_options
237 //Remove the top menu container from the dialog
238 .find("#topmenucontainer").hide()
239 ; // end dialog options
241 checkIndexName("index_frm");
243 PMA_ajaxRemoveMessage($msgbox);
248 *Ajax action for submiting the index form
250 $("#index_frm.ajax input[name=do_save_data]").live('click', function(event) {
251 event.preventDefault();
253 * @var the_form object referring to the export form
255 var $form = $("#index_frm");
257 PMA_prepareForAjaxRequest($form);
258 //User wants to submit the form
259 $.post($form.attr('action'), $form.serialize()+"&do_save_data=Save", function(data) {
260 if ($("#sqlqueryresults").length != 0) {
261 $("#sqlqueryresults").remove();
263 if (data.success == true) {
264 PMA_ajaxShowMessage(data.message);
265 $("<div id='sqlqueryresults'></div>").insertAfter("#topmenucontainer");
266 $("#sqlqueryresults").html(data.sql_query);
267 $("#result_query .notice").remove();
268 $("#result_query").prepend((data.message));
270 /*Reload the field form*/
271 $("#table_index").remove();
272 var $temp_div = $("<div id='temp_div'><div>").append(data.index_table);
273 $temp_div.find("#table_index").insertAfter("#index_header");
274 if ($("#edit_index_dialog").length > 0) {
275 $("#edit_index_dialog").dialog("close").remove();
279 if(data.error != undefined) {
280 var $temp_div = $("<div id='temp_div'><div>").append(data.error);
281 if ($temp_div.find(".error code").length != 0) {
282 var $error = $temp_div.find(".error code").addClass("error");
284 var $error = $temp_div;
287 PMA_ajaxShowMessage($error);
291 }) // end insert table button "do_save_data"
294 *Ajax action for submiting the index form for add more columns
296 $("#index_frm.ajax input[name=add_fields]").live('click', function(event) {
297 event.preventDefault();
299 * @var the_form object referring to the export form
301 var $form = $("#index_frm");
303 PMA_prepareForAjaxRequest($form);
304 //User wants to submit the form
305 $.post($form.attr('action'), $form.serialize()+"&add_fields=Go", function(data) {
306 $("#index_columns").remove();
307 var $temp_div = $("<div id='temp_div'><div>").append(data);
308 $temp_div.find("#index_columns").appendTo("#index_edit_fields");
310 }) // end insert table button "Go"
312 /**Add the show/hide index table option if the index is available*/
313 if ($("#index_div.ajax").find("#table_index").length != 0) {
315 *Prepare a div containing a link for toggle the index table
317 $('<div id="toggletableindexdiv"><a id="toggletableindexlink"></a></div>')
318 .insertAfter('#index_div')
319 /** don't show it until we have index table on-screen */
322 /** Changing the displayed text according to the hide/show criteria in table index*/
324 $('#toggletableindexlink')
325 .html(PMA_messages['strHideIndexes'])
326 .bind('click', function() {
328 $('#index_div').slideToggle();
329 if ($link.text() == PMA_messages['strHideIndexes']) {
330 $link.text(PMA_messages['strShowIndexes']);
332 $link.text(PMA_messages['strHideIndexes']);
334 /** avoid default click action */
337 } //end show/hide table index
340 *Ajax event handler for Add column(s)
342 $("#addColumns.ajax input[value=Go]").live('click', function(event){
343 event.preventDefault();
345 /*Remove the hidden dialogs if there are*/
346 if ($('#add_columns').length != 0) {
347 $('#add_columns').remove();
349 var $div = $('<div id="add_columns"></div>');
351 var $form = $("#addColumns");
354 * @var button_options Object that stores the options passed to jQueryUI
357 var button_options = {};
358 // in the following function we need to use $(this)
359 button_options[PMA_messages['strCancel']] = function() {$(this).dialog('close').remove();}
361 var button_options_error = {};
362 button_options_error[PMA_messages['strOK']] = function() {$(this).dialog('close').remove();}
363 var $msgbox = PMA_ajaxShowMessage();
365 $.get( $form.attr('action') , $form.serialize()+"&ajax_request=true" , function(data) {
366 //in the case of an error, show the error message returned.
367 if (data.success != undefined && data.success == false) {
371 title: PMA_messages['strAddColumns'],
374 open: PMA_verifyTypeOfAllColumns,
376 buttons : button_options_error
377 })// end dialog options
382 title: PMA_messages['strAddColumns'],
385 open: PMA_verifyTypeOfAllColumns,
387 buttons : button_options
389 //Remove the top menu container from the dialog
390 .find("#topmenucontainer").hide()
391 ; // end dialog options
393 $div = $("#add_columns");
394 /*changed the z-index of the enum editor to allow the edit*/
395 $("#enum_editor").css("z-index", "1100");
396 PMA_convertFootnotesToTooltips($div);
398 PMA_ajaxRemoveMessage($msgbox);
404 }) // end $(document).ready()
407 * Loads the append_fields_form to the Change dialog allowing users
408 * to change the columns
409 * @param string action Variable which parses the name of the
411 * @param string $url Variable which parses the data for the
414 function changeColumns(action,url) {
415 /*Remove the hidden dialogs if there are*/
416 if ($('#change_column_dialog').length != 0) {
417 $('#change_column_dialog').remove();
419 var $div = $('<div id="change_column_dialog"></div>');
422 * @var button_options Object that stores the options passed to jQueryUI
425 var button_options = {};
426 // in the following function we need to use $(this)
427 button_options[PMA_messages['strCancel']] = function() {$(this).dialog('close').remove();}
429 var button_options_error = {};
430 button_options_error[PMA_messages['strOK']] = function() {$(this).dialog('close').remove();}
431 var $msgbox = PMA_ajaxShowMessage();
433 $.get( action , url , function(data) {
434 //in the case of an error, show the error message returned.
435 if (data.success != undefined && data.success == false) {
439 title: PMA_messages['strChangeTbl'],
443 open: PMA_verifyTypeOfAllColumns,
444 buttons : button_options_error
445 })// end dialog options
450 title: PMA_messages['strChangeTbl'],
454 open: PMA_verifyTypeOfAllColumns,
455 buttons : button_options
457 //Remove the top menu container from the dialog
458 .find("#topmenucontainer").hide()
459 ; // end dialog options
460 $("#append_fields_form input[name=do_save_data]").addClass("ajax");
461 /*changed the z-index of the enum editor to allow the edit*/
462 $("#enum_editor").css("z-index", "1100");
463 $div = $("#change_column_dialog");
464 PMA_convertFootnotesToTooltips($div);
466 PMA_ajaxRemoveMessage($msgbox);