diff --git a/db_central_columns.php b/db_central_columns.php index 84c71e3d54..8a0845ac6d 100644 --- a/db_central_columns.php +++ b/db_central_columns.php @@ -93,9 +93,7 @@ if (isset($_POST['add_column'])) { $response = Response::getInstance(); $header = $response->getHeader(); $scripts = $header->getScripts(); -$scripts->addFile('vendor/jquery/jquery.uitablefilter.js'); -$scripts->addFile('vendor/jquery/jquery.tablesorter.js'); -$scripts->addFile('db_central_columns.js'); +$scripts->addFile('db_central_columns'); $cfgCentralColumns = $centralColumns->getParams(); $pmadb = $cfgCentralColumns['db']; $pmatable = $cfgCentralColumns['table']; diff --git a/js/src/consts/files.js b/js/src/consts/files.js index df2e719af0..0ea3c6c690 100644 --- a/js/src/consts/files.js +++ b/js/src/consts/files.js @@ -29,7 +29,8 @@ const PhpToJsFileMapping = { sql: ['sql', 'multi_column_sort'], db_structure: ['db_structure'], db_operations: ['db_operations'], - db_tracking: ['db_tracking'] + db_tracking: ['db_tracking'], + db_central_columns: ['db_central_columns'] }; const JsFileList = [ @@ -58,7 +59,8 @@ const JsFileList = [ 'multi_column_sort', 'db_structure', 'db_operations', - 'db_tracking' + 'db_tracking', + 'db_central_columns' ]; export { diff --git a/js/src/db_central_columns.js b/js/src/db_central_columns.js new file mode 100644 index 0000000000..5b36c34407 --- /dev/null +++ b/js/src/db_central_columns.js @@ -0,0 +1,247 @@ +/* vim: set expandtab sw=4 ts=4 sts=4: */ +import { $ } from './utils/extend_jquery'; +import './plugins/jquery/jquery.tablesorter'; +import { PMA_Messages as PMA_messages } from './variables/export_variables'; +import { PMA_ajaxShowMessage } from './utils/show_ajax_messages'; +import PMA_commonParams from './variables/common_params'; +import { AJAX } from './ajax'; +/** + * @fileoverview events handling from central columns page + * @name Central columns + * + * @requires jQuery + */ + +/** + * AJAX scripts for db_central_columns.php + * + * Actions ajaxified here: + * Inline Edit and save of a result row + * Delete a row + * Multiple edit and delete option + * + */ + +export function teardownDbCentralColumns () { + $('.edit').off('click'); + $('.edit_save_form').off('click'); + $('.edit_cancel_form').off('click'); + $('.del_row').off('click'); + $(document).off('keyup', '.filter_rows'); + $('.edit_cancel_form').off('click'); + $('#table-select').off('change'); + $('#column-select').off('change'); + $('#add_col_div').find('>a').off('click'); + $('#add_new').off('submit'); + $('#multi_edit_central_columns').off('submit'); + $('select.default_type').off('change'); + $('button[name=\'delete_central_columns\']').off('click'); + $('button[name=\'edit_central_columns\']').off('click'); +} + +export function onloadDbCentralColumns () { + $('#tableslistcontainer input,#tableslistcontainer select,#tableslistcontainer .default_value,#tableslistcontainer .open_enum_editor').hide(); + $('#tableslistcontainer').find('.checkall').show(); + $('#tableslistcontainer').find('.checkall_box').show(); + if ($('#table_columns').find('tbody tr').length > 0) { + $('#table_columns').tablesorter({ + headers: { + 0: { sorter: false }, + 1: { sorter: false }, // hidden column + 4: { sorter: 'integer' } + } + }); + } + $('#tableslistcontainer').find('button[name="delete_central_columns"]').on('click', function (event) { + event.preventDefault(); + var multi_delete_columns = $('.checkall:checkbox:checked').serialize(); + if (multi_delete_columns === '') { + PMA_ajaxShowMessage(PMA_messages.strRadioUnchecked); + return false; + } + PMA_ajaxShowMessage(); + $('#del_col_name').val(multi_delete_columns); + $('#del_form').submit(); + }); + $('#tableslistcontainer').find('button[name="edit_central_columns"]').on('click', function (event) { + event.preventDefault(); + var editColumnList = $('.checkall:checkbox:checked').serialize(); + if (editColumnList === '') { + PMA_ajaxShowMessage(PMA_messages.strRadioUnchecked); + return false; + } + var argsep = PMA_commonParams.get('arg_separator'); + var editColumnData = editColumnList + '' + argsep + 'edit_central_columns_page=true' + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'db=' + PMA_commonParams.get('db'); + PMA_ajaxShowMessage(); + AJAX.source = $(this); + $.get('db_central_columns.php', editColumnData, AJAX.responseHandler); + }); + $('#multi_edit_central_columns').submit(function (event) { + event.preventDefault(); + event.stopPropagation(); + var argsep = PMA_commonParams.get('arg_separator'); + var multi_column_edit_data = $('#multi_edit_central_columns').serialize() + argsep + 'multi_edit_central_column_save=true' + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'db=' + encodeURIComponent(PMA_commonParams.get('db')); + PMA_ajaxShowMessage(); + AJAX.source = $(this); + $.post('db_central_columns.php', multi_column_edit_data, AJAX.responseHandler); + }); + $('#add_new').find('td').each(function () { + if ($(this).attr('name') !== 'undefined') { + $(this).find('input,select:first').attr('name', $(this).attr('name')); + } + }); + $('#field_0_0').attr('required','required'); + $('#add_new input[type="text"], #add_new input[type="number"], #add_new select') + .css({ + 'width' : '10em', + '-moz-box-sizing' : 'border-box' + }); + window.scrollTo(0, 0); + $(document).on('keyup', '.filter_rows', function () { + // get the column names + var cols = $('th.column_heading').map(function () { + return $.trim($(this).text()); + }).get(); + $.uiTableFilter($('#table_columns'), $(this).val(), cols, null, 'td span'); + }); + $('.edit').on('click', function () { + var rownum = $(this).parent().data('rownum'); + $('#save_' + rownum).show(); + $(this).hide(); + $('#f_' + rownum + ' td span').hide(); + $('#f_' + rownum + ' input, #f_' + rownum + ' select, #f_' + rownum + ' .open_enum_editor').show(); + var attribute_val = $('#f_' + rownum + ' td[name=col_attribute] span').html(); + $('#f_' + rownum + ' select[name=field_attribute\\[' + rownum + '\\] ] option[value="' + attribute_val + '"]').attr('selected','selected'); + if ($('#f_' + rownum + ' .default_type').val() === 'USER_DEFINED') { + $('#f_' + rownum + ' .default_type').siblings('.default_value').show(); + } else { + $('#f_' + rownum + ' .default_type').siblings('.default_value').hide(); + } + }); + $('.del_row').on('click', function (event) { + event.preventDefault(); + event.stopPropagation(); + var $td = $(this); + var question = PMA_messages.strDeleteCentralColumnWarning; + $td.PMA_confirm(question, null, function (url) { + var rownum = $td.data('rownum'); + $('#del_col_name').val('selected_fld%5B%5D=' + $('#checkbox_row_' + rownum).val()); + $('#del_form').submit(); + }); + }); + $('.edit_cancel_form').on('click', function (event) { + event.preventDefault(); + event.stopPropagation(); + var rownum = $(this).data('rownum'); + $('#save_' + rownum).hide(); + $('#edit_' + rownum).show(); + $('#f_' + rownum + ' td span').show(); + $('#f_' + rownum + ' input, #f_' + rownum + ' select,#f_' + rownum + ' .default_value, #f_' + rownum + ' .open_enum_editor').hide(); + $('#tableslistcontainer').find('.checkall').show(); + }); + $('.edit_save_form').on('click', function (event) { + event.preventDefault(); + event.stopPropagation(); + var rownum = $(this).data('rownum'); + $('#f_' + rownum + ' td').each(function () { + if ($(this).attr('name') !== 'undefined') { + $(this).find(':input[type!="hidden"],select:first') + .attr('name', $(this).attr('name')); + } + }); + + if ($('#f_' + rownum + ' .default_type').val() === 'USER_DEFINED') { + $('#f_' + rownum + ' .default_type').attr('name','col_default_sel'); + } else { + $('#f_' + rownum + ' .default_value').attr('name','col_default_val'); + } + + var datastring = $('#f_' + rownum + ' :input').serialize(); + $.ajax({ + type: 'POST', + url: 'db_central_columns.php', + data: datastring + PMA_commonParams.get('arg_separator') + 'ajax_request=true', + dataType: 'json', + success: function (data) { + if (data.message !== '1') { + PMA_ajaxShowMessage( + '