Skip to content

Commit

Permalink
Implemented fast filter for databases in the navigation tree
Browse files Browse the repository at this point in the history
  • Loading branch information
roccivic committed Oct 30, 2012
1 parent 10b48d9 commit fa5bdc3
Show file tree
Hide file tree
Showing 7 changed files with 236 additions and 142 deletions.
40 changes: 4 additions & 36 deletions js/functions.js
Expand Up @@ -3167,44 +3167,12 @@ AJAX.registerOnload('functions.js', function() {
$('select.pageselector').live('change', function(event) {
event.stopPropagation();
// Check where to load the new content
// For the main page we don't need to do anything,
// but for the navigation we need to manually replace the content
if ($(this).closest("div#pma_navigation").length == 0) {
if ($(this).closest("#pma_navigation").length == 0) {
// For the main page we don't need to do anything,
$(this).closest("form").submit();
} else {
var $this = $(this);
var $msgbox = PMA_ajaxShowMessage();
var isDbSelector = $this.parent().closest('.pageselector').is('.dbselector');
var params = $(this).closest("form").serialize() + '&ajax_request=true';
if (isDbSelector) {
params += '&full=true';
} else {
var $input = $this.closest('.list_container').find('.fast_filter input.searchClause');
if ($input.length && $input.val() != $input[0].defaultValue) {
params += "&searchClause=" + $input.val();
}
}
$.get('navigation.php', params, function (data) {
if (data.success) {
PMA_ajaxRemoveMessage($msgbox);
if (isDbSelector) {
$('#pma_navigation_tree').html(data.message).children('div').show();
} else {
var $parent = $this.closest('.list_container').parent();
var $input = $this.closest('.list_container').find('.fast_filter input.searchClause');
var val = '';
if ($input.length) {
val = $input.val();
}
$this.closest('.list_container').html($(data.message).children().show());
$parent.find('.fast_filter input.searchClause').val(val);
$parent.find('span.pos2_value:first').text($parent.find('span.pos2_value:last').text());
$parent.find('span.pos3_value:first').text($parent.find('span.pos3_value:last').text());
}
} else {
PMA_ajaxShowMessage(data.error);
}
});
// but for the navigation we need to manually replace the content
PMA_navigationTreePagination($(this));
}
});

Expand Down
195 changes: 126 additions & 69 deletions js/navigation.js
Expand Up @@ -49,33 +49,17 @@ $(function() {
$icon.hide();
$throbber.insertBefore($icon);

var $filterContainer = $(this).closest('div.list_container');
var $filterInput = $([]);
while (1) {
if ($filterContainer.find('li.fast_filter input.searchClause').length != 0) {
$filterInput = $filterContainer.find('li.fast_filter input.searchClause');
break;
} else if (! $filterContainer.is('div.list_container')) {
break;
}
$filterContainer = $filterContainer
.parent()
.closest('div.list_container');
}
var searchClause = '';
if ($filterInput.length != 0
&& $filterInput.val() != $filterInput[0].defaultValue
) {
searchClause = $filterInput.val();
}
var searchClause = PMA_fastFilter.getSearchClause();
var searchClause2 = PMA_fastFilter.getSearchClause2($(this));

var params = {
aPath: $(this).find('span.aPath').text(),
vPath: $(this).find('span.vPath').text(),
pos: $(this).find('span.pos').text(),
pos2_name: $(this).find('span.pos2_name').text(),
pos2_value: $(this).find('span.pos2_value').text(),
searchClause: searchClause
searchClause: searchClause,
searchClause2: searchClause2
};
var url = $('#pma_navigation').find('a.navigation_url').attr('href');
$.get(url, params, function (data) {
Expand Down Expand Up @@ -130,52 +114,7 @@ $(function() {
*/
$('#pma_navigation_tree div.pageselector a.ajax').live('click', function (event) {
event.preventDefault();
var $this = $(this);
var isDbSelector = $this.closest('.pageselector').is('.dbselector');
var $msgbox = PMA_ajaxShowMessage();
var params = {ajax_request: true};
if (isDbSelector) {
params['full'] = true;
} else {
var $input = $this
.closest('div.list_container')
.find('li.fast_filter input.searchClause');
if ($input.length && $input.val() != $input[0].defaultValue) {
params['searchClause'] = $input.val();
}
}
$.get($this.attr('href'), params, function (data) {
PMA_ajaxRemoveMessage($msgbox);
if (data.success) {
if (isDbSelector) {
$('#pma_navigation_tree')
.html(data.message)
.children('div')
.show();
} else {
var $parent = $this.closest('div.list_container').parent();
var $input = $this
.closest('div.list_container')
.find('li.fast_filter input.searchClause');
var val = '';
if ($input.length) {
val = $input.val();
}
$this.closest('div.list_container').html(
$(data.message).children().show()
);
$parent.find('li.fast_filter input.searchClause').val(val);
$parent.find('span.pos2_value:first').text(
$parent.find('span.pos2_value:last').text()
);
$parent.find('span.pos3_value:first').text(
$parent.find('span.pos3_value:last').text()
);
}
} else {
PMA_ajaxShowMessage(data.error);
}
});
PMA_navigationTreePagination($(this));
});

/**
Expand Down Expand Up @@ -334,6 +273,76 @@ function PMA_reloadNavigation() {
});
};


/**
* Handles any requests to change the page in a branch of a tree
*
* This can be called from link click or select change event handlers
*
* @param object $this A jQuery object that points to the element that
* initiated the action of changing the page
*
* @return void
*/
function PMA_navigationTreePagination($this)
{
var $msgbox = PMA_ajaxShowMessage();
var isDbSelector = $this.closest('div.pageselector').is('.dbselector');
if ($this[0].tagName == 'A') {
var url = $this.attr('href');
var params = 'ajax_request=true';
} else { // tagName == 'SELECT'
var url = 'navigation.php';
var params = $this.closest("form").serialize() + '&ajax_request=true';
}
var searchClause = PMA_fastFilter.getSearchClause();
if (searchClause) {
params += '&searchClause=' + encodeURIComponent(searchClause);
}
if (isDbSelector) {
params += '&full=true';
} else {
var searchClause2 = PMA_fastFilter.getSearchClause2($this);
if (searchClause2) {
params += '&searchClause2=' + encodeURIComponent(searchClause2);
}
}
$.post(url, params, function (data) {
PMA_ajaxRemoveMessage($msgbox);
if (data.success) {
if (isDbSelector) {
var val = PMA_fastFilter.getSearchClause();
$('#pma_navigation_tree')
.html(data.message)
.children('div')
.show();
if (val) {
$('#pma_navigation_tree')
.find('li.fast_filter input.searchClause')
.val(val);
}
} else {
var $parent = $this.closest('div.list_container').parent();
var val = PMA_fastFilter.getSearchClause2($this);
$this.closest('div.list_container').html(
$(data.message).children().show()
);
if (val) {
$parent.find('li.fast_filter input.searchClause').val(val);
}
$parent.find('span.pos2_value:first').text(
$parent.find('span.pos2_value:last').text()
);
$parent.find('span.pos3_value:first').text(
$parent.find('span.pos3_value:last').text()
);
}
} else {
PMA_ajaxShowMessage(data.error);
}
});
};

/**
* @var ScrollHandler Custom object that manages the scrolling of the navigation
*/
Expand Down Expand Up @@ -658,6 +667,48 @@ var PMA_fastFilter = {
this.request();
}
},
/**
* Gets the query string from the database fast filter form
*
* @return string
*/
getSearchClause: function () {
var retval = '';
var $input = $('#pma_navigation_tree')
.find('li.fast_filter.db_fast_filter input.searchClause');
if ($input.length && $input.val() != $input[0].defaultValue) {
retval = $input.val();
}
return retval;
},
/**
* Gets the query string from a second level item's fast filter form
* The retrieval is done by trasversing the navigation tree backwards
*
* @return string
*/
getSearchClause2: function ($this) {
var $filterContainer = $this.closest('div.list_container');
var $filterInput = $([]);
while (1) {
if ($filterContainer.find('li.fast_filter:not(.db_fast_filter) input.searchClause').length != 0) {
$filterInput = $filterContainer.find('li.fast_filter:not(.db_fast_filter) input.searchClause');
break;
} else if (! $filterContainer.is('div.list_container')) {
break;
}
$filterContainer = $filterContainer
.parent()
.closest('div.list_container');
}
var searchClause2 = '';
if ($filterInput.length != 0
&& $filterInput.first().val() != $filterInput[0].defaultValue
) {
searchClause2 = $filterInput.val();
}
return searchClause2;
},
/**
* @var hash events A list of functions that are further
* down the page bound to DOM events
Expand Down Expand Up @@ -769,8 +820,14 @@ PMA_fastFilter.filter.prototype.request = function ()
that.xhr.abort();
}
var url = $('#pma_navigation').find('a.navigation_url').attr('href');
var results = that.$this.find('li:visible:not(.fast_filter)').length;
var params = that.$this.find('form.fast_filter').serialize() + "&results=" + results;
var results = that.$this.find('li:not(.hidden):not(.fast_filter):not(.navGroup)').not('[class^=new]').length;
var params = that.$this.find('> ul > li > form.fast_filter').first().serialize() + "&results=" + results;
if (that.$this.find('> ul > li > form.fast_filter:first input[name=searchClause]').length == 0) {
var $input = $('#pma_navigation_tree').find('li.fast_filter.db_fast_filter input.searchClause');
if ($input.length && $input.val() != $input[0].defaultValue) {
params += '&searchClause=' + encodeURIComponent($input.val());
}
}
that.xhr = $.ajax({
url: url,
type: 'post',
Expand All @@ -791,7 +848,7 @@ PMA_fastFilter.filter.prototype.request = function ()
}
}
});
}, 500);
}, 250);
};
/**
* Replaces the contents of the navigation branch with the search results
Expand Down
12 changes: 9 additions & 3 deletions libraries/navigation/NavigationHeader.class.php
Expand Up @@ -32,10 +32,11 @@ public function getDisplay()
'ajax_request' => true
)
);
$highlight = '';
$class = ' class="list_container';
if ($GLOBALS['cfg']['NavigationTreePointerEnable']) {
$highlight = ' class="highlight"';
$class .= ' highlight';
}
$class .= '"';
$buffer = '<div id="pma_navigation">';
$buffer .= '<div id="pma_navigation_resizer"></div>';
$buffer .= '<div id="pma_navigation_collapser"></div>';
Expand All @@ -52,7 +53,12 @@ public function getDisplay()
$buffer .= $this->_links();
$buffer .= $this->_serverChoice();
$buffer .= $this->_recent();
$buffer .= '<div id="pma_navigation_tree"' . $highlight . '>';
$buffer .= $this->_commonFunctions->getImage(
'ajax_clock_small.gif',
__('Loading'),
array('style' => 'visibility: hidden;', 'class' => 'throbber')
);
$buffer .= '<div id="pma_navigation_tree"' . $class . '>';
return $buffer;
}

Expand Down

0 comments on commit fa5bdc3

Please sign in to comment.