Added simple stylesheet to the example.
[pazpar2-moved-to-github.git] / www / example / example_client.js
1 /* A very simple client that shows a basic usage of the pz2.js
2 ** $Id: example_client.js,v 1.2 2007-05-18 15:16:18 jakub Exp $
3 */
4
5 // create a parameters array and pass it to the pz2's constructor
6 // then register the form submit event with the pz2.search function
7 // autoInit is set to true on default
8
9 my_paz = new pz2( { "onshow": my_onshow,
10                     "showtime": 500,            //each timer (show, stat, term, bytarget) can be specified this way
11                     "onstat": my_onstat,
12                     "onterm": my_onterm,
13                     "termlist": "subject,author",
14                     "onbytarget": my_onbytarget,
15                     "onrecord": my_onrecord } );
16 // some state vars
17 var curPage = 1;
18 var recPerPage = 15;
19 var totalRec = 0;
20 var curDetRecId = -1;
21 var curDetRecData = null;
22
23 // wait until the DOM is ready
24 function domReady () 
25
26     document.search.onsubmit = onFormSubmitEventHandler;
27     my_paz.stat();
28 }
29
30 // when search button pressed
31 function onFormSubmitEventHandler() 
32 {
33     my_paz.search(document.search.query.value, recPerPage, 'relevance');
34     return false;
35 }
36
37 //
38 // pz2.js event handlers:
39 //
40
41 function my_onshow(data) {
42     totalRec = data.merged;
43     
44     var body = document.getElementById("body");
45     body.innerHTML = "";
46
47     body.innerHTML +='<hr/><div style="float: right">Displaying: ' 
48                     + data.start + ' to ' + (data.start + data.num) +
49                      ' of ' + data.merged + ' (total not merged hits: ' 
50                      + data.total + ')</div>';
51
52     body.innerHTML += '<div style="float: clear"><span id="prev" onclick="pagerPrev();" style="cursor: pointer;">'
53                     +'&#60;&#60; Prev</span> <b>|</b> ' 
54                     +'<span id="next" onclick="pagerNext()" style="cursor: pointer;">'
55                     +'Next &#62;&#62;</span></div><hr/>';
56     
57     for (var i = 0; i < data.hits.length; i++) {
58         var hit = data.hits[i];
59         body.innerHTML += '<div class="record" id="rec_' + hit.recid + '" onclick="showDetails(this.id)">'
60                         +'<span>' + (i + 1 + recPerPage * ( curPage - 1)) + '. </span>'
61                         +'<span style="cursor: pointer;"><b>' + hit["md-title"] +
62                         ' </b></span> by <span><i>' + hit["md-author"] + '</i></span></div>';
63
64         if ( hit.recid == curDetRecId ) {
65             drawCurDetails();
66         }
67     }
68     
69 }
70
71 function my_onstat(data) {
72     var stat = document.getElementById("stat");
73     stat.innerHTML = '<span>active clients: ' + data.activeclients + ' </span>' +
74                      '<span>hits: ' + data.hits + ' </span>' +
75                      '<span>records: ' + data.records + ' </span>' +
76                      '<span>clients: ' + data.clients + ' </span>' +
77                      '<span>searching: ' + data.searching + '</span>';
78 }
79
80 function my_onterm(data) {
81     var termlist = document.getElementById("termlist");
82     termlist.innerHTML = "<hr/><b>TERMLISTS:</b><hr/>";
83     termlist.innerHTML += "<div><b> --Author </b></div>";
84     for (var i = 0; i < data.author.length; i++ ) {
85         termlist.innerHTML += '<div><span>' 
86                             + data.author[i].name 
87                             + ' </span><span> (' 
88                             + data.author[i].freq 
89                             + ')</span></div>';
90     }
91     termlist.innerHTML += "<hr/>";
92     termlist.innerHTML += "<div><b> --Subject </b></div>";
93     for (var i = 0; i < data.subject.length; i++ ) {
94         termlist.innerHTML += '<div><span>' 
95                             + data.subject[i].name 
96                             + ' </span><span> (' 
97                             + data.subject[i].freq 
98                             + ')</span></div>';
99     }
100 }
101
102 function my_onrecord(data) {
103     // in case on_show was faster to redraw element
104     var detRecordDiv = document.getElementById('det_'+data.recid);
105     if ( detRecordDiv )
106         return;
107
108     curDetRecData = data;
109     drawCurDetails();
110 }
111
112 function my_onbytarget(data) {
113     var targetDiv = document.getElementById("bytarget");
114     var table = '<thead><tr><td>Target ID</td><td>Hits</td><td>Diags</td>'
115                          +'<td>Records</td><td>State</td></tr></thead><tbody>';
116     
117     for (var i = 0; i < data.length; i++ ) {
118         table += "<tr><td>" + data[i].id +
119                     "</td><td>" + data[i].hits +
120                     "</td><td>" + data[i].diagnostic +
121                     "</td><td>" + data[i].records +
122                     "</td><td>" + data[i].state + "</td></tr>";
123     }
124
125     table += '</tbody>';
126     targetDiv.innerHTML = table;
127
128 }
129
130 // detailed record drawing
131 function showDetails ( prefixRecId ) {
132     var recId = Number(prefixRecId.replace('rec_', ''));
133     
134     // remove current detailed view if any
135     var detRecordDiv = document.getElementById('det_'+curDetRecId);
136     // lovin DOM!
137     if ( detRecordDiv )
138             detRecordDiv.parentNode.removeChild(detRecordDiv);
139
140     // if the same clicked do not redraw
141     if ( recId == curDetRecId ) {
142         curDetRecId = -1;
143         return;
144     }
145
146     curDetRecId = recId;
147
148     // request the record
149     my_paz.record(recId);
150 }
151
152 function drawCurDetails ()
153 {
154     var data = curDetRecData;
155     var recordDiv = document.getElementById('rec_'+data.recid);
156     recordDiv.innerHTML += '<div class="details" id="det_'+data.recid+
157                             '"><table><tr><td><b>Ttle</b></td><td><b>:</b> '+data["md-title"] +
158                             "</td></tr><tr><td><b>Date</b></td><td><b>:</b> " + data["md-date"] +
159                             "</td></tr><tr><td><b>Author</b></td><td><b>:</b> " + data["md-author"] +
160                             "</td></tr><tr><td><b>Subject</b></td><td><b>:</b> " + data["md-subject"] + 
161                             "</td></tr><tr><td><b>Location</b></td><td><b>:</b> " + data["location"][0].name + 
162                             "</td></tr></table></div>";
163 }
164
165
166 // simple paging functions
167
168 function pagerNext() {
169     if ( totalRec - recPerPage*curPage > 0) {
170         my_paz.showNext();
171         curPage++;
172     }
173 }
174
175 function pagerPrev() {
176     if ( my_paz.showPrev() != false )
177         curPage--;
178 }