From: Wolfram Schneider Date: Fri, 21 Jun 2013 09:04:26 +0000 (+0000) Subject: Merge remote branch 'origin/master' into wosch X-Git-Tag: 0.9.1~574 X-Git-Url: http://git.indexdata.com/?a=commitdiff_plain;h=6b8a2657249b9280fd89dbf80ac2523e94f8361c;hp=01d95c59750f32341a720843030e3c44b264f8e1;p=mkws-moved-to-github.git Merge remote branch 'origin/master' into wosch --- diff --git a/etc/apache2/spclient-dev b/etc/apache2/spclient-dev new file mode 100644 index 0000000..b4a7e8a --- /dev/null +++ b/etc/apache2/spclient-dev @@ -0,0 +1,26 @@ +# Configuration for the apache web server -*- apache -*- + +# pazpar2 / service proxy config + + ServerName spclient.example.com + ServerAlias spclient-dev.indexdata.com + ServerAdmin webmaster@example.com + ErrorLog /var/log/apache2/spdemo-error.log + CustomLog /var/log/apache2/spdemo-access.log combined + + RewriteEngine on + RewriteLogLevel 1 + RewriteLog /var/log/apache2/spdemo-rewrite.log + + DocumentRoot /home/indexdata/mkws/experiments/spclient + + RewriteRule /service-proxy-auth /service-proxy/?command=auth&action=login&username=guest&password=guest [P] # [NE,P] + + ProxyPass /service-proxy/ http://mkc.indexdata.com:9009/service-proxy/ + ProxyPassReverse /service-proxy/ http://mkc.indexdata.com:9009/service-proxy/ + + ProxyPass /pazpar2/ http://localhost:8004/pazpar2/ + ProxyPassReverse /pazpar2/ http://localhost:8004/pazpar2/ + + + diff --git a/etc/apache2/spdemo-px b/etc/apache2/spdemo-px index 77f8f67..7f28300 100644 --- a/etc/apache2/spdemo-px +++ b/etc/apache2/spdemo-px @@ -1,6 +1,6 @@ ServerName spdemo.indexdata.com - ServerAlias spdemo-dev.indexdata.com spdemo-devel.indexdata.com spdemo-sp.indexdata.com spdemo-pp2.indexdata.com + ServerAlias spdemo-dev.indexdata.com spdemo-devel.indexdata.com spdemo-sp.indexdata.com spdemo-pp2.indexdata.com spclient-dev.indexdata.com ErrorLog /var/log/apache2/spdemo-error.log CustomLog /var/log/apache2/spdemo-access.log combined diff --git a/experiments/spclient/README b/experiments/spclient/README index 16b3bc3..912f5c3 100644 --- a/experiments/spclient/README +++ b/experiments/spclient/README @@ -18,7 +18,7 @@ can have MasterKey searching with minimal effort. The following files must be hosted on mkws.indexdata.com: mkws.js mkwsStyle.css - /libjs-pz2/pz2api.1.js + /libjs-pz2/pz2api.1.js (*) The following files make up the application: index.html @@ -29,6 +29,9 @@ The following files make up the application: Alias for /service-proxy/, to avoid cross-site scripting issues. We will fix this.) +(*) if you don't have already installed libjs-pz2 on the machine, you can +do it by installing a debian package or check it out from GIT: +$ git clone ssh://git.indexdata.com:222/home/git/pub/libjs-pz2 Configuring a client -------------------- @@ -38,6 +41,9 @@ whatever makes up the application itself: Prerequisites: + @@ -59,6 +65,24 @@ missing. One of the TODOs is to fix it so that it doesn't try to use whatever is not there, and just uses what is. +You can configure and control the client with the JavaScript mkws_config object. + +Here is an example of all possible options + + What next? ---------- @@ -69,5 +93,3 @@ Main areas of work: * Make CSS prettier * Embed in a real, existing, site * Clean up the code - - diff --git a/experiments/spclient/index.html b/experiments/spclient/index.html index f1d0982..fd9699d 100644 --- a/experiments/spclient/index.html +++ b/experiments/spclient/index.html @@ -3,9 +3,19 @@ + MKWS demo client + @@ -16,6 +26,10 @@
-
+ + diff --git a/experiments/spclient/mkws.js b/experiments/spclient/mkws.js index 3c8d76e..9b339fa 100644 --- a/experiments/spclient/mkws.js +++ b/experiments/spclient/mkws.js @@ -1,18 +1,69 @@ /* 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_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,9 +92,9 @@ function my_onshow(data) { // 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: ' + pager.innerHTML +='
' + M('Displaying') + ': ' + + (data.start + 1) + ' ' + M('to') + ' ' + (data.start + data.num) + + ' ' + M('of') + ' ' + data.merged + ' (' + M('found') + ': ' + data.total + ')
'; drawPager(pager); // navi @@ -85,20 +136,20 @@ function my_onstat(data) { function my_onterm(data) { var termlists = []; - termlists.push('
TERMLISTS:
Sources
'); + termlists.push('
' + M('TERMLISTS') + ':
' + M('Sources') + '
'); for (var i = 0; i < data.xtargets.length && i < SourceMax; i++ ) { termlists.push('' + data.xtargets[i].name + ' (' + data.xtargets[i].freq + ')
'); } - termlists.push('
Subjects
'); + termlists.push('
' + M('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
'); + termlists.push('
' + M('Authors') + '
'); for (var i = 0; i < data.author.length && i < AuthorMax; i++ ) { termlists.push('' + data.author[i].name @@ -234,10 +285,10 @@ function drawPager (pagerDiv) ? firstClkbl + 2*onsides : pages; - var prev = '<< Prev | '; + var prev = '<< ' + M('Prev') + ' | '; if (curPage > 1) prev = ' | '; + +'<< ' + M('Prev') + ' | '; var middle = ''; for(var i = firstClkbl; i <= lastClkbl; i++) { @@ -249,10 +300,10 @@ function drawPager (pagerDiv) + numLabel + ' '; } - var next = ' | Next >>'; + var next = ' | ' + M('Next') + ' >>'; if (pages - curPage > 0) next = ' | '; + + M('Next') + ' >>'; var predots = ''; if (firstClkbl > 1) @@ -371,26 +422,35 @@ function renderDetails(data, marker) return details; } - -$(document).ready(function() { - $("#mkwsSwitch").html($("", { - href: '#', - onclick: "switchView(\'records\')", - text: "Records", - })); - $("#mkwsSwitch").append($("", { text: " | " })); - $("#mkwsSwitch").append($("", { - href: '#', - onclick: "switchView(\'targets\')", - text: "Targets", - })); +/* + * 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: true, /* show/hide Records|Targets menu */ + + dummy: "dummy" + }; + + /* override standard config values by function parameters */ + for (var k in data) { + config[k] = data[k]; + } // For some reason, doing this programmatically results in // document.search.query being undefined, hence the raw HTML. $("#mkwsSearch").html('\
\ \ - \ + \
'); $("#mkwsRecords").html('\ @@ -402,11 +462,9 @@ $(document).ready(function() { \
\
\ - Sort by\ - \ - and show \ - \ - per page.\ + ' + M('Sort by') + mkws_html_sort(config) + '\ + ' + M('and show') + ' ' + mkws_html_perpage(config) + '\ + ' + M('per page') + '.\
\
\
\ @@ -417,19 +475,84 @@ $(document).ready(function() { \
'); + mkws_html_switch(config); + if (mkws_config.use_service_proxy) + mkws_service_proxy_auth(config.service_proxy_auth); + + domReady(); +} + +function mkws_html_switch(config) { + $("#mkwsSwitch").html($("", { + href: '#', + onclick: "switchView(\'records\')", + text: "Records" + })); + $("#mkwsSwitch").append($("", { text: " | " })); + $("#mkwsSwitch").append($("", { + href: '#', + onclick: "switchView(\'targets\')", + text: "Targets" + })); + $("#mkwsTargets").html('\
\ No information available yet.\
'); $("#mkwsTargets").css("display", "none"); - domReady(); -}); + if (!config.switch) { + $("#mkwsSwitch").css("display", "none"); + } +} + +function mkws_html_sort(config) { + var sort_html = ''; + + return sort_html; +} + +function mkws_html_perpage(config) { + 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"; + + var jqxhr = jQuery.get(auth_url) .fail(function() { - alert("service proxy authentification failed, give up!"); + alert("service proxy authentication failed, give up!"); }) .success(function(data) { if (!jQuery.isXMLDoc(data)) { @@ -442,4 +565,29 @@ $(document).ready(function() { return; } }); -}); +} + +/* locale */ +function M(word) { + var lang = jQuery.parseQuerystring().lang || mkws_config.lang; + + if (!lang || !mkws_locale_lang[lang]) + return word; + + return mkws_locale_lang[lang][word] ? mkws_locale_lang[lang][word] : word; +} + +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; +} }); + +/* magic */ +$(document).ready(function() { mkws_html_all(mkws_config) }); diff --git a/experiments/spclient/mkwsStyle.css b/experiments/spclient/mkwsStyle.css index f17c546..3920487 100644 --- a/experiments/spclient/mkwsStyle.css +++ b/experiments/spclient/mkwsStyle.css @@ -69,3 +69,15 @@ div.details { background-color: #fafafa; border-bottom: 1px solid #156a16; } + +#mkwsStat { + font-weight: bold; + font-size: small; +} + +#footer { + padding-top: 4px; + text-align: center; + font-size: small; +} +