/* vim: set expandtab sw=4 ts=4 sts=4: */ /** * @fileoverview function used for index manipulation pages * @name Table Structure * * @requires jQuery * @requires jQueryUI * @required js/functions.js */ /** * Hides/shows the inputs and submits appropriately depending * on whether the index type chosen is 'SPATIAL' or not. */ function checkIndexType() { /** * @var Object Dropdown to select the index type. */ $select_index_type = $('#select_index_type'); /** * @var Object Table header for the size column. */ $size_header = $('#index_columns thead tr th:nth-child(2)'); /** * @var Object Inputs to specify the columns for the index. */ $column_inputs = $('select[name="index[columns][names][]"]'); /** * @var Object Inputs to specify sizes for columns of the index. */ $size_inputs = $('input[name="index[columns][sub_parts][]"]'); /** * @var Object Footer containg the controllers to add more columns */ $add_more = $('#index_frm .tblFooters'); if ($select_index_type.val() == 'SPATIAL') { // Disable and hide the size column $size_header.hide(); $size_inputs.each(function(){ $(this) .prop('disabled', true) .parent('td').hide(); }); // Disable and hide the columns of the index other than the first one var initial = true; $column_inputs.each(function() { $column_input = $(this); if (! initial) { $column_input .prop('disabled', true) .parent('td').hide(); } else { initial = false; } }); // Hide controllers to add more columns $add_more.hide(); } else { // Enable and show the size column $size_header.show(); $size_inputs.each(function() { $(this) .prop('disabled', false) .parent('td').show(); }); // Enable and show the columns of the index $column_inputs.each(function() { $(this) .prop('disabled', false) .parent('td').show(); }); // Show controllers to add more columns $add_more.show(); } } /** * Unbind all event handlers before tearing down a page */ AJAX.registerTeardown('indexes.js', function() { $('#select_index_type').die('change'); $('a.drop_primary_key_index_anchor.ajax').die('click'); $("#table_index tbody tr td.edit_index.ajax, #indexes .add_index.ajax").die('click'); $('#index_frm input[type=submit]').die('click'); }); /** * @description

Ajax scripts for table index page

* * Actions ajaxified here: * */ AJAX.registerOnload('indexes.js', function() { checkIndexType(); checkIndexName("index_frm"); $('#select_index_type').live('change', function(event){ event.preventDefault(); checkIndexType(); checkIndexName("index_frm"); }); /** * Ajax Event handler for 'Drop Index' */ $('a.drop_primary_key_index_anchor.ajax').live('click', function(event) { event.preventDefault(); var $anchor = $(this); /** * @var $curr_row Object containing reference to the current field's row */ var $curr_row = $anchor.parents('tr'); /** @var Number of columns in the key */ var rows = $anchor.parents('td').attr('rowspan') || 1; /** @var Rows that should be hidden */ var $rows_to_hide = $curr_row; for (var i = 1, $last_row = $curr_row.next(); i < rows; i++, $last_row = $last_row.next()) { $rows_to_hide = $rows_to_hide.add($last_row); } var question = escapeHtml( $curr_row.children('td') .children('.drop_primary_key_index_msg') .val() ); $anchor.PMA_confirm(question, $anchor.attr('href'), function(url) { var $msg = PMA_ajaxShowMessage(PMA_messages['strDroppingPrimaryKeyIndex'], false); $.get(url, {'is_js_confirmed': 1, 'ajax_request': true}, function(data) { if (data.success == true) { PMA_ajaxRemoveMessage($msg); var $table_ref = $rows_to_hide.closest('table'); if ($rows_to_hide.length == $table_ref.find('tbody > tr').length) { // We are about to remove all rows from the table $table_ref.hide('medium', function() { $('div.no_indexes_defined').show('medium'); $rows_to_hide.remove(); }); $table_ref.siblings('div.notice').hide('medium'); } else { // We are removing some of the rows only toggleRowColors($rows_to_hide.last().next()); $rows_to_hide.hide("medium", function () { $(this).remove(); }); } if ($('#result_query').length) { $('#result_query').remove(); } if (data.sql_query) { $('
') .html(data.sql_query) .prependTo('#page_content'); } PMA_commonActions.refreshMain(false, function() { $("a.ajax[href^=#indexes]").click(); }); PMA_reloadNavigation(); } else { PMA_ajaxShowMessage(PMA_messages['strErrorProcessingRequest'] + " : " + data.error, false); } }); // end $.get() }); // end $.PMA_confirm() }); //end Drop Primary Key/Index /** *Ajax event handler for index edit **/ $("#table_index tbody tr td.edit_index.ajax, #indexes .add_index.ajax").live('click', function(event) { event.preventDefault(); if ($(this).find("a").length == 0) { // Add index var valid = checkFormElementInRange( $(this).closest('form')[0], 'added_fields', 'Column count has to be larger than zero.' ); if (! valid) { return; } var url = $(this).closest('form').serialize(); var title = PMA_messages['strAddIndex']; } else { // Edit index var url = $(this).find("a").attr("href"); if (url.substring(0, 16) == "tbl_indexes.php?") { url = url.substring(16, url.length); } var title = PMA_messages['strEditIndex']; } url += "&ajax_request=true"; indexEditorDialog(url, title, function() { // refresh the page using ajax PMA_commonActions.refreshMain(false, function() { $("a.ajax[href^=#indexes]").click(); }); }); }); });