mirror of
https://github.com/YunoHost-Apps/phpmyadmin_ynh.git
synced 2024-09-03 19:56:46 +02:00
210 lines
7.2 KiB
JavaScript
210 lines
7.2 KiB
JavaScript
|
/* 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();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|