]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/rresult.js
moved to server side caching of opac search results - sped up the details page by...
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / rresult.js
1 var records = new Array();
2 var table;
3 var rowtemplate;
4 var rresultLimit = 200;
5
6 var rresultIsPaged = false;
7
8 function rresultUnload() { removeChildren(table); table = null;}
9
10 attachEvt("common", "unload", rresultUnload);
11 attachEvt("common", "run", rresultDoSearch);
12 attachEvt("result", "idsReceived", rresultCollectRecords); 
13 attachEvt("result", "recordDrawn", rresultLaunchDrawn); 
14
15 hideMe($('copyright_block')); 
16
17 function rresultDoSearch() {
18
19         swapCanvas($('loading_alt'));
20
21         table = G.ui.result.main_table;
22         hideMe(G.ui.result.row_template);
23         while( table.parentNode.rows.length <= (getDisplayCount() +1) ) 
24                 hideMe(table.appendChild(G.ui.result.row_template.cloneNode(true)));
25         rresultCollectIds();
26 }
27
28 function rresultCachedSearch() {
29
30         /* XXX */
31         return false;
32
33         /*
34         if(!getOffset()) {
35                 cookieManager.remove(COOKIE_SRIDS);
36                 return false;
37         }
38
39         var data = JSON2js(cookieManager.read(COOKIE_SRIDS));
40         //alert('cached count = ' + data.count);
41
42         if( data && data.ids[getOffset()] != null && 
43                 data.ids[resultFinalPageIndex()] != null ) {
44                 _rresultHandleIds( data.ids, data.count );
45                 return true;
46         }
47
48         return false;
49         */
50 }
51
52 function rresultCollectIds() {
53         var ids;
54
55         if(rresultCachedSearch()) return;
56
57         switch(getRtype()) {
58
59                 case RTYPE_COOKIE:
60                         ids = JSON2js(cookieManager.read(COOKIE_RIDS));
61                         _rresultHandleIds( ids, ids.length );
62                         break;
63
64                 case RTYPE_TITLE:
65                 case RTYPE_AUTHOR:
66                 case RTYPE_SUBJECT:
67                 case RTYPE_SERIES:
68                 case RTYPE_KEYWORD:
69                         rresultDoRecordSearch();
70                         break;
71
72                 case RTYPE_MULTI:
73                         rresultDoRecordMultiSearch();
74                         break;
75                         
76                 case RTYPE_LIST :
77                         rresultHandleList();
78                         break;
79
80                 case RTYPE_MARC :
81                         rresultCollectMARCIds();
82                         break;
83
84                 case RTYPE_ISBN :
85                         rresultCollectISBNIds();
86                         break;
87
88                 case RTYPE_TCN :
89                         rresultCollectTCNIds();
90                         break;
91
92                 case RTYPE_ISSN :
93                         rresultCollectISSNIds();
94                         break;
95
96
97                 case RTYPE_MRID :
98                 case null :
99                 case "" :
100                 defaut:
101                         var form = rresultGetForm();
102                         var args = { format : form, org : getLocation(), depth : rresultGetDepth() };
103                         var req = new Request(FETCH_RIDS, getMrid(), args);
104                         req.callback( rresultHandleRIds );
105                         req.send();
106
107                         if( rresultGetDepth() != findOrgDepth(globalOrgTree) ) {
108                                 var link = $('rresult_show_all_link');
109                                 if(link) {
110                                         unHideMe($('rresult_show_all'));
111                                         link.appendChild( text(
112                                                 findOrgType(globalOrgTree.ou_type()).opac_label()));
113                                 }
114
115                         } else {
116                                 if( rresultGetDepth() != getDepth() ) { /* inside a limited display */
117                                         var link = $('rresult_show_here_link');
118                                         if(link) {
119                                                 link.appendChild( text(
120                                                         findOrgType(findOrgUnit(getLocation()).ou_type()).opac_label()));
121                                                 unHideMe($('rresult_show_here'));
122                                         }
123                                 }
124                         }
125         }
126 }
127
128 function rresultExpandSearch() {
129         var args = {};
130         args[PARAM_RDEPTH] = findOrgDepth(globalOrgTree);
131         goTo(buildOPACLink(args));
132 }
133
134 function rresultContractSearch() {
135         var args = {};
136         RDEPTH = null;
137         args[PARAM_OFFSET] = 0;
138         goTo(buildOPACLink(args));
139 }
140
141
142 function rresultGetDepth() {
143         if( getRdepth() != null) return getRdepth();
144         return getDepth();
145 }
146
147
148 function rresultGetForm() {
149         var form;
150
151         if(getTform())  /* did the user select a format from the icon list (temporary) */
152                 form = (getTform() == 'all') ? null : getTform();
153         else  /* did the use select a format from simple search dropdown */
154                 form = (getForm() == 'all') ? null : getForm();
155
156         if(!form) { /* did the user select a format from the advanced search */
157                 form = getItemType();
158                 var f = getItemForm();
159
160                 if(form) {
161                         form = form.replace(/,/,'');
162                         if(f) form += '-' + f;
163                 } else {
164                         if(f) form = '-' + f;
165                 }
166         }
167
168         return form;
169 }
170
171
172 function rresultCollectMARCIds() {
173
174         var args                        = {};
175         args.searches   = JSON2js(getSearches());
176         args.limit              = 200;
177         args.org_unit   = globalOrgTree.id();
178         args.depth              = 0;
179
180         rresultIsPaged = true;
181         var req = new Request(FETCH_ADV_MARC_MRIDS, args, getDisplayCount(), getOffset());
182         req.callback(rresultHandleRIds);
183         req.request.noretry = true;
184         req.send();
185 }
186
187
188 function rresultCollectISBNIds() {
189         var req = new Request(FETCH_ADV_ISBN_RIDS, getAdvTerm() );
190         req.callback(
191                 function(r) {
192                         var blob = r.getResultObject();
193                         _rresultHandleIds(blob.ids, blob.count);
194                 }
195         );
196         req.send();
197 }
198
199 function rresultCollectTCNIds() {
200         var req = new Request(FETCH_ADV_TCN_RIDS, getAdvTerm() );
201         req.callback(
202                 function(r) {
203                         var blob = r.getResultObject();
204                         _rresultHandleIds(blob.ids, blob.count);
205                 }
206         );
207         req.send();
208 }
209
210 function rresultCollectISSNIds() {
211         var req = new Request(FETCH_ADV_ISSN_RIDS, getAdvTerm() );
212         req.callback(
213                 function(r) {
214                         var blob = r.getResultObject();
215                         _rresultHandleIds(blob.ids, blob.count);
216                 }
217         );
218         req.send();
219 }
220
221 function rresultHandleList() {
222         var ids = new CGI().param(PARAM_RLIST);
223         if(ids) _rresultHandleIds(ids, ids.length);
224 }
225
226 var rresultTries = 0;
227 function rresultHandleRIds(r) {
228         var res = r.getResultObject();
229
230         if( res.count == 0 && rresultTries == 0 && ! r.noretry) {
231
232                 rresultTries++;
233                 var form = rresultGetForm();
234                 var args = { format : form, org : getLocation(), depth : findOrgDepth(globalOrgTree) };
235                 var req = new Request(FETCH_RIDS, getMrid(), args );
236                 req.callback( rresultHandleRIds );
237                 req.send();
238                 unHideMe($('no_formats'));
239                 hideMe($('rresult_show_all'));
240
241         } else {
242
243                 _rresultHandleIds(res.ids, res.count);
244         }
245 }
246
247 function _rresultHandleIds(ids, count) {
248         var json = js2JSON({ids:ids,count:count});
249         /*
250         cookieManager.write(COOKIE_SRIDS, json, '+1d');
251         */
252
253         HITCOUNT = parseInt(count);
254         runEvt('result', 'hitCountReceived');
255         runEvt('result', 'idsReceived', ids);
256 }
257
258 /*
259 function rresultCollectRecords(ids) {
260         runEvt("result", "preCollectRecords");
261         var x = 0;
262         for( var i = getOffset(); i!= getDisplayCount() + getOffset(); i++ ) {
263                 if(ids[i] == null) break;
264                 var req = new Request(FETCH_RMODS, parseInt(ids[i]));
265                 req.callback(rresultHandleMods);
266                 req.request.userdata = x++;
267                 req.send();
268         }
269 }
270 */
271
272
273 function rresultCollectRecords(ids) {
274         runEvt("result", "preCollectRecords");
275         var x = 0;
276
277         var base = getOffset();
278         if( rresultIsPaged )  base = 0;
279
280         for( var i = base; i!= getDisplayCount() + base; i++ ) {
281                 if(ids[i] == null) break;
282                 var req = new Request(FETCH_RMODS, parseInt(ids[i]));
283                 req.callback(rresultHandleMods);
284                 req.request.userdata = x++;
285                 req.send();
286         }
287 }
288
289
290 function rresultHandleMods(r) {
291         var rec = r.getResultObject();
292         runEvt('result', 'recordReceived', rec, r.userdata, false);
293         resultCollectCopyCounts(rec, r.userdata, FETCH_R_COPY_COUNTS);
294         if(resultPageIsDone()) {
295                 runEvt('result', 'allRecordsReceived', recordsCache);
296                 unHideMe($('copyright_block')); 
297         }
298 }
299
300 function rresultLaunchDrawn(id, node) {
301         runEvt("rresult", "recordDrawn", id, node);
302 }
303
304
305 function rresultDoRecordSearch() { 
306         rresultIsPaged = true;
307         resultCollectSearchIds(true, SEARCH_RS, rresultFilterSearchResults ); 
308 }
309
310 function rresultDoRecordMultiSearch() { 
311         rresultIsPaged = true;
312         resultCollectSearchIds(false, SEARCH_RS, rresultFilterSearchResults ); 
313 }
314
315
316 function rresultFilterSearchResults(r) {
317         var result = r.getResultObject();
318
319         var ids = [];
320         for( var i = 0; i != result.ids.length; i++ ) 
321                 ids.push(result.ids[i][0]);
322         _rresultHandleIds( ids, result.count );
323 }
324
325