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');
11 'openils.widget.EditPane',
12 [dijit.layout.ContentPane],
17 fieldOrder : null, // ordered list of field names, optional.
18 fieldList : [], // holds the field name + associated widget
19 sortedFieldList : [], // holds the sorted IDL defs for our fields
22 * Builds a basic table of key / value pairs. Keys are IDL display labels.
23 * Values are dijit's, when values set
25 startup : function() {
26 this.inherited(arguments);
27 this.fmClass = (this.fmObject) ? this.fmObject.classname : this.fmClass;
28 this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass];
30 var table = document.createElement('table');
31 var tbody = document.createElement('tbody');
32 this.domNode.appendChild(table);
33 table.appendChild(tbody);
36 if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode])
37 this.limitPerms = this.fmIDL.permacrud[this.mode].perms;
39 this._buildSortedFieldList()
41 for(var f in this.sortedFieldList) {
42 var field = this.sortedFieldList[f];
43 if(!field || field.virtual) continue;
45 var row = document.createElement('tr');
46 var nameTd = document.createElement('td');
47 var valTd = document.createElement('td');
49 nameTd.appendChild(document.createTextNode(field.label));
50 row.appendChild(nameTd);
51 row.appendChild(valTd);
52 tbody.appendChild(row);
54 var widget = new openils.widget.AutoWidget({
56 fmObject : this.fmObject,
58 orgLimitPerms : this.limitPerms
61 this.fieldList.push({name:field.name, widget:widget});
64 openils.Util.addCSSClass(table, 'oils-fm-edit-dialog');
67 getFields : function() {
68 return this.fieldList.map(function(a) { return a.name });
71 getFieldValue : function(field) {
72 for(var i in this.fieldList) {
73 if(field == this.fieldList[i].name)
74 return this.fieldList[i].widget.getFormattedValue();
78 _buildSortedFieldList : function() {
79 this.sortedFieldList = [];
83 for(var idx in this.fieldOrder) {
84 var name = this.fieldOrder[idx];
85 for(var idx2 in this.fmIDL.fields) {
86 if(this.fmIDL.fields[idx2].name == name) {
87 this.sortedFieldList.push(this.fmIDL.fields[idx2]);
93 // if the user-defined order does not list all fields,
94 // shove the extras on the end.
96 for(var idx in this.fmIDL.fields) {
97 var name = this.fmIDL.fields[idx].name;
98 if(this.fieldOrder.indexOf(name) < 0) {
99 anonFields.push(this.fmIDL.fields[idx]);
103 anonFields = anonFields.sort(
105 if(a.label > b.label) return 1;
106 if(a.label < b.label) return -1;
111 this.sortedFieldList = this.sortedFieldList.concat(anonFields);
114 // no sort order defined, sort all fields on display label
116 for(var f in this.fmIDL.fields)
117 this.sortedFieldList.push(this.fmIDL.fields[f]);
118 this.sortedFieldList = this.sortedFieldList.sort(
119 // by default, sort on label
121 if(a.label > b.label) return 1;
122 if(a.label < b.label) return -1;