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