X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=www%2Fjsdemo%2Fexample_client.js;h=51c0e29cbc0a08ec091c671cdd4c13158b2b429b;hb=5fd1cc0768a02607d750dd8d53149abfb94d483d;hp=c82df40448144a8828f18ab8338901956b1072d7;hpb=66f456581b71f4f31d6e18aa30c59ff5d1dc70db;p=pazpar2-moved-to-github.git diff --git a/www/jsdemo/example_client.js b/www/jsdemo/example_client.js index c82df40..51c0e29 100644 --- a/www/jsdemo/example_client.js +++ b/www/jsdemo/example_client.js @@ -5,21 +5,20 @@ // create a parameters array and pass it to the pz2's constructor // then register the form submit event with the pz2.search function // autoInit is set to true on default - +var usesessions = true; +var pazpar2path = '/pazpar2/search.pz2'; if (document.location.hash == '#nosessions') { - var usesessions = false; - var pazpar2path = '/masterkey-core/php/p3.php'; -} else { - var usesessions = true; - var pazpar2path = '/pazpar2/search.pz2'; + usesessions = false; + pazpar2path = '/pazpar2-proxy/'; } my_paz = new pz2( { "onshow": my_onshow, "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way "pazpar2path": pazpar2path, + "oninit": my_oninit, "onstat": my_onstat, "onterm": my_onterm, - "termlist": "subject,author", + "termlist": "xtargets,subject,author", "onbytarget": my_onbytarget, "usesessions" : usesessions, "onrecord": my_onrecord } ); @@ -29,159 +28,170 @@ var recPerPage = 20; var totalRec = 0; var curDetRecId = ''; var curDetRecData = null; - -// wait until the DOM is ready -function domReady () -{ - document.search.onsubmit = onFormSubmitEventHandler; - my_paz.stat(); - my_paz.bytarget(); -} - -// when search button pressed -function onFormSubmitEventHandler() -{ - curPage = 1; - curDetRecId = ''; - totalRec = 0; - my_paz.search(document.search.query.value, recPerPage, 'relevance'); - return false; -} +var curSort = 'relevance'; +var curFilter = null; +var submitted = false; +var SourceMax = 16; +var SubjectMax = 10; +var AuthorMax = 10; // // pz2.js event handlers: // +function my_oninit() { + my_paz.stat(); + my_paz.bytarget(); +} function my_onshow(data) { totalRec = data.merged; - - var body = document.getElementById("body"); - body.innerHTML = ""; - - body.innerHTML +='
Displaying: ' - + data.start + ' to ' + (data.start + data.num) + - ' of ' + data.merged + ' (total not merged hits: ' + // move it out + var pager = document.getElementById("pager"); + pager.innerHTML = ""; + pager.innerHTML +='
Displaying: ' + + (data.start + 1) + ' to ' + (data.start + data.num) + + ' of ' + data.merged + ' (found: ' + data.total + ')
'; - - body.innerHTML += '
' - +'<< Prev | ' - +'' - +'Next >>

'; - + drawPager(pager); + // navi + var results = document.getElementById("results"); + + var html = []; for (var i = 0; i < data.hits.length; i++) { var hit = data.hits[i]; - var html = '
' - +'' + (i + 1 + recPerPage * ( curPage - 1)) + '. ' - +'' + hit["md-title"] + - ' '; - if (hit["md-title-remainder"] !== undefined) { - html += '' + hit["md-title-remainder"] + ''; - } - if (hit["md-title-responsibility"] !== undefined) { - html += '' + hit["md-title-responsibility"] + ''; - } - html += '
'; - body.innerHTML += html; - if ( hit.recid == curDetRecId ) { - drawCurDetails(); + html.push('
' + +''+ (i + 1 + recPerPage * (curPage - 1)) +'. ' + +'' + + hit["md-title"] +' '); + if (hit["md-title-remainder"] !== undefined) { + html.push('' + hit["md-title-remainder"] + ' '); + } + if (hit["md-title-responsibility"] !== undefined) { + html.push(''+hit["md-title-responsibility"]+''); + } + if (hit.recid == curDetRecId) { + html.push(renderDetails(curDetRecData)); } + html.push('
'); } - + replaceHtml(results, html.join('')); } function my_onstat(data) { var stat = document.getElementById("stat"); - stat.innerHTML = 'Active clients: '+ data.activeclients - + '/' + data.clients + ' | ' + if (stat == null) + return; + + stat.innerHTML = ' .:STATUS INFO -- Active clients: ' + + data.activeclients + + '/' + data.clients + ' -- ' + 'Retrieved records: ' + data.records - + '/' + data.hits + ''; + + '/' + data.hits + ' :.'; } function my_onterm(data) { - var termlist = document.getElementById("termlist"); - termlist.innerHTML = "
TERMLISTS:
"; - termlist.innerHTML += '
.::Subjects
'; - for (var i = 0; i < data.subject.length; i++ ) { - termlist.innerHTML += '' - + data.subject[i].name - + ' (' - + data.subject[i].freq - + ')
'; + var termlists = []; + termlists.push('
TERMLISTS:
.::Sources
'); + for (var i = 0; i < data.xtargets.length && i < SourceMax; i++ ) { + termlists.push('' + data.xtargets[i].name + + ' (' + data.xtargets[i].freq + ')
'); } - termlist.innerHTML += "
"; - termlist.innerHTML += '
.::Authors
'; - for (var i = 0; i < data.author.length; i++ ) { - termlist.innerHTML += '' + + termlists.push('
.::Subjects
'); + for (var i = 0; i < data.subject.length && i < SubjectMax; i++ ) { + termlists.push('' + data.subject[i].name + ' (' + + data.subject[i].freq + ')
'); + } + + termlists.push('
.::Authors
'); + for (var i = 0; i < data.author.length && i < AuthorMax; i++ ) { + termlists.push('' + data.author[i].name - + '
(' + + ' (' + data.author[i].freq - + ')
'; + + ')
'); } - + var termlist = document.getElementById("termlist"); + replaceHtml(termlist, termlists.join('')); } function my_onrecord(data) { + // FIXME: record is async!! + clearTimeout(my_paz.recordTimer); // in case on_show was faster to redraw element var detRecordDiv = document.getElementById('det_'+data.recid); - if ( detRecordDiv ) - return; - + if (detRecordDiv) return; curDetRecData = data; - drawCurDetails(); + var recordDiv = document.getElementById('recdiv_'+curDetRecData.recid); + var html = renderDetails(curDetRecData); + recordDiv.innerHTML += html; } function my_onbytarget(data) { var targetDiv = document.getElementById("bytarget"); - var table = 'Target IDHitsDiags' - +'RecordsState'; + var table ='' + +''; for (var i = 0; i < data.length; i++ ) { table += ""; + ""; } - table += ''; + table += '
Target IDHitsDiagsRecordsState
" + data[i].id + - "" + data[i].hits + - "" + data[i].diagnostic + - "" + data[i].records + - "" + data[i].state + "
" + data[i].hits + + "" + data[i].diagnostic + + "" + data[i].records + + "" + data[i].state + "
'; targetDiv.innerHTML = table; +} + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// wait until the DOM is ready +function domReady () +{ + document.search.onsubmit = onFormSubmitEventHandler; + document.search.query.value = ''; + document.select.sort.onchange = onSelectDdChange; + document.select.perpage.onchange = onSelectDdChange; } -// detailed record drawing -function showDetails ( prefixRecId ) { - var recId = prefixRecId.replace('rec_', ''); - - // remove current detailed view if any - var detRecordDiv = document.getElementById('det_'+curDetRecId); - // lovin DOM! - if ( detRecordDiv ) - detRecordDiv.parentNode.removeChild(detRecordDiv); +// when search button pressed +function onFormSubmitEventHandler() +{ + resetPage(); + loadSelect(); + triggerSearch(); + submitted = true; + return false; +} - // if the same clicked do not redraw - if ( recId == curDetRecId ) { - curDetRecId = ''; - return; - } +function onSelectDdChange() +{ + if (!submitted) return false; + resetPage(); + loadSelect(); + my_paz.show(0, recPerPage, curSort); + return false; +} - curDetRecId = recId; +function resetPage() +{ + curPage = 1; + totalRec = 0; +} - // request the record - my_paz.record(recId); +function triggerSearch () +{ + my_paz.search(document.search.query.value, recPerPage, curSort, curFilter); } -function drawCurDetails () +function loadSelect () { - var data = curDetRecData; - var recordDiv = document.getElementById('rec_'+data.recid); - recordDiv.innerHTML += '
Ttle: '+data["md-title"] + - "
Date: " + data["md-date"] + - "
Author: " + data["md-author"] + - '
URL: ' + data["md-electronic-url"] + '' + - "
Subject: " + data["md-subject"] + - "
Location: " + data["location"][0].name + - "
"; + curSort = document.select.sort.value; + recPerPage = document.select.perpage.value; } // limit the query after clicking the facet @@ -191,6 +201,84 @@ function limitQuery (field, value) onFormSubmitEventHandler(); } +// limit by target functions +function limitTarget (id, name) +{ + var navi = document.getElementById('navi'); + navi.innerHTML = + 'Source: ' + + name + ''; + navi.innerHTML += '
'; + curFilter = 'pz:id=' + id; + resetPage(); + loadSelect(); + triggerSearch(); + return false; +} + +function delimitTarget () +{ + var navi = document.getElementById('navi'); + navi.innerHTML = ''; + curFilter = null; + resetPage(); + loadSelect(); + triggerSearch(); + return false; +} + +function drawPager (pagerDiv) +{ + //client indexes pages from 1 but pz2 from 0 + var onsides = 6; + var pages = Math.ceil(totalRec / recPerPage); + + var firstClkbl = ( curPage - onsides > 0 ) + ? curPage - onsides + : 1; + + var lastClkbl = firstClkbl + 2*onsides < pages + ? firstClkbl + 2*onsides + : pages; + + var prev = '<< Prev | '; + if (curPage > 1) + var prev = ' | '; + + var middle = ''; + for(var i = firstClkbl; i <= lastClkbl; i++) { + var numLabel = i; + if(i == curPage) + numLabel = '' + i + ''; + + middle += ' ' + + numLabel + ' '; + } + + var next = ' | Next >>'; + if (pages - curPage > 0) + var next = ' | '; + + predots = ''; + if (firstClkbl > 1) + predots = '...'; + + postdots = ''; + if (lastClkbl < pages) + postdots = '...'; + + pagerDiv.innerHTML += '
' + + prev + predots + middle + postdots + next + '

'; +} + +function showPage (pageNum) +{ + curPage = pageNum; + my_paz.showPage( curPage - 1 ); +} + // simple paging functions function pagerNext() { @@ -225,3 +313,68 @@ function switchView(view) { alert('Unknown view.'); } } + +// detailed record drawing +function showDetails (prefixRecId) { + var recId = prefixRecId.replace('rec_', ''); + var oldRecId = curDetRecId; + curDetRecId = recId; + + // remove current detailed view if any + var detRecordDiv = document.getElementById('det_'+oldRecId); + // lovin DOM! + if (detRecordDiv) + detRecordDiv.parentNode.removeChild(detRecordDiv); + + // if the same clicked, just hide + if (recId == oldRecId) { + curDetRecId = ''; + curDetRecData = null; + return; + } + // request the record + my_paz.record(recId); +} + +function replaceHtml(el, html) { + var oldEl = typeof el === "string" ? document.getElementById(el) : el; + /*@cc_on // Pure innerHTML is slightly faster in IE + oldEl.innerHTML = html; + return oldEl; + @*/ + var newEl = oldEl.cloneNode(false); + newEl.innerHTML = html; + oldEl.parentNode.replaceChild(newEl, oldEl); + /* Since we just removed the old element from the DOM, return a reference + to the new element, which can be used to restore variable references. */ + return newEl; +}; + +function renderDetails(data, marker) +{ + var details = '
'; + if (marker) details += ''; + if (data["md-title"] != undefined) { + details += ''; + } + if (data["md-date"] != undefined) + details += ''; + if (data["md-author"] != undefined) + details += ''; + if (data["md-electronic-url"] != undefined) + details += ''; + if (data["location"][0]["md-subject"] != undefined) + details += ''; + if (data["location"][0]["@name"] != undefined) + details += ''; + details += '
'+ marker + '
Title: '+data["md-title"]; + if (data["md-title-remainder"] !== undefined) { + details += ' : ' + data["md-title-remainder"] + ' '; + } + if (data["md-title-responsibility"] !== undefined) { + details += ' '+ data["md-title-responsibility"] +''; + } + details += '
Date: ' + data["md-date"] + '
Author: ' + data["md-author"] + '
URL: ' + data["md-electronic-url"] + '' + '
Subject: ' + data["location"][0]["md-subject"] + '
Location: ' + data["location"][0]["@name"] + " (" +data["location"][0]["@id"] + ")" + '
'; + return details; +} + //EOF