diff --git a/plugins/tables-filter.php b/plugins/tables-filter.php index 68b9b809..e554b9a2 100644 --- a/plugins/tables-filter.php +++ b/plugins/tables-filter.php @@ -6,29 +6,43 @@ * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) */ + class AdminerTablesFilter { function tablesPrint($tables) { ?> -> -var tablesFilterTimeout = null; -var tablesFilterValue = ''; +
+ +
+ + +
+
-function tablesFilter(){ - var value = qs('#filter-field').value.toLowerCase(); - if (value == tablesFilterValue) { +> +(function() { + +var timeout; +var lastValue = ''; +var filterField = qs('#filter-field'); + +function filter() { + timeout && (timeout = null); + var value = filterField.value.toLowerCase(); + if (value == lastValue) { return; } - tablesFilterValue = value; + lastValue = value; if (value != '') { - var reg = (value + '').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, '\\$1'); + var reg = (value + '').replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); reg = new RegExp('('+ reg + ')', 'gi'); } - if (sessionStorage) { + if (window.sessionStorage) { sessionStorage.setItem('adminer_tables_filter', value); } var tables = qsa('li', qs('#tables')); + var a; + var text; for (var i = 0; i < tables.length; i++) { - var a = null; - var text = tables[i].getAttribute('data-table-name'); + text = tables[i].getAttribute('data-table-name'); if (text == null) { a = qsa('a', tables[i])[1]; text = a.innerHTML.trim(); @@ -48,45 +62,53 @@ function tablesFilter(){ } } -function tablesFilterInput() { - window.clearTimeout(tablesFilterTimeout); - tablesFilterTimeout = window.setTimeout(tablesFilter, 200); -} - -sessionStorage && document.addEventListener('DOMContentLoaded', function () { - if (qs('#dbs') != null) { - var db = qs('#dbs').querySelector('select'); - db = db.options[db.selectedIndex].text; - if (db == sessionStorage.getItem('adminer_tables_filter_db') && sessionStorage.getItem('adminer_tables_filter')){ - qs('#filter-field').value = sessionStorage.getItem('adminer_tables_filter'); - tablesFilter(); - } - sessionStorage.setItem('adminer_tables_filter_db', db); - } - document.addEventListener('keyup', function(event) { - if (event.ctrlKey && event.shiftKey && event.key == 'F') { - qs('#filter-field').focus(); - return; - } - }); - qs('#filter-field').addEventListener('keydown', function(event) { - if (event.key == 'Enter' || event.keyCode == 13 || event.which == 13) { - event.preventDefault(); - return false; - } - }); +filterField.addEventListener('input', function input() { + timeout && window.clearTimeout(timeout); + timeout = window.setTimeout(filter, 200); }); +document.addEventListener('keyup', function(event) { + if ( + event.ctrlKey + && event.shiftKey + && event.key == 'F' + && !event.altKey + && !event.metaKey + && ( + !document.activeElement + || document.activeElement != filterField + ) + ) { + filterField.focus(); + } +}); +filterField.addEventListener('keydown', function(event) { + if (event.key == 'Enter' || event.keyCode == 13 || event.which == 13) { + event.preventDefault(); + return false; + } +}); + +qs('#filter-field-reset').addEventListener('click', function() { + filterField.value = ''; + filterField.dispatchEvent(new Event('input')); +}); + +window.sessionStorage && document.addEventListener('DOMContentLoaded', function restore() { + var db = qs('#dbs select'); + var value; + db = db.options[db.selectedIndex].text; + if ( + db == sessionStorage.getItem('adminer_tables_filter_db') + && (value = sessionStorage.getItem('adminer_tables_filter')) + ) { + filterField.value = value; + filter(); + } + sessionStorage.setItem('adminer_tables_filter_db', db); +}); + +})(); - -
- -
- - - -
-
-