1 if(!dojo._hasResource['openils.widget.EditPane']) {
2 dojo.provide('openils.widget.EditPane');
3 dojo.require('openils.widget.AutoWidget');
4 dojo.require('openils.widget.AutoFieldWidget');
5 dojo.require('fieldmapper.Fieldmapper');
6 dojo.require('dijit.layout.ContentPane');
7 dojo.require('openils.Util');
8 dojo.require('openils.PermaCrud');
11 'openils.widget.EditPane',
12 [dijit.layout.ContentPane, openils.widget.AutoWidget],
15 onPostSubmit : null, // apply callback
16 onCancel : null, // cancel callback
17 hideActionButtons : false,
19 constructor : function(args) {
26 * Builds a basic table of key / value pairs. Keys are IDL display labels.
27 * Values are dijit's, when values set
29 startup : function() {
30 this.inherited(arguments);
33 this.hideActionButtons = true;
35 var table = this.table = document.createElement('table');
36 var tbody = document.createElement('tbody');
37 this.domNode.appendChild(table);
38 table.appendChild(tbody);
41 if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode])
42 this.limitPerms = this.fmIDL.permacrud[this.mode].perms;
44 if(!this.overrideWidgets)
45 this.overrideWidgets = {};
47 for(var f in this.sortedFieldList) {
48 var field = this.sortedFieldList[f];
49 if(!field || field.virtual) continue;
51 if(field.name == this.fmIDL.pkey && this.mode == 'create' && this.fmIDL.pkey_sequence)
52 continue; /* don't show auto-generated fields on create */
54 var row = document.createElement('tr');
55 var nameTd = document.createElement('td');
56 var valTd = document.createElement('td');
57 var valSpan = document.createElement('span');
58 valTd.appendChild(valSpan);
61 nameTd.appendChild(document.createTextNode(field.label));
62 row.setAttribute('fmfield', field.name);
63 row.appendChild(nameTd);
64 row.appendChild(valTd);
65 tbody.appendChild(row);
67 var widget = new openils.widget.AutoFieldWidget({
69 fmObject : this.fmObject,
70 fmClass : this.fmClass,
72 orgLimitPerms : this.limitPerms,
73 readOnly : this.readOnly,
74 widget : this.overrideWidgets[field.name]
78 this.fieldList.push({name:field.name, widget:widget});
79 //this.applySaveOnEnter(widget);
81 if(!this.hideActionButtons)
82 this.buildActionButtons(tbody);
84 openils.Util.addCSSClass(table, 'oils-fm-edit-pane');
87 applySaveOnEnter : function(widget) {
89 dojo.connect(this, 'onKeyDown',
91 if(e.keyCode == dojo.keys.ENTER)
92 self.performAutoEditAction();
97 buildActionButtons : function(tbody) {
98 var row = document.createElement('tr');
99 var cancelTd = document.createElement('td');
100 var applyTd = document.createElement('td');
101 var cancelSpan = document.createElement('span');
102 var applySpan = document.createElement('span');
103 row.appendChild(cancelTd);
104 row.appendChild(applyTd);
105 cancelTd.appendChild(cancelSpan);
106 applyTd.appendChild(applySpan);
107 tbody.appendChild(row);
110 new dijit.form.Button({
111 label:'Cancel', // XXX
112 onClick : this.onCancel
115 new dijit.form.Button({
117 onClick: function() {self.performAutoEditAction();}
121 getFields : function() {
122 return this.fieldList.map(function(a) { return a.name });
125 getFieldValue : function(field) {
126 for(var i in this.fieldList) {
127 if(field == this.fieldList[i].name)
128 return this.fieldList[i].widget.getFormattedValue();
132 performAutoEditAction : function() {
134 self.performEditAction({
135 oncomplete:function(r) {
136 if(self.onPostSubmit)
137 self.onPostSubmit(r);
142 performEditAction : function(opts) {
143 var pcrud = new openils.PermaCrud();
144 var fields = this.getFields();
145 if(this.mode == 'create')
146 this.fmObject = new fieldmapper[this.fmClass]();
147 for(var idx in fields)
148 this.fmObject[fields[idx]](this.getFieldValue(fields[idx]));
149 if(this.mode == 'create' && this.fmIDL.pkey_sequence)
150 this.fmObject[this.fmIDL.pkey](null);
151 pcrud[this.mode](this.fmObject, opts);