Integrate the new mechanism for the data session management in the

variable control, privilege control, which specifies the keys - which
helps identify the data from the collection. Also, resolved an version
compatibility issue with the variable control.
This commit is contained in:
Ashesh Vashi 2016-01-15 16:47:17 +05:30
parent 586b81b162
commit 3a06758b94
4 changed files with 57 additions and 31 deletions

View File

@ -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
});

View File

@ -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);

View File

@ -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.

View File

@ -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'),