Merge pull request #11978 from zixtor/master

Resolve #11643 : Maintain filter states for db/table navigation filters
This commit is contained in:
Michal Čihař 2016-02-22 14:44:12 +01:00
commit 889a291927

View File

@ -30,6 +30,89 @@ function navTreeStateUpdate() {
}
}
/**
* updates the filter state in sessionStorage
*
* @returns void
*/
function navFilterStateUpdate(filterName, filterValue) {
if (isStorageSupported('sessionStorage')) {
var storage = window.sessionStorage;
try {
var currentFilter = $.extend({}, JSON.parse(storage.getItem('navTreeSearchFilters')));
var filter = {};
filter[filterName] = filterValue;
currentFilter = $.extend(currentFilter, filter);
storage.setItem('navTreeSearchFilters', JSON.stringify(currentFilter));
} catch (error) {
storage.removeItem('navTreeSearchFilters');
}
}
}
/**
* restores the filter state on navigation reload
*
* @returns void
*/
function navFilterStateRestore() {
if (isStorageSupported('sessionStorage')
&& typeof window.sessionStorage.navTreeSearchFilters !== 'undefined'
) {
var searchClauses = JSON.parse(window.sessionStorage.navTreeSearchFilters);
if (Object.keys(searchClauses).length < 1) {
return;
}
// restore database filter if present and not empty
if (searchClauses.hasOwnProperty("dbFilter")
&& searchClauses.dbFilter.length
) {
$obj = $('#pma_navigation_tree');
if (! $obj.data('fastFilter')) {
$obj.data(
'fastFilter',
new PMA_fastFilter.filter($obj, "")
);
}
$obj.find('li.fast_filter.db_fast_filter input.searchClause')
.val(searchClauses.dbFilter)
.trigger('keyup');
}
// find all table filters present in the tree
$tableFilters = $('#pma_navigation_tree li.database')
.children('div.list_container')
.find('li.fast_filter input.searchClause');
// restore table filters
$tableFilters.each(function () {
$obj = $(this).closest('div.list_container');
// aPath associated with this filter
var filterName = $(this).siblings('input[name=aPath]').val();
// if this table's filter has a state stored in storage
if (searchClauses.hasOwnProperty(filterName)
&& searchClauses[filterName].length
) {
// clear state if item is not visible,
// happens when table filter becomes invisible
// as db filter has already been applied
if (! $obj.is(":visible")) {
navFilterStateUpdate(filterName, "");
return true;
}
if (! $obj.data('fastFilter')) {
$obj.data(
'fastFilter',
new PMA_fastFilter.filter($obj, "")
);
}
$(this).val(searchClauses[filterName])
.trigger('keyup');
}
});
}
}
/**
* Loads child items of a node and executes a given callback
*
@ -557,7 +640,7 @@ $(function () {
PMA_commonParams.get('token') === storage.token
) {
// Reload the tree to the state before page refresh
PMA_reloadNavigation(null, JSON.parse(storage.navTreePaths));
PMA_reloadNavigation(navFilterStateRestore, JSON.parse(storage.navTreePaths));
}
}
});
@ -625,6 +708,7 @@ function expandTreeNode($expandElem, callback) {
*
*/
function scrollToView($element, $forceToTop) {
navFilterStateRestore();
var $container = $('#pma_navigation_tree_content');
var elemTop = $element.offset().top - $container.offset().top;
var textHeight = 20;
@ -1386,6 +1470,14 @@ var PMA_fastFilter = {
} else if ($obj.data('fastFilter')) {
$obj.data('fastFilter').restore(true);
}
// update filter state
var filterName;
if ($(this).attr('name') == 'searchClause2') {
filterName = $(this).siblings('input[name=aPath]').val();
} else {
filterName = 'dbFilter';
}
navFilterStateUpdate(filterName, $(this).val());
},
clear: function (event) {
event.stopPropagation();