X-Git-Url: http://git.indexdata.com/?p=mkws-moved-to-github.git;a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=60464d77cf7424b93ba94837158485dfe4a9a57d;hp=3676a51329cbc5bfc0503e75cc295835787665ca;hb=940c33bf31eb7f640b3663c2794c5659da3ea115;hpb=d6ff4d136832a719d8e9357369f457e1ece9cf7c diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js index 3676a51..60464d7 100644 --- a/tools/htdocs/mkws.js +++ b/tools/htdocs/mkws.js @@ -4,7 +4,9 @@ "use strict"; // HTML5: disable for debug_level >= 2 // Set up namespace and some state. -var mkws = {}; +var mkws = { + filters: [], +}; /* * global config object: mkws_config @@ -176,7 +178,6 @@ var totalRec = 0; var curDetRecId = ''; var curDetRecData = null; var curSort = 'relevance'; -var curFilter = null; var submitted = false; var SourceMax = 16; var SubjectMax = 10; @@ -257,9 +258,9 @@ function my_onterm(data) { if (facets[i] == "sources") { add_single_facet(acc, "Sources", data.xtargets, SourceMax, null); } else if (facets[i] == "subjects") { - add_single_facet(acc, "Subjects", data.subject, SubjectMax, "su"); + add_single_facet(acc, "Subjects", data.subject, SubjectMax, "subject"); } else if (facets[i] == "authors") { - add_single_facet(acc, "Authors", data.author, AuthorMax, "au"); + add_single_facet(acc, "Authors", data.author, AuthorMax, "author"); } else { alert("bad facet configuration: '" + facets[i] + "'"); } @@ -269,19 +270,19 @@ function my_onterm(data) { replaceHtml(termlist, acc.join('')); } -function add_single_facet(acc, caption, data, max, cclIndex) { +function add_single_facet(acc, caption, data, max, pzIndex) { acc.push('
'); acc.push('
' + M(caption) + '
'); for (var i = 0; i < data.length && i < max; i++ ) { acc.push('
'); acc.push('' + data[i].name + '' + ' ' + data[i].freq + ''); @@ -373,7 +374,24 @@ function resetPage() function triggerSearch () { - my_paz.search(document.mkwsSearchForm.mkwsQuery.value, recPerPage, curSort, curFilter); + var pp2filter = ""; + var pp2limit = ""; + + for (var i in mkws.filters) { + var filter = mkws.filters[i]; + if (filter.id) { + if (pp2filter) + pp2filter += ","; + pp2filter += 'pz:id=' + filter.id; + } else { + if (pp2limit) + pp2limit += ","; + pp2limit += filter.field + "=" + filter.value.replace(/[\\|,]/g, '\\$&'); + } + } + + debug("triggerSearch: filters = " + JSON.stringify(mkws.filters) + ", pp2filter = " + pp2filter + ", pp2limit = " + pp2limit); + my_paz.search(document.mkwsSearchForm.mkwsQuery.value, recPerPage, curSort, pp2filter, undefined, { limit: pp2limit }); } function loadSelect () @@ -389,35 +407,100 @@ function loadSelect () // limit the query after clicking the facet mkws.limitQuery = function (field, value) { - document.mkwsSearchForm.mkwsQuery.value += ' and ' + field + '="' + value + '"'; - onFormSubmitEventHandler(); + debug("limitQuery(field=" + field + ", value=" + value + ")"); + mkws.filters.push({ field: field, value: value }); + redraw_navi(); + resetPage(); + loadSelect(); + triggerSearch(); + return false; } // limit by target functions mkws.limitTarget = function (id, name) { - var navi = document.getElementById('mkwsNavi'); - navi.innerHTML = - 'Source: ' - + name + ''; - curFilter = 'pz:id=' + id; + debug("limitTarget(id=" + id + ", name=" + name + ")"); + mkws.filters.push({ id: id, name: name }); + redraw_navi(); resetPage(); loadSelect(); triggerSearch(); return false; } -mkws.delimitTarget = function () +mkws.delimitQuery = function (field, value) { - var navi = document.getElementById('mkwsNavi'); - navi.innerHTML = ''; - curFilter = null; + debug("delimitQuery(field=" + field + ", value=" + value + ")"); + var newFilters = []; + for (var i in mkws.filters) { + var filter = mkws.filters[i]; + if (filter.field && + field == filter.field && + value == filter.value) { + debug("delimitTarget() removing filter " + JSON.stringify(filter)); + } else { + debug("delimitTarget() keeping filter " + JSON.stringify(filter)); + newFilters.push(filter); + } + } + mkws.filters = newFilters; + + redraw_navi(); resetPage(); loadSelect(); triggerSearch(); return false; } + +mkws.delimitTarget = function (id) +{ + debug("delimitTarget(id=" + id + ")"); + var newFilters = []; + for (var i in mkws.filters) { + var filter = mkws.filters[i]; + if (filter.id) { + debug("delimitTarget() removing filter " + JSON.stringify(filter)); + } else { + debug("delimitTarget() keeping filter " + JSON.stringify(filter)); + newFilters.push(filter); + } + } + mkws.filters = newFilters; + + redraw_navi(); + resetPage(); + loadSelect(); + triggerSearch(); + return false; +} + + +function redraw_navi () +{ + var navi = document.getElementById('mkwsNavi'); + if (!navi) return; + + var text = ""; + for (var i in mkws.filters) { + if (text) { + text += " | "; + } + var filter = mkws.filters[i]; + if (filter.id) { + text += 'Source: ' + filter.name + ''; + } else { + text += filter.field + ': ' + filter.value + ''; + } + } + + navi.innerHTML = text; +} + + function drawPager (pagerDiv) { //client indexes pages from 1 but pz2 from 0 @@ -557,7 +640,26 @@ function replaceHtml(el, html) { function renderDetails(data, marker) { - var details = '
'; + var details = '
'; + + if (mkws.templateRecord === undefined) { + maybeLoadTemplate("Record"); + } + + if (mkws.templateRecord) { + var template = mkws.templateRecord; + details += template(data); + } else { + details += defaultRenderRecord(data, marker); + } + + details += '
'; + return details; +} + +function defaultRenderRecord(data, marker) +{ + var details = '
'; if (marker) details += ''; var locations = []; @@ -575,11 +677,27 @@ function renderDetails(data, marker) } else { details += renderField("Location" + (locations.length == 1 ? "" : "s"), locations); } - details += '
'+ marker + '
'; - + details += ''; return details; } + +function maybeLoadTemplate(name) +{ + var source = $("#mkwsTemplate" + name).html(); + if (!source) { + debug("no template '" + name + "': falling back to default behaviour"); + // Mark template as not provided + mkws['template' + name] = 0; + return; + } + + var template = Handlebars.compile(source); + debug("compiled template '" + name + "'"); + mkws['template' + name] = template; +} + + function renderField(caption, data, data2, data3) { if (data === undefined) { return ""; @@ -675,7 +793,8 @@ function mkws_html_all() { mkws_html_switch(); if (mkws_config.use_service_proxy) - mkws_service_proxy_auth(mkws_config.service_proxy_auth); + mkws_service_proxy_auth(mkws_config.service_proxy_auth, + mkws_config.service_proxy_auth_domain); if (mkws_config.responsive_design_width) { // Responsive web design - change layout on the fly based on @@ -768,13 +887,13 @@ function mkws_html_perpage() { * The username/password is configured in the apache config file * for the site. */ -function mkws_service_proxy_auth(auth_url) { +function mkws_service_proxy_auth(auth_url, auth_domain) { debug("Run service proxy auth URL: " + auth_url); var request = new pzHttpRequest(auth_url, function(err) { - alert("HTTP call for authentication failed: " + err) - return; - }); + alert("HTTP call for authentication failed: " + err) + return; + }, auth_domain); request.get(null, function(data) { if (!$.isXMLDoc(data)) {