]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/sidebar_extras.js
added search interface for the advanced search, marc search, and isbn search
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / sidebar_extras.js
1
2 /* captures extraneous info from each record */
3
4 var subjectCache = {};
5 var authorCache = {};
6 var seriesCache = {};
7
8 function resultBuildCaches(records) {
9         for( var r in records ) {
10                 var rec = records[r];
11                 for( var s in rec.subject() ) 
12                         subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;
13                 authorCache[rec.author()] = 1;
14                 for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;
15         }
16 }
17
18 function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */
19 function resultDrawSubjects() {
20
21         var subjs = [];
22         for( var s in subjectCache )
23                 subjs.push( { sub : s, count : subjectCache[s] } );
24         subjs.sort(resultSortSubjects);
25
26         var ss = [];
27         for( var s in subjs ) ss.push(subjs[s].sub);
28
29         resultDrawSidebarTrees( 
30                 STYPE_SUBJECT, 
31                 "subjectSidebarTree", ss, 
32                 $("subject_tree_sidebar"), 
33                 $("subject_sidebar_tree_div") );
34 }
35
36 function resultDrawAuthors() {
37         var auths = new Array();
38         for( var s in authorCache ) auths.push(s);
39
40         resultDrawSidebarTrees( 
41                 STYPE_AUTHOR, 
42                 "authorSidebarTree", auths.sort(), 
43                 $("author_tree_sidebar"), 
44                 $("author_sidebar_tree_div") );
45 }
46
47 function resultDrawSeries() {
48         var sers = new Array();
49         for( var s in seriesCache ) sers.push(s);
50         resultDrawSidebarTrees( 
51                 STYPE_SERIES, 
52                 "seriesSidebarTree", sers.sort(), 
53                 $("series_tree_sidebar"), 
54                 $("series_sidebar_tree_div") );
55 }
56
57 var _oldFashioned = true;
58 function resultDrawSidebarTrees( stype, treeName, items, wrapperNode, destNode ) {
59         eval("tree = " + treeName);
60
61         var xrefCache = [];
62         var found = false;
63         var x = 0;
64         for( var i in items ) {
65
66                 if(isNull(items[i])) continue;
67                 if(x++ > 7) break;
68                 found = true;
69
70                 var item = normalize(truncate(items[i], 65));
71                 var trunc = 65;
72                 var args = {};
73                 var href = resultQuickLink( items[i], stype );
74                 tree.addNode( stype + "_" + items[i], treeName + 'Root', item, href );
75
76                 /*
77                 if(!IE)
78                         setTimeout('resultFireXRefReq("'+treeName+'","'+stype+'","'+item+'");',200);
79                         */
80                 //if(!IE) resultFireXRefReq(treeName, stype, items[i]);
81                 //resultFireXRefReq(treeName, stype, items[i]);
82
83
84                 if(_oldFashioned)
85                         resultFireXRefReq(treeName, stype, items[i]);
86
87                 //setTimeout('resultFireXRefReq("'+treeName+'","'+stype+'","'+item+'");', 100);
88
89                 var a = {};
90                 a.type = stype;
91                 a.term = item;
92                 xrefCache.push(a);
93         }
94
95         if(found) {
96                 unHideMe(wrapperNode);
97                 if(!_oldFashioned)
98                         resultFireXRefBatch(treeName, xrefCache, stype);
99         }
100 }
101
102 function resultFireXRefBatch(treeName, xrefCache, stype) {
103         var query = [];
104         for( var i = 0; i != xrefCache.length; i++ ) {
105                 var topic = xrefCache[i];
106                 query.push( [ topic.type, topic.term ] );
107         }
108         var req = new Request(FETCH_CROSSREF_BATCH, query);
109         var tree;
110         eval('tree=' + treeName);
111         req.request._tree = tree;
112         req.request._stype = stype;
113         req.callback(resultRenderXRefTree);
114         req.send();
115 }
116
117 function resultFireXRefReq( treeName, stype, item ) {
118         var tree;
119         eval('tree=' + treeName);
120         var req = new Request(FETCH_CROSSREF, stype, item);
121         req.request._tree = tree;
122         req.request._item = item;
123         req.request._stype = stype;
124         req.callback(resultAppendCrossRef);
125         req.send();
126 }
127
128
129 function resultQuickLink( term, type ) {
130         var args = {};
131         args.page = MRESULT;
132         args[PARAM_OFFSET] = 0;
133         args[PARAM_TERM] = term;
134         args[PARAM_STYPE] = type;
135         return buildOPACLink(args);
136 }
137
138 function resultRenderXRefTree(r) {
139         var tree = r._tree;
140         var res = r.getResultObject();
141         var stype = r._stype;
142
143         for( var c in res ) {
144                 var cls = res[c];
145                 for( var t in cls ) {
146                         var term = res[c][t];
147                         var froms = term['from'];
148                         var alsos = term['also'];
149                         var total = 0;
150
151                         for( var i = 0; (total++ < 5 && i < froms.length); i++ ) {
152                                 var string = normalize(truncate(froms[i], 45));
153                                 if($(stype + '_' + froms[i])) continue;
154                                 tree.addNode(stype + '_' + froms[i], 
155                                         stype + '_' + t, string, resultQuickLink(froms[i],stype));
156                         }
157                         for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) {
158                                 var string = normalize(truncate(alsos[i], 45));
159                                 if($(stype + '_' + alsos[i])) continue;
160                                 tree.addNode(stype + '_' + alsos[i], 
161                                         stype + '_' + t, string, resultQuickLink(alsos[i],stype));
162                         }
163                 }
164         }
165 }
166
167
168 function resultAppendCrossRef(r) {
169         var tree                = r._tree
170         var item                = r._item
171         var stype       = r._stype;
172         var result      = r.getResultObject();
173         if(!result) return;
174         var froms       = result['from'];
175         var alsos       = result['also'];
176
177         var total = 0;
178
179         for( var i = 0; (total++ < 5 && i < froms.length); i++ ) {
180                 var string = normalize(truncate(froms[i], 45));
181                 if($(stype + '_' + froms[i])) continue;
182                 tree.addNode(stype + '_' + froms[i], 
183                         stype + '_' + item, string, resultQuickLink(froms[i],stype));
184         }
185         for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) {
186                 var string = normalize(truncate(alsos[i], 45));
187                 if($(stype + '_' + alsos[i])) continue;
188                 tree.addNode(stype + '_' + alsos[i], 
189                         stype + '_' + item, string, resultQuickLink(alsos[i],stype));
190         }
191 }
192
193
194
195
196