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