/* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Unbind all event handlers before tearing down a page */ AJAX.registerTeardown('server_variables.js', function () { $('#filterText').unbind('keyup'); $(document).off('click', 'a.editLink'); $('#serverVariables').find('.var-name').find('a img').remove(); }); AJAX.registerOnload('server_variables.js', function () { var $editLink = $('a.editLink'); var $saveLink = $('a.saveLink'); var $cancelLink = $('a.cancelLink'); var $filterField = $('#filterText'); $('#serverVariables').find('.var-name').find('a').append( $('#docImage').clone().show() ); /* Launches the variable editor */ $(document).on('click', 'a.editLink', function (event) { event.preventDefault(); editVariable(this); }); /* Event handler for variables filter */ $filterField.keyup(function () { var textFilter = null, val = $(this).val(); if (val.length !== 0) { textFilter = new RegExp("(^| )" + val.replace(/_/g, ' '), 'i'); } filterVariables(textFilter); }); /* Trigger filtering of the list based on incoming variable name */ if ($filterField.val()) { $filterField.trigger('keyup').select(); } /* Filters the rows by the user given regexp */ function filterVariables(textFilter) { var mark_next = false, $row, odd_row = false; $('#serverVariables .var-row').not('.var-header').each(function () { $row = $(this); if (mark_next || textFilter === null || textFilter.exec($row.find('.var-name').text()) ) { // If current global value is different from session value // (has class diffSession), then display that one too mark_next = $row.hasClass('diffSession') && ! mark_next; odd_row = ! odd_row; $row.css('display', ''); if (odd_row) { $row.addClass('odd').removeClass('even'); } else { $row.addClass('even').removeClass('odd'); } } else { $row.css('display', 'none'); } }); } /* Allows the user to edit a server variable */ function editVariable(link) { var $cell = $(link).parent(); var $valueCell = $(link).parents('.var-row').find('.var-value'); var varName = $cell.parent().find('.var-name').text().replace(/ /g, '_'); var $mySaveLink = $saveLink.clone().show(); var $myCancelLink = $cancelLink.clone().show(); var $msgbox = PMA_ajaxShowMessage(); var $myEditLink = $cell.find('a.editLink'); $cell.addClass('edit'); // variable is being edited $myEditLink.remove(); // remove edit link $mySaveLink.click(function () { var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest); $.get($(this).attr('href'), { ajax_request: true, type: 'setval', varName: varName, varValue: $valueCell.find('input').val() }, function (data) { if (data.success) { $valueCell .html(data.variable) .data('content', data.variable); PMA_ajaxRemoveMessage($msgbox); } else { PMA_ajaxShowMessage(data.error, false); $valueCell.html($valueCell.data('content')); } $cell.removeClass('edit').html($myEditLink); }); return false; }); $myCancelLink.click(function () { $valueCell.html($valueCell.data('content')); $cell.removeClass('edit').html($myEditLink); return false; }); $.get($mySaveLink.attr('href'), { ajax_request: true, type: 'getval', varName: varName }, function (data) { if (typeof data !== 'undefined' && data.success === true) { var $links = $('
') .append($myCancelLink) .append('   ') .append($mySaveLink); var $editor = $('
', {'class': 'serverVariableEditor'}) .append( $('
').append( $('', {type: 'text'}).val(data.message) ) ); // Save and replace content $cell .html($links); $valueCell .data('content', $valueCell.html()) .html($editor) .find('input') .focus() .keydown(function (event) { // Keyboard shortcuts if (event.keyCode === 13) { // Enter key $mySaveLink.trigger('click'); } else if (event.keyCode === 27) { // Escape key $myCancelLink.trigger('click'); } }); PMA_ajaxRemoveMessage($msgbox); } else { $cell.removeClass('edit').html($myEditLink); PMA_ajaxShowMessage(data.error); } }); } });