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