1 // very simple client that shows a basic usage of the pz2.js
3 // create a parameters array and pass it to the pz2's constructor
4 // then register the form submit event with the pz2.search function
6 var my_paz = new pz2( { "onshow": my_onshow,
10 "termlist": "subject,author,xtargets,date",
11 //"onbytarget": my_onbytarget,
12 "onrecord": my_onrecord } );
14 var currentSort = 'relevance';
15 var currentResultsPerPage = 20;
16 var currentQuery = null;
17 var currentDetailed = null;
19 var termStartup = true; //some things should be done only once
21 // wait until the DOM is ready (could have been defined in the HTML)
22 $(document).ready( function() {
23 document.search.onsubmit = onFormSubmitEventHandler;
26 function onFormSubmitEventHandler() {
27 currentQuery = document.search.query.value;
28 my_paz.search(document.search.query.value, 20, 'relevance');
29 $('div.content').show();
30 $("div.leftbar").show();
34 // pz2.js event handlers:
36 function my_onshow(data)
38 var recsBody = $('div.records');
41 for (var i = 0; i < data.hits.length; i++) {
42 var title = data.hits[i]["md-title"] || 'N/A';
43 var author = data.hits[i]["md-author"] || '';
44 var id = data.hits[i].recid;
45 var count = data.hits[i].count || 1;
47 recsBody.append('<a href="#" class="result">'+(i+1)+'.</a>\n');
49 var recBody = $('<div class="record" id="rec_'+id+'></div>').appendTo(recsBody);
50 recBody.append('<a href="#">'+title+'</a>\n');
53 recBody.append('<i> by </i>');
54 $('<a href="#" name="author">'+author+'</a>\n').click(function(){ refine(this.name, this.firstChild.nodeValue) }).appendTo(recBody);
61 for ( i = 0; i < data.hits.length; i++) {
62 var hit = data.hits[i];
63 body.innerHTML += '<div id="' + hit.recid + '" onclick="my_paz.record(this.id)"><span>' + i +
64 '. </span><span><b>' + hit["md-title"] +
65 ' </b></span> by <span><i>' + hit["md-author"] + '</i></span></div>';
67 body.innerHTML += "<hr/>";
68 body.innerHTML += '<div>active clients: ' + data.activeclients + '</div>' +
69 '<div>merged: ' + data.merged + '</div>' +
70 '<div>total: ' + data.total + '</div>' +
71 '<div>start: ' + data.start + '</div>' +
72 '<div>num: ' + data.num + '</div>';
76 function my_onstat(data)
79 var stat = document.getElementById("stat");
80 stat.innerHTML = '<div>active clients: ' + data.activeclients + '</div>' +
81 '<div>hits: ' + data.hits + '</div>' +
82 '<div>records: ' + data.records + '</div>' +
83 '<div>clients: ' + data.clients + '</div>' +
84 '<div>searching: ' + data.searching + '</div>';
88 function my_onterm(data)
91 var termLists = $("#termlists");
97 if (key == "activeclients")
100 if (key == "xtargets")
101 listName = "institution";
103 var termList = $('<div class="termlist" id="term_'+key+'"/>').appendTo(termLists);
104 var termTitle = $('<div class="termTitle"><a href="#" class="unselected">'+listName+'</a></div>').appendTo(termList);
105 termTitle.click(function(){
106 if( this.firstChild.className == "selected" ){
107 this.firstChild.className = "unselected";
108 $(this.nextSibling).hide();
110 this.firstChild.className = "selected";
111 $(this.nextSibling).show();
115 listEntries = $('<div class="termEntries"></div>');
117 listEntries.appendTo(termList);
119 for(var i = 0; i < data[key].length; i++)
121 if (key == "xtargets"){
122 var listItem = $('<a href="#" class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name+
123 '<span> ('+data[key][i].freq+')</span></a>').appendTo(listEntries);
124 listItem.click(function(){
125 refine(this.name, this.attributes[0].nodeValue) });
127 var listItem = $('<a href="#" class="sub" name="'+key+'">'+data[key][i].name+
128 '<span> ('+data[key][i].freq+')</span></a>').appendTo(listEntries);
129 listItem.click(function(){ refine(this.name, this.firstChild.nodeValue) });
132 $('<hr/>').appendTo(termLists);
138 for(var key in data){
139 if (key == "activeclients")
141 var listEntries = $('#term_'+key).children('.termEntries');
144 for(var i = 0; i < data[key].length; i++){
145 if (key == "xtargets"){
146 var listItem = $('<a href="#" class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name+
147 '<span> ('+data[key][i].freq+')</span></a>').appendTo(listEntries);
148 listItem.click(function(){
149 refine(this.name, this.attributes[0].nodeValue) });
151 var listItem = $('<a href="#" class="sub" name="'+key+'">'+data[key][i].name+
152 '<span> ('+data[key][i].freq+')</span></a>').appendTo(listEntries);
153 listItem.click(function(){ refine(this.name, this.firstChild.nodeValue) });
161 var termlist = document.getElementById("termlist");
162 termlist.innerHTML = "";
163 termlist.innerHTML += "<div><b> --Author-- </b></div>";
164 for ( i = 0; i < data.author.length; i++ ) {
165 termlist.innerHTML += '<div><span>' + data.author[i].name + ' </span><span> (' + data.author[i].freq + ')</span></div>';
167 termlist.innerHTML += "<hr/>";
168 termlist.innerHTML += "<div><b> --Subject-- </b></div>";
169 for ( i = 0; i < data.subject.length; i++ ) {
170 termlist.innerHTML += '<div><span>' + data.subject[i].name + ' </span><span> (' + data.subject[i].freq + ')</span></div>';
174 function my_onrecord(data)
178 recordDiv = document.getElementById(data.recid);
179 recordDiv.innerHTML = "<table><tr><td><b>Ttle</b> : </td><td>" + data["md-title"] +
180 "</td></tr><tr><td><b>Date</b> : </td><td>" + data["md-date"] +
181 "</td></tr><tr><td><b>Author</b> : </td><td>" + data["md-author"] +
182 "</td></tr><tr><td><b>Subject</b> : </td><td>" + data["md-subject"] +
183 "</td></tr><tr><td><b>Location</b> : </td><td>" + data["location"][0].name + "</td></tr></table>";
188 function my_onbytarget(data)
191 targetDiv = document.getElementById("bytarget");
192 targetDiv.innerHTML = "<tr><td>ID</td><td>Hits</td><td>Diag</td><td>Rec</td><td>State</td></tr>";
194 for ( i = 0; i < data.length; i++ ) {
195 targetDiv.innerHTML += "<tr><td><b>" + data[i].id +
196 "</b></td><td>" + data[i].hits +
197 "</td><td>" + data[i].diagnostic +
198 "</td><td>" + data[i].records +
199 "</td><td>" + data[i].state + "</td></tr>";
204 function refine(field, value)
207 var filter = undefined;
210 case "author": query = ' and au="'+value+'"'; break;
211 case "title": query = ' and ti="'+value+'"'; break;
212 case "date": query = ' and date="'+value+'"'; break;
213 case "subject": query = ' and su="'+value+'"'; break;
214 case "xtarget": filter = 'id='+value; break;
217 my_paz.search(currentQuery + query, currentResultsPerPage, currentSort, filter);