Merge pull request #11978 from zixtor/master
Resolve #11643 : Maintain filter states for db/table navigation filters
This commit is contained in:
commit
889a291927
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user