]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_tree.js
removing old, unused code
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_tree.js
1 var oilsIDLCache = {};
2
3 /* fetchs and draws the report tree */
4 function oilsDrawRptTree(callback) {
5         oilsLoadRptTree(function(){oilsRenderRptTree(callback)});
6 }
7
8 /* fetches the IDL XML */
9 function oilsLoadRptTree(callback) {
10         var r = new XMLHttpRequest();
11         r.open('GET', OILS_IDL_URL, true);
12         r.onreadystatechange = function() {
13                 if( r.readyState == 4 ) {
14                         oilsParseRptTree(r.responseXML, callback);
15                 }
16         }
17         r.send(null);
18 }
19
20 function oilsRptFindField(node, field) {
21         return grep( node.fields, 
22                 function(f) {
23                         return (f.name == field);
24                 }
25         )[0];
26 }
27
28
29 /* turns the IDL into a js object */
30 function oilsParseRptTree(IDL, callback) {
31         var classes = IDL.getElementsByTagName('class');
32         oilsIDL = {};
33
34         for( var i = 0; i < classes.length; i++ ) {
35                 var node = classes[i];
36                 var id = node.getAttribute('id');
37                 var fields = node.getElementsByTagName('fields')[0];
38
39                 var obj = { 
40                         fields  : oilsRptParseFields(node),
41                         name            : node.getAttribute('id'),
42                         table           : node.getAttributeNS(oilsIDLPersistNS, 'tablename'),
43                         core            : node.getAttributeNS(oilsIDLReportsNS, 'core'),
44                         label           : node.getAttributeNS(oilsIDLReportsNS, 'label'),
45                         pkey            : fields.getAttributeNS(oilsIDLPersistNS, 'primary')
46                 };
47
48                 if( obj.core == 'true' ) obj.core = true;
49                 else obj.core = false;
50                 obj.label = (obj.label) ? obj.label : obj.name;
51
52                 oilsIDL[id] = obj;
53         }
54
55         if( callback ) callback();
56         //oilsRenderRptTree(callback);
57 }
58
59 /* parses the links and fields portion of the IDL */
60 function oilsRptParseFields( node ) {
61         var data = [];
62
63         var fields = node.getElementsByTagName('fields')[0];
64         fields = fields.getElementsByTagName('field');
65
66         var links = node.getElementsByTagName('links')[0];
67         if( links )
68                 links = links.getElementsByTagName('link');
69         else links = [];
70
71         for( var i = 0; i < fields.length; i++ ) {
72
73                 var field = fields[i];
74                 var name = field.getAttribute('name');
75
76                 var obj = {
77                         field : fields[i],
78                         name    : name,
79                         label : field.getAttributeNS(oilsIDLReportsNS,'label'),
80                         datatype : field.getAttributeNS(oilsIDLReportsNS,'datatype'),
81                         selector : field.getAttributeNS(oilsIDLReportsNS,'selector'),
82                         type    : 'field'
83                 }
84
85                 var link = null;
86                 for( var l = 0; l < links.length; l++ ) {
87                         if( links[l].getAttribute('field') == name ) {
88                                 link = links[l];
89                                 break;
90                         }
91                 }
92
93                 if( link ) {
94                         obj.type = 'link';
95                         obj.key = link.getAttribute('key');
96                         obj['class'] = link.getAttribute('class');
97                         obj.reltype = link.getAttribute('reltype');
98                 } else {
99                         if( fields[i].getAttributeNS(oilsIDLPersistNS, 'virtual') == 'true' ) 
100                                 continue;
101                 }
102
103                 obj.label = (obj.label) ? obj.label : obj.name;
104                 obj.datatype = (obj.datatype) ? obj.datatype : 'string';
105                 data.push(obj);
106         }
107
108         /* sort by field name */
109         data = data.sort(
110                 function(a,b) {
111                         if( a.label > b.label ) return 1;
112                         if( a.label < b.name ) return -1;
113                         return 0;
114                 }
115         );
116
117         return data;
118 }
119
120
121 /* shoves the IDL into a UI tree */
122 function oilsRenderRptTree(callback) {
123         var sel = DOM.oils_rpt_builder_type_selector;
124
125         for( var i in oilsIDL ) {
126                 var data = oilsIDL[i];
127                 if( !data.core ) continue;
128                 insertSelectorVal( sel, -1, data.label, data.name );
129         }
130
131         sel.onchange = function() { 
132                 if(oilsRpt.def.select.length > 0)
133                         if(!confirm(DOM.oils_rpt_confirm_new_report.innerHTML)) 
134                                 return;
135                 oilsRptRenderClassTree(getSelectorVal(sel)) 
136                 oilsReportBuilderReset();
137         };
138
139         sel.onchange();
140         if( callback ) callback();
141 }
142
143 function oilsRptRenderClassTree(cls) {
144         var data = oilsIDL[cls];
145         removeChildren(DOM.oils_rpt_tree_div);
146         oilsRptTree = new SlimTree( DOM.oils_rpt_tree_div, 'oilsRptTree' );
147         var treeId = oilsNextId();
148         oilsRptTree.addNode( treeId, -1, data.label );
149         oilsRenderSubTree( data, treeId, '' );
150 }
151
152
153 function oilsRenderSubTree( data, subTreeId, path ) {
154
155         for( var f = 0; f < data.fields.length; f++ ) {
156
157                 var field = data.fields[f];
158                 var  dataId = oilsNextId();
159
160                 var fval = data.name+'-'+field.name;
161                 var fullpath = (path) ? path + '-' + fval : fval;
162
163                 /* for now */
164                 //var action = 'javascript:oilsAddRptDisplayItem("'+fullpath+'")';
165                 var action = 'javascript:oilsRptDrawDataWindow("'+fullpath+'")';
166
167                 if( field.type == 'link' )
168                         action = 'javascript:oilsAddLinkTree("' +
169                                 dataId+'","'+field['class']+'","'+fullpath+'");';
170
171                 label = field.label;
172
173                 /* indicate that this will build a friendly list at report time */
174                 if( field.selector ) label += ' **'; 
175
176                 oilsRptTree.addNode( dataId, subTreeId, label, action, field.label,
177                         (field.type == 'link') ? 'oils_rpt_tree_link_ref' : null );
178         }
179 }
180
181
182
183 var oilsLinkTreeCache = {};
184 function oilsAddLinkTree( parentId, classname, fullpath ) {
185         _debug("adding link with class="+classname+' : full path '+fullpath);
186         if( ! oilsLinkTreeCache[parentId] ) 
187                 oilsLinkTreeCache[parentId] = [];
188
189         if( grep ( oilsLinkTreeCache[parentId], 
190                 function(i) { return (i == classname); } ) ) {
191                         oilsRptTree.toggle(parentId);
192                         return;
193         }
194
195         oilsLinkTreeCache[parentId].push(classname);
196         var data = grep( oilsIDL, function(i) { return ( i.name == classname ); })[0];
197         var sid = oilsRenderSubTree( data, parentId, fullpath );
198         oilsRptTree.open(parentId);
199 }
200
201
202
203
204