diff --git a/web/pgadmin/browser/templates/browser/body.html b/web/pgadmin/browser/templates/browser/body.html
index 94e37c1c5..0e521e34e 100644
--- a/web/pgadmin/browser/templates/browser/body.html
+++ b/web/pgadmin/browser/templates/browser/body.html
@@ -73,123 +73,3 @@ CREATE INDEX tickets_detail_ticket_id
-
-
-
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
new file mode 100644
index 000000000..ba12f5fbd
--- /dev/null
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -0,0 +1,121 @@
+// Store the main browser layout
+function storeLayout(pane, $pane, paneState, paneOptions) {
+ state = layout.readState();
+ settings = { setting1: "Browser/SQLPane/Size",
+ value1: state.center.children.layout1.south.size,
+ setting2: "Browser/SQLPane/Closed",
+ value2: state.center.children.layout1.south.initClosed,
+ setting3: "Browser/BrowserPane/Size",
+ value3: state.west.size,
+ setting4: "Browser/BrowserPane/Closed",
+ value4: state.west.initClosed,
+ count: 4
+ }
+
+ $.post("{{ url_for('settings.store') }}", settings);
+
+ return true
+}
+
+// Setup the browsers
+$(document).ready(function(){
+
+ // Define the main browser layout
+ var layout
+ var layoutDefault = {
+ center__maskContents: true,
+ center__paneSelector: "#outer-center",
+ center__maskContents: true,
+ center__children: [{
+ center__paneSelector: "#inner-center",
+ center__maskContents: true,
+ center__onresize: "storeLayout",
+ south__maskContents: true,
+ south__size: {{ layout_settings.sql_size }},
+ south__initClosed: {{ layout_settings.sql_closed }},
+ south__spacing_closed: 22,
+ south__togglerLength_closed: 140,
+ south__togglerAlign_closed: "right",
+ south__togglerContent_closed: 'SQL Pane',
+ south__togglerTip_closed: "Open & Pin SQL Pane",
+ south__sliderTip: "Slide Open SQL Pane",
+ south__slideTrigger_open: "mouseover",
+ }],
+ west__maskContents: true,
+ west__size: {{ layout_settings.browser_size }},
+ west__initClosed: {{ layout_settings.browser_closed }},
+ west__spacing_closed: 22,
+ west__togglerLength_closed: 140,
+ west__togglerAlign_closed: "top",
+ west__togglerContent_closed: 'B
r
o
w
s
e
r',
+ west__togglerTip_closed: "Open & Pin Browser",
+ west__sliderTip: "Slide Open Browser",
+ west__slideTrigger_open: "mouseover",
+ };
+
+ layout = $('#container').layout(layoutDefault);
+
+
+ // Make the tabs, umm, tabable
+ $('#dashboard a').click(function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+ $('#properties a').click(function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+ $('#statistics a').click(function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+ $('#dependencies a').click(function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+ $('#dependents a').click(function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+
+ // Syntax highlight the SQL Pane
+ var editor = CodeMirror.fromTextArea(document.getElementById("sql-textarea"), {
+ lineNumbers: true,
+ mode: "text/x-sql",
+ readOnly: true,
+ });
+
+ // Initialise the treeview
+ $('#tree').aciTree({
+ ajax: {
+ url: '{{ url_for('browser.get_nodes') }}'
+ },
+ });
+ var treeApi = $('#tree').aciTree('api');
+
+ // Build the treeview context menu
+ $('#tree').contextMenu({
+ selector: '.aciTreeLine',
+ build: function(element) {
+ var item = treeApi.itemFrom(element);
+ var menu = {
+ };
+
+ menu['rename'] = {
+ name: 'Rename server group',
+ callback: function() { rename_server_group(item); }
+ };
+
+ menu['delete'] = {
+ name: 'Delete server group',
+ callback: function() { delete_server_group(item); }
+ };
+
+ return {
+ autoHide: true,
+ items: menu,
+ callback: null
+ };
+ }
+ });
+});
diff --git a/web/pgadmin/browser/views.py b/web/pgadmin/browser/views.py
index 546f1a13f..a0f636a68 100644
--- a/web/pgadmin/browser/views.py
+++ b/web/pgadmin/browser/views.py
@@ -96,13 +96,6 @@ def index():
tools_items = sorted(tools_items, key=lambda k: k['priority'])
help_items = sorted(help_items, key=lambda k: k['priority'])
- # Get the layout settings
- layout_settings = { }
- layout_settings['sql_size'] = get_setting('Browser/SQLPane/Size', default=250)
- layout_settings['sql_closed'] = get_setting('Browser/SQLPane/Closed', default="false")
- layout_settings['browser_size'] = get_setting('Browser/BrowserPane/Size', default=250)
- layout_settings['browser_closed'] = get_setting('Browser/BrowserPane/Closed', default="false")
-
return render_template(MODULE_NAME + '/index.html',
username=current_user.email,
file_items=file_items,
@@ -110,8 +103,7 @@ def index():
tools_items=tools_items,
help_items=help_items,
stylesheets = stylesheets,
- scripts = scripts,
- layout_settings = layout_settings)
+ scripts = scripts)
@blueprint.route("/browser.js")
@login_required
@@ -120,10 +112,20 @@ def browser_js():
snippets = ''
modules_and_nodes = modules + nodes
+ # Load the core browser code first
+ layout_settings = { }
+ layout_settings['sql_size'] = get_setting('Browser/SQLPane/Size', default=250)
+ layout_settings['sql_closed'] = get_setting('Browser/SQLPane/Closed', default="false")
+ layout_settings['browser_size'] = get_setting('Browser/BrowserPane/Size', default=250)
+ layout_settings['browser_closed'] = get_setting('Browser/BrowserPane/Closed', default="false")
+
+ snippets += render_template('browser/js/browser.js', layout_settings=layout_settings)
+
+ # Add module and node specific code
for module in modules_and_nodes:
if 'hooks' in dir(module) and 'get_script_snippets' in dir(module.hooks):
snippets += module.hooks.get_script_snippets()
-
+
resp = Response(response=snippets,
status=200,
mimetype="application/javascript")