Hi,

PFA attached patch for issue RM1318.


Issue fixed: Added help buttons on backup, restore, maintenance, user
management dialogs.



-- 
*Harshal Dhumal*
*Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/browser/__init__.py b/web/pgadmin/browser/__init__.py
index e82b673..8cd356b 100644
--- a/web/pgadmin/browser/__init__.py
+++ b/web/pgadmin/browser/__init__.py
@@ -485,6 +485,15 @@ def index():
 def browser_js():
     layout = get_setting('Browser/Layout', default='')
     snippets = []
+
+    prefs = Preferences.module('paths')
+
+    pg_help_path_pref = prefs.preference('pg_help_path')
+    pg_help_path = pg_help_path_pref.get()
+
+    edbas_help_path_pref = prefs.preference('edbas_help_path')
+    edbas_help_path = edbas_help_path_pref.get()
+
     for submodule in current_blueprint.submodules:
         snippets.extend(submodule.jssnippets)
     return make_response(
@@ -492,6 +501,8 @@ def browser_js():
                 'browser/js/browser.js',
                 layout=layout,
                 jssnippets=snippets,
+                pg_help_path=pg_help_path,
+                edbas_help_path=edbas_help_path,
                 _=gettext
                 ),
             200, {'Content-Type': 'application/x-javascript'})
diff --git a/web/pgadmin/browser/templates/browser/js/browser.js b/web/pgadmin/browser/templates/browser/js/browser.js
index 12ffd6f..91aaa81 100644
--- a/web/pgadmin/browser/templates/browser/js/browser.js
+++ b/web/pgadmin/browser/templates/browser/js/browser.js
@@ -681,10 +681,60 @@ function(require, $, _, S, Bootstrap, pgAdmin, alertify, CodeMirror) {
           // Do nothing as user cancel the operation
         }
       );
+    },
+    // General function to handle callbacks for object or dialog help.
+    showHelp: function(type, url, node, item, label) {
+      if (type == "object_help") {
+        // See if we can find an existing panel, if not, create one
+        pnlSqlHelp = this.docker.findPanels('pnl_sql_help')[0];
+
+        if (pnlSqlHelp == null) {
+          pnlProperties = this.docker.findPanels('properties')[0];
+          this.docker.addPanel('pnl_sql_help', wcDocker.DOCK.STACKED, pnlProperties);
+          pnlSqlHelp = this.docker.findPanels('pnl_sql_help')[0];
+        }
+
+        // Construct the URL
+        server = node.getTreeNodeHierarchy(item).server;
+
+        baseUrl = '{{ pg_help_path }}'
+        if (server.server_type == 'ppas') {
+          baseUrl = '{{ edbas_help_path }}'
+        }
+
+        major = Math.floor(server.version / 10000)
+        minor = Math.floor(server.version / 100) - (major * 100)
+
+        baseUrl = baseUrl.replace('$VERSION$', major + '.' + minor)
+        if (!S(baseUrl).endsWith('/')) {
+          baseUrl = baseUrl + '/'
+        }
+        fullUrl = baseUrl+ url;
+        // Update the panel
+        iframe = $(pnlSqlHelp).data('embeddedFrame');
+        pnlSqlHelp.title('Help: '+ label);
+
+        pnlSqlHelp.focus();
+        iframe.openURL(fullUrl);
+      } else if(type == "dialog_help") {
+        // See if we can find an existing panel, if not, create one
+        pnlDialogHelp = this.docker.findPanels('pnl_online_help')[0];
+
+        if (pnlDialogHelp == null) {
+          pnlProperties = this.docker.findPanels('properties')[0];
+          this.docker.addPanel('pnl_online_help', wcDocker.DOCK.STACKED, pnlProperties);
+          pnlDialogHelp = this.docker.findPanels('pnl_online_help')[0];
+        }
+
+        // Update the panel
+        iframe = $(pnlDialogHelp).data('embeddedFrame');
+
+        pnlDialogHelp.focus();
+        iframe.openURL(url);
+      }
     }
   });
 
