]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/widget/AutoWidget.js
LP1945498 Responsive navbar for Angular staff
[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             if(!this.fmIDL) {
24                 fieldmapper.IDL.load([this.fmClass]);
25                 this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass];
26             }
27             this.buildSortedFieldList();
28         },
29
30         buildAutoStore : function() {
31             var list = [];
32             if(this.fmObjectList) {
33                 list = this.fmObjectList;
34             } else {
35                 if(this.fmObject)
36                     list = [this.fmObject];
37             }
38             return new dojo.data.ItemFileWriteStore(
39                 {data:fieldmapper[this.fmClass].toStoreData(list)});
40         },
41
42         buildSortedFieldList : function() {
43             this.sortedFieldList = [];
44
45             if(this.fieldOrder) {
46
47                 var self = this;
48                 dojo.forEach(this.fieldOrder,
49                     function(name) {
50                         var field = self.fmIDL.fields.filter(function(item) { return (item.name == name) } )[0];
51                         if(field) {
52                             self.sortedFieldList.push(field)
53                         } else {
54                             // non-IDL field
55                             self.sortedFieldList.push({name : name, nonIdl:true});
56                         }
57                     }
58                 );
59
60                 // if the user-defined order does not list all fields, 
61                 // shove the extras on the end.
62                 var anonFields = [];
63                 for(var idx in this.fmIDL.fields)  {
64                     var name = this.fmIDL.fields[idx].name;
65                     if(this.fieldOrder.indexOf(name) < 0) {
66                         anonFields.push(this.fmIDL.fields[idx]);
67                     }
68                 }
69
70                 anonFields = anonFields.sort(
71                     function(a, b) {
72                         if(a.label > b.label) return 1;
73                         if(a.label < b.label) return -1;
74                         return 0;
75                     }
76                 );
77
78                 this.sortedFieldList = this.sortedFieldList.concat(anonFields);
79
80             } else {
81                 // no sort order defined, sort all fields on display label
82
83                 for(var f in this.fmIDL.fields) 
84                     this.sortedFieldList.push(this.fmIDL.fields[f]);
85                 this.sortedFieldList = this.sortedFieldList.sort(
86                     // by default, sort on label
87                     function(a, b) {
88                         if(a.label > b.label) return 1;
89                         if(a.label < b.label) return -1;
90                         return 0;
91                     }
92                 );
93             } 
94         },
95     });
96 }
97