/* 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
// move it out
var pager = document.getElementById("pager");
pager.innerHTML = "";
- pager.innerHTML +='<hr/><div style="float: right">Displaying: '
- + (data.start + 1) + ' to ' + (data.start + data.num) +
- ' of ' + data.merged + ' (found: '
+ pager.innerHTML +='<hr/><div style="float: right">' + M('Displaying') + ': '
+ + (data.start + 1) + ' ' + M('to') + ' ' + (data.start + data.num) +
+ ' ' + M('of') + ' ' + data.merged + ' (' + M('found') + ': '
+ data.total + ')</div>';
drawPager(pager);
// navi
function my_onterm(data) {
var termlists = [];
- termlists.push('<hr/><b>TERMLISTS:</b><hr/><div class="termtitle">Sources</div>');
+ termlists.push('<hr/><b>' + M('TERMLISTS') + ':</b><hr/><div class="termtitle">' + M('Sources') + '</div>');
for (var i = 0; i < data.xtargets.length && i < SourceMax; i++ ) {
termlists.push('<a href="#" target_id='+data.xtargets[i].id
+ ' onclick="limitTarget(this.getAttribute(\'target_id\'), this.firstChild.nodeValue);return false;">' + data.xtargets[i].name
+ ' </a><span> (' + data.xtargets[i].freq + ')</span><br/>');
}
- termlists.push('<hr/><div class="termtitle">Subjects</div>');
+ termlists.push('<hr/><div class="termtitle">' + M('Subjects') + '</div>');
for (var i = 0; i < data.subject.length && i < SubjectMax; i++ ) {
termlists.push('<a href="#" onclick="limitQuery(\'su\', this.firstChild.nodeValue);return false;">' + data.subject[i].name + '</a><span> ('
+ data.subject[i].freq + ')</span><br/>');
}
- termlists.push('<hr/><div class="termtitle">Authors</div>');
+ termlists.push('<hr/><div class="termtitle">' + M('Authors') + '</div>');
for (var i = 0; i < data.author.length && i < AuthorMax; i++ ) {
termlists.push('<a href="#" onclick="limitQuery(\'au\', this.firstChild.nodeValue);return false;">'
+ data.author[i].name
? firstClkbl + 2*onsides
: pages;
- var prev = '<span id="prev"><< Prev</span><b> | </b>';
+ var prev = '<span id="prev"><< ' + M('Prev') + '</span><b> | </b>';
if (curPage > 1)
prev = '<a href="#" id="prev" onclick="pagerPrev();">'
- +'<< Prev</a><b> | </b>';
+ +'<< ' + M('Prev') + '</a><b> | </b>';
var middle = '';
for(var i = firstClkbl; i <= lastClkbl; i++) {
+ numLabel + ' </a>';
}
- var next = '<b> | </b><span id="next">Next >></span>';
+ var next = '<b> | </b><span id="next">' + M('Next') + ' >></span>';
if (pages - curPage > 0)
next = '<b> | </b><a href="#" id="next" onclick="pagerNext()">'
- +'Next >></a>';
+ + M('Next') + ' >></a>';
var predots = '';
if (firstClkbl > 1)
*/
function mkws_html_all(data) {
+ /* default config */
var config = {
- sort: [ ["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]],
+ 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,
- mkws_switch: true, /* show/hide Records|Targets menu */
+ switch_menu: true, /* show/hide Records|Targets menu */
+ lang_menu: true, /* show/hide language 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]);
}
-
-
- $("#mkwsSwitch").html($("<a/>", {
- href: '#',
- onclick: "switchView(\'records\')",
- text: "Records",
- }));
- $("#mkwsSwitch").append($("<span/>", { text: " | " }));
- $("#mkwsSwitch").append($("<a/>", {
- href: '#',
- onclick: "switchView(\'targets\')",
- text: "Targets",
- }));
-
- if (!config.mkws_switch) {
- $("#mkwsSwitch").css("display", "none");
+ if (mkws_config.query_width < 5 || mkws_config.query_width > 150) {
+ debug("Reset query width: " + mkws_config.query_width);
+ mkws_config.query_width = 50;
}
+
+ mkws_set_lang(mkws_config);
+ if (mkws_config.lang_menu)
+ 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('\
- <form id="searchForm" name="search">\
- <input id="query" type="text" size="50" />\
- <input id="button" type="submit" value="Search" />\
+ <form id="searchForm" name="search" action="" >\
+ <input id="query" type="text" size="' + mkws_config.query_width + '" />\
+ <input id="button" type="submit" value="' + M('Search') + '" />\
</form>');
+ debug("HTML records");
$("#mkwsRecords").html('\
<table width="100%" border="0" cellpadding="6" cellspacing="0">\
<tr>\
</td>\
<td valign="top">\
<div id="ranking">\
- <form name="select" id="select">\
- Sort by\
- <select name="sort" id="sort"><option value="relevance" selected="selected">relevance</option><option value="title:1">title</option><option value="date:0">newest</option><option value="date:1">oldest</option></select>\
- and show \
- <select name="perpage" id="perpage"><option value="10">10</option><option value="20" selected="selected">20</option><option value="30">30</option><option value="50">50</option></select>\
- per page.\
+ <form name="select" id="select" action="" >\
+ ' + M('Sort by') + mkws_html_sort(config) + '\
+ ' + M('and show') + ' ' + mkws_html_perpage(config) + '\
+ ' + M('per page') + '.\
</form>\
</div>\
<div id="pager"></div>\
<div id="results"></div>\
</td>\
</tr>\
- </table>\
- </div>');
+ </table>');
+
+ mkws_html_switch(config);
+ if (mkws_config.use_service_proxy)
+ mkws_service_proxy_auth(config.service_proxy_auth);
+
+ domReady();
+}
+
+function mkws_set_lang(mkws_config) {
+ var lang = jQuery.parseQuerystring().lang || mkws_config.lang || "";
+ if (!lang || !mkws_locale_lang[lang]) {
+ mkws_config.lang = ""
+ } else {
+ mkws_config.lang = lang;
+ }
+
+ debug("Locale language: " + (mkws_config.lang ? mkws_config.lang : "none"));
+ return mkws_config.lang;
+}
+
+function mkws_html_switch(config) {
+ debug("HTML switch");
+
+ $("#mkwsSwitch").html($("<a/>", {
+ href: '#',
+ onclick: "switchView(\'records\')",
+ text: "Records"
+ }));
+ $("#mkwsSwitch").append($("<span/>", { text: " | " }));
+ $("#mkwsSwitch").append($("<a/>", {
+ href: '#',
+ onclick: "switchView(\'targets\')",
+ text: "Targets"
+ }));
+ debug("HTML targets");
$("#mkwsTargets").html('\
<div id="bytarget">\
No information available yet.\
</div>');
$("#mkwsTargets").css("display", "none");
- domReady();
+ if (!config.switch_menu) {
+ debug("disable switch menu");
+ $("#mkwsSwitch").css("display", "none");
+ }
+}
+
+function mkws_html_sort(config) {
+ debug("HTML sort");
+ var sort_html = '<select name="sort" id="sort">';
+
+ for(var i = 0; i < config.sort.length; i++) {
+ var key = config.sort[i][0];
+ var val = config.sort[i].length == 1 ? config.sort[i][0] : config.sort[i][1];
+
+ sort_html += '<option value="' + key + '"';
+ if (key == config.sort_default) {
+ sort_html += ' selected="selected"';
+ }
+ sort_html += '>' + val + '</option>';
+ }
+ sort_html += '</select>';
+
+ return sort_html;
}
-/*
+function mkws_html_perpage(config) {
+ debug("HTML perpage");
+ var perpage_html = '<select name="perpage" id="perpage">';
+
+ for(var i = 0; i < config.perpage.length; i++) {
+ var key = config.perpage[i];
+
+ perpage_html += '<option value="' + key + '"';
+ if (key == config.perpage_default) {
+ perpage_html += ' selected="selected"';
+ }
+ perpage_html += '>' + key + '</option>';
+ }
+ perpage_html += '</select>';
+
+ 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() {
- var jqxhr = jQuery.get("/service-proxy-auth")
+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!");
})
});
}
-$(document).ready(function() { mkws_html_all(mkws_config) });
-$(document).ready(function() { mkws_service_proxy_auth(); });
+/* 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 += ' <a href="/?lang=' + l + '">' + l + '</a> '
+ }
+ }
+
+ $("#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) });