-
   window.onbeforeunload = function(ev) {
     var e = ev || window.event;
     if(onbeforeunload_flag) {
diff --git a/web/pgadmin/static/css/overrides.css b/web/pgadmin/static/css/overrides.css
index 403de28..41ffde0 100755
--- a/web/pgadmin/static/css/overrides.css
+++ b/web/pgadmin/static/css/overrides.css
@@ -1028,7 +1028,7 @@ ul.nav.nav-tabs {
 }
 
 .alertify .ajs-footer .ajs-buttons .ajs-button {
-  min-width: 80px;
+  min-width: 40px;
   min-height: 30px;
 }
 
@@ -1343,4 +1343,4 @@ height: calc(100% - 35px);
 
 .pg-panel-statistics-container > table > thead > tr > th:last-child {
   border-right: 0px;
-}
\ No newline at end of file
+}
diff --git a/web/pgadmin/tools/backup/templates/backup/js/backup.js b/web/pgadmin/tools/backup/templates/backup/js/backup.js
index dcdd2a2..8fff960 100644
--- a/web/pgadmin/tools/backup/templates/backup/js/backup.js
+++ b/web/pgadmin/tools/backup/templates/backup/js/backup.js
@@ -385,6 +385,14 @@ TODO LIST FOR BACKUP:
                setup:function() {
                 return {
                   buttons: [{
+                      text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-info',
+                      attrs:{name:'object_help', type:'button', url: 'backup.html', label: '{{ _('Backup') }}'}
+                    },{
+                      text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question',
+                      attrs:{name:'dialog_help', type:'button', label: '{{ _('Backup') }}',
+                      url: '{{ url_for('help.static', filename='backup_dialog.html') }}'
+                      }
+                    },{
                     text: '{{ _('Backup') }}', key: 27, className: 'btn btn-primary fa fa-lg fa-save pg-alertify-button'
                     },{
                     text: '{{ _('Cancel') }}', key: 27, className: 'btn btn-danger fa fa-lg fa-times pg-alertify-button'
@@ -414,7 +422,7 @@ TODO LIST FOR BACKUP:
               prepare: function() {
                 var self = this;
                 // Disable Backup button until user provides Filename
-                this.__internal.buttons[0].element.disabled = true;
+                this.__internal.buttons[2].element.disabled = true;
 
                 var $container = $("<div class='backup_dialog'></div>");
                 // Find current/selected node
@@ -451,22 +459,30 @@ TODO LIST FOR BACKUP:
                 this.view.model.on('change', function() {
                     if (!_.isUndefined(this.get('file')) && this.get('file') !== '') {
                       this.errorModel.clear();
-                      self.__internal.buttons[0].element.disabled = false;
+                      self.__internal.buttons[2].element.disabled = false;
                     } else {
-                      self.__internal.buttons[0].element.disabled = true;
+                      self.__internal.buttons[2].element.disabled = true;
                       this.errorModel.set('file', '{{ _('Please provide filename') }}')
                     }
                 });
               },
               // Callback functions when click on the buttons of the Alertify dialogs
               callback: function(e) {
-                if (e.button.text === '{{ _('Backup') }}') {
-                  // Fetch current server id
+                // Fetch current server id
                   var t = pgBrowser.tree,
                     i = t.selected(),
                     d = i && i.length == 1 ? t.itemData(i) : undefined,
                     node = d && pgBrowser.Nodes[d._type];
 
+                if (e.button.element.name == "dialog_help" || e.button.element.name == "object_help") {
+                  e.cancel = true;
+                  pgBrowser.showHelp(e.button.element.name, e.button.element.getAttribute('url'),
+                    node, i, e.button.element.getAttribute('label'));
+                  return;
+                }
+
+                if (e.button.text === '{{ _('Backup') }}') {
+
                   if (!d)
                     return;
 
@@ -533,6 +549,13 @@ TODO LIST FOR BACKUP:
                setup:function() {
                 return {
                   buttons: [{
+                      text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-info',
+                      attrs:{name:'object_help', type:'button', url: 'backup.html', label: '{{ _('Backup') }}'}
+                    },{
+                      text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question',
+                      attrs:{name:'dialog_help', type:'button', label: '{{ _('Backup') }}',
+                      url: '{{ url_for('help.static', filename='backup_dialog.html') }}'}
+                    },{
                     text: '{{ _('Backup') }}', key: 27, className: 'btn btn-primary fa fa-lg fa-save pg-alertify-button'
                     },{
                     text: '{{ _('Cancel') }}', key: 27, className: 'btn btn-danger fa fa-lg fa-times pg-alertify-button'
@@ -561,7 +584,7 @@ TODO LIST FOR BACKUP:
               prepare: function() {
                 var self = this;
                 // Disable Backup button until user provides Filename
-                this.__internal.buttons[0].element.disabled = true;
+                this.__internal.buttons[2].element.disabled = true;
                 var $container = $("<div class='backup_dialog'></div>");
                 var t = pgBrowser.tree,
                   i = t.selected(),
@@ -596,9 +619,9 @@ TODO LIST FOR BACKUP:
                 this.view.model.on('change', function() {
                     if (!_.isUndefined(this.get('file')) && this.get('file') !== '') {
                       this.errorModel.clear();
-                      self.__internal.buttons[0].element.disabled = false;
+                      self.__internal.buttons[2].element.disabled = false;
                     } else {
-                      self.__internal.buttons[0].element.disabled = true;
+                      self.__internal.buttons[2].element.disabled = true;
                       this.errorModel.set('file', '{{ _('Please provide filename') }}')
                     }
                 });
@@ -606,13 +629,20 @@ TODO LIST FOR BACKUP:
               },
               // Callback functions when click on the buttons of the Alertify dialogs
               callback: function(e) {
-                if (e.button.text === "Backup") {
-                  // Fetch current server id
+                // Fetch current server id
                   var t = pgBrowser.tree,
                     i = t.selected(),
                     d = i && i.length == 1 ? t.itemData(i) : undefined,
                     node = d && pgBrowser.Nodes[d._type];
 
+                if (e.button.element.name == "dialog_help" || e.button.element.name == "object_help") {
+                  e.cancel = true;
+                  pgBrowser.showHelp(e.button.element.name, e.button.element.getAttribute('url'),
+                    node, i, e.button.element.getAttribute('label'));
+                  return;
+                }
+
+                if (e.button.text === "Backup") {
                   if (!d)
                     return;
 
diff --git a/web/pgadmin/tools/maintenance/templates/maintenance/js/maintenance.js b/web/pgadmin/tools/maintenance/templates/maintenance/js/maintenance.js
index 03e8c7e..d8267d5 100644
--- a/web/pgadmin/tools/maintenance/templates/maintenance/js/maintenance.js
+++ b/web/pgadmin/tools/maintenance/templates/maintenance/js/maintenance.js
@@ -191,20 +191,39 @@ define(
               },
               setup:function() {
                 return {
-                  buttons:[{ text: "{{ _('OK') }}", key: 27, className: "btn btn-primary fa fa-lg fa-save pg-alertify-button" },
-                       { text: "{{ _('Cancel') }}", key: 27, className: "btn btn-danger fa fa-lg fa-times pg-alertify-button" }],
+                  buttons:[{
+                    text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-info',
+                    attrs:{name:'object_help', type:'button', url: 'maintenance.html', label: '{{ _('Maintenance') }}'}
+                  },{
+                    text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question',
+                    attrs:{name:'dialog_help', type:'button', label: '{{ _('Maintenance') }}',
+                    url: '{{ url_for('help.static', filename='maintenance_dialog.html') }}'}
+                  },{
+                    text: "{{ _('OK') }}", key: 27, className: "btn btn-primary fa fa-lg fa-save pg-alertify-button"
+                  },{
+                    text: "{{ _('Cancel') }}", key: 27, className: "btn btn-danger fa fa-lg fa-times pg-alertify-button"
+                  }],
                   options: { modal: 0}
                 };
               },
               // Callback functions when click on the buttons of the Alertify dialogs
               callback: function(e) {
+                var i = pgBrowser.tree.selected(),
+                  d = i && i.length == 1 ? pgBrowser.tree.itemData(i) : undefined,
+                  node = d && pgBrowser.Nodes[d._type];
+
+                if (e.button.element.name == "dialog_help" || e.button.element.name == "object_help") {
+                  e.cancel = true;
+                  pgBrowser.showHelp(e.button.element.name, e.button.element.getAttribute('url'),
+                    node, i, e.button.element.getAttribute('label'));
+                  return;
+                }
+
                 if (e.button.text === "{{ _('OK') }}") {
 
                   var schema = '';
                   var table = '';
-                  var i = pgBrowser.tree.selected(),
-                  d = i && i.length == 1 ? pgBrowser.tree.itemData(i) : undefined,
-                  node = d && pgBrowser.Nodes[d._type];
+
 
                   if (!d)
                     return;
diff --git a/web/pgadmin/tools/restore/templates/restore/js/restore.js b/web/pgadmin/tools/restore/templates/restore/js/restore.js
index cf4dfbe..95fd80e 100644
--- a/web/pgadmin/tools/restore/templates/restore/js/restore.js
+++ b/web/pgadmin/tools/restore/templates/restore/js/restore.js
@@ -308,6 +308,13 @@ define([
                setup:function() {
                 return {
                   buttons: [{
+                    text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-info',
+                    attrs:{name:'object_help', type:'button', url: 'backup.html', label: '{{ _('Restore') }}'}
+                  },{
+                    text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question',
+                    attrs:{name:'dialog_help', type:'button', label: '{{ _('Restore') }}',
+                    url: '{{ url_for('help.static', filename='restore_dialog.html') }}'}
+                  },{
                     text: '{{ _('Restore') }}', key: 27,
                     className: 'btn btn-primary', restore: true
                   },{
@@ -344,7 +351,7 @@ define([
 
                 var self = this;
                 // Disable Backup button until user provides Filename
-                this.__internal.buttons[0].element.disabled = true;
+                this.__internal.buttons[2].element.disabled = true;
                 var $container = $("<div class='restore_dialog'></div>");
                 var t = pgBrowser.tree,
                   i = t.selected(),
@@ -367,7 +374,7 @@ define([
                   el: $container, model: newModel, schema: fields
                 });
 
-                $(this.elements.body.childNodes[0]).addClass(
+                $(this.elements.body.childNodes[2]).addClass(
                   'alertify_tools_dialog_properties obj_properties'
                 );
 
@@ -379,9 +386,9 @@ define([
                 this.view.model.on('change', function() {
                     if (!_.isUndefined(this.get('file')) && this.get('file') !== '') {
                       this.errorModel.clear();
-                      self.__internal.buttons[0].element.disabled = false;
+                      self.__internal.buttons[2].element.disabled = false;
                     } else {
-                      self.__internal.buttons[0].element.disabled = true;
+                      self.__internal.buttons[2].element.disabled = true;
                       this.errorModel.set('file', '{{ _('Please provide filename') }}')
                     }
                 });
@@ -389,17 +396,24 @@ define([
               },
               // Callback functions when click on the buttons of the Alertify dialogs
               callback: function(e) {
-                if (e.button.restore) {
-                  // Fetch current server id
-                  var t = pgBrowser.tree,
-                    i = this.settings['pg_item'] || t.selected(),
-                    d = this.settings['pg_item_data'] || (
-                      i && i.length == 1 ? t.itemData(i) : undefined
-                    ),
-                    node = this.settings['pg_node'] || (
-                      d && pgBrowser.Nodes[d._type]
-                    );
+                // Fetch current server id
+                var t = pgBrowser.tree,
+                  i = this.settings['pg_item'] || t.selected(),
+                  d = this.settings['pg_item_data'] || (
+                    i && i.length == 1 ? t.itemData(i) : undefined
+                  ),
+                  node = this.settings['pg_node'] || (
+                    d && pgBrowser.Nodes[d._type]
+                  );
 
+                if (e.button.element.name == "dialog_help" || e.button.element.name == "object_help") {
+                  e.cancel = true;
+                  pgBrowser.showHelp(e.button.element.name, e.button.element.getAttribute('url'),
+                    node, i, e.button.element.getAttribute('label'));
+                  return;
+                }
+
+                if (e.button.restore) {
                   if (!d)
                     return;
 
diff --git a/web/pgadmin/tools/user_management/templates/user_management/js/user_management.js b/web/pgadmin/tools/user_management/templates/user_management/js/user_management.js
index 7fb54bd..4e01863 100644
--- a/web/pgadmin/tools/user_management/templates/user_management/js/user_management.js
+++ b/web/pgadmin/tools/user_management/templates/user_management/js/user_management.js
@@ -377,6 +377,10 @@ define([
               setup:function() {
                 return {
                   buttons: [{
+                    text: '', key: 27, className: 'btn btn-default pull-left fa fa-lg fa-question',
+                    attrs:{name:'dialog_help', type:'button', label: '{{ _('Users') }}',
+                    url: '{{ url_for('help.static', filename='user_management_dialog.html') }}'}
+                  },{
                     text: '{{ _('Close') }}', key: 27, className: 'btn btn-danger fa fa-lg fa-times pg-alertify-button user_management_pg-alertify-button',
                     attrs:{name:'close', type:'button'}
                   }],
@@ -621,6 +625,12 @@ define([
                 });
               },
               callback: function(e) {
+                if (e.button.element.name == "dialog_help") {
+                  e.cancel = true;
+                  pgBrowser.showHelp(e.button.element.name, e.button.element.getAttribute('url'),
+                    null, null, e.button.element.getAttribute('label'));
+                  return;
+                }
                 if (e.button.element.name == "close") {
                   var self = this;
                   if (!_.all(this.userCollection.pluck('id')) || !_.isEmpty(this.userCollection.invalidUsers)) {
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to