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