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');
9 dojo.require('dijit.form.Button');
12 'openils.widget.EditPane',
13 [dijit.layout.ContentPane, openils.widget.AutoWidget],
16 onPostSubmit : null, // apply callback
17 onCancel : null, // cancel callback
18 hideActionButtons : false,
20 constructor : function(args) {
27 * Builds a basic table of key / value pairs. Keys are IDL display labels.
28 * Values are dijit's, when values set
30 startup : function() {
31 this.inherited(arguments);
34 this.hideActionButtons = true;
36 var table = this.table = document.createElement('table');
37 var tbody = document.createElement('tbody');
38 this.domNode.appendChild(table);
39 table.appendChild(tbody);
42 if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode])
43 this.limitPerms = this.fmIDL.permacrud[this.mode].perms;
45 if(!this.overrideWidgets)
46 this.overrideWidgets = {};
48 if(!this.overrideWidgetClass)
49 this.overrideWidgetClass = {};
51 for(var f in this.sortedFieldList) {
52 var field = this.sortedFieldList[f];
53 if(!field || field.virtual) continue;
55 if(field.name == this.fmIDL.pkey && this.mode == 'create' && this.fmIDL.pkey_sequence)
56 continue; /* don't show auto-generated fields on create */
58 var row = document.createElement('tr');
59 var nameTd = document.createElement('td');
60 var valTd = document.createElement('td');
61 var valSpan = document.createElement('span');
62 valTd.appendChild(valSpan);
65 nameTd.appendChild(document.createTextNode(field.label));
66 row.setAttribute('fmfield', field.name);
67 row.appendChild(nameTd);
68 row.appendChild(valTd);
69 tbody.appendChild(row);
71 var widget = new openils.widget.AutoFieldWidget({
73 fmObject : this.fmObject,
74 fmClass : this.fmClass,
76 orgLimitPerms : this.limitPerms,
77 readOnly : this.readOnly,
78 widget : this.overrideWidgets[field.name],
79 widgetClass : this.overrideWidgetClass[field.name],
80 disableWidgetTest : this.disableWidgetTest
84 this.fieldList.push({name:field.name, widget:widget});
86 if(!this.hideActionButtons)
87 this.buildActionButtons(tbody);
89 openils.Util.addCSSClass(table, 'oils-fm-edit-pane');
92 applySaveOnEnter : function(widget) {
94 dojo.connect(this, 'onKeyDown',
96 if(e.keyCode == dojo.keys.ENTER)
97 self.performAutoEditAction();
102 buildActionButtons : function(tbody) {
103 var row = document.createElement('tr');
104 var cancelTd = document.createElement('td');
105 var applyTd = document.createElement('td');
106 var cancelSpan = document.createElement('span');
107 var applySpan = document.createElement('span');
108 row.appendChild(cancelTd);
109 row.appendChild(applyTd);
110 cancelTd.appendChild(cancelSpan);
111 applyTd.appendChild(applySpan);
112 tbody.appendChild(row);
115 new dijit.form.Button({
116 label:'Cancel', // XXX
117 onClick : this.onCancel
120 new dijit.form.Button({
122 onClick: function() {self.performAutoEditAction();}
126 getFields : function() {
127 return this.fieldList.map(function(a) { return a.name });
130 getFieldValue : function(field) {
131 for(var i in this.fieldList) {
132 if(field == this.fieldList[i].name)
133 return this.fieldList[i].widget.getFormattedValue();
137 performAutoEditAction : function() {
139 self.performEditAction({
140 oncomplete:function(r) {
141 if(self.onPostSubmit)
142 self.onPostSubmit(r);
147 performEditAction : function(opts) {
148 var pcrud = new openils.PermaCrud();
149 var fields = this.getFields();
150 if(this.mode == 'create')
151 this.fmObject = new fieldmapper[this.fmClass]();
152 for(var idx in fields)
153 this.fmObject[fields[idx]](this.getFieldValue(fields[idx]));
154 if(this.mode == 'create' && this.fmIDL.pkey_sequence)
155 this.fmObject[this.fmIDL.pkey](null);
156 pcrud[this.mode](this.fmObject, opts);