Last touch :).
[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.3 2007-05-18 17:16:05 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     curPage = 1;
34     curDetRecId = -1;
35     totalRec = 0;
36     my_paz.search(document.search.query.value, recPerPage, 'relevance');
37     return false;
38 }
39
40 //
41 // pz2.js event handlers:
42 //
43
44 function my_onshow(data) {
45     totalRec = data.merged;
46     
47     var body = document.getElementById("body");
48     body.innerHTML = "";
49
50     body.innerHTML +='<hr/><div style="float: right">Displaying: ' 
51                     + data.start + ' to ' + (data.start + data.num) +
52                      ' of ' + data.merged + ' (total not merged hits: ' 
53                      + data.total + ')</div>';
54
55     body.innerHTML += '<div style="float: clear"><span class="jslink" id="prev" onclick="pagerPrev();">'
56                     +'&#60;&#60; Prev</span> <b>|</b> ' 
57                     +'<span class="jslink" id="next" onclick="pagerNext()">'
58                     +'Next &#62;&#62;</span></div><hr/>';
59     
60     for (var i = 0; i < data.hits.length; i++) {
61         var hit = data.hits[i];
62         body.innerHTML += '<div class="record" id="rec_' + hit.recid + '" onclick="showDetails(this.id)">'
63                         +'<span>' + (i + 1 + recPerPage * ( curPage - 1)) + '. </span>'
64                         +'<span class="jslink"><b>' + hit["md-title"] +
65                         ' </b></span> by <span><i>' + hit["md-author"] + '</i></span></div>';
66
67         if ( hit.recid == curDetRecId ) {
68             drawCurDetails();
69         }
70     }
71     
72 }
73
74 function my_onstat(data) {
75     var stat = document.getElementById("stat");
76     stat.innerHTML = '<span>Active clients: '+ data.activeclients
77                         + '/' + data.clients + ' | </span>'
78                         + '<span>Retrieved records: ' + data.records
79                         + '/' + data.hits + '</span>';
80 }
81
82 function my_onterm(data) {
83     var termlist = document.getElementById("termlist");
84     termlist.innerHTML = "<hr/><b>TERMLISTS:</b><hr/>";
85     termlist.innerHTML += '<div class="termtitle">.::Subjects</div>';
86     for (var i = 0; i < data.subject.length; i++ ) {
87         termlist.innerHTML += '<span>' 
88                             + data.subject[i].name 
89                             + ' </span><span> (' 
90                             + data.subject[i].freq 
91                             + ')</span><br/>';
92     }
93     termlist.innerHTML += "<hr/>";
94     termlist.innerHTML += '<div class="termtitle">.::Authors</div>';
95     for (var i = 0; i < data.author.length; i++ ) {
96         termlist.innerHTML += '<span>' 
97                             + data.author[i].name 
98                             + ' </span><span> (' 
99                             + data.author[i].freq 
100                             + ')</span><br/>';
101     }
102
103 }
104
105 function my_onrecord(data) {
106     // in case on_show was faster to redraw element
107     var detRecordDiv = document.getElementById('det_'+data.recid);
108     if ( detRecordDiv )
109         return;
110
111     curDetRecData = data;
112     drawCurDetails();
113 }
114
115 function my_onbytarget(data) {
116     var targetDiv = document.getElementById("bytarget");
117     var table = '<thead><tr><td>Target ID</td><td>Hits</td><td>Diags</td>'
118                          +'<td>Records</td><td>State</td></tr></thead><tbody>';
119     
120     for (var i = 0; i < data.length; i++ ) {
121         table += "<tr><td>" + data[i].id +
122                     "</td><td>" + data[i].hits +
123                     "</td><td>" + data[i].diagnostic +
124                     "</td><td>" + data[i].records +
125                     "</td><td>" + data[i].state + "</td></tr>";
126     }
127
128     table += '</tbody>';
129     targetDiv.innerHTML = table;
130
131 }
132
133 // detailed record drawing
134 function showDetails ( prefixRecId ) {
135     var recId = Number(prefixRecId.replace('rec_', ''));
136     
137     // remove current detailed view if any
138     var detRecordDiv = document.getElementById('det_'+curDetRecId);
139     // lovin DOM!
140     if ( detRecordDiv )
141             detRecordDiv.parentNode.removeChild(detRecordDiv);
142
143     // if the same clicked do not redraw
144     if ( recId == curDetRecId ) {
145         curDetRecId = -1;
146         return;
147     }
148
149     curDetRecId = recId;
150
151     // request the record
152     my_paz.record(recId);
153 }
154
155 function drawCurDetails ()
156 {
157     var data = curDetRecData;
158     var recordDiv = document.getElementById('rec_'+data.recid);
159     recordDiv.innerHTML += '<div class="details" id="det_'+data.recid+
160                             '"><table><tr><td><b>Ttle</b></td><td><b>:</b> '+data["md-title"] +
161                             "</td></tr><tr><td><b>Date</b></td><td><b>:</b> " + data["md-date"] +
162                             "</td></tr><tr><td><b>Author</b></td><td><b>:</b> " + data["md-author"] +
163                             "</td></tr><tr><td><b>Subject</b></td><td><b>:</b> " + data["md-subject"] + 
164                             "</td></tr><tr><td><b>Location</b></td><td><b>:</b> " + data["location"][0].name + 
165                             "</td></tr></table></div>";
166 }
167
168
169 // simple paging functions
170
171 function pagerNext() {
172     if ( totalRec - recPerPage*curPage > 0) {
173         my_paz.showNext();
174         curPage++;
175     }
176 }
177
178 function pagerPrev() {
179     if ( my_paz.showPrev() != false )
180         curPage--;
181 }
182
183 // swithing view between targets and records
184
185 function switchView(view) {
186     
187     var targets = document.getElementById('targetview');
188     var records = document.getElementById('recordview');
189     
190     switch(view) {
191         case 'targetview':
192             targets.style.display = "block";            
193             records.style.display = "none";
194             break;
195         case 'recordview':
196             targets.style.display = "none";            
197             records.style.display = "block";
198             break;
199         default:
200             alert('Unknown view.');
201     }
202 }