diff --git a/db_tables_search.php b/db_tables_search.php new file mode 100644 index 0000000000..87b8fe2700 --- /dev/null +++ b/db_tables_search.php @@ -0,0 +1,51 @@ + $table) { + if (strpos($key, $table_term) !== FALSE) { + $link = '
  • '; + $attr = array('id' => 'icon_' . htmlspecialchars($table_db . '.' . $table['Name'])); + if (PMA_Table::isView($table_db, $table['Name'])) { + $link .= PMA_getImage('s_views.png', htmlspecialchars($link_title), $attr); + } else { + $link .= PMA_getImage('b_browse.png', htmlspecialchars($link_title), $attr); + } + $link .= ''; + // link for the table name itself + $href = $GLOBALS['cfg']['DefaultTabTable'] . '?' + . $common_url_query . '&table=' + . urlencode($table['Name']) . '&pos=0'; + $link .= '' + // preserve spaces in table name + . str_replace(' ', ' ', htmlspecialchars($table['disp_name'])) . ''; + $link .= '
  • ' . "\n"; + $table['line'] = $link; + $tables_response[] = $table; + } +} + +PMA_ajaxResponse('', true, array('tables' => $tables_response)); \ No newline at end of file diff --git a/js/navigation.js b/js/navigation.js index 9800d1d407..843a998675 100644 --- a/js/navigation.js +++ b/js/navigation.js @@ -160,6 +160,9 @@ function PMA_setCookie(name, value, expires, path, domain, secure) function fast_filter(value) { var lowercase_value = value.toLowerCase(); + var matches = 0; + var db = $('#lightm_db').val(); + $('li.ajax_table').hide(); $("#subel0 a[class!='tableicon']").each(function(idx, elem) { var $elem = $(elem); // .indexOf is case sensitive so convert to lowercase to compare @@ -167,10 +170,28 @@ function fast_filter(value) $elem.parent().hide(); } else { $elem.parents('li').show(); + matches = matches + 1; } }); + + if (matches === 0) { //If no local matches search in all tables + if (fast_filter.ajax_semaphore) { //If is true another request is running + return; + } + fast_filter.ajax_semaphore = true; + $.get('db_tables_search.php?db=' + db +'&table=' + lowercase_value, function(data) { + var tables = data.tables; + var l = tables.length; + for(var i = 0; i < l; i++) { + $('#subel0').append(tables[i].line); + } + fast_filter.ajax_semaphore = false; + }); + } } +fast_filter.ajax_semaphore = false; //If is true an Ajax request is running + /** * Clears fast filter. */ @@ -223,8 +244,11 @@ $(function(){ $('#fast_filter').focus(); }); - $('#fast_filter').keyup(function(evt) { + $('#fast_filter').keyup(function(evt) { fast_filter($(this).val()); + if ($(this).val() == '') { //Hides added tables by search + $('li.ajax_table').hide(); + } }); /* Jump to recent table */