Rewrite of Masterkey using new mark-up
[pazpar2-moved-to-github.git] / www / masterkey / js / client.js
1 // very simple client that shows a basic usage of the pz2.js
2
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
5
6 var my_paz = new pz2( { "onshow": my_onshow,
7                     //"showtime": 1000,
8                     //"onstat": my_onstat,
9                     "onterm": my_onterm,
10                     "termlist": "subject,author,xtargets,date",
11                     //"onbytarget": my_onbytarget,
12                     "onrecord": my_onrecord } );
13
14 var currentSort = 'relevance';
15 var currentResultsPerPage = 20;
16 var currentQuery = null;
17 var currentDetailed = null;
18
19 var termStartup = true;    //some things should be done only once
20
21 // wait until the DOM is ready (could have been defined in the HTML)
22 $(document).ready( function() { 
23                     document.search.onsubmit = onFormSubmitEventHandler;
24                     } );
25
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();    
31     return false;
32 }
33 //
34 // pz2.js event handlers:
35 //
36 function my_onshow(data)
37 {
38     var recsBody = $('div.records');
39     recsBody.empty();
40     
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;
46         
47         recsBody.append('<a href="#" class="result">'+(i+1)+'.</a>\n');
48         
49         var recBody = $('<div class="record" id="rec_'+id+'></div>').appendTo(recsBody);
50         recBody.append('<a href="#">'+title+'</a>\n');
51
52         if( author )
53             recBody.append('<i> by </i>');
54             $('<a href="#" name="author">'+author+'</a>\n').click(function(){ refine(this.name, this.firstChild.nodeValue) }).appendTo(recBody);
55     }
56 }
57
58 /*
59
60     body.innerHTML = "";
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>';
66     }
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>';
73 }
74 */
75
76 function my_onstat(data)
77 {
78 /*
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>';
85 */
86 }
87
88 function my_onterm(data)
89 {
90     global = data;
91     var termLists = $("#termlists");
92     //termLists.empty()
93
94     if(termStartup)
95     {
96         for(var key in data){
97             if (key == "activeclients")
98                 continue;
99             var listName = key;
100             if (key == "xtargets")
101                 listName = "institution";
102
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();
109                                 } else {
110                                     this.firstChild.className = "selected";
111                                     $(this.nextSibling).show();
112                                 }
113                             });
114
115             listEntries = $('<div class="termEntries"></div>');
116             listEntries.hide();
117             listEntries.appendTo(termList);
118
119             for(var i = 0; i < data[key].length; i++)
120             {
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) });
126                 } else {
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) });
130                 }
131             }        
132             $('<hr/>').appendTo(termLists);
133         }
134         termStartup = false;
135     } 
136     else 
137     {
138         for(var key in data){
139             if (key == "activeclients")
140                 continue;
141             var listEntries = $('#term_'+key).children('.termEntries');
142             listEntries.empty()
143
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) });
150                 } else {
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) });
154                 }
155             }         
156         }
157     }
158 }
159
160 /*
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>';
166     }
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>';
171     }
172 */
173
174 function my_onrecord(data)
175 {
176     /*
177     details = 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>";
184                             */
185
186 }
187
188 function my_onbytarget(data)
189 {
190     /*
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>";
193     
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>";
200     }
201     */
202 }
203
204 function refine(field, value)
205 {
206     var query = '';
207     var filter = undefined;
208     
209     switch(field) {
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;
215     }
216
217     my_paz.search(currentQuery + query, currentResultsPerPage, currentSort, filter);    
218 }