server_variables.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /* vim: set expandtab sw=4 ts=4 sts=4: */
  2. /**
  3. * Unbind all event handlers before tearing down a page
  4. */
  5. AJAX.registerTeardown('server_variables.js', function() {
  6. $('#serverVariables .var-row').unbind('hover');
  7. $('#filterText').unbind('keyup');
  8. $('a.editLink').die('click');
  9. $('#serverVariables').find('.var-name').find('a img').remove();
  10. });
  11. AJAX.registerOnload('server_variables.js', function() {
  12. var $editLink = $('a.editLink');
  13. var $saveLink = $('a.saveLink');
  14. var $cancelLink = $('a.cancelLink');
  15. var $filterField = $('#filterText');
  16. /* Show edit link on hover */
  17. $('#serverVariables').delegate('.var-row', 'hover', function(event) {
  18. if (event.type === 'mouseenter') {
  19. var $elm = $(this).find('.var-value');
  20. // Only add edit element if the element is not being edited
  21. if ($elm.hasClass('editable') && ! $elm.hasClass('edit')) {
  22. $elm.prepend($editLink.clone().show());
  23. }
  24. } else {
  25. $(this).find('a.editLink').remove();
  26. }
  27. }).find('.var-name').find('a').append(
  28. $('#docImage').clone().show()
  29. );
  30. /* Launches the variable editor */
  31. $editLink.live('click', function (event) {
  32. event.preventDefault();
  33. editVariable(this);
  34. });
  35. /* Event handler for variables filter */
  36. $filterField.keyup(function() {
  37. var textFilter = null, val = $(this).val();
  38. if (val.length !== 0) {
  39. textFilter = new RegExp("(^| )"+val.replace(/_/g,' '),'i');
  40. }
  41. filterVariables(textFilter);
  42. });
  43. /* Trigger filtering of the list based on incoming variable name */
  44. if ($filterField.val()) {
  45. $filterField.trigger('keyup').select();
  46. }
  47. /* Filters the rows by the user given regexp */
  48. function filterVariables(textFilter) {
  49. var mark_next = false, $row, odd_row = false;
  50. $('#serverVariables .var-row').not('.var-header').each(function() {
  51. $row = $(this);
  52. if ( mark_next
  53. || textFilter === null
  54. || textFilter.exec($row.find('.var-name').text())
  55. ) {
  56. // If current global value is different from session value
  57. // (has class diffSession), then display that one too
  58. mark_next = $row.hasClass('diffSession') && ! mark_next;
  59. odd_row = ! odd_row;
  60. $row.css('display', '');
  61. if (odd_row) {
  62. $row.addClass('odd').removeClass('even');
  63. } else {
  64. $row.addClass('even').removeClass('odd');
  65. }
  66. } else {
  67. $row.css('display', 'none');
  68. }
  69. });
  70. }
  71. /* Allows the user to edit a server variable */
  72. function editVariable(link) {
  73. var $cell = $(link).parent();
  74. var varName = $cell.parent().find('.var-name').text().replace(/ /g,'_');
  75. var $mySaveLink = $saveLink.clone().show();
  76. var $myCancelLink = $cancelLink.clone().show();
  77. var $msgbox = PMA_ajaxShowMessage();
  78. $cell
  79. .addClass('edit') // variable is being edited
  80. .find('a.editLink')
  81. .remove(); // remove edit link
  82. $mySaveLink.click(function() {
  83. var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
  84. $.get($(this).attr('href'), {
  85. ajax_request: true,
  86. type: 'setval',
  87. varName: varName,
  88. varValue: $cell.find('input').val()
  89. }, function(data) {
  90. if (data.success) {
  91. $cell
  92. .html(data.variable)
  93. .data('content', data.variable);
  94. PMA_ajaxRemoveMessage($msgbox);
  95. } else {
  96. PMA_ajaxShowMessage(data.error, false);
  97. $cell.html($cell.data('content'));
  98. }
  99. $cell.removeClass('edit');
  100. });
  101. return false;
  102. });
  103. $myCancelLink.click(function() {
  104. $cell
  105. .html($cell.data('content'))
  106. .removeClass('edit');
  107. return false;
  108. });
  109. $.get($mySaveLink.attr('href'), {
  110. ajax_request: true,
  111. type: 'getval',
  112. varName: varName
  113. }, function(data) {
  114. if (data.success === true) {
  115. var $editor = $('<div />', {'class':'serverVariableEditor'})
  116. .append($myCancelLink)
  117. .append(' ')
  118. .append($mySaveLink)
  119. .append(' ')
  120. .append(
  121. $('<div/>').append(
  122. $('<input />', {type: 'text'}).val(data.message)
  123. )
  124. );
  125. // Save and replace content
  126. $cell
  127. .data('content', $cell.html())
  128. .html($editor)
  129. .find('input')
  130. .focus()
  131. .keydown(function(event) { // Keyboard shortcuts
  132. if (event.keyCode === 13) { // Enter key
  133. $mySaveLink.trigger('click');
  134. } else if (event.keyCode === 27) { // Escape key
  135. $myCancelLink.trigger('click');
  136. }
  137. });
  138. PMA_ajaxRemoveMessage($msgbox);
  139. } else {
  140. $cell.removeClass('edit');
  141. PMA_ajaxShowMessage(data.error);
  142. }
  143. });
  144. }
  145. });