]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_utils.js
added report description creation at run-time and so much more
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_utils.js
1 var oilsRptID = 0;
2 var oilsRptID2 = 0;
3 var oilsRptID3 = 0;
4 function oilsNextId() {
5         return 'oils_'+ (oilsRptID++);
6 }
7
8 function oilsNextNumericId() {
9         return oilsRptID3++;
10 }
11
12 function oilsRptNextParam() {
13         return '::P'+ (oilsRptID2++);
14 }
15
16 function oilsRptFetchOrgTree(callback) {
17         var req = new Request(OILS_RPT_FETCH_ORG_TREE);
18         req.callback(
19                 function(r) {
20                         globalOrgTree = r.getResultObject();
21                         if( callback ) callback();
22                 }
23         );
24         req.send();
25 }
26
27
28 /*
29 function oilsRptCacheObject(obj) {
30         var id = oilsNextId();
31         oilsRptObjectCache[id] = obj;
32         return id;
33 }
34
35 function oilsRptFindObject(id) {
36         return oilsRptObjectCache[id];
37 }
38 */
39
40 function oilsRptCacheObject(type, obj, id) {
41         if( !oilsRptObjectCache[type] )
42                 oilsRptObjectCache[type] = {};
43         oilsRptObjectCache[type][id] = obj;
44 }
45
46 function oilsRptGetCache(type, id) {
47         if( !oilsRptObjectCache[type] )
48                 return null;
49         return oilsRptObjectCache[type][i];
50 }
51
52
53 /* -------------------------------------------- */
54 function oilsRptObject() {}
55 oilsRptObject.prototype.init = function(obj) {
56         if(!obj) obj = this;
57         oilsRptObject.cache(obj);
58 }
59 oilsRptObject.objectCache = {};
60 oilsRptObject.find = function(id) {
61         return oilsRptObject.objectCache[id];
62 }
63 oilsRptObject.cache = function(obj) {
64         obj.id = oilsNextNumericId();
65         oilsRptObject.objectCache[obj.id] = obj;
66         return obj.id;
67 }
68 /* -------------------------------------------- */
69
70
71 /* returns just the column name */
72 function oilsRptPathCol(path) {
73         var parts = path.split(/-/);
74         return parts.pop();
75 }
76
77 /* returns the IDL class of the selected column */
78 function oilsRptPathClass(path) {
79         var parts = path.split(/-/);
80         parts.pop();
81         return parts.pop();
82 }
83
84 /* returns everything prior to the column name */
85 function oilsRptPathRel(path) {
86         var parts = path.split(/-/);
87         parts.pop();
88         return parts.join('-');
89 }
90
91 /* creates a label "path" based on the column path */
92 function oilsRptMakeLabel(path) {
93         var parts = path.split(/-/);
94         var str = '';
95         for( var i = 0; i < parts.length; i++ ) {
96                 if(i%2 == 0) {
97                         if( i == 0 )
98                                 str += oilsIDL[parts[i]].label;
99                 } else {
100                         var f = oilsRptFindField(oilsIDL[parts[i-1]], parts[i]);
101                         str += ":"+f.label;
102                 }
103         }
104         return str;
105 }
106
107
108
109
110 function oilsRptResetParams() {
111         oilsRptID2 = 0;
112 }
113
114 function nodeText(id) {
115         if($(id))
116                 return $(id).innerHTML;
117         return "";
118 }
119
120 function print_tabs(t) {
121         var r = '';
122         for (var j = 0; j < t; j++ ) { r = r + "  "; }
123         return r;
124 }
125
126
127 function oilsRptDebug() {
128         _debug("\n-------------------------------------\n");
129         _debug(oilsRpt.toString());
130         _debug("\n-------------------------------------\n");
131         if(!oilsRptDebugEnabled) return;
132         if(!oilsRptDebugWindow)
133                 oilsRptDebugWindow = window.open('','Debug','resizable,width=700,height=500,scrollbars=1'); 
134
135         oilsRptDebugWindow.document.body.innerHTML = oilsRpt.toHTMLString();
136 }
137
138 /* pretty print JSON */
139 function formatJSON(s) {
140         var r = ''; var t = 0;
141         for (var i in s) {
142                 if (s[i] == '{' || s[i] == '[' ) {
143                         r = r + s[i] + "\n" + print_tabs(++t);
144                 } else if (s[i] == '}' || s[i] == ']') {
145                         t--; r = r + "\n" + print_tabs(t) + s[i];
146                 } else if (s[i] == ',') {
147                         r = r + s[i] + "\n" + print_tabs(t);
148                 } else {
149                         r = r + s[i];
150                 }
151         }
152         return r;
153 }
154
155
156 function print_tabs_html(t) {
157         var r = '';
158         for (var j = 0; j < t; j++ ) { r = r + "&nbsp;&nbsp;"; }
159         return r;
160 }
161
162 function formatJSONHTML(s) {
163         var r = ''; var t = 0;
164         for (var i in s) {
165                 if (s[i] == '{' || s[i] == '[') {
166                         r = r + s[i] + "<br/>" + print_tabs_html(++t);
167                 } else if (s[i] == '}' || s[i] == ']') {
168                         t--; r = r + "<br/>" + print_tabs_html(t) + s[i];
169                 } else if (s[i] == ',') {
170                         r = r + s[i];
171                         r = r + "<br/>" + print_tabs_html(t);
172                 } else {
173                         r = r + s[i];
174                 }
175         }
176         return r;
177 }
178
179 function setMousePos(e) {
180         oilsMouseX = e.pageX
181         oilsMouseY = e.pageY
182         oilsPageXMid = parseInt(window.innerHeight / 2);
183         oilsPageYMid = parseInt(window.innerWidth / 2);
184 }  
185
186 function buildFloatingDiv(div, width) {
187         var left = parseInt((window.innerWidth / 2) - (width/2));
188         var halfh = parseInt(div.clientHeight / 2);
189         var top = oilsMouseY - halfh + 50;
190         var dbot = top + halfh;
191         if( dbot > window.innerHeight ) {
192                 top = oilsMouseY - div.clientHeight - 10;
193         }
194         div.setAttribute('style', 'left:'+left+'px; top:'+top+'px; width:'+width+'px');
195 }
196
197
198 function mergeObjects( src, obj ) {
199         for( var i in obj ) {
200                 if( typeof obj[i] == 'string' ) {
201                         src[i] = obj[i];
202                 } else {
203                         if(src[i]) mergeObjects(src[i], obj[i]);
204                         else src[i] = obj[i];
205                 }
206         }
207 }
208
209
210 /* scours the doc for elements with IDs.  When it finds one,
211         it grabs the dom node and sets a reference to the node at DOM[id]; */
212 function oilsRptIdObjects(node) {
213         if(!node) node = document.documentElement;
214         if( node.nodeType != 1 ) return;
215         var id = node.getAttribute('id');
216         if( id ) eval("DOM."+id+"=$('"+id+"');");
217         var children = node.childNodes;
218         for( var c = 0; c < children.length; c++ ) 
219                 oilsRptIdObjects(children[c]);
220 }
221
222
223 function oilsRptObjectKeys(obj) {
224         var k = [];
225         for( var i in obj ) k.push(i);
226         return k;
227 }
228
229
230 /* makes cls a subclass of parent */
231 function oilsRptSetSubClass(cls, parent) {
232         var str = cls+'.prototype = new '+parent+'();\n';
233         str += cls+'.prototype.constructor = '+cls+';\n';
234         str += cls+'.baseClass = '+parent+'.prototype.constructor;\n';
235         str += cls+'.prototype.super = '+parent+'.prototype;\n';
236         eval(str);
237 }
238
239
240 function oilsRptUpdateFolder(folder, type, callback) {
241
242         _debug("updating folder " + js2JSON(folder));
243
244         var req = new Request(OILS_RPT_UPDATE_FOLDER, SESSION, type, folder);
245         if( callback ) {
246                 req.callback( 
247                         function(r) {
248                                 if( r.getResultObject() == 1 )
249                                         callback(true);
250                                 else callback(false);
251                         }
252                 );
253                 req.send();
254         } else {
255                 req.send(true);
256                 return req.result();
257         }
258 }
259
260 function oilsRptCreateFolder(folder, type, callback) {
261         _debug("creating folder "+ js2JSON(folder));
262         var req = new Request(OILS_RPT_CREATE_FOLDER, SESSION, type, folder);
263         if( callback ) {
264                 req.callback( 
265                         function(r) {
266                                 if( r.getResultObject() > 0 )
267                                         callback(true);
268                                 else callback(false);
269                         }
270                 );
271                 req.send();
272         } else {
273                 req.send(true);
274                 return req.result();
275         }
276 }
277
278 function oilsRptAlertSuccess() { alertId('oils_rpt_generic_success'); }
279