diff --git a/js/makegrid.js b/js/makegrid.js index aedaae3131..8d00f8b17d 100644 --- a/js/makegrid.js +++ b/js/makegrid.js @@ -430,25 +430,24 @@ function PMA_makegrid(t, enableResize, enableReorder, enableVisib, enableGridEdi if ($(t).find('th.marker').length > 0) { g.showMarkHint = true; } - - if (g.showReorderHint && g.reorderHint) { - text += g.reorderHint; - } if (g.showSortHint && g.sortHint) { text += text.length > 0 ? '
' : ''; - text += g.sortHint; + text += '- ' + g.sortHint; } - if (g.showRemColHint && g.strRemColHint) { + if (g.showMultiSortHint && g.strMultiSortHint) { text += text.length > 0 ? '
' : ''; - text += g.strRemColHint; + text += '- ' + g.strMultiSortHint; } - if (g.showMarkHint && g.markHint && - !g.showSortHint // we do not show mark hint, when sort hint is shown + if (g.showMarkHint && g.markHint + && !g.showSortHint // we do not show mark hint, when sort hint is shown + && g.showReorderHint && g.reorderHint ) { text += text.length > 0 ? '
' : ''; - text += g.markHint; + text += '- ' + g.reorderHint; text += text.length > 0 ? '
' : ''; - text += g.copyHint; + text += '- ' + g.markHint; + text += text.length > 0 ? '
' : ''; + text += '- ' + g.copyHint; } } return text; @@ -1852,7 +1851,7 @@ function PMA_makegrid(t, enableResize, enableReorder, enableVisib, enableGridEdi // assign the hints g.sortHint = PMA_messages.strSortHint; - g.strRemColHint = PMA_messages.strRemColHint; + g.strMultiSortHint = PMA_messages.strMultiSortHint; g.markHint = PMA_messages.strColMarkHint; g.copyHint = PMA_messages.strColNameCopyHint; @@ -1906,14 +1905,14 @@ function PMA_makegrid(t, enableResize, enableReorder, enableVisib, enableGridEdi $(t).find('th.draggable a') .mouseenter(function (e) { g.showSortHint = true; - g.showRemColHint = true; + g.showMultiSortHint = true; $(t).find("th.draggable").tooltip("option", { content: g.updateHint() }); }) .mouseleave(function (e) { g.showSortHint = false; - g.showRemColHint = false; + g.showMultiSortHint = false; $(t).find("th.draggable").tooltip("option", { content: g.updateHint() }); diff --git a/js/messages.php b/js/messages.php index a4d09e3112..3e933545e0 100644 --- a/js/messages.php +++ b/js/messages.php @@ -389,8 +389,8 @@ $js_messages['strObjectsCreated'] = __('%d object(s) created.'); $js_messages['strCellEditHint'] = __('Press escape to cancel editing.'); $js_messages['strSaveCellWarning'] = __('You have edited some data and they have not been saved. Are you sure you want to leave this page before saving the data?'); $js_messages['strColOrderHint'] = __('Drag to reorder.'); -$js_messages['strSortHint'] = __('Click to sort.'); -$js_messages['strRemColHint'] = __('Hold shift and click to remove column from ORDER BY clause.'); +$js_messages['strSortHint'] = __('Click to sort results by this column.'); +$js_messages['strMultiSortHint'] = __('Shift+Click to add this column to ORDER BY clause or to toggle ASC/DESC.
- Control+CLick to remove column from ORDER BY clause'); $js_messages['strColMarkHint'] = __('Click to mark/unmark.'); $js_messages['strColNameCopyHint'] = __('Double-click to copy column name.'); $js_messages['strColVisibHint'] = __( diff --git a/js/columndelete.js b/js/multi_column_sort.js similarity index 53% rename from js/columndelete.js rename to js/multi_column_sort.js index c2571661b5..51ea76b34e 100644 --- a/js/columndelete.js +++ b/js/multi_column_sort.js @@ -1,12 +1,12 @@ /* vim: set expandtab sw=4 ts=4 sts=4: */ /** - * @fileoverview Implements the shiftkey + click remove column + * @fileoverview Implements the shiftkey + click remove column * from order by clause funcationality * @name columndelete * * @requires jQuery */ - + function captureURL(url) { var URL = {}; @@ -14,56 +14,62 @@ function captureURL(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; + 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 target HTMLAnchor element * @param object parent HTMLDom Object */ -function redirect(target, parent) +function removeColumnFromMultiSort(target, parent) { var URL = captureURL(target); var begin = target.indexOf('ORDER+BY') + 8; var end = target.indexOf('&session_max_rows'); // get the names of the columns involved var between_part = target.substr(begin, end-begin); - var columns = between_part.split('%2C+'); + 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 === "") { + var index = parent.find('small').length ? parent.find('small').text() : ''; + if (index == ''){ return; } // Remove the current clicked column - columns.splice(index-1, 1); + 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 + 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 += '&discard_remembered_sort=1'; + URL['tail'] += '&discard_remembered_sort=1'; } - var middle_part = columns.join('%2C+'); - url = URL.head + middle_part + URL.tail; - window.location.replace(url); + var middle_part = columns.join('%2C+'); + url = URL['head'] + middle_part + URL['tail']; + return url; } - AJAX.registerOnload('keyhandler.js', function () { - $("th.draggable.column_heading.pointer.marker a").live('click', function (event) { - if (event.shiftKey) { + $("th.draggable.column_heading.pointer.marker a").on('click', function (event) { + var url = $(this).parent().find('input').val(); + if (event.ctrlKey) { event.preventDefault(); - redirect($(this).attr("href"), $(this).parent()); + url = removeColumnFromMultiSort(url, $(this).parent()); + AJAX.source = $(this); + $.get(url, {'ajax_request' : true, 'ajax_page_request' : true}, AJAX.responseHandler); + } else if (event.shiftKey) { + event.preventDefault(); + AJAX.source = $(this); + $.get(url, {'ajax_request' : true, 'ajax_page_request' : true}, AJAX.responseHandler); } - }); + }); }); AJAX.registerTeardown('keyhandler.js', function () { diff --git a/sql.php b/sql.php index 7c67629d25..eebe9552a6 100644 --- a/sql.php +++ b/sql.php @@ -27,7 +27,7 @@ $scripts->addFile('jquery/jquery.uitablefilter.js'); $scripts->addFile('tbl_change.js'); $scripts->addFile('indexes.js'); $scripts->addFile('gis_data_editor.js'); -$scripts->addFile('columndelete.js'); +$scripts->addFile('multi_column_sort.js'); /** * Set ajax_reload in the response if it was already set