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