/*
-** $Id: client.js,v 1.8 2007-04-02 08:41:51 jakub Exp $
+** $Id: client.js,v 1.11 2007-04-03 14:27:21 jakub 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;
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"){
*/
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();
}
}
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)
pager.append('<a class="previous_inactive">Previous</a>');
var numPages = Math.ceil(max / currentResultsPerPage);
+
+ var start = ( currentPage - 5 > 0 ? currentPage - 5 : 1 );
+ var stop = ( start + 12 < numPages ? start + 12 : numPages );
+
+ if (start > 1) $('<span>... </span>').appendTo(pager);
- for(var i = 1; i <= numPages; i++)
+ for(var i = start; i <= stop; i++)
{
if( i == (currentPage + 1) ){
$('<a class="select">'+i+'</a>').appendTo(pager);
pager.eq(1).append(plClone);
}
+ if (stop < numPages) $('<span> ...</span>').appendTo(pager);
+
if ( currentPage < (numPages-1) ){
$('<a class="next_active">Next</a>').click(function() { my_paz.showNext(1); currentPage++; }).appendTo(pager.eq(0));
$('<a class="next_active">Next</a>').click(function() { my_paz.showNext(1); currentPage++; }).appendTo(pager.eq(1));
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);
}
}