Initial dev repository
[kcls-web.git] / opac / skin / condense_js / js / sidebar_extras.js
diff --git a/opac/skin/condense_js/js/sidebar_extras.js b/opac/skin/condense_js/js/sidebar_extras.js
new file mode 100644 (file)
index 0000000..9cd2672
--- /dev/null
@@ -0,0 +1,244 @@
+\r
+/* captures extraneous info from each record */\r
+\r
+var subjectCache = {};\r
+var authorCache = {};\r
+var seriesCache = {};\r
+\r
+function resultBuildCaches(records) {\r
+       for( var r in records ) {\r
+               var rec = records[r];\r
+               for( var s in rec.subject() ) \r
+                       subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;\r
+               authorCache[rec.author()] = 1;\r
+               for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;\r
+       }\r
+}\r
+\r
+function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */\r
+function resultDrawSubjects() {\r
+\r
+       var subjs = [];\r
+       for( var s in subjectCache )\r
+               subjs.push( { sub : s, count : subjectCache[s] } );\r
+       subjs.sort(resultSortSubjects);\r
+\r
+       var ss = [];\r
+       for( var s in subjs ) ss.push(subjs[s].sub);\r
+\r
+       resultDrawSidebarTrees( \r
+               STYPE_SUBJECT, \r
+               "subjectSidebarTree", ss, \r
+               $("subject_tree_sidebar"), \r
+               $("subject_sidebar_tree_div") );\r
+}\r
+\r
+function resultDrawAuthors() {\r
+       var auths = new Array();\r
+       for( var s in authorCache ) auths.push(s);\r
+\r
+       resultDrawSidebarTrees( \r
+               STYPE_AUTHOR, \r
+               "authorSidebarTree", auths.sort(), \r
+               $("author_tree_sidebar"), \r
+               $("author_sidebar_tree_div") );\r
+}\r
+\r
+function resultDrawSeries() {\r
+       var sers = new Array();\r
+       for( var s in seriesCache ) sers.push(s);\r
+       resultDrawSidebarTrees( \r
+               STYPE_SERIES, \r
+               "seriesSidebarTree", sers.sort(), \r
+               $("series_tree_sidebar"), \r
+               $("series_sidebar_tree_div") );\r
+}\r
+\r
+var IESux = true;\r
+\r
+function resultDrawSidebarTrees( stype, treeName, items, wrapperNode, destNode ) {\r
+       if(findCurrentPage()=="rdetail") return;\r
+       eval("tree = " + treeName);\r
+\r
+       var xrefCache = [];\r
+       var found = false;\r
+       var x = 0;\r
+       for( var i in items ) {\r
+\r
+               if(isNull(items[i])) continue;\r
+\r
+               /* again, IE is a turd */\r
+               if(IE) { if(x++ > 5) break; }\r
+               else { if(x++ > 7) break; }\r
+\r
+               found = true;\r
+\r
+               var item = normalize(truncate(items[i], 65));\r
+               var args = {};\r
+               var href = resultQuickLink( items[i], stype );\r
+               tree.addNode( stype + "_" + items[i], treeName + 'Root', item, href );\r
+\r
+//             if( !IE ) resultFireXRefReq(treeName, stype, items[i]);\r
+\r
+               var a = {};\r
+               a.type = stype;\r
+               a.term = item;\r
+               xrefCache.push(a);\r
+       }\r
+\r
+       if(found) {\r
+               unHideMe(wrapperNode);\r
+//             if(IE) resultFireXRefSingle(treeName, xrefCache, stype);\r
+               /* XXX */ // disabled auth lookups for now\r
+\r
+               if( DO_AUTHORITY_LOOKUPS ) {\r
+                       resultFireXRefBatch(treeName, xrefCache, stype);\r
+               }\r
+       }\r
+}\r
+\r
+/* XXX */\r
+function resultFireXRefBatch(treeName, xrefCache, stype) {\r
+       var query = [];\r
+       for( var i = 0; i != xrefCache.length; i++ ) {\r
+               var topic = xrefCache[i];\r
+               query.push( [ topic.type, topic.term ] );\r
+       }\r
+       var req = new Request(FETCH_CROSSREF_BATCH, query);\r
+       var tree;\r
+       eval('tree=' + treeName);\r
+       req.request._tree = tree;\r
+       req.request._stype = stype;\r
+       req.callback(resultRenderXRefTree);\r
+       req.send();\r
+}\r
+\r
+var xrefCacheIndex = {};\r
+xrefCacheIndex['subject'] = 0;\r
+xrefCacheIndex['author'] = 0;\r
+xrefCacheIndex['series'] = 0;\r
+\r
+function resultHandleXRefResponse(r) {\r
+       resultFireXRefSingle( r._treename, r._cache, r._stype );\r
+       resultAppendCrossRef(r);\r
+}\r
+\r
+\r
+function resultFireXRefSingle( treeName, xrefCache, stype ) {\r
+       var i = xrefCacheIndex[stype]++;\r
+       if(xrefCache[i] == null) return;\r
+       var item = xrefCache[i].term;\r
+       var tree;\r
+       eval('tree=' + treeName);\r
+       var req = new Request(FETCH_CROSSREF, stype, item);\r
+       req.request._tree = tree;\r
+       req.request._item = item;\r
+       req.request._stype = stype;\r
+       req.request._cache = xrefCache;\r
+       req.request._treename = treeName;\r
+       req.callback(resultHandleXRefResponse);\r
+       req.send();\r
+}\r
+\r
+function resultFireXRefReq( treeName, stype, item ) {\r
+       var tree;\r
+       eval('tree=' + treeName);\r
+       var req = new Request(FETCH_CROSSREF, stype, item);\r
+       req.request._tree = tree;\r
+       req.request._item = item;\r
+       req.request._stype = stype;\r
+       req.callback(resultAppendCrossRef);\r
+       req.send();\r
+}\r
+\r
+\r
+function resultQuickLink( term, type ) {\r
+       var args = {};\r
+       if(SHOW_MR_DEFAULT) {\r
+               args.page = MRESULT;\r
+       } else {\r
+               args.page = RRESULT;\r
+               args[PARAM_RTYPE] = type;\r
+       }\r
+       args[PARAM_OFFSET] = 0;\r
+       args[PARAM_TERM] = term;\r
+       args[PARAM_STYPE] = type;\r
+       return buildOPACLink(args);\r
+}\r
+\r
+/* XXX */\r
+function resultRenderXRefTree(r) {\r
+       var tree = r._tree;\r
+       var res = r.getResultObject();\r
+       var stype = r._stype;\r
+\r
+       for( var c in res ) {\r
+               var cls = res[c];\r
+               for( var t in cls ) {\r
+                       var term = res[c][t];\r
+                       var froms = term['from'];\r
+                       var alsos = term['also'];\r
+                       var total = 0;\r
+\r
+                       for( var i = 0; (total++ < 5 && i < froms.length); i++ ) {\r
+                               var string = normalize(truncate(froms[i], 45));\r
+                               if($(stype + '_' + froms[i])) continue;\r
+                               tree.addNode(stype + '_' + froms[i], \r
+                                       stype + '_' + t, string, resultQuickLink(froms[i],stype));\r
+                       }\r
+                       for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) {\r
+                               var string = normalize(truncate(alsos[i], 45));\r
+                               if($(stype + '_' + alsos[i])) continue;\r
+                               tree.addNode(stype + '_' + alsos[i], \r
+                                       stype + '_' + t, string, resultQuickLink(alsos[i],stype));\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+\r
+/* Addes the see-from/see-also entries for this subject item */\r
+function resultAppendCrossRef(r) {\r
+       var tree                = r._tree\r
+       var item                = r._item\r
+       var stype       = r._stype;\r
+       var result      = r.getResultObject();\r
+       if(!result) return;\r
+       var froms       = result['from'];\r
+       var alsos       = result['also'];\r
+\r
+       var total = 0;\r
+\r
+       for( var i = 0; (total++ < 5 && i < froms.length); i++ ) \r
+               resultAddXRefItem( tree, item, stype, froms, i );\r
+\r
+       for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) \r
+               resultAddXRefItem( tree, item, stype, alsos, i );\r
+}\r
+\r
+/**\r
+ * Adds a single entry into the see-from/also sidebar tree \r
+ */\r
+var collectedStrings = [];\r
+function resultAddXRefItem(tree, rootItem, stype, arr, idx) {\r
+\r
+       var string = normalize(truncate(arr[idx], 45));\r
+\r
+       if( string == rootItem ) return;\r
+\r
+       if( grep( collectedStrings, \r
+               function(a) { return (a == string); }) ) return;\r
+\r
+       if($(stype + '_' + arr[idx])) return;\r
+\r
+       tree.addNode(stype + '_' + arr[idx], \r
+               stype + '_' + rootItem, string, resultQuickLink(arr[idx],stype));\r
+\r
+       collectedStrings.push(string);\r
+}\r
+\r
+\r
+\r
+\r
+\r
+\r