/* vim: set expandtab sw=4 ts=4 sts=4: */ /** * for tbl_relation.php * */ function show_hide_clauses($thisDropdown) { if ($thisDropdown.val() === '') { $thisDropdown.parent().nextAll('span').hide(); } else { if ($thisDropdown.is('select[name^="destination_foreign_column"]')) { $thisDropdown.parent().nextAll('span').show(); } } } /** * Sets dropdown options to values */ function setDropdownValues($dropdown, values, selectedValue) { $dropdown.empty(); var optionsAsString = ''; // add an empty string to the beginning for empty selection values.unshift(''); $.each(values, function () { optionsAsString += "<option value='" + escapeHtml(this) + "'" + (selectedValue == this ? " selected='selected'" : "") + ">" + escapeHtml(this) + "</option>"; }); $dropdown.append($(optionsAsString)); } /** * Retrieves and populates dropdowns to the left based on the selected value * * @param $dropdown the dropdown whose value got changed */ function getDropdownValues($dropdown) { var foreignDb = null, foreignTable = null; var $databaseDd, $tableDd, $columnDd; var foreign = ''; // if the changed dropdown is for foreign key constraints if ($dropdown.is('select[name^="destination_foreign"]')) { $databaseDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_db"]'); $tableDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_table"]'); $columnDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_column"]'); foreign = '_foreign'; } else { // internal relations $databaseDd = $dropdown.parent().find('select[name^="destination_db"]'); $tableDd = $dropdown.parent().find('select[name^="destination_table"]'); $columnDd = $dropdown.parent().find('select[name^="destination_column"]'); } // if the changed dropdown is a database selector if ($dropdown.is('select[name^="destination' + foreign + '_db"]')) { foreignDb = $dropdown.val(); // if no database is selected empty table and column dropdowns if (foreignDb === '') { setDropdownValues($tableDd, []); setDropdownValues($columnDd, []); return; } } else { // if a table selector foreignDb = $databaseDd.val(); foreignTable = $dropdown.val(); // if no table is selected empty the column dropdown if (foreignTable === '') { setDropdownValues($columnDd, []); return; } } var $msgbox = PMA_ajaxShowMessage(); var $form = $dropdown.parents('form'); var url = 'tbl_relation.php?getDropdownValues=true&ajax_request=true' + '&token=' + $form.find('input[name="token"]').val() + '&db=' + $form.find('input[name="db"]').val() + '&table=' + $form.find('input[name="table"]').val() + '&foreign=' + (foreign !== '') + '&foreignDb=' + encodeURIComponent(foreignDb) + (foreignTable !== null ? '&foreignTable=' + encodeURIComponent(foreignTable) : '' ); var $server = $form.find('input[name="server"]'); if ($server.length > 0) { url += '&server=' + $form.find('input[name="server"]').val(); } $.ajax({ url: url, datatype: 'json', success: function (data) { PMA_ajaxRemoveMessage($msgbox); if (typeof data !== 'undefined' && data.success) { // if the changed dropdown is a database selector if (foreignTable === null) { // set values for table and column dropdowns setDropdownValues($tableDd, data.tables); setDropdownValues($columnDd, []); } else { // if a table selector // set values for the column dropdown var primary = null; if (typeof data.primary !== 'undefined' && 1 === data.primary.length ) { primary = data.primary[0]; } setDropdownValues($columnDd, data.columns, primary); } } else { PMA_ajaxShowMessage(data.error, false); } } }); } /** * Unbind all event handlers before tearing down a page */ AJAX.registerTeardown('tbl_relation.js', function () { $('body').off('change', 'select[name^="destination_db"], ' + 'select[name^="destination_table"], ' + 'select[name^="destination_foreign_db"], ' + 'select[name^="destination_foreign_table"]' ); $('body').off('click', 'a.add_foreign_key_field'); $('body').off('click', 'a.add_foreign_key'); $('a.drop_foreign_key_anchor.ajax').off('click'); }); AJAX.registerOnload('tbl_relation.js', function () { /** * Ajax event handler to fetch table/column dropdown values. */ $('body').on('change', 'select[name^="destination_db"], ' + 'select[name^="destination_table"], ' + 'select[name^="destination_foreign_db"], ' + 'select[name^="destination_foreign_table"]', function () { getDropdownValues($(this)); } ); /** * Ajax event handler to add a column to a foreign key constraint. */ $('body').on('click', 'a.add_foreign_key_field', function (event) { event.preventDefault(); event.stopPropagation(); // Add field. $(this) .prev('span') .clone(true, true) .insertBefore($(this)) .find('select') .val(''); // Add foreign field. var $source_elem = $('select[name^="destination_foreign_column[' + $(this).attr('data-index') + ']"]:last').parent(); $source_elem .clone(true, true) .insertAfter($source_elem) .find('select') .val(''); }); /** * Ajax event handler to add a foreign key constraint. */ $('body').on('click', 'a.add_foreign_key', function (event) { event.preventDefault(); event.stopPropagation(); var $prev_row = $(this).closest('tr').prev('tr'); var odd_even = ($prev_row.attr('class') == 'odd') ? 'even' : 'odd'; var $new_row = $prev_row.clone(true, true).attr('class', odd_even); // Update serial number. var curr_index = $new_row .find('a.add_foreign_key_field') .attr('data-index'); var new_index = parseInt(curr_index) + 1; $new_row.find('a.add_foreign_key_field').attr('data-index', new_index); // Update form parameter names. $new_row.find('select[name^="foreign_key_fields_name"]:not(:first), ' + 'select[name^="destination_foreign_column"]:not(:first)' ).each(function () { $(this).parent().remove(); }); $new_row.find('input, select').each(function () { $(this).attr('name', $(this).attr('name').replace(/\d/, new_index) ); }); // Finally add the row. $new_row.insertAfter($prev_row); }); /** * Ajax Event handler for 'Drop Foreign key' */ $('a.drop_foreign_key_anchor.ajax').on('click', function (event) { event.preventDefault(); var $anchor = $(this); // Object containing reference to the current field's row var $curr_row = $anchor.parents('tr'); var drop_query = escapeHtml( $curr_row.children('td') .children('.drop_foreign_key_msg') .val() ); var question = PMA_sprintf(PMA_messages.strDoYouReally, drop_query); $anchor.PMA_confirm(question, $anchor.attr('href'), function (url) { var $msg = PMA_ajaxShowMessage(PMA_messages.strDroppingForeignKey, false); $.post(url, {'is_js_confirmed': 1, 'ajax_request': true}, function (data) { if (data.success === true) { PMA_ajaxRemoveMessage($msg); PMA_commonActions.refreshMain(false, function () { // Do nothing }); } else { PMA_ajaxShowMessage(PMA_messages.strErrorProcessingRequest + " : " + data.error, false); } }); // end $.post() }); // end $.PMA_confirm() }); //end Drop Foreign key });
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
codemirror | Folder | 0755 |
|
|
jqplot | Folder | 0755 |
|
|
jquery | Folder | 0755 |
|
|
openlayers | Folder | 0755 |
|
|
pmd | Folder | 0755 |
|
|
tracekit | Folder | 0755 |
|
|
transformations | Folder | 0755 |
|
|
ajax.js | File | 28.9 KB | 0644 |
|
big_ints.js | File | 1.88 KB | 0644 |
|
chart.js | File | 17.84 KB | 0644 |
|
common.js | File | 18.36 KB | 0644 |
|
config.js | File | 25.86 KB | 0644 |
|
console.js | File | 57.53 KB | 0644 |
|
cross_framing_protection.js | File | 468 B | 0644 |
|
db_central_columns.js | File | 10.63 KB | 0644 |
|
db_operations.js | File | 5.76 KB | 0644 |
|
db_qbe.js | File | 2.04 KB | 0644 |
|
db_search.js | File | 8.42 KB | 0644 |
|
db_structure.js | File | 15.42 KB | 0644 |
|
db_tracking.js | File | 3.22 KB | 0644 |
|
doclinks.js | File | 20.16 KB | 0644 |
|
error_report.js | File | 9.87 KB | 0644 |
|
export.js | File | 28.66 KB | 0644 |
|
functions.js | File | 162.06 KB | 0644 |
|
get_image.js.php | File | 4.65 KB | 0644 |
|
get_scripts.js.php | File | 1.93 KB | 0644 |
|
gis_data_editor.js | File | 14.33 KB | 0644 |
|
import.js | File | 5.49 KB | 0644 |
|
indexes.js | File | 26.3 KB | 0644 |
|
keyhandler.js | File | 3.25 KB | 0644 |
|
line_counts.php | File | 36.92 KB | 0644 |
|
makegrid.js | File | 95.13 KB | 0644 |
|
menu-resizer.js | File | 6.48 KB | 0644 |
|
messages.php | File | 38.55 KB | 0644 |
|
microhistory.js | File | 11.22 KB | 0644 |
|
multi_column_sort.js | File | 2.83 KB | 0644 |
|
navigation.js | File | 53.8 KB | 0644 |
|
normalization.js | File | 26.39 KB | 0644 |
|
page_settings.js | File | 1.66 KB | 0644 |
|
replication.js | File | 3.03 KB | 0644 |
|
rte.js | File | 46.45 KB | 0644 |
|
server_databases.js | File | 4.96 KB | 0644 |
|
server_plugins.js | File | 525 B | 0644 |
|
server_privileges.js | File | 16.23 KB | 0644 |
|
server_status_advisor.js | File | 3.6 KB | 0644 |
|
server_status_monitor.js | File | 84.43 KB | 0644 |
|
server_status_processes.js | File | 5.97 KB | 0644 |
|
server_status_queries.js | File | 950 B | 0644 |
|
server_status_sorter.js | File | 2.51 KB | 0644 |
|
server_status_variables.js | File | 3.57 KB | 0644 |
|
server_user_groups.js | File | 1.34 KB | 0644 |
|
server_variables.js | File | 5.93 KB | 0644 |
|
sprintf.js | File | 7.21 KB | 0644 |
|
sql.js | File | 32.71 KB | 0644 |
|
tbl_change.js | File | 27.8 KB | 0644 |
|
tbl_chart.js | File | 13.61 KB | 0644 |
|
tbl_find_replace.js | File | 1.55 KB | 0644 |
|
tbl_gis_visualization.js | File | 10.64 KB | 0644 |
|
tbl_operations.js | File | 12.99 KB | 0644 |
|
tbl_relation.js | File | 8.35 KB | 0644 |
|
tbl_select.js | File | 15.07 KB | 0644 |
|
tbl_structure.js | File | 20.41 KB | 0644 |
|
tbl_tracking.js | File | 3.44 KB | 0644 |
|
tbl_zoom_plot_jqplot.js | File | 22.55 KB | 0644 |
|
whitelist.php | File | 1.1 KB | 0644 |
|