-/* $Id: search.js,v 1.35 2007-01-17 14:12:03 quinn Exp $
+/* $Id: search.js,v 1.48 2007-02-08 02:08:47 quinn Exp $
* ---------------------------------------------------
* Javascript container
*/
var recstoshow = 20;
var page_window = 5; // Number of pages prior to and after the current page
var facet_list;
-var cur_facet = 0;
var cur_sort = "relevance";
var searched = 0;
var cur_id = -1;
{
facet_list = get_available_facets();
start_session();
- session_check();
+ //session_check();
set_sort();
}
var error = xml.getElementsByTagName("error");
if (error[0])
location = "?";
- setTimeout(ping_session, 50000);
+ else
+ setTimeout(ping_session, 50000);
}
function update_action (new_action) {
function create_element (name, cdata) {
var elem_node = document.createElement(name);
- var text_node = document.createTextNode(cdata);
- elem_node.appendChild(text_node);
+ elem_node.innerHTML = cdata;
return elem_node;
}
var a = document.createElement('a');
a.appendChild(txt);
a.setAttribute('href', "");
- a.setAttribute('onclick', "set_sort('" + opt + "'); return false");
+ a.setAttribute('id', opt);
+ a.onclick = function() { set_sort(this.getAttribute('id')); return false; };
n.appendChild(a);
}
}
return 'Publisher';
else if (name == 'md-url')
return 'URL';
+ else if (name == 'md-title')
+ return '@';
+ else if (name == 'md-id')
+ return 'Local ID';
+ else if (name == 'md-description')
+ return 'Description';
+ else if (name == 'md-lccn')
+ return 'LCCN';
+ else if (name == 'recid')
+ return '@';
+ else if (name == 'location')
+ return '@';
else
return name;
}
var dname = displayname(name);
var ln = create_element('b', dname);
var tln = document.createElement('td');
- tln.setAttribute('width', 70);
- tln.setAttribute('valign', 'top');
+ tln.width = '90';
+ tln.vAlign = 'top';
tln.appendChild(ln);
var tr = document.createElement('tr');
tr.appendChild(tln);
return tr;
}
-function paint_details(body, xml)
+function cleanurl(v)
{
- // This is some ugly display code. Replace with your own ting o'beauty
- clear_cell(body);
- //body.appendChild(document.createElement('br'));
- var nodes = xml.childNodes[0].childNodes;
- var i;
- var table = document.createElement('table');
- table.setAttribute('cellpadding', 2);
+ var v1 = v;
+ var v2 = v1.replace(/\?.*$/, "");
+ var v3 = v2.replace(/http:\/\//, "");
+ return v3;
+}
+
+function paint_data_elements(target, node)
+{
+ var nodes = node.childNodes;
var dn = 0;
var lastname = '';
+ var i;
for (i = 0; i < nodes.length; i++)
{
if (nodes[i].nodeType != 1)
var name = nodes[i].nodeName;
if (name == 'recid' || name == 'md-title')
continue;
- if (name != lastname)
+ if (name != lastname && lastname != 'location')
{
if (dn)
{
var tr = paint_details_tr(lastname, dn);
- table.appendChild(tr);
+ target.appendChild(tr);
}
dn = document.createElement('td');
lastname = name;
}
-
+ if (name == 'location')
+ {
+ dn = document.createElement('td');
+ dn.appendChild(paint_subrecord(nodes[i]));
+ target.appendChild(paint_details_tr('Location', dn));
+ continue;
+ }
if (!nodes[i].childNodes[0])
continue;
var value = nodes[i].childNodes[0].nodeValue;
var nv;
if (hyl)
{
- nv = create_element('a', value);
+ nv = create_element('a', cleanurl(value));
if (hyl == 'URL')
{
- nv.setAttribute('href', value);
- nv.setAttribute('target', '_blank');
+ nv.href = value;
+ nv.target = '_blank';
}
else
{
- nv.setAttribute('href', '#');
+ nv.href = '#';
nv.setAttribute('term', value);
nv.setAttribute('searchfield', hyl);
nv.onclick = function() { hyperlink_search(this); return false; };
}
}
+ else if (name == 'md-lccn')
+ {
+ nv = document.createElement('span');
+ nv.appendChild(document.createTextNode(value + ' '));
+ var link = create_element('a', 'Show title in LoC');
+ link.setAttribute('target', '_blank');
+ link.setAttribute('href', 'http://catalog.loc.gov/cgi-bin/Pwebrecon.cgi?DB=local&CNT=10&CMD=10+records+per+page&CMD=lccn+' + value);
+ nv.appendChild(link);
+
+ }
+ else if (name == 'md-isbn')
+ {
+ nv = document.createElement('span');
+ nv.appendChild(document.createTextNode(value + ' '));
+ var link = create_element('a', 'search OpenWorldCat');
+ link.setAttribute('target', '_blank');
+ link.setAttribute('href', 'http://www.worldcat.org/search?q=isbn%3A' + value);
+ nv.appendChild(link);
+
else
nv = document.createTextNode(value);
dn.appendChild(nv);
}
- if (dn)
+ if (dn && lastname != 'location')
{
var tr = paint_details_tr(lastname, dn);
- table.appendChild(tr);
+ target.appendChild(tr);
}
+}
+
+function paint_subrecord(node)
+{
+ var table = document.createElement('table');
+ var tbody = document.createElement('tbody');
+ var zurl = node.getAttribute('id');
+ var name = node.getAttribute('name');
+ var tr;
+ var td;
+ if (name)
+ td = create_element('td', name);
+ else
+ td = create_element('td', zurl);
+ tr = paint_details_tr('Source', td);
+ tbody.appendChild(tr);
+ paint_data_elements(tbody, node);
+ table.appendChild(tbody);
+ return table;
+}
+
+function paint_details(body, xml)
+{
+ clear_cell(body);
+ var table = document.createElement('table');
+ var tbody = document.createElement('tbody');
+ table.setAttribute('cellpadding', 2);
+ paint_data_elements(tbody, xml.childNodes[0]);
+ table.appendChild(tbody);
body.appendChild(table);
body.style.display = 'inline';
}
var field = obj.getAttribute('searchfield');
var term = obj.getAttribute('term');
var queryfield = document.getElementById('query');
- queryfield.value = field + '=' + term;
+ queryfield.value = field + '="' + term + '"';
start_search();
}
var count = 1;
var idn = hits[i].getElementsByTagName("recid");
- if (tn[0]) {
+ if (tn[0] && tn[0].childNodes[0]) {
title = tn[0].childNodes[0].nodeValue;
} else {
title = 'N/A';
var record_cell = create_element('a', title);
record_cell.setAttribute('href', '#' + id);
- record_cell.setAttribute('onclick', 'fetch_details(' + id + '); return false');
+ record_cell.setAttribute('id', id);
+ //record_cell.onclick = function() { fetch_details(this.getAttribute('id')); return false; }
+ record_cell.onclick = function() { fetch_details(this.getAttribute('id')); return false; };
record_div.appendChild(record_cell);
if (author)
{
term = term.replace(/[\(\)]/g, '');
if (cur_termlist == 'subject')
- query_cell.value += ' and su=(' + term + ')';
+ query_cell.value += ' and su="' + term + '"';
else if (cur_termlist == 'author')
- query_cell.value += ' and au=(' + term + ')';
+ query_cell.value += ' and au="' + term + '"';
else if (cur_termlist == 'date')
- query_cell.value += ' and date=' + term;
+ query_cell.value += ' and date="' + term + '"';
start_search();
}
+function clear_termlists()
+{
+ var i;
+ for (i = 0; i < facet_list.length; i++)
+ clear_cell(facet_list[i][1]);
+}
-
-function show_termlist()
+function show_termlists()
{
if (xtermlist.readyState != 4)
return;
var i;
var xml = xtermlist.responseXML;
- var body = facet_list[cur_facet][1];
- var facet_name = facet_list[cur_facet][0];
- var hits = xml.getElementsByTagName("term");
var clients =
Number(xml.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue);
+ var lists = xml.getElementsByTagName("list");
- cur_facet++;
-
- if (cur_facet >= facet_list.length)
- cur_facet = 0;
-
- if (!hits[0])
- {
- termtimer = setTimeout(check_termlist, 500);
- }
- else
+ for (i = 0; i < lists.length; i++)
{
+ var listname = lists[i].getAttribute('name');
+ var body = document.getElementById('facet_' + listname + '_terms');
+ if (body.style.display == 'none')
+ continue;
clear_cell(body);
-
- for (i = 0; i < hits.length; i++)
+ var terms = lists[i].getElementsByTagName('term');
+ var t;
+ for (t = 0; t < terms.length; t++)
{
- var namen = hits[i].getElementsByTagName("name");
- var freqn = hits[i].getElementsByTagName("frequency");
+ var namen = terms[t].getElementsByTagName("name");
+ var freqn = terms[t].getElementsByTagName("frequency");
if (namen[0])
var term = namen[0].childNodes[0].nodeValue;
var freq = freqn[0].childNodes[0].nodeValue;
var refine_cell = create_element('a', term + ' (' + freq + ')');
refine_cell.setAttribute('href', '#');
refine_cell.setAttribute('term', term);
- refine_cell.setAttribute('facet', facet_name);
+ refine_cell.setAttribute('facet', listname);
refine_cell.onclick = function () {
refine_query(this);
return false;
};
body.appendChild(refine_cell);
}
-
- if (clients > 0)
- termtimer = setTimeout(check_termlist, 1000);
}
+ if (clients > 0)
+ termtimer = setTimeout(check_termlist, 1000);
}
function check_termlist()
{
- var facet_name = facet_list[cur_facet][0];
+ var facet_names = '';
+ var i;
+ for (i = 0; i < facet_list.length; i++)
+ if (facet_list[i][1].style.display != 'none')
+ {
+ if (facet_names)
+ facet_names += ',';
+ facet_names += facet_list[i][0];
+ }
var url = "search.pz2?" +
"command=termlist" +
"&session=" + session +
- "&name=" + facet_name;
- xtermlist = GetXmlHttpObject();
- xtermlist.onreadystatechange=show_termlist;
- xtermlist.open("GET", url);
- xtermlist.send(null);
+ "&name=" + facet_names +
+ "&num=12";
+ SendXmlHttpObject(xtermlist = GetXmlHttpObject(), url, show_termlists);
}
function show_stat()
clearTimeout(showtimer);
showtimer = 0;
cur_id = -1;
+ clear_termlists();
var query = escape(document.getElementById('query').value);
var url = "search.pz2?" +
"command=search" +
if (obj.className == 'selected') {
obj.className = 'unselected';
container.style.display = 'inline';
+ check_termlist();
} else {
obj.className = 'selected';
container.style.display = 'none';