Hi,
Please find the attached patch for the feature #2506: Allow the dashboard
panel to be closed.
Thanks,
Khushboo
diff --git a/web/pgadmin/browser/static/js/panel.js b/web/pgadmin/browser/static/js/panel.js
index 71d2c68..bfa2e32 100644
--- a/web/pgadmin/browser/static/js/panel.js
+++ b/web/pgadmin/browser/static/js/panel.js
@@ -7,7 +7,8 @@ function(_, pgAdmin) {
pgAdmin.Browser.Panel = function(options) {
var defaults = [
'name', 'title', 'width', 'height', 'showTitle', 'isCloseable',
- 'isPrivate', 'content', 'icon', 'events', 'onCreate', 'elContainer'
+ 'isPrivate', 'content', 'icon', 'events', 'onCreate', 'elContainer',
+ 'canHide', 'limit'
];
_.extend(this, _.pick(options, defaults));
}
@@ -25,12 +26,14 @@ function(_, pgAdmin) {
panel: null,
onCreate: null,
elContainer: false,
+ limit: null,
load: function(docker, title) {
var that = this;
if (!that.panel) {
docker.registerPanelType(that.name, {
title: that.title,
isPrivate: that.isPrivate,
+ limit: that.limit,
onCreate: function(myPanel) {
$(myPanel).data('pgAdminName', that.name);
myPanel.initSize(that.width, that.height);
@@ -85,6 +88,25 @@ function(_, pgAdmin) {
});
that.resizedContainer.apply(myPanel);
}
+
+ // Bind events only if they are configurable
+ if (that.canHide) {
+ myPanel.on(wcDocker.EVENT.CLOSED, function() {
+ pgBrowser.save_current_layout(pgBrowser);
+ });
+ myPanel.on(wcDocker.EVENT.VISIBILITY_CHANGED, function() {
+ if (pgBrowser.tree) {
+ pgBrowser.save_current_layout(pgBrowser);
+ var selectedNode = pgBrowser.tree.selected();
+ // Discontinue this event after first time visible
+ myPanel.off(wcDocker.EVENT.VISIBILITY_CHANGED);
+ // Explicitly trigger tree selected event when we add the tab.
+ pgBrowser.Events.trigger('pgadmin-browser:tree:selected', selectedNode,
+ pgBrowser.tree.itemData(selectedNode), pgBrowser.Node);
+ }
+
+ });
+ }
}
});
}
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
index 4494e7a..4588128 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -177,7 +177,9 @@ define(
showTitle: {% if panel_item.showTitle %}true{% else %}false{% endif %},
isCloseable: {% if panel_item.isCloseable %}true{% else %}false{% endif %},
isPrivate: {% if panel_item.isPrivate %}true{% else %}false{% endif %},
- content: '{{ panel_item.content }}'{% if panel_item.events is not none %},
+ content: '{{ panel_item.content }}',
+ canHide: {% if panel_item.canHide %}true{% else %}false{% endif %}{% if panel_item.limit is not none %},
+ limit: {{ panel_item.limit }}{% endif %}{% if panel_item.events is not none %},
events: {{ panel_item.events }} {% endif %}
}){% endif %}{% endfor %}
},
@@ -364,15 +366,17 @@ define(
// Listen to panel attach/detach event so that last layout will be remembered
_.each(obj.panels, function(panel, name) {
- panel.panel.on(wcDocker.EVENT.ATTACHED, function() {
- obj.save_current_layout(obj);
- });
- panel.panel.on(wcDocker.EVENT.DETACHED, function() {
- obj.save_current_layout(obj);
- });
- panel.panel.on(wcDocker.EVENT.MOVE_ENDED, function() {
- obj.save_current_layout(obj);
- });
+ if (panel.panel) {
+ panel.panel.on(wcDocker.EVENT.ATTACHED, function() {
+ obj.save_current_layout(obj);
+ });
+ panel.panel.on(wcDocker.EVENT.DETACHED, function() {
+ obj.save_current_layout(obj);
+ });
+ panel.panel.on(wcDocker.EVENT.MOVE_ENDED, function() {
+ obj.save_current_layout(obj);
+ });
+ }
});
}
diff --git a/web/pgadmin/dashboard/__init__.py b/web/pgadmin/dashboard/__init__.py
index a95ba53..8f813d7 100644
--- a/web/pgadmin/dashboard/__init__.py
+++ b/web/pgadmin/dashboard/__init__.py
@@ -58,9 +58,11 @@ class DashboardModule(PgAdminModule):
title=gettext('Dashboard'),
icon='fa fa-tachometer',
content='',
- isCloseable=False,
- isPrivate=True,
- isIframe=False)
+ isCloseable=True,
+ isPrivate=False,
+ limit=1,
+ isIframe=False,
+ canHide=True)
]
def register_preferences(self):
diff --git a/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js b/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js
index 7c48ea5..f6efce7 100644
--- a/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js
+++ b/web/pgadmin/tools/datagrid/templates/datagrid/js/datagrid.js
@@ -360,7 +360,7 @@ define([
newWin.document.title = grid_title;
});
} else {
- var dashboardPanel = pgBrowser.docker.findPanels('dashboard');
+ var dashboardPanel = pgBrowser.docker.findPanels('properties');
dataGridPanel = pgBrowser.docker.addPanel('frm_datagrid', wcDocker.DOCK.STACKED, dashboardPanel[0]);
dataGridPanel.title('<span title="'+grid_title+'">'+grid_title+'</span>');
dataGridPanel.icon('fa fa-bolt');
@@ -462,7 +462,7 @@ define([
/* On successfully initialization find the dashboard panel,
* create new panel and add it to the dashboard panel.
*/
- var dashboardPanel = pgBrowser.docker.findPanels('dashboard');
+ var dashboardPanel = pgBrowser.docker.findPanels('properties');
queryToolPanel = pgBrowser.docker.addPanel('frm_datagrid', wcDocker.DOCK.STACKED, dashboardPanel[0]);
queryToolPanel.title('<span title="'+panel_title+'">'+panel_title+'</span>');
queryToolPanel.icon('fa fa-bolt');
diff --git a/web/pgadmin/tools/debugger/templates/debugger/js/debugger_ui.js b/web/pgadmin/tools/debugger/templates/debugger/js/debugger_ui.js
index cfbba13..a692ae8 100644
--- a/web/pgadmin/tools/debugger/templates/debugger/js/debugger_ui.js
+++ b/web/pgadmin/tools/debugger/templates/debugger/js/debugger_ui.js
@@ -562,7 +562,7 @@ define([
});
// Create the debugger panel as per the data received from user input dialog.
- var dashboardPanel = pgBrowser.docker.findPanels('dashboard'),
+ var dashboardPanel = pgBrowser.docker.findPanels('properties'),
panel = pgBrowser.docker.addPanel(
'frm_debugger', wcDocker.DOCK.STACKED, dashboardPanel[0]
);
diff --git a/web/pgadmin/utils/menu.py b/web/pgadmin/utils/menu.py
index 66cb994..a426007 100644
--- a/web/pgadmin/utils/menu.py
+++ b/web/pgadmin/utils/menu.py
@@ -18,7 +18,7 @@ class MenuItem(object):
class Panel(object):
def __init__(self, name, title, content='', width=500, height=600, isIframe=True,
showTitle=True, isCloseable=True, isPrivate=False, priority=None,
- icon=None, data=None, events=None):
+ icon=None, data=None, events=None, limit=None, canHide=False):
self.name = name
self.title = title
self.content = content
@@ -31,6 +31,8 @@ class Panel(object):
self.icon = icon
self.data = data
self.events = events
+ self.limit = limit
+ self.canHide = canHide
if priority is None:
global PRIORITY
PRIORITY += 100