1 if(!dojo._hasResource['openils.widget.EditDialog']) {
2 dojo.provide('openils.widget.EditDialog');
3 dojo.require('openils.widget.AutoWidget');
4 dojo.require('fieldmapper.Fieldmapper');
5 dojo.require('dijit.Dialog');
6 dojo.require('openils.Util');
7 dojo.require('openils.User');
8 dojo.require('fieldmapper.IDL');
12 * Given a fieldmapper object, this builds a pop-up dialog used for editing the object
16 'openils.widget.EditDialog',
22 fieldOrder : null, // ordered list of field names, optional.
25 * Builds a basic table of key / value pairs. Keys are IDL display labels.
26 * Values are dijit's, when values set
28 startup : function() {
29 this.inherited(arguments);
30 this.fmClass = (this.fmObject) ? this.fmObject.classname : this.fmClass;
31 this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass];
33 var table = document.createElement('table');
34 var tbody = document.createElement('tbody');
35 this.domNode.appendChild(table);
36 table.appendChild(tbody);
39 if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode])
40 this.limitPerms = this.fmIDL.permacrud[this.mode].perms;
42 this._buildSortedFieldList()
44 for(var f in this.sortedFieldList) {
45 var field = this.sortedFieldList[f];
46 if(!field || field.virtual) continue;
48 var row = document.createElement('tr');
49 var nameTd = document.createElement('td');
50 var valTd = document.createElement('td');
52 nameTd.appendChild(document.createTextNode(field.label));
53 row.appendChild(nameTd);
54 row.appendChild(valTd);
55 tbody.appendChild(row);
57 new openils.widget.AutoWidget({
59 fmObject : this.fmObject,
61 orgLimitPerms : this.limitPerms
65 openils.Util.addCSSClass(table, 'oils-fm-edit-dialog');
68 _buildSortedFieldList : function() {
69 this.sortedFieldList = [];
73 for(var idx in this.fieldOrder) {
74 var name = this.fieldOrder[idx];
75 for(var idx2 in this.fmIDL.fields) {
76 if(this.fmIDL.fields[idx2].name == name) {
77 this.sortedFieldList.push(this.fmIDL.fields[idx2]);
83 // if the user-defined order does not list all fields,
84 // shove the extras on the end.
86 for(var idx in this.fmIDL.fields) {
87 var name = this.fmIDL.fields[idx].name;
88 if(this.fieldOrder.indexOf(name) < 0) {
89 anonFields.push(this.fmIDL.fields[idx]);
93 anonFields = anonFields.sort(
95 if(a.label > b.label) return 1;
96 if(a.label < b.label) return -1;
101 this.sortedFieldList = this.sortedFieldList.concat(anonFields);
104 // no sort order defined, sort all fields on display label
106 for(var f in this.fmIDL.fields)
107 this.sortedFieldList.push(this.fmIDL.fields[f]);
108 this.sortedFieldList = this.sortedFieldList.sort(
109 // by default, sort on label
111 if(a.label > b.label) return 1;
112 if(a.label < b.label) return -1;