2 /* captures extraneous info from each record */
\r
4 var subjectCache = {};
\r
5 var authorCache = {};
\r
6 var seriesCache = {};
\r
8 function resultBuildCaches(records) {
\r
9 for( var r in records ) {
\r
10 var rec = records[r];
\r
11 for( var s in rec.subject() )
\r
12 subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;
\r
13 authorCache[rec.author()] = 1;
\r
14 for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;
\r
18 function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */
\r
19 function resultDrawSubjects() {
\r
22 for( var s in subjectCache )
\r
23 subjs.push( { sub : s, count : subjectCache[s] } );
\r
24 subjs.sort(resultSortSubjects);
\r
27 for( var s in subjs ) ss.push(subjs[s].sub);
\r
29 resultDrawSidebarTrees(
\r
31 "subjectSidebarTree", ss,
\r
32 $("subject_tree_sidebar"),
\r
33 $("subject_sidebar_tree_div") );
\r
36 function resultDrawAuthors() {
\r
37 var auths = new Array();
\r
38 for( var s in authorCache ) auths.push(s);
\r
40 resultDrawSidebarTrees(
\r
42 "authorSidebarTree", auths.sort(),
\r
43 $("author_tree_sidebar"),
\r
44 $("author_sidebar_tree_div") );
\r
47 function resultDrawSeries() {
\r
48 var sers = new Array();
\r
49 for( var s in seriesCache ) sers.push(s);
\r
50 resultDrawSidebarTrees(
\r
52 "seriesSidebarTree", sers.sort(),
\r
53 $("series_tree_sidebar"),
\r
54 $("series_sidebar_tree_div") );
\r
59 function resultDrawSidebarTrees( stype, treeName, items, wrapperNode, destNode ) {
\r
60 if(findCurrentPage()=="rdetail") return;
\r
61 eval("tree = " + treeName);
\r
66 for( var i in items ) {
\r
68 if(isNull(items[i])) continue;
\r
70 /* again, IE is a turd */
\r
71 if(IE) { if(x++ > 5) break; }
\r
72 else { if(x++ > 7) break; }
\r
76 var item = normalize(truncate(items[i], 65));
\r
78 var href = resultQuickLink( items[i], stype );
\r
79 tree.addNode( stype + "_" + items[i], treeName + 'Root', item, href );
\r
81 // if( !IE ) resultFireXRefReq(treeName, stype, items[i]);
\r
90 unHideMe(wrapperNode);
\r
91 // if(IE) resultFireXRefSingle(treeName, xrefCache, stype);
\r
92 /* XXX */ // disabled auth lookups for now
\r
94 if( DO_AUTHORITY_LOOKUPS ) {
\r
95 resultFireXRefBatch(treeName, xrefCache, stype);
\r
101 function resultFireXRefBatch(treeName, xrefCache, stype) {
\r
103 for( var i = 0; i != xrefCache.length; i++ ) {
\r
104 var topic = xrefCache[i];
\r
105 query.push( [ topic.type, topic.term ] );
\r
107 var req = new Request(FETCH_CROSSREF_BATCH, query);
\r
109 eval('tree=' + treeName);
\r
110 req.request._tree = tree;
\r
111 req.request._stype = stype;
\r
112 req.callback(resultRenderXRefTree);
\r
116 var xrefCacheIndex = {};
\r
117 xrefCacheIndex['subject'] = 0;
\r
118 xrefCacheIndex['author'] = 0;
\r
119 xrefCacheIndex['series'] = 0;
\r
121 function resultHandleXRefResponse(r) {
\r
122 resultFireXRefSingle( r._treename, r._cache, r._stype );
\r
123 resultAppendCrossRef(r);
\r
127 function resultFireXRefSingle( treeName, xrefCache, stype ) {
\r
128 var i = xrefCacheIndex[stype]++;
\r
129 if(xrefCache[i] == null) return;
\r
130 var item = xrefCache[i].term;
\r
132 eval('tree=' + treeName);
\r
133 var req = new Request(FETCH_CROSSREF, stype, item);
\r
134 req.request._tree = tree;
\r
135 req.request._item = item;
\r
136 req.request._stype = stype;
\r
137 req.request._cache = xrefCache;
\r
138 req.request._treename = treeName;
\r
139 req.callback(resultHandleXRefResponse);
\r
143 function resultFireXRefReq( treeName, stype, item ) {
\r
145 eval('tree=' + treeName);
\r
146 var req = new Request(FETCH_CROSSREF, stype, item);
\r
147 req.request._tree = tree;
\r
148 req.request._item = item;
\r
149 req.request._stype = stype;
\r
150 req.callback(resultAppendCrossRef);
\r
155 function resultQuickLink( term, type ) {
\r
157 if(SHOW_MR_DEFAULT) {
\r
158 args.page = MRESULT;
\r
160 args.page = RRESULT;
\r
161 args[PARAM_RTYPE] = type;
\r
163 args[PARAM_OFFSET] = 0;
\r
164 args[PARAM_TERM] = term;
\r
165 args[PARAM_STYPE] = type;
\r
166 return buildOPACLink(args);
\r
170 function resultRenderXRefTree(r) {
\r
171 var tree = r._tree;
\r
172 var res = r.getResultObject();
\r
173 var stype = r._stype;
\r
175 for( var c in res ) {
\r
177 for( var t in cls ) {
\r
178 var term = res[c][t];
\r
179 var froms = term['from'];
\r
180 var alsos = term['also'];
\r
183 for( var i = 0; (total++ < 5 && i < froms.length); i++ ) {
\r
184 var string = normalize(truncate(froms[i], 45));
\r
185 if($(stype + '_' + froms[i])) continue;
\r
186 tree.addNode(stype + '_' + froms[i],
\r
187 stype + '_' + t, string, resultQuickLink(froms[i],stype));
\r
189 for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) {
\r
190 var string = normalize(truncate(alsos[i], 45));
\r
191 if($(stype + '_' + alsos[i])) continue;
\r
192 tree.addNode(stype + '_' + alsos[i],
\r
193 stype + '_' + t, string, resultQuickLink(alsos[i],stype));
\r
200 /* Addes the see-from/see-also entries for this subject item */
\r
201 function resultAppendCrossRef(r) {
\r
204 var stype = r._stype;
\r
205 var result = r.getResultObject();
\r
206 if(!result) return;
\r
207 var froms = result['from'];
\r
208 var alsos = result['also'];
\r
212 for( var i = 0; (total++ < 5 && i < froms.length); i++ )
\r
213 resultAddXRefItem( tree, item, stype, froms, i );
\r
215 for( var i = 0; (total++ < 10 && i < alsos.length); i++ )
\r
216 resultAddXRefItem( tree, item, stype, alsos, i );
\r
220 * Adds a single entry into the see-from/also sidebar tree
\r
222 var collectedStrings = [];
\r
223 function resultAddXRefItem(tree, rootItem, stype, arr, idx) {
\r
225 var string = normalize(truncate(arr[idx], 45));
\r
227 if( string == rootItem ) return;
\r
229 if( grep( collectedStrings,
\r
230 function(a) { return (a == string); }) ) return;
\r
232 if($(stype + '_' + arr[idx])) return;
\r
234 tree.addNode(stype + '_' + arr[idx],
\r
235 stype + '_' + rootItem, string, resultQuickLink(arr[idx],stype));
\r
237 collectedStrings.push(string);
\r