diff options
Diffstat (limited to 'hugo/js/indexes.js')
| -rw-r--r-- | hugo/js/indexes.js | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/hugo/js/indexes.js b/hugo/js/indexes.js new file mode 100644 index 0000000..de94076 --- /dev/null +++ b/hugo/js/indexes.js @@ -0,0 +1,207 @@ +/* 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_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(); + }); + }); + }); +}); |
