From f4532fa9577e0703d8bcd879357d1ead63dfb4c4 Mon Sep 17 00:00:00 2001 From: Roy-Orbison Date: Thu, 10 Aug 2023 17:28:12 +0930 Subject: [PATCH] Filter tables plugin cleanup - Put markup first and consolidate all script into single block - Fix some JS oddities - Put into IIFE no does not pollute the global namespace (prevents conflicts) - Hide when JS disabled --- plugins/tables-filter.php | 85 ++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 36 deletions(-) diff --git a/plugins/tables-filter.php b/plugins/tables-filter.php index d33d2da1..aaf5dec9 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,33 +62,32 @@ 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); - } +filterField.addEventListener('input', function input() { + timeout && window.clearTimeout(timeout); + timeout = window.setTimeout(filter, 200); }); + +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); +}); + +})(); - -
- -
- - - -
-
-