]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/widget/AutoWidget.js
rearranging some classes around for better re-use. added an initial auto-grid, need...
[working/Evergreen.git] / Open-ILS / web / js / dojo / openils / widget / AutoWidget.js
1 if(!dojo._hasResource['openils.widget.AutoWidget']) {
2     dojo.provide('openils.widget.AutoWidget');
3     dojo.require('dojo.data.ItemFileWriteStore');
4     dojo.require('fieldmapper.dojoData');
5     dojo.require('fieldmapper.IDL');
6
7     // common superclass to auto-generated UIs
8     dojo.declare('openils.widget.AutoWidget', null, {
9
10         fieldOrder : null, // ordered list of field names, optional.
11         sortedFieldList : [], // holds the sorted IDL defs for our fields
12         fmObject : null, // single fielmapper object
13         fmObjectList : null, // list of fieldmapper objects
14         fmClass : '', // our fieldmapper class
15
16         // locates the relevent IDL info
17         initAutoEnv : function() {
18             if(this.fmObjectList && this.fmObjectList.length)
19                 this.fmClass = this.fmObjectList[0].classname;
20             if(this.fmObject)
21                 this.fmClass = this.fmObject.classname;
22             this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass];
23             this.buildSortedFieldList();
24         },
25
26         buildAutoStore : function() {
27             var list = [];
28             if(this.fmObjectList) {
29                 list = this.fmObjectList;
30             } else {
31                 if(this.fmObject)
32                     list = [this.fmObject];
33             }
34             return new dojo.data.ItemFileWriteStore(
35                 {data:fieldmapper[this.fmClass].toStoreData(list)});
36         },
37
38         buildSortedFieldList : function() {
39             this.sortedFieldList = [];
40
41             if(this.fieldOrder) {
42
43                 for(var idx in this.fieldOrder) {
44                     var name = this.fieldOrder[idx];
45                     for(var idx2 in this.fmIDL.fields) {
46                         if(this.fmIDL.fields[idx2].name == name) {
47                             this.sortedFieldList.push(this.fmIDL.fields[idx2]);
48                             break;
49                         }
50                     }
51                 }
52                 
53                 // if the user-defined order does not list all fields, 
54                 // shove the extras on the end.
55                 var anonFields = [];
56                 for(var idx in this.fmIDL.fields)  {
57                     var name = this.fmIDL.fields[idx].name;
58                     if(this.fieldOrder.indexOf(name) < 0) {
59                         anonFields.push(this.fmIDL.fields[idx]);
60                     }
61                 }
62
63                 anonFields = anonFields.sort(
64                     function(a, b) {
65                         if(a.label > b.label) return 1;
66                         if(a.label < b.label) return -1;
67                         return 0;
68                     }
69                 );
70
71                 this.sortedFieldList = this.sortedFieldList.concat(anonFields);
72
73             } else {
74                 // no sort order defined, sort all fields on display label
75
76                 for(var f in this.fmIDL.fields) 
77                     this.sortedFieldList.push(this.fmIDL.fields[f]);
78                 this.sortedFieldList = this.sortedFieldList.sort(
79                     // by default, sort on label
80                     function(a, b) {
81                         if(a.label > b.label) return 1;
82                         if(a.label < b.label) return -1;
83                         return 0;
84                     }
85                 );
86             } 
87         },
88     });
89 }
90