testing commit, please ignore
[kcls-web.git] / opac / skin / condense_js / js / sidebar_extras.js
1 \r
2 /* captures extraneous info from each record */\r
3 \r
4 var subjectCache = {};\r
5 var authorCache = {};\r
6 var seriesCache = {};\r
7 \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
15         }\r
16 }\r
17 \r
18 function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */\r
19 function resultDrawSubjects() {\r
20 \r
21         var subjs = [];\r
22         for( var s in subjectCache )\r
23                 subjs.push( { sub : s, count : subjectCache[s] } );\r
24         subjs.sort(resultSortSubjects);\r
25 \r
26         var ss = [];\r
27         for( var s in subjs ) ss.push(subjs[s].sub);\r
28 \r
29         resultDrawSidebarTrees( \r
30                 STYPE_SUBJECT, \r
31                 "subjectSidebarTree", ss, \r
32                 $("subject_tree_sidebar"), \r
33                 $("subject_sidebar_tree_div") );\r
34 }\r
35 \r
36 function resultDrawAuthors() {\r
37         var auths = new Array();\r
38         for( var s in authorCache ) auths.push(s);\r
39 \r
40         resultDrawSidebarTrees( \r
41                 STYPE_AUTHOR, \r
42                 "authorSidebarTree", auths.sort(), \r
43                 $("author_tree_sidebar"), \r
44                 $("author_sidebar_tree_div") );\r
45 }\r
46 \r
47 function resultDrawSeries() {\r
48         var sers = new Array();\r
49         for( var s in seriesCache ) sers.push(s);\r
50         resultDrawSidebarTrees( \r
51                 STYPE_SERIES, \r
52                 "seriesSidebarTree", sers.sort(), \r
53                 $("series_tree_sidebar"), \r
54                 $("series_sidebar_tree_div") );\r
55 }\r
56 \r
57 var IESux = true;\r
58 \r
59 function resultDrawSidebarTrees( stype, treeName, items, wrapperNode, destNode ) {\r
60         if(findCurrentPage()=="rdetail") return;\r
61         eval("tree = " + treeName);\r
62 \r
63         var xrefCache = [];\r
64         var found = false;\r
65         var x = 0;\r
66         for( var i in items ) {\r
67 \r
68                 if(isNull(items[i])) continue;\r
69 \r
70                 /* again, IE is a turd */\r
71                 if(IE) { if(x++ > 5) break; }\r
72                 else { if(x++ > 7) break; }\r
73 \r
74                 found = true;\r
75 \r
76                 var item = normalize(truncate(items[i], 65));\r
77                 var args = {};\r
78                 var href = resultQuickLink( items[i], stype );\r
79                 tree.addNode( stype + "_" + items[i], treeName + 'Root', item, href );\r
80 \r
81 //              if( !IE ) resultFireXRefReq(treeName, stype, items[i]);\r
82 \r
83                 var a = {};\r
84                 a.type = stype;\r
85                 a.term = item;\r
86                 xrefCache.push(a);\r
87         }\r
88 \r
89         if(found) {\r
90                 unHideMe(wrapperNode);\r
91 //              if(IE) resultFireXRefSingle(treeName, xrefCache, stype);\r
92                 /* XXX */ // disabled auth lookups for now\r
93 \r
94                 if( DO_AUTHORITY_LOOKUPS ) {\r
95                         resultFireXRefBatch(treeName, xrefCache, stype);\r
96                 }\r
97         }\r
98 }\r
99 \r
100 /* XXX */\r
101 function resultFireXRefBatch(treeName, xrefCache, stype) {\r
102         var query = [];\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
106         }\r
107         var req = new Request(FETCH_CROSSREF_BATCH, query);\r
108         var tree;\r
109         eval('tree=' + treeName);\r
110         req.request._tree = tree;\r
111         req.request._stype = stype;\r
112         req.callback(resultRenderXRefTree);\r
113         req.send();\r
114 }\r
115 \r
116 var xrefCacheIndex = {};\r
117 xrefCacheIndex['subject'] = 0;\r
118 xrefCacheIndex['author'] = 0;\r
119 xrefCacheIndex['series'] = 0;\r
120 \r
121 function resultHandleXRefResponse(r) {\r
122         resultFireXRefSingle( r._treename, r._cache, r._stype );\r
123         resultAppendCrossRef(r);\r
124 }\r
125 \r
126 \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
131         var tree;\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
140         req.send();\r
141 }\r
142 \r
143 function resultFireXRefReq( treeName, stype, item ) {\r
144         var tree;\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
151         req.send();\r
152 }\r
153 \r
154 \r
155 function resultQuickLink( term, type ) {\r
156         var args = {};\r
157         if(SHOW_MR_DEFAULT) {\r
158                 args.page = MRESULT;\r
159         } else {\r
160                 args.page = RRESULT;\r
161                 args[PARAM_RTYPE] = type;\r
162         }\r
163         args[PARAM_OFFSET] = 0;\r
164         args[PARAM_TERM] = term;\r
165         args[PARAM_STYPE] = type;\r
166         return buildOPACLink(args);\r
167 }\r
168 \r
169 /* XXX */\r
170 function resultRenderXRefTree(r) {\r
171         var tree = r._tree;\r
172         var res = r.getResultObject();\r
173         var stype = r._stype;\r
174 \r
175         for( var c in res ) {\r
176                 var cls = res[c];\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
181                         var total = 0;\r
182 \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
188                         }\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
194                         }\r
195                 }\r
196         }\r
197 }\r
198 \r
199 \r
200 /* Addes the see-from/see-also entries for this subject item */\r
201 function resultAppendCrossRef(r) {\r
202         var tree                = r._tree\r
203         var item                = r._item\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
209 \r
210         var total = 0;\r
211 \r
212         for( var i = 0; (total++ < 5 && i < froms.length); i++ ) \r
213                 resultAddXRefItem( tree, item, stype, froms, i );\r
214 \r
215         for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) \r
216                 resultAddXRefItem( tree, item, stype, alsos, i );\r
217 }\r
218 \r
219 /**\r
220  * Adds a single entry into the see-from/also sidebar tree \r
221  */\r
222 var collectedStrings = [];\r
223 function resultAddXRefItem(tree, rootItem, stype, arr, idx) {\r
224 \r
225         var string = normalize(truncate(arr[idx], 45));\r
226 \r
227         if( string == rootItem ) return;\r
228 \r
229         if( grep( collectedStrings, \r
230                 function(a) { return (a == string); }) ) return;\r
231 \r
232         if($(stype + '_' + arr[idx])) return;\r
233 \r
234         tree.addNode(stype + '_' + arr[idx], \r
235                 stype + '_' + rootItem, string, resultQuickLink(arr[idx],stype));\r
236 \r
237         collectedStrings.push(string);\r
238 }\r
239 \r
240 \r
241 \r
242 \r
243 \r
244 \r