1 if(!dojo._hasResource['openils.widget.EditPane']) {
2 dojo.provide('openils.widget.EditPane');
3 dojo.require('openils.widget.AutoWidget');
4 dojo.require('fieldmapper.Fieldmapper');
5 dojo.require('dijit.layout.ContentPane');
6 dojo.require('openils.Util');
7 dojo.require('openils.User');
8 dojo.require('fieldmapper.IDL');
9 dojo.require('openils.PermaCrud');
12 'openils.widget.EditPane',
13 [dijit.layout.ContentPane],
18 fieldOrder : null, // ordered list of field names, optional.
19 fieldList : [], // holds the field name + associated widget
20 sortedFieldList : [], // holds the sorted IDL defs for our fields
21 onPostApply : null, // apply callback
22 onCancel : null, // cancel callback
23 hideActionButtons : false,
25 constructor : function(args) {
31 * Builds a basic table of key / value pairs. Keys are IDL display labels.
32 * Values are dijit's, when values set
34 startup : function() {
35 this.inherited(arguments);
36 this.fmClass = (this.fmObject) ? this.fmObject.classname : this.fmClass;
37 this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass];
39 var table = document.createElement('table');
40 var tbody = document.createElement('tbody');
41 this.domNode.appendChild(table);
42 table.appendChild(tbody);
45 if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode])
46 this.limitPerms = this.fmIDL.permacrud[this.mode].perms;
48 this._buildSortedFieldList()
50 for(var f in this.sortedFieldList) {
51 var field = this.sortedFieldList[f];
52 if(!field || field.virtual) continue;
54 var row = document.createElement('tr');
55 var nameTd = document.createElement('td');
56 var valTd = document.createElement('td');
58 nameTd.appendChild(document.createTextNode(field.label));
59 row.appendChild(nameTd);
60 row.appendChild(valTd);
61 tbody.appendChild(row);
63 var widget = new openils.widget.AutoWidget({
65 fmObject : this.fmObject,
67 orgLimitPerms : this.limitPerms
70 this.fieldList.push({name:field.name, widget:widget});
72 if(!this.hideActionButtons)
73 this.buildActionButtons(tbody);
75 openils.Util.addCSSClass(table, 'oils-fm-edit-dialog');
78 buildActionButtons : function(tbody) {
79 var row = document.createElement('tr');
80 var cancelTd = document.createElement('td');
81 var applyTd = document.createElement('td');
82 row.appendChild(cancelTd);
83 row.appendChild(applyTd);
84 tbody.appendChild(row);
87 new dijit.form.Button({
88 label:'Cancel', // XXX
89 onClick : this.onCancel
92 new dijit.form.Button({
95 self.performEditAction({
96 oncomplete:function() {
105 getFields : function() {
106 return this.fieldList.map(function(a) { return a.name });
109 getFieldValue : function(field) {
110 for(var i in this.fieldList) {
111 if(field == this.fieldList[i].name)
112 return this.fieldList[i].widget.getFormattedValue();
116 _buildSortedFieldList : function() {
117 this.sortedFieldList = [];
119 if(this.fieldOrder) {
121 for(var idx in this.fieldOrder) {
122 var name = this.fieldOrder[idx];
123 for(var idx2 in this.fmIDL.fields) {
124 if(this.fmIDL.fields[idx2].name == name) {
125 this.sortedFieldList.push(this.fmIDL.fields[idx2]);
131 // if the user-defined order does not list all fields,
132 // shove the extras on the end.
134 for(var idx in this.fmIDL.fields) {
135 var name = this.fmIDL.fields[idx].name;
136 if(this.fieldOrder.indexOf(name) < 0) {
137 anonFields.push(this.fmIDL.fields[idx]);
141 anonFields = anonFields.sort(
143 if(a.label > b.label) return 1;
144 if(a.label < b.label) return -1;
149 this.sortedFieldList = this.sortedFieldList.concat(anonFields);
152 // no sort order defined, sort all fields on display label
154 for(var f in this.fmIDL.fields)
155 this.sortedFieldList.push(this.fmIDL.fields[f]);
156 this.sortedFieldList = this.sortedFieldList.sort(
157 // by default, sort on label
159 if(a.label > b.label) return 1;
160 if(a.label < b.label) return -1;
167 performEditAction : function(opts) {
168 var pcrud = new openils.PermaCrud();
169 var fields = this.getFields();
170 if(this.mode == 'create')
171 this.fmObject = new fieldmapper[this.fmClass]();
172 for(var idx in fields)
173 this.fmObject[fields[idx]](this.getFieldValue(fields[idx]));
174 pcrud[this.mode](this.fmObject, opts);