156
164
event.preventDefault();
157
165
PMA_createViewDialog($(this));
168
PMA_showCurrentNavigation();
162
* Expands/collapses the navigation tree and sets to view the expanded
164
* @param object $expandElem the element that initiated the expanding
172
* Expands a node in navigation tree.
174
* @param $expandElem expander
175
* @param callback callback function
167
function PMA_expandNavigationTree($expandElem) {
179
function expandTreeNode($expandElem, callback)
168
181
var $children = $expandElem.closest('li').children('div.list_container');
169
182
var $icon = $expandElem.find('img');
170
183
if ($expandElem.hasClass('loaded')) {
171
184
if ($icon.is('.ic_b_plus')) {
172
185
$icon.removeClass('ic_b_plus').addClass('ic_b_minus');
173
186
$children.show('fast');
175
$icon.removeClass('ic_b_minus').addClass('ic_b_plus');
176
$children.hide('fast');
188
if (callback && typeof callback == 'function') {
179
var $destination = $expandElem.closest('li');
180
if($icon.siblings('.throbber').length <= 0) {
181
var $throbber = $('#pma_navigation .throbber')
184
.css('visibility', 'visible');
186
$throbber.insertBefore($icon);
189
var searchClause = PMA_fastFilter.getSearchClause();
190
var searchClause2 = PMA_fastFilter.getSearchClause2($expandElem);
193
aPath: $expandElem.find('span.aPath').text(),
194
vPath: $expandElem.find('span.vPath').text(),
195
pos: $expandElem.find('span.pos').text(),
196
pos2_name: $expandElem.find('span.pos2_name').text(),
197
pos2_value: $expandElem.find('span.pos2_value').text(),
198
searchClause: searchClause,
199
searchClause2: searchClause2
201
var url = $('#pma_navigation').find('a.navigation_url').attr('href');
202
$.get(url, params, function (data) {
192
var $throbber = $('#pma_navigation .throbber')
195
.css('visibility', 'visible')
198
$throbber.insertBefore($icon);
200
loadChildNodes($expandElem, function(data) {
203
201
if (data.success === true) {
204
$expandElem.addClass('loaded');
205
$destination.find('div.list_container').remove(); // FIXME: Hack, there shouldn't be a list container there
206
$destination.append(data.message);
202
var $destination = $expandElem.closest('li');
207
203
$icon.removeClass('ic_b_plus').addClass('ic_b_minus');
209
205
.children('div.list_container')
246
* Auto-expands the newly chosen database
248
* @param string $oldDb The previous database
249
* @param string $newDb The newly chosen database
252
function PMA_autoExpandDatabaseInUse($oldDb, $newDb) {
253
var $expandElem, $icon;
254
//Collapse the previous database
255
if($oldDb !== '' && $oldDb !== $newDb) {
256
$expandElem = $('#pma_navigation_tree a.dbLink:contains("' + $oldDb + '")')
257
.parent().find('a.expander').eq(0);
258
$icon = $expandElem.find('img');
259
if ($icon.is('.ic_b_minus'))
260
PMA_expandNavigationTree($expandElem);
262
//expand the newly chosen database
263
$expandElem = $('#pma_navigation_tree a.dbLink:contains("' + $newDb + '")')
264
.parent().find('a.expander').eq(0);
265
$icon = $expandElem.find('img');
266
if ($icon.is('.ic_b_plus')) {
267
PMA_expandNavigationTree($expandElem);
269
//scroll to new database
270
if ($oldDb !== $newDb) {
271
setTimeout(function() {
272
scrollToView($expandElem.closest('li'), $('#pma_navigation_tree_content'));
244
* Collapses a node in navigation tree.
246
* @param $expandElem expander
250
function collapseTreeNode($expandElem) {
251
var $children = $expandElem.closest('li').children('div.list_container');
252
var $icon = $expandElem.find('img');
253
if ($expandElem.hasClass('loaded')) {
254
if ($icon.is('.ic_b_minus')) {
255
$icon.removeClass('ic_b_minus').addClass('ic_b_plus');
256
$children.hide('fast');
263
* Loads child items of a node and executes a given callback
265
* @param $expandElem expander
266
* @param callback callback function
270
function loadChildNodes($expandElem, callback) {
271
var $destination = $expandElem.closest('li');
273
var searchClause = PMA_fastFilter.getSearchClause();
274
var searchClause2 = PMA_fastFilter.getSearchClause2($expandElem);
277
aPath: $expandElem.find('span.aPath').text(),
278
vPath: $expandElem.find('span.vPath').text(),
279
pos: $expandElem.find('span.pos').text(),
280
pos2_name: $expandElem.find('span.pos2_name').text(),
281
pos2_value: $expandElem.find('span.pos2_value').text(),
282
searchClause: searchClause,
283
searchClause2: searchClause2
286
var url = $('#pma_navigation').find('a.navigation_url').attr('href');
287
$.get(url, params, function (data) {
288
if (data.success === true) {
289
$expandElem.addClass('loaded');
290
$destination.find('div.list_container').remove(); // FIXME: Hack, there shouldn't be a list container there
291
$destination.append(data.message);
292
if (callback && typeof callback == 'function') {
300
* Expand the navigation and highlight the current database or table/view
304
function PMA_showCurrentNavigation()
306
var db = PMA_commonParams.get('db');
307
var table = PMA_commonParams.get('table');
308
$('#pma_navigation_tree')
310
.removeClass('selected');
311
if (db && table) { // if we are at the table/view level
312
// open the database in the tree
313
var $dbItem = highlightLoadedItem(
314
$('#pma_navigation_tree > div'), db, 'database', false, false
317
// open the table in the tree and select it
318
var $expander = $dbItem.children('div:first').children('a.expander');
319
// if not loaded or loaded but collapsed
320
if (! $expander.hasClass('loaded')
321
|| $expander.find('img').is('.ic_b_plus')
323
expandTreeNode($expander, function() {
324
loadAndHighlightTableOrView($dbItem, table);
327
loadAndHighlightTableOrView($dbItem, table);
330
} else if (db) { // if we are at the database level
331
// open in the tree and select the database
333
$('#pma_navigation_tree > div'), db, 'database', true, true
337
function highlightLoadedItem($container, name, clazz, doSelect, doOpen) {
339
$container.children('ul').children('li').each(function() {
341
// this is a navigation group, recurse
342
if ($li.is('.navGroup')) {
343
var $container = $li.children('div.list_container');
344
var $childRet = highlightLoadedItem(
345
$container, name, clazz, doSelect, doOpen
351
} else { // this is a real navigation item
352
// name and class matches
353
if ($li.is('.' + clazz) && $li.children('a').text() == name) {
355
$li.addClass('selected');
356
if (! doOpen) { // if the node will be opened no point scrolling now
357
scrollToView($li, $('#pma_navigation_tree_content'));
361
var $expander = $li.find('div:first').children('a.expander');
362
if ($expander.length > 0) {
363
expandTreeNode($expander, function() {
364
scrollToView($li, $('#pma_navigation_tree_content'));
368
// taverse up and expand and parent navigation groups
369
$li.parents('.navGroup').each(function() {
370
$cont = $(this).children('div.list_container');
371
if (! $cont.is(':visible')) {
373
.children('div:first')
374
.children('a.expander')
386
function loadAndHighlightTableOrView($dbItem, table) {
387
var $container = $dbItem.children('div.list_container');
388
var $tableContainer = $container
390
.children('li.tableContainer');
391
var $viewContainer = $container
393
.children('li.viewContainer');
395
if ($tableContainer.length > 0) {
396
var $expander = $tableContainer
397
.children('div:first')
398
.children('a.expander');
400
if (! $expander.hasClass('loaded') ) {
401
loadChildNodes($expander, function(data) {
402
highlightTableOrView($tableContainer, $viewContainer, table);
405
highlightTableOrView($tableContainer, $viewContainer, table);
407
} else if ($viewContainer.length > 0) {
408
highlightView($viewContainer, table);
410
// no containers, highlight the item
411
highlightLoadedItem($container, table, 'table', true, false);
415
function highlightTableOrView($tableContainer, $viewContainer, table)
417
if (isItemInContainer($tableContainer, table, 'table')) {
418
var $expander = $tableContainer
419
.children('div:first')
420
.children('a.expander');
421
if ($expander.find('img').is('.ic_b_plus')) {
422
expandTreeNode($expander);
425
$tableContainer.children('div.list_container'),
426
table, 'table', true, false
428
} else if ($viewContainer.length > 0) {
429
highlightView($viewContainer, table);
433
function isItemInContainer($container, name, clazz)
435
$items = $container.find('li.' + clazz);
437
$items.each(function() {
438
if ($(this).children('a').text() == name) {
446
function highlightView($viewContainer, view) {
447
var $expander = $viewContainer
448
.children('div:first')
449
.children('a.expander');
450
if (! $expander.hasClass('loaded')
451
|| $expander.find('img').is('.ic_b_plus')
453
expandTreeNode($expander, function() {
455
$viewContainer.children('div.list_container'),
456
view, 'view', true, false
461
$viewContainer.children('div.list_container'),
462
view, 'view', true, false