diff options
Diffstat (limited to 'hugo/js/server_variables.js')
| -rw-r--r-- | hugo/js/server_variables.js | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/hugo/js/server_variables.js b/hugo/js/server_variables.js new file mode 100644 index 0000000..12ae9d0 --- /dev/null +++ b/hugo/js/server_variables.js @@ -0,0 +1,158 @@ +/* vim: set expandtab sw=4 ts=4 sts=4: */ + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('server_variables.js', function() { + $('#serverVariables .var-row').unbind('hover'); + $('#filterText').unbind('keyup'); + $('a.editLink').die('click'); + $('#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'); + + /* Show edit link on hover */ + $('#serverVariables').delegate('.var-row', 'hover', function(event) { + if (event.type === 'mouseenter') { + var $elm = $(this).find('.var-value'); + // Only add edit element if the element is not being edited + if ($elm.hasClass('editable') && ! $elm.hasClass('edit')) { + $elm.prepend($editLink.clone().show()); + } + } else { + $(this).find('a.editLink').remove(); + } + }).find('.var-name').find('a').append( + $('#docImage').clone().show() + ); + + /* Launches the variable editor */ + $editLink.live('click', 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 varName = $cell.parent().find('.var-name').text().replace(/ /g,'_'); + var $mySaveLink = $saveLink.clone().show(); + var $myCancelLink = $cancelLink.clone().show(); + var $msgbox = PMA_ajaxShowMessage(); + + $cell + .addClass('edit') // variable is being edited + .find('a.editLink') + .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: $cell.find('input').val() + }, function(data) { + if (data.success) { + $cell + .html(data.variable) + .data('content', data.variable); + PMA_ajaxRemoveMessage($msgbox); + } else { + PMA_ajaxShowMessage(data.error, false); + $cell.html($cell.data('content')); + } + $cell.removeClass('edit'); + }); + return false; + }); + + $myCancelLink.click(function() { + $cell + .html($cell.data('content')) + .removeClass('edit'); + return false; + }); + + $.get($mySaveLink.attr('href'), { + ajax_request: true, + type: 'getval', + varName: varName + }, function(data) { + if (data.success === true) { + var $editor = $('<div />', {'class':'serverVariableEditor'}) + .append($myCancelLink) + .append(' ') + .append($mySaveLink) + .append(' ') + .append( + $('<div/>').append( + $('<input />', {type: 'text'}).val(data.message) + ) + ); + // Save and replace content + $cell + .data('content', $cell.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'); + PMA_ajaxShowMessage(data.error); + } + }); + } +}); |
