]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/xul/source-browse.js
Make it possible to suppress IDL fields
[working/Evergreen.git] / Open-ILS / web / reports / xul / source-browse.js
1 dojo.requireLocalization("openils.reports", "reports");
2
3 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
4
5 function sourceTreeHandlerDblClick (ev) { return sourceTreeHandler(ev,true) }
6
7 function sourceTreeHandler (ev, dbl) {
8
9         var row = {}, col = {}, part = {}, item;
10         var tree = $('idl-browse-tree');
11
12
13         try {
14                 tree.treeBoxObject.getCellAt(ev.clientX, ev.clientY, row, col, part);
15                 item = tree.contentView.getItemAtIndex(row.value);
16         } catch (e) {
17                 // ... meh
18         }
19
20         if (part.value == 'twisty' || dbl) { // opening or closing
21                 if (item.getAttribute('open') == 'true' && item.lastChild.childNodes.length == 0) {
22                         //var subtree = item.lastChild;
23                         //while (subtree.childNodes.length)
24                         //      subtree.removeChild(subtree.lastChild);
25
26                         var p = getIDLClass( item.getAttribute('idlclass') );
27
28                         var subtreeList = [];
29                         var link_fields = p.getElementsByTagName('link');
30
31                         for ( var i = 0; i < link_fields.length; i++ ) {
32                                 var field = getIDLField( p, link_fields[i].getAttribute('field') );
33
34                                 if (!field) continue;
35
36                                 var name = field.getAttributeNS(rptNS,'label');
37                                 if (!name) name = field.getAttribute('name');
38
39                                 var suppress = field.getAttribute('suppress_controller');
40                                 if (suppress && suppress.indexOf('open-ils.reporter-store') > -1) continue;
41
42                                 var idlclass = link_fields[i].getAttribute('class');
43                                 var map = link_fields[i].getAttribute('map');
44                                 var link = link_fields[i].getAttribute('field');
45                                 var key = link_fields[i].getAttribute('key');
46                                 var reltype = link_fields[i].getAttribute('reltype');
47
48                                 if (map) continue;
49
50                                 var pathList = [];
51                                 findAncestorStack( item, 'treeitem', pathList );
52
53                                 var fullpath = '';
54
55                                 for (var j in pathList.reverse()) {
56                                         var n = pathList[j].getAttribute('idlclass');
57                                         var f = pathList[j].getAttribute('field');
58                                         var j = pathList[j].getAttribute('join');
59
60                                         if (f) fullpath += "-" + f;
61                                         if (f && j != 'undefined') fullpath += '>' + j;
62
63                                         if (fullpath) fullpath += ".";
64                                         fullpath += n;
65
66                                 }
67
68                                 fullpath += "-" + link;
69
70                                 subtreeList.push(
71                                         { name : name,
72                                           nullable : rpt_strings.LINK_NULLABLE_DEFAULT,
73                                           idlclass : idlclass,
74                                           map : map,
75                                           key : key,
76                                           field : field.getAttribute('name'),
77                                           reltype : reltype,
78                                           link : link,
79                                           fullpath : fullpath
80                                         }
81                                 );
82
83                 if ($('nullable-source-control').checked) {
84                         if (reltype == 'has_a') {
85                                         subtreeList.push(
86                                                 { name : name,
87                                   nullable : rpt_strings.LINK_NULLABLE_RIGHT,
88                                                   idlclass : idlclass,
89                                                   map : map,
90                                                   key : key,
91                                                       join : 'right',
92                                                   field : field.getAttribute('name'),
93                                                   reltype : reltype,
94                                                   link : link,
95                                                   fullpath : fullpath + '>right'
96                                                 }
97                                         );
98         
99                                         subtreeList.push(
100                                                 { name : name,
101                                   nullable : rpt_strings.LINK_NULLABLE_NONE,
102                                                   idlclass : idlclass,
103                                                   map : map,
104                                                       key : key,
105                                                       join : 'inner',
106                                                   field : field.getAttribute('name'),
107                                                   reltype : reltype,
108                                                   link : link,
109                                                   fullpath : fullpath + '>inner'
110                                                 }
111                                         );
112         
113                         } else{
114                                         subtreeList.push(
115                                                 { name : name,
116                                   nullable : rpt_strings.LINK_NULLABLE_LEFT,
117                                                   idlclass : idlclass,
118                                                   map : map,
119                                                   key : key,
120                                                       join : 'left',
121                                                   field : field.getAttribute('name'),
122                                                   reltype : reltype,
123                                                   link : link,
124                                                   fullpath : fullpath + '>left'
125                                                 }
126                                         );
127         
128                                         subtreeList.push(
129                                                 { name : name,
130                                   nullable : rpt_strings.LINK_NULLABLE_NONE,
131                                                   idlclass : idlclass,
132                                                   map : map,
133                                                       key : key,
134                                                       join : 'inner',
135                                                   field : field.getAttribute('name'),
136                                                   reltype : reltype,
137                                                   link : link,
138                                                   fullpath : fullpath + '>inner'
139                                                 }
140                                         );
141         
142                         }
143                 }
144                         }
145
146                         populateSourcesSubtree( item.lastChild, subtreeList );
147                 }
148         } else if (item) {
149                 var classtree = $('class-treetop');
150
151                 while (classtree.childNodes.length)
152                         classtree.removeChild(classtree.lastChild);
153
154                 var c = getIDLClass( item.getAttribute('idlclass') );
155
156                 populateDetailTree(
157                         classtree,
158                         c,
159                         item
160                 );
161         }
162
163         return true;
164 }
165
166 function transformSelectHandler (noswap) {
167         var transform_tree = $('trans-view');
168         var transform = getSelectedItems(transform_tree)[0];
169
170         if (transform) {
171                 if (transform.getAttribute('aggregate') == 'true') {
172                         $( 'filter_tab' ).setAttribute('disabled','true');
173                         $( 'aggfilter_tab' ).setAttribute('disabled','false');
174
175                         if (!noswap && $( 'filter_tab' ).selected)
176                                 $( 'filter_tab' ).parentNode.selectedItem = $( 'aggfilter_tab' );
177                 } else {
178                         $( 'filter_tab' ).setAttribute('disabled','false');
179                         $( 'aggfilter_tab' ).setAttribute('disabled','true');
180
181                         if (!noswap && $( 'aggfilter_tab' ).selected)
182                                 $( 'aggfilter_tab' ).parentNode.selectedItem = $( 'filter_tab' );
183                 }
184         }
185
186         if ($( 'filter_tab' ).selected) {
187                 if ($( 'filter_tab' ).getAttribute('disabled') == 'true')
188                         $( 'source-add' ).setAttribute('disabled','true');
189                 else
190                         $( 'source-add' ).setAttribute('disabled','false');
191
192         } else if ($( 'aggfilter_tab' ).selected) {
193                 if ($( 'aggfilter_tab' ).getAttribute('disabled') == 'true')
194                         $( 'source-add' ).setAttribute('disabled','true');
195                 else
196                         $( 'source-add' ).setAttribute('disabled','false');
197
198         } else if ($( 'dis_tab' ).selected) {
199                 $( 'source-add' ).setAttribute('disabled','false');
200         }
201 }
202
203 function detailTreeHandler (args) {
204         var class_tree = $('class-view');
205         var transform_tree = $('trans-treetop');
206
207         while (transform_tree.childNodes.length)
208                 transform_tree.removeChild(transform_tree.lastChild);
209
210         var class_items = getSelectedItems(class_tree);;
211
212         var transforms = new Object(); 
213         for (var i in class_items) {
214                 var item = class_items[i];
215                 var dtype = item.lastChild.lastChild.getAttribute('label');
216
217                 var item_transforms = getTransforms({ datatype : dtype });
218
219                 for (var j in item_transforms) {
220                         transforms[item_transforms[j]] = OILS_RPT_TRANSFORMS[item_transforms[j]];
221                         transforms[item_transforms[j]].name = item_transforms[j];
222                 }
223         }
224
225         var transformList = [];
226         for (var i in transforms) {
227                 transformList.push( transforms[i] );
228         }
229
230         transformList.sort( sortHashLabels );
231
232         $( 'aggfilter_tab' ).setAttribute('disabled','true');
233
234         for (var i in transformList) {
235                 var t = transformList[i];
236                 transform_tree.appendChild(
237                         createTreeItem(
238                                 { aggregate : t.aggregate,
239                                   name : t.name,
240                                   alias : t.label,
241                                   params : t.params
242                                 },
243                                 createTreeRow(
244                                         {},
245                                         createTreeCell( { label : t.label } ),
246                                         createTreeCell( { label : t.params ? t.params : '0' } ),
247                                         createTreeCell( { label : t.datatype.length > 0 ?  t.datatype.join(', ') : 'all' } ),
248                                         createTreeCell( { label : t.aggregate ?  rpt_strings.SOURCE_BROWSE_AGGREGATE : rpt_strings.SOURCE_BROWSE_NON_AGGREGATE } )
249                                 )
250                         )
251                 );
252
253                 if (t.aggregate) $( 'aggfilter_tab' ).setAttribute('disabled','false');
254         }
255
256         transformSelectHandler(true);
257
258         return true;
259 }
260
261
262