X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=experiments%2Fspclient%2Fmkws.js;h=317027cec725a6e05a53c68abf1ffb0041691108;hb=3bf6bcb8ee9b923acc06fff0e02f9b5e8978e56b;hp=060b5852f9e0c2e1623929a02cc11295ea9045c8;hpb=54464c729740fffe6427a50febfd06c3b9af8964;p=mkws-moved-to-github.git diff --git a/experiments/spclient/mkws.js b/experiments/spclient/mkws.js index 060b585..317027c 100644 --- a/experiments/spclient/mkws.js +++ b/experiments/spclient/mkws.js @@ -1,18 +1,71 @@ /* A very simple client that shows a basic usage of the pz2.js */ +"use strict"; // HTML5 + +if (!mkws_config) + var mkws_config = {}; // for the guys who forgot to define mkws_config... + +var pazpar2_url = mkws_config.pazpar2_url ? mkws_config.pazpar2_url : "/pazpar2/search.pz2"; +var service_proxy_url = mkws_config.service_proxy_url ? mkws_config.service_proxy_url : "/service-proxy/"; + +var pazpar2path = mkws_config.use_service_proxy ? service_proxy_url : pazpar2_url; +var usesessions = mkws_config.use_service_proxy ? false : true; + +var mkws_debug = 1; + +var mkws_locale_lang = { + "de": { + "Authors": "Autoren", + "Subjects": "Schlagwörter", + "Sources": "Daten und Quellen", + "TERMLISTS": "Termlisten", + "Next": "Weiter", + "Prev": "Zurück", + "Search": "Suche", + "Sort by": "Sortieren nach", + "and show": "und zeige", + "per page": "pro Seite", + "Displaying": "Zeige", + "to": "von", + "of": "aus", + "found": "gefunden", + + "dummy": "dummy" + }, + + "da": { + "Authors": "Forfattere", + "Subjects": "Emner", + "Sources": "Kilder", + "TERMLISTS": "TERMLISTS", + "Next": "Næste", + "Prev": "Forrige", + "Search": "Søg", + "Sort by": "Sorter efter", + "and show": "og vis", + "per page": "per side", + "Displaying": "Viser", + "to": "til", + "of": "ud af", + "found": "fandt", + + "dummy": "dummy" + } +}; + // 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 my_paz = new pz2( { "onshow": my_onshow, "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way - "pazpar2path": '/service-proxy/', + "pazpar2path": pazpar2path, "oninit": my_oninit, "onstat": my_onstat, "onterm": my_onterm, "termlist": "xtargets,subject,author", "onbytarget": my_onbytarget, - "usesessions" : false, + "usesessions" : usesessions, "showResponseType": '', // or "json" (for debugging?) "onrecord": my_onrecord } ); // some state vars @@ -41,22 +94,22 @@ function my_onshow(data) { // move it out var pager = document.getElementById("pager"); pager.innerHTML = ""; - pager.innerHTML +='
Target ID | Hits | Diags | ' +'Records | State |
" + data[i].id + " | " + data[i].hits +
@@ -143,8 +196,8 @@ function my_onbytarget(data) {
////////////////////////////////////////////////////////////////////////////////
// wait until the DOM is ready
-function domReady ()
-{
+function domReady ()
+{
document.search.onsubmit = onFormSubmitEventHandler;
document.search.query.value = '';
document.select.sort.onchange = onSelectDdChange;
@@ -152,7 +205,7 @@ function domReady ()
}
// when search button pressed
-function onFormSubmitEventHandler()
+function onFormSubmitEventHandler()
{
resetPage();
loadSelect();
@@ -198,7 +251,7 @@ function limitQuery (field, value)
function limitTarget (id, name)
{
var navi = document.getElementById('navi');
- navi.innerHTML =
+ navi.innerHTML =
'Source: '
+ name + '';
navi.innerHTML += ' '; @@ -213,7 +266,7 @@ function delimitTarget () { var navi = document.getElementById('navi'); navi.innerHTML = ''; - curFilter = null; + curFilter = null; resetPage(); loadSelect(); triggerSearch(); @@ -225,8 +278,8 @@ 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 ) + + var firstClkbl = ( curPage - onsides > 0 ) ? curPage - onsides : 1; @@ -234,10 +287,10 @@ function drawPager (pagerDiv) ? firstClkbl + 2*onsides : pages; - var prev = '<< Prev | '; + var prev = '<< ' + M('Prev') + ' | '; if (curPage > 1) prev = '' - +'<< Prev | '; + +'<< ' + M('Prev') + ' | '; var middle = ''; for(var i = firstClkbl; i <= lastClkbl; i++) { @@ -248,11 +301,11 @@ function drawPager (pagerDiv) middle += ' ' + numLabel + ' '; } - - var next = ' | Next >>'; + + var next = ' | ' + M('Next') + ' >>'; if (pages - curPage > 0) next = ' | ' - +'Next >>'; + + M('Next') + ' >>'; var predots = ''; if (firstClkbl > 1) @@ -262,7 +315,7 @@ function drawPager (pagerDiv) if (lastClkbl < pages) postdots = '...'; - pagerDiv.innerHTML += ' '
+ pagerDiv.innerHTML += ' '
+ prev + predots + middle + postdots + next + ' '; } @@ -289,17 +342,17 @@ function pagerPrev() { // swithing view between targets and records function switchView(view) { - + var targets = document.getElementById('mkwsTargets'); var records = document.getElementById('mkwsRecords'); - + switch(view) { case 'targets': - targets.style.display = "block"; + targets.style.display = "block"; records.style.display = "none"; break; case 'records': - targets.style.display = "none"; + targets.style.display = "none"; records.style.display = "block"; break; default: @@ -312,7 +365,7 @@ 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! @@ -371,37 +424,252 @@ function renderDetails(data, marker) return details; } - -$(document).ready(function() { - $("#mkwsSwitch").html($("", { href: '#', - onclick: "switchView(\'records\')", - text: "Record Browser", - })); - $("#mkwsSwitch").append($("", { text: " | " })); - $("#mkwsSwitch").append($("", { href: '#', - onclick: "switchView(\'targets\')", - text: "Target Info", - })); +/* + * All the HTML stuff to render the search forms and + * result pages. + */ +function mkws_html_all(data) { + + /* default config */ + var config = { + sort: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]], + perpage: [10, 20, 30, 50], + sort_default: "relevance", + perpage_default: 20, + query_width: 50, + switch_menu: true, /* show/hide Records|Targets menu */ + debug: 0, /* debug level for development: 0..2 */ + + dummy: "dummy" + }; + + /* set global debug flag early */ + if (data.debug !== 'undefined') { + mkws_debug = data.debug; + } else if (config.debug !== 'undefined') { + mkws_debug = config.debug; + } + + /* override standard config values by function parameters */ + for (var k in data) { + config[k] = data[k]; + debug("Set config: " + k + ' => ' + data[k]); + } + + mkws_set_lang(mkws_config); + mkws_html_lang(mkws_config); // For some reason, doing this programmatically results in // document.search.query being undefined, hence the raw HTML. + debug("HTML search form"); $("#mkwsSearch").html('\ - '); -/* - $("#mkwsSearch").html('\ - '); -*/ + debug("HTML records"); + $("#mkwsRecords").html('\ +
\
+ No information available yet.\
+ ');
+ $("#mkwsTargets").css("display", "none");
+
+ if (!config.switch_menu) {
+ debug("disable switch menu");
+ $("#mkwsSwitch").css("display", "none");
+ }
+}
+
+function mkws_html_sort(config) {
+ debug("HTML sort");
+ var sort_html = '';
+
+ return sort_html;
+}
+
+function mkws_html_perpage(config) {
+ debug("HTML perpage");
+ var perpage_html = '';
+
+ return perpage_html;
+}
+
+/*
+ * Run service-proxy authentication in background (after page load).
+ * The username/password is configured in the apache config file
+ * for the site.
+ */
+function mkws_service_proxy_auth(auth_url) {
+ if (!auth_url)
+ auth_url = "/service-proxy-auth";
+
+ debug("Run service proxy auth URL: " + auth_url);
+
+ var jqxhr = jQuery.get(auth_url)
+ .fail(function() {
+ alert("service proxy authentication failed, give up!");
+ })
+ .success(function(data) {
+ if (!jQuery.isXMLDoc(data)) {
+ alert("service proxy auth response document is not valid XML document, give up!");
+ return;
+ }
+ var status = $(data).find("status");
+ if (status.text() != "OK") {
+ alert("service proxy auth repsonse status: " + status.text() + ", give up!");
+ return;
+ }
+ });
+}
+
+/* create locale language menu */
+function mkws_html_lang(mkws_config) {
+ var lang_default = "en";
+ var lang = mkws_config.lang || lang_default;
+ var list = [lang_default];
+
+ for (var k in mkws_locale_lang) {
+ list.push(k);
+ }
+ debug("Language menu for: " + list.join(", "));
+
+ var data = "";
+ for(var i = 0; i < list.length; i++) {
+ var l = list[i];
+
+ if (data)
+ data += ' | ';
+
+ if (lang == l) {
+ data += l;
+ } else {
+ data += ' ' + l + ' '
+ }
+ }
+
+ $("#mkwsLang").html(data);
+}
+
+/* locale */
+function M(word) {
+ var lang = mkws_config.lang;
+
+ if (!lang || !mkws_locale_lang[lang])
+ return word;
+
+ return mkws_locale_lang[lang][word] ? mkws_locale_lang[lang][word] : word;
+}
+
+/* implement jQuery.parseQuerystring() for parsing URL parameters */
+jQuery.extend({
+ parseQuerystring: function() {
+ var nvpair = {};
+ var qs = window.location.search.replace('?', '');
+ var pairs = qs.split('&');
+ $.each(pairs, function(i, v){
+ var pair = v.split('=');
+ nvpair[pair[0]] = pair[1];
+ });
+ return nvpair;
+} });
+
+function debug(string) {
+ if (!mkws_debug)
+ return;
+
+ var console; // IE8 quirks
+ if (!console) { /* ARGH!!! */
+ return;
+ }
+
+ // you need to disable use strict at the top of the file!!!
+ if (mkws_debug >= 3) {
+ console.log(arguments.callee.caller);
+ } else if (mkws_debug >= 2) {
+ console.log(">>> called from function " + arguments.callee.caller.name + ' <<<');
+ }
+ console.log(string);
+}
-});
+/* magic */
+$(document).ready(function() { mkws_html_all(mkws_config) });
|