From d798809215c3147150dad12a14a3f049db3bbea4 Mon Sep 17 00:00:00 2001 From: Durgesh <007durgesh219@gmail.com> Date: Mon, 29 Feb 2016 23:58:30 +0530 Subject: [PATCH] Filtering databases on databases listing, Issue #12047 Signed-off-by: Durgesh <007durgesh219@gmail.com> --- js/server_databases.js | 53 +++++++++++++++++++ .../server/ServerDatabasesController.php | 3 ++ .../server/ServerVariablesController.php | 2 +- .../variable_filter.phtml => filter.phtml} | 0 4 files changed, 57 insertions(+), 1 deletion(-) rename templates/{server/variables/variable_filter.phtml => filter.phtml} (100%) diff --git a/js/server_databases.js b/js/server_databases.js index 726334558d..d1c1190479 100644 --- a/js/server_databases.js +++ b/js/server_databases.js @@ -14,6 +14,7 @@ AJAX.registerTeardown('server_databases.js', function () { $(document).off('submit', "#dbStatsForm"); $(document).off('submit', '#create_database_form.ajax'); + $('#filterText').unbind('keyup'); }); /** @@ -130,4 +131,56 @@ AJAX.registerOnload('server_databases.js', function () { } }); // end $.post() }); // end $(document).on() + + /* Don't show filter if number of databases are very few */ + var databasesCount = $('#databases_count').html(); + if(databasesCount <= 10) { + $('#tableFilter').hide(); + } + + var $filterField = $('#filterText'); + /* Event handler for database filter */ + $filterField.keyup(function (){ + var textFilter = null, val = $(this).val(); + if(val.length != 0) { + try { + textFilter = new RegExp(val.replace(/_/g, ' '), 'i'); + $(this).removeClass('error'); + } catch(e) { + if (e instanceof SyntaxError) { + $(this).addClass('error'); + textFilter = null; + } + } + } + filterVariables(textFilter); + }); + + /* Trigger filtering of the list based on incoming database name */ + if ($filterField.val()) { + $filterField.trigger('keyup').select(); + } + + /* Filters the rows by the user given regexp */ + function filterVariables(textFilter) { + var $row, odd_row = false, databasesCount = 0; + $('#tabledatabases').find('.db-row').each(function () { + $row = $(this); + if (textFilter === null || + textFilter.exec($row.find('.name').text()) + ) { + odd_row = ! odd_row; + $row.css('display', ''); + databasesCount += 1; + if (odd_row) { + $row.addClass('odd').removeClass('even'); + } else { + $row.addClass('even').removeClass('odd'); + } + } else { + $row.css('display', 'none'); + } + $('#databases_count').html(databasesCount); + }); + } }); // end $() diff --git a/libraries/controllers/server/ServerDatabasesController.php b/libraries/controllers/server/ServerDatabasesController.php index 17c372fc01..52bd3bb322 100644 --- a/libraries/controllers/server/ServerDatabasesController.php +++ b/libraries/controllers/server/ServerDatabasesController.php @@ -98,6 +98,8 @@ class ServerDatabasesController extends Controller $html .= Template::get('server/databases/create')->render(); } + $html .= Template::get('filter')->render(array('filterValue'=>'')); + /** * Gets the databases list */ @@ -432,6 +434,7 @@ class ServerDatabasesController extends Controller foreach ($this->_databases as $current) { $tr_class = $odd_row ? 'odd' : 'even'; + $tr_class .= ' db-row'; if ($this->dbi->isSystemSchema($current['SCHEMA_NAME'], true)) { $tr_class .= ' noclick'; } diff --git a/libraries/controllers/server/ServerVariablesController.php b/libraries/controllers/server/ServerVariablesController.php index d534ceacc5..eef49093e6 100644 --- a/libraries/controllers/server/ServerVariablesController.php +++ b/libraries/controllers/server/ServerVariablesController.php @@ -272,7 +272,7 @@ class ServerVariablesController extends Controller { // filter $filterValue = ! empty($_REQUEST['filter']) ? $_REQUEST['filter'] : ''; - $output = Template::get('server/variables/variable_filter') + $output = Template::get('filter') ->render(array('filterValue' => $filterValue)); $output .= '