diff --git a/web/pgadmin/browser/server_groups/servers/static/js/privilege.js b/web/pgadmin/browser/server_groups/servers/static/js/privilege.js index 2f6f0524b..7d2ccc4c0 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/privilege.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/privilege.js @@ -59,6 +59,7 @@ grantor: undefined, privileges: undefined }, + keys: ['grantee', 'grantor'], /* * Each of the database object needs to extend this model, which should * provide the type of privileges (it supports). @@ -67,7 +68,7 @@ schema: [{ id: 'grantee', label:'Grantee', type:'text', group: null, cell: 'string', - disabled: true, cellHeaderClasses: 'width_percent_40' + disabled: false, cellHeaderClasses: 'width_percent_40' }, { id: 'privileges', label:'Privileges', type: 'collection', model: PrivilegeModel, group: null, @@ -93,7 +94,8 @@ privileges = new (pgNode.Collection)( models, { model: PrivilegeModel, - handler: this.handler || this, + top: this.top || this, + handler: this, silent: true, parse: false }); diff --git a/web/pgadmin/browser/server_groups/servers/static/js/variable.js b/web/pgadmin/browser/server_groups/servers/static/js/variable.js index 660b65d9f..bb6895163 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/variable.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/variable.js @@ -38,10 +38,11 @@ var VariableModel = pgNode.VariableModel = pgNode.Model.extend({ defaults: { name: undefined, - value: undefined, + value: '', role: undefined, database: undefined, }, + keys: ['name', 'role', 'database'], schema: [ {id: 'name', label:'Name', type:'text', editable: false, cellHeaderClasses: 'width_percent_30'}, { @@ -57,7 +58,7 @@ // Remove not defined values from model values. // i.e. // role, database - if (_.isUndefined(d.database)) { + if (_.isUndefined(d.database) || _.isNull(d.database)) { delete d.database; } @@ -66,6 +67,20 @@ } return d; + }, + validate: function() { + if (_.isUndefined(this.get('value')) || + String(this.get('value')).replace(/^\s+|\s+$/g, '') == '') { + var msg = 'Please enter some value!'; + + this.errorModel.set('value', msg); + + return msg; + } else { + this.errorModel.unset('value'); + } + + return null; } }); @@ -306,7 +321,10 @@ url = this.field.get('url'), m = self.model; - if (this.field.get('version_compitible') && url && !m.isNew()) { + if (!this.field.get('version_compitible')) + return; + + if (url && !m.isNew()) { var node = self.field.get('node'), node_data = self.field.get('node_data'), node_info = self.field.get('node_info'), @@ -314,9 +332,14 @@ node, [ null, url, node_data, true, node_info ]), - data; + data, + isTracking = self.collection.trackChanges; + + if (isTracking) { + self.collection.stopSession(); + } + m.trigger('pgadmin-view:fetching', m, self.field); - m.trigger('pgadmin:view:fetching', m, self.field); $.ajax({ async: false, url: full_url, @@ -324,19 +347,20 @@ data = res.data; }, error: function() { - m.trigger('pgadmin:view:fetch:error', m, self.field); + m.trigger('pgadmin-view:fetch:error', m, self.field); } }); - m.trigger('pgadmin:view:fetched', m, self.field); + m.trigger('pgadmin-view:fetched', m, self.field); if (data && _.isArray(data)) { self.collection.reset(data, {silent: true}); - /* - * Make sure - new data will be taken care by the session management - */ + } + /* + * Make sure - new data will be taken care by the session management + */ + if (isTracking) { self.collection.startNewSession(); } - } else { } }, @@ -417,11 +441,8 @@ }, events: _.extend( - {}, - Backform.UniqueColCollectionControl.prototype.events, - { - 'click button.add': 'addVariable' - } + {}, Backform.UniqueColCollectionControl.prototype.events, + {'click button.add': 'addVariable'} ), showGridControl: function(data) { @@ -481,8 +502,10 @@ var self = this, m = new (self.field.get('model'))( - self.headerData.toJSON(), {silent: true} - ), + self.headerData.toJSON(), { + silent: true, top: self.collection.top, + handler: self.collection + }), coll = self.model.get(self.field.get('name')); coll.add(m); diff --git a/web/pgadmin/browser/static/js/node.ui.js b/web/pgadmin/browser/static/js/node.ui.js index 7642a47da..722cab320 100644 --- a/web/pgadmin/browser/static/js/node.ui.js +++ b/web/pgadmin/browser/static/js/node.ui.js @@ -69,7 +69,7 @@ function($, _, pgAdmin, Backbone, Backform, Alertify, Node) { */ var self = this, url = self.field.get('url') || self.defaults.url, - m = self.model.handler || self.model; + m = self.model.top || self.model; // Hmm - we found the url option. // That means - we needs to fetch the options from that node. diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js index 42aaa5574..fb8010e5c 100644 --- a/web/pgadmin/static/js/backform.pgadmin.js +++ b/web/pgadmin/static/js/backform.pgadmin.js @@ -149,7 +149,7 @@ attrArr = d.split('.'); name = attrArr.shift(); - self.stopListening(that.model, "change:" + name, self.render); + self.stopListening(self.model, "change:" + name, self.render); }); } @@ -451,11 +451,11 @@ 'hidden.bs.tab', function() { self.hidden_tab = $(this).data('tabIndex'); }).on('shown.bs.tab', function() { - var that = this; - self.shown_tab = $(that).data('tabIndex'); + var self = this; + self.shown_tab = $(self).data('tabIndex'); m.trigger('pg-property-tab-changed', { 'model': m, 'shown': self.shown_tab, 'hidden': self.hidden_tab, - 'tab': that + 'tab': self }); }); }); @@ -650,7 +650,8 @@ { model: self.field.get('model'), silent: true, - handler: self.model.handler || self.model + handler: self.model.handler || self.model, + attrName: self.field.get('name') }); self.model.set(self.field.get('name'), collection, {silent: true}); } @@ -664,8 +665,8 @@ var self = this; if (this.field.get('version_compitible')) { - self.stopListening(collection, "add", self.collectionChanged); - self.stopListening(collection, "change", self.collectionChanged); + self.stopListening(self.collection, "add", self.collectionChanged); + self.stopListening(self.collection, "change", self.collectionChanged); } Backform.Control.prototype.remove.apply(this, arguments); @@ -1084,13 +1085,13 @@ this.sqlTab = sqlTab; return this; }, - onTabChange: function() { + onTabChange: function(obj) { // Fetch the information only if the SQL tab is visible at the moment. - if (this.dialog && this.dialog.shown_tab == this.tabIndex) { + if (this.dialog && obj.shown == this.tabIndex) { // We will send request to sever only if something is changed in model - if(_.size(this.model.sessAttrs)) { + if(this.model.sessChanged()) { var self = this, node = self.field.get('schema_node'),