/*
-** $Id: client.js,v 1.9 2007-04-02 09:44:34 jakub Exp $
+** $Id: client.js,v 1.15 2007-04-14 06:12:21 quinn Exp $
** MasterKey - pazpar2's javascript client .
*/
/* some state variable */
var currentSort = 'relevance';
var currentResultsPerPage = 20;
-var currentQuery = null;
-var currentQueryArr = new Array();
var currentPage = 0;
-var currentFilter = undefined;
-var currentFilterName = null;
+var curQuery = new pzQuery();
var currentDetailedId = null;
var currentDetailedData = null;
/* search button event handler */
function onFormSubmitEventHandler() {
- if(!loadQueryFromForm())
- return false;
+ loadQueryFromForm();
+ curQuery.clearFilter();
fireSearch();
drawBreadcrumb();
- //hack for now
- currentFilter = undefined;
$('div.content').show();
$("div.leftbar").show();
return false;
if( author ) {
recBody.append('<i> by </i>');
- $('<a name="author" class="recAuthor">'+author+'</a>\n').click(function(){ refine(this.name, this.firstChild.nodeValue) }).appendTo(recBody);
+ $('<a name="author" class="recAuthor">'+author+'</a>\n').click(function(){
+ refine(this.name, this.firstChild.nodeValue) }).appendTo(recBody);
}
if( currentDetailedId == id ) {
*/
function my_onterm(data)
{
- var termLists = $("#termlists");
-
if(termStartup)
{
+ var termLists = $("#termlists");
+
for(var key in data){
if (key == "activeclients")
continue;
for(var i = 0; i < data[key].length; i++)
{
if (key == "xtargets"){
- var listItem = $('<a class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name
- /*+'<span> ('+data[key][i].freq+')</span>'*/+'</a>');
+ var listItem = $('<a class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name +'<span> ('+data[key][i].freq+')</span>'+'</a>');
listItem.click(function(){
refine(this.name, this.attributes[0].nodeValue, this.firstChild.nodeValue) });
listItem.appendTo(listEntries);
if (key == "activeclients")
continue;
var listEntries = $('#term_'+key).children('.termEntries');
- listEntries.empty()
+ if( data[key].length ) listEntries.empty();
for(var i = 0; i < data[key].length; i++){
if (key == "xtargets"){
- var listItem = $('<a class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name
- /*+'<span> ('+data[key][i].freq+')</span>'*/+'</a>').click(function(){
+ var listItem = $('<a class="sub" name="xtarget" value="'+data[key][i].id+'">'+data[key][i].name+'<span> ('+data[key][i].freq+')</span>'+'</a>').click(function(){
refine(this.name, this.attributes[0].nodeValue, this.firstChild.nodeValue) });
listItem.appendTo(listEntries);
} else {
*/
function fireSearch()
{
- my_paz.search(currentQuery, currentResultsPerPage, currentSort, currentFilter);
+ $('div.showing').empty().text('No records to show.');
+ $('div.pages').empty().html(' ');
$('div.records').empty();
+ currentDetailedId = null;
+ if( !curQuery.totalLength() )
+ return false;
+ my_paz.search(curQuery.toCCL(), currentResultsPerPage, currentSort, curQuery.getFilterString() );
}
function toggleAdvanced()
$("div.advanced").show();
advancedOn = true;
$("#advanced").text("Simple search");
+ loadFormFieldsFromQuery();
}
}
if( detailBox == undefined )
detailBox = $('<div class="detail"></div>').appendTo($('#rec_'+currentDetailedId));
- detailBox.append('Details:<hr/>');
var detailTable = $('<table></table>');
- var recDate = currentDetailedData["md-date"];
- var recSubject = currentDetailedData["md-subject"];
var recLocation = currentDetailedData["location"];
- if( recDate )
- detailTable.append('<tr><td class="item">Published:</td><td>'+recDate+'</td></tr>');
- if( recSubject )
- detailTable.append('<tr><td class="item">Subject:</td><td>'+recSubject+'</td></tr>');
if( recLocation )
detailTable.append('<tr><td class="item">Available at:</td><td> </td></tr>');
for(var i=0; i < recLocation.length; i++)
{
+ var url = recLocation[i]["md-url"];
+ var date = recLocation[i]["md-date"];
+ var description = recLocation[i]["md-description"];
detailTable.append('<tr><td class="item"> </td><td>'+recLocation[i].name+'</td></tr>');
+ if (url) {
+ var tline = $('<tr><td> </td></tr>');
+ var td = $('<td></td>').appendTo(tline);
+ var tlink = $('<a>Go to resource</a>');
+ tlink.attr('href', url);;
+ tlink.attr('target', '_blank');
+ tlink.appendTo(td);
+ detailTable.append(tline);
+ }
+ if (date)
+ detailTable.append($('<tr><td>Date</td><td>'+date+'</td></tr>'));
+ if (description)
+ detailTable.append($('<tr><td> </td><td>'+description+'</td></tr>'));
}
detailTable.appendTo(detailBox);
function refine(field, value, opt)
{
- // for the time being
- //if(!advancedOn)
- // toggleAdvanced();
-
switch(field) {
- case "author": currentQueryArr.push('au="'+value+'"');
- if(document.search.author.value != '') document.search.author.value+='; ';
- document.search.author.value += value; break;
-
- case "title": currentQueryArr.push('ti="'+value+'"');
- //if(document.search.tile.value != '') document.search.title.value+='; ';
- //document.search.title.value += value; break;
-
- case "date": currentQueryArr.push('date="'+value+'"');
- if(document.search.date.value != '') document.search.date.value+='; ';
- document.search.date.value += value; break;
-
- case "subject": currentQueryArr.push('su="'+value+'"');
- if(document.search.subject.value != '') document.search.subject.value+='; ';
- document.search.subject.value += value; break;
-
- case "xtarget": currentFilter = 'id='+value;
- currentFilterName = opt; break;
+ case "author": curQuery.addTerm('au', value); break;
+ case "title": curQuery.addTerm('ti', value); break;
+ case "date": curQuery.addTerm('date', value); break;
+ case "subject": curQuery.addTerm('su', value); break;
+ case "xtarget": curQuery.setFilter(opt, value); break;
}
+ if(advancedOn)
+ loadFormFieldsFromQuery();
+
currentPage = 0;
- currentQuery = currentQueryArr.join(' and ');
drawBreadcrumb();
fireSearch();
}
function loadQueryFromForm()
{
- query = new Array();
- if( document.search.query.value !== '' ) query.push(document.search.query.value);
+ curQuery.reset();
+ curQuery.simpleQuery = document.search.query.value;
if( advancedOn )
{
- var input;
- if( (input = parseField(document.search.author.value, 'au')).length ) query = query.concat(input);
- if( (input = parseField(document.search.title.value, 'ti')).length ) query = query.concat(input);
- if( (input = parseField(document.search.date.value, 'date')).length ) query = query.concat(input);
- if( (input = parseField(document.search.subject.value, 'su')).length ) query = query.concat(input);
- }
-
- if( query.length ) {
- currentQueryArr = query;
- currentQuery = query.join(" and ");
- return true;
- } else {
- return false;
+ curQuery.addTermsFromList(document.search.author.value, 'au');
+ curQuery.addTermsFromList(document.search.title.value, 'ti');
+ curQuery.addTermsFromList(document.search.date.value, 'date');
+ curQuery.addTermsFromList(document.search.subject.value, 'su');
}
}
-function parseField(inputString, field)
+function loadFormFieldsFromQuery()
{
- var inputArr = inputString.split(';');
- var outputArr = new Array();
- for(var i=0; i < inputArr.length; i++){
- if(inputArr[i].length < 3){
- continue;
+ document.search.author.value = '';
+ document.search.title.value = '';
+ document.search.date.value = '';
+ document.search.subject.value = '';
+
+ for(var i = 0; i < curQuery.numTerms; i++)
+ {
+ switch( curQuery.getTermFieldByIdx(i) )
+ {
+ case "au": document.search.author.value += curQuery.getTermValueByIdx(i) + '; '; break;
+ case "ti": document.search.title.value += curQuery.getTermValueByIdx(i) + '; '; break;
+ case "date": document.search.date.value += curQuery.getTermValueByIdx(i) + '; '; break;
+ case "su": document.search.subject.value += curQuery.getTermValueByIdx(i) + '; '; break;
}
- outputArr.push(field+'="'+inputArr[i]+'"');
}
- //if( outputArr.length ){
- return outputArr;//.join(" and ");
- //}else {
- // return false;
- //}
}
function drawPager(max, hits)
var bc = $("#breadcrumb");
bc.empty();
- if(currentFilter) $('<strong id="filter"><a>'+currentFilterName+'</a>: </strong>').click(function(){
- currentFilter = undefined; currentFilterName = null; refine();}).appendTo(bc);
+ if(curQuery.filterNums) $('<strong id="filter"><a>'+curQuery.getFilterName(0)+'</a>: </strong>').click(function() {
+ curQuery.removeFilter(0);
+ refine();
+ }).appendTo(bc);
- bc.append('<span>'+currentQueryArr[0]+'</span>');
+ bc.append('<span>'+curQuery.simpleQuery+'</span>');
- for(var i = 1; i < currentQueryArr.length; i++){
+ for(var i = 0; i < curQuery.numTerms; i++){
bc.append('<strong> + </strong>');
- var bcLink = $('<a id="pos_'+i+'">'+
- currentQueryArr[i].substring(currentQueryArr[i].indexOf('"') + 1, currentQueryArr[i].lastIndexOf('"'))
- +'</a>').click(function() { currentQueryArr.splice(this.id.split('_')[1], 1);refine(); });
+ var bcLink = $('<a id="pos_'+i+'">'+curQuery.getTermValueByIdx(i)+'</a>').click(function() {
+ curQuery.removeTermByIdx(this.id.split('_')[1]);
+ refine();
+ });
bc.append(bcLink);
}
}