/* 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 redirect(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+');
// 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'] += '&discard_remembered_sort=1';
}
var middle_part = columns.join('%2C+');
url = URL['head'] + middle_part + URL['tail'];
window.location.replace(url);
}
AJAX.registerOnload('keyhandler.js', function () {
$("th.draggable.column_heading.pointer.marker a").live('click', function (event) {
if (event.shiftKey) {
event.preventDefault();
redirect($(this).attr("href"), $(this).parent());
}
});
});
AJAX.registerTeardown('keyhandler.js', function () {
$("th.draggable.column_heading.pointer.marker a").die('click');
});