123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- /* 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 <p>Ajax scripts for table index page</p>
- *
- * Actions ajaxified here:
- * <ul>
- * <li>Showing/hiding inputs depending on the index type chosen</li>
- * <li>create/edit/drop indexes</li>
- * </ul>
- */
- 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) {
- $('<div id="result_query"></div>')
- .html(data.sql_query)
- .prependTo('#page_content');
- PMA_highlightSQL($('#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();
- var url, title;
- 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;
- }
- url = $(this).closest('form').serialize();
- title = PMA_messages.strAddIndex;
- } else {
- // Edit index
- url = $(this).find("a").attr("href");
- if (url.substring(0, 16) == "tbl_indexes.php?") {
- url = url.substring(16, url.length);
- }
- 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();
- });
- });
- });
- });
|