multi_column_sort.js 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* vim: set expandtab sw=4 ts=4 sts=4: */
  2. /**
  3. * @fileoverview Implements the shiftkey + click remove column
  4. * from order by clause funcationality
  5. * @name columndelete
  6. *
  7. * @requires jQuery
  8. */
  9. function captureURL (url) {
  10. var newUrl = '' + url;
  11. var URL = {};
  12. // Exclude the url part till HTTP
  13. newUrl = newUrl.substr(newUrl.search('sql.php'), newUrl.length);
  14. // The url part between ORDER BY and &session_max_rows needs to be replaced.
  15. URL.head = newUrl.substr(0, newUrl.indexOf('ORDER+BY') + 9);
  16. URL.tail = newUrl.substr(newUrl.indexOf('&session_max_rows'), newUrl.length);
  17. return URL;
  18. }
  19. /**
  20. * This function is for navigating to the generated URL
  21. *
  22. * @param object target HTMLAnchor element
  23. * @param object parent HTMLDom Object
  24. */
  25. function removeColumnFromMultiSort (target, parent) {
  26. var URL = captureURL(target);
  27. var begin = target.indexOf('ORDER+BY') + 8;
  28. var end = target.indexOf(CommonParams.get('arg_separator') + 'session_max_rows');
  29. // get the names of the columns involved
  30. var betweenPart = target.substr(begin, end - begin);
  31. var columns = betweenPart.split('%2C+');
  32. // If the given column is not part of the order clause exit from this function
  33. var index = parent.find('small').length ? parent.find('small').text() : '';
  34. if (index === '') {
  35. return '';
  36. }
  37. // Remove the current clicked column
  38. columns.splice(index - 1, 1);
  39. // If all the columns have been removed dont submit a query with nothing
  40. // After order by clause.
  41. if (columns.length === 0) {
  42. var head = URL.head;
  43. head = head.slice(0,head.indexOf('ORDER+BY'));
  44. URL.head = head;
  45. // removing the last sort order should have priority over what
  46. // is remembered via the RememberSorting directive
  47. URL.tail += CommonParams.get('arg_separator') + 'discard_remembered_sort=1';
  48. }
  49. URL.head = URL.head.substring(URL.head.indexOf('?') + 1);
  50. var middlePart = columns.join('%2C+');
  51. var params = URL.head + middlePart + URL.tail;
  52. return params;
  53. }
  54. AJAX.registerOnload('keyhandler.js', function () {
  55. $('th.draggable.column_heading.pointer.marker a').on('click', function (event) {
  56. var url = $(this).parent().find('input').val();
  57. var argsep = CommonParams.get('arg_separator');
  58. var params;
  59. if (event.ctrlKey || event.altKey) {
  60. event.preventDefault();
  61. params = removeColumnFromMultiSort(url, $(this).parent());
  62. if (params) {
  63. AJAX.source = $(this);
  64. Functions.ajaxShowMessage();
  65. params += argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true';
  66. $.post('sql.php', params, AJAX.responseHandler);
  67. }
  68. } else if (event.shiftKey) {
  69. event.preventDefault();
  70. AJAX.source = $(this);
  71. Functions.ajaxShowMessage();
  72. params = url.substring(url.indexOf('?') + 1);
  73. params += argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true';
  74. $.post('sql.php', params, AJAX.responseHandler);
  75. }
  76. });
  77. });
  78. AJAX.registerTeardown('keyhandler.js', function () {
  79. $(document).off('click', 'th.draggable.column_heading.pointer.marker a');
  80. });