diff --git a/web/pgadmin/static/js/backform.pgadmin.js b/web/pgadmin/static/js/backform.pgadmin.js index aca7bc2..f18fceb 100644 --- a/web/pgadmin/static/js/backform.pgadmin.js +++ b/web/pgadmin/static/js/backform.pgadmin.js @@ -899,7 +899,9 @@ }, render: function() { // Clean up existing elements + this.undelegateEvents(); + this.$el.empty(); var field = _.defaults(this.field.toJSON(), this.defaults), attributes = this.model.toJSON(), @@ -927,6 +929,7 @@ canAdd: (field.version_compatible && evalF.apply(this.field, [data.canAdd, data, this.model]) ), + canAddRow: data.canAddRow, canDelete: evalF.apply(this.field, [data.canDelete, data, this.model]), canEdit: evalF.apply(this.field, [data.canEdit, data, this.model]) }); @@ -978,7 +981,8 @@ gridSchema.columns.unshift({ name: "pg-backform-delete", label: "", cell: Backgrid.Extension.DeleteCell, - editable: false, cell_priority: -1 + editable: false, cell_priority: -1, + canDeleteRow: data.canDeleteRow }); } @@ -990,7 +994,7 @@ gridSchema.columns.unshift({ name: "pg-backform-edit", label: "", cell : editCell, - cell_priority: -2 + cell_priority: -2, canEditRow: data.canEditRow }); } @@ -1041,7 +1045,9 @@ if (!(data.disabled || data.canAdd == false)) { $dialog.find('button.add').first().click(function(e) { e.preventDefault(); - + var canAddRow = _.isFunction(data.canAddRow) ? + data.canAddRow.apply(self, [self.model]) : true; + if(canAddRow) { // Close any existing expanded row before adding new one. _.each(grid.body.rows, function(row){ var editCell = row.$el.find(".subnode-edit-in-process").parent(); @@ -1089,6 +1095,7 @@ $(newRow).pgMakeVisible('backform-tab'); return false; + } }); } @@ -1143,6 +1150,7 @@ visible: evalF(data.visible, data, this.model), required: evalF(data.required, data, this.model), canAdd: evalF(data.canAdd, data, this.model), + canAddRow: data.canAddRow, canEdit: evalF(data.canEdit, data, this.model), canDelete: evalF(data.canDelete, data, this.model) }); @@ -1200,7 +1208,8 @@ gridSchema.columns.unshift({ name: "pg-backform-delete", label: "", cell: Backgrid.Extension.DeleteCell, - editable: false, cell_priority: -1 + editable: false, cell_priority: -1, + canDeleteRow: data.canDeleteRow }); } @@ -1214,7 +1223,8 @@ gridSchema.columns.unshift({ name: "pg-backform-edit", label: "", cell : editCell, - cell_priority: -2, editable: canEdit + cell_priority: -2, editable: canEdit, + canEditRow: data.canEditRow }); } @@ -1272,25 +1282,29 @@ // Add button callback $dialog.find('button.add').click(function(e) { - e.preventDefault(); - // Close any existing expanded row before adding new one. - _.each(grid.body.rows, function(row){ - var editCell = row.$el.find(".subnode-edit-in-process").parent(); - // Only close row if it's open. - if (editCell.length > 0){ - var event = new Event('click'); - editCell[0].dispatchEvent(event); - } - }); + e.preventDefault(); + var canAddRow = _.isFunction(data.canAddRow) ? + data.canAddRow.apply(self, [self.model]) : true; + if(canAddRow) { + // Close any existing expanded row before adding new one. + _.each(grid.body.rows, function(row){ + var editCell = row.$el.find(".subnode-edit-in-process").parent(); + // Only close row if it's open. + if (editCell.length > 0){ + var event = new Event('click'); + editCell[0].dispatchEvent(event); + } + }); - grid.insertRow({}); + grid.insertRow({}); - var newRow = $(grid.body.rows[collection.length - 1].$el); - newRow.attr("class", "new").click(function(e) { - $(this).attr("class", "editable"); - }); - $(newRow).pgMakeVisible('backform-tab'); - return false; + var newRow = $(grid.body.rows[collection.length - 1].$el); + newRow.attr("class", "new").click(function(e) { + $(this).attr("class", "editable"); + }); + $(newRow).pgMakeVisible('backform-tab'); + return false; + } }); return $dialog; @@ -1662,8 +1676,11 @@ subnode: ((_.isString(s.model) && s.model in pgBrowser.Nodes) ? pgBrowser.Nodes[s.model].model : s.model), canAdd: (disabled ? false : evalASFunc(s.canAdd)), + canAddRow: (disabled ? false : evalASFunc(s.canAddRow)), canEdit: (disabled ? false : evalASFunc(s.canEdit)), canDelete: (disabled ? false : evalASFunc(s.canDelete)), + canEditRow: (disabled ? false : evalASFunc(s.canEditRow)), + canDeleteRow: (disabled ? false : evalASFunc(s.canDeleteRow)), transform: evalASFunc(s.transform), mode: mode, control: control,