X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=73437496afb4f46add4adf2b6d3847bfb18401f8;hb=7df213947f66e078f3ac244fb4a7512c4410cd3f;hp=32710e7781f2a5ed9ae05b5697b0569df1474217;hpb=8a5c1a1a171ed8fc2ff21f1740b6dc5c3f64c321;p=mkws-moved-to-github.git
diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js
index 32710e7..7343749 100644
--- a/tools/htdocs/mkws.js
+++ b/tools/htdocs/mkws.js
@@ -1,24 +1,31 @@
-/* A very simple client that shows a basic usage of the pz2.js
-*/
+/*! MKWS, the MasterKey Widget Set. Copyright (C) 2013, Index Data */
"use strict"; // HTML5: disable for debug_level >= 2
-// Set up namespace and some state.
+// Set up global mkws object. Contains a hash of session objects,
+// indexed by windowid.
var mkws = {
- filters: [],
+ sessions: {}
};
-/*
- * global config object: mkws_config
- *
- * Needs to be defined in the HTML header before including this JS file.
- * Define empty mkws_config for simple applications that don't define it.
- */
-if (!mkws_config)
+// Define empty mkws_config for simple applications that don't define it.
+if (mkws_config == null || typeof mkws_config != 'object') {
var mkws_config = {};
+}
+
+// wrapper for jQuery lib
+function _mkws($) {
+ // if (console && console.log) console.log("run _mkws()");
+
+ // call this function only once
+ if (mkws.init) {
+ alert("_mkws() called twice: how did that happen?!");
+ return;
+ }
-// Wrapper for jQuery
-(function ($) {
+mkws.sort = 'relevance';
+mkws.authenticated = false;
+mkws.filters = [];
mkws.locale_lang = {
"de": {
@@ -41,7 +48,8 @@ mkws.locale_lang = {
"Date": "Datum",
"Subject": "Schlagwort",
"Location": "Ort",
- // ### to add: Records, Targets
+ "Records": "Datensätze",
+ "Targets": "Datenbanken",
"dummy": "dummy"
},
@@ -66,7 +74,8 @@ mkws.locale_lang = {
"Date": "Dato",
"Subject": "Emneord",
"Location": "Lokation",
- // ### to add: Records, Targets
+ "Records": "Poster",
+ "Targets": "Baser",
"dummy": "dummy"
}
@@ -87,7 +96,7 @@ mkws.debug_function = function (string) {
}
var now = $.now();
- var timestamp = (now - mkws.debug_time.start)/1000 + " (+" + (now - mkws.debug_time.last)/1000 + ") "
+ var timestamp = ((now - mkws.debug_time.start)/1000).toFixed(3) + " (+" + ((now - mkws.debug_time.last)/1000).toFixed(3) + ") "
mkws.debug_time.last = now;
// you need to disable use strict at the top of the file!!!
@@ -99,29 +108,74 @@ mkws.debug_function = function (string) {
console.log(timestamp + string);
}
var debug = mkws.debug_function; // local alias
+debug("start running MKWS");
+
+Handlebars.registerHelper('json', function(obj) {
+ return $.toJSON(obj);
+});
-Handlebars.registerHelper('link', function(a) {
- var result = "";
- for (var i in a) {
- if (i > 0) result += " ";
- var text = Handlebars.Utils.escapeExpression(a[i]);
- result += '' + text + '';
+
+Handlebars.registerHelper('translate', function(s) {
+ debug("translating '" + s + "'");
+ return M(s);
+});
+
+
+// We need {{attr '@name'}} because Handlebars can't parse {{@name}}
+Handlebars.registerHelper('attr', function(attrName) {
+ return this[attrName];
+});
+
+
+/*
+ * Use as follows: {{#if-any NAME1 having="NAME2"}}
+ * Applicable when NAME1 is the name of an array
+ * The guarded code runs only if at least one element of the NAME1
+ * array has a subelement called NAME2.
+ */
+Handlebars.registerHelper('if-any', function(items, options) {
+ var having = options.hash.having;
+ for (var i in items) {
+ var item = items[i]
+ if (!having || item[having]) {
+ return options.fn(this);
+ }
}
+ return "";
+});
+
- return new Handlebars.SafeString(result);
+Handlebars.registerHelper('first', function(items, options) {
+ var having = options.hash.having;
+ for (var i in items) {
+ var item = items[i]
+ if (!having || item[having]) {
+ return options.fn(item);
+ }
+ }
+ return "";
});
-Handlebars.registerHelper('json', function(obj) {
- return JSON.stringify(obj);
+Handlebars.registerHelper('commaList', function(items, options) {
+ var out = "";
+
+ for (var i in items) {
+ if (i > 0) out += ", ";
+ out += options.fn(items[i])
+ }
+
+ return out;
});
{
+
/* default mkws config */
var config_default = {
use_service_proxy: true,
+ pazpar2_url: "http://mkws.indexdata.com/service-proxy/",
service_proxy_auth: "http://mkws.indexdata.com/service-proxy-auth",
lang: "",
sort_options: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]],
@@ -147,6 +201,12 @@ Handlebars.registerHelper('json', function(obj) {
mkws.debug_level = config_default.debug_level;
}
+ // make sure the mkws_config is a valid hash
+ if (!$.isPlainObject(mkws_config)) {
+ debug("ERROR: mkws_config is not an JS object, ignore it....");
+ mkws_config = {};
+ }
+
/* override standard config values by function parameters */
for (var k in config_default) {
if (typeof mkws_config[k] === 'undefined')
@@ -155,6 +215,12 @@ Handlebars.registerHelper('json', function(obj) {
}
}
+
+mkws.sort = mkws_config.sort_default;
+debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to mkws.sort");
+
+mkws.usesessions = mkws_config.use_service_proxy ? false : true;
+
if (mkws_config.query_width < 5 || mkws_config.query_width > 150) {
debug("Reset query width: " + mkws_config.query_width);
mkws_config.query_width = 50;
@@ -171,19 +237,19 @@ for (var key in mkws_config) {
}
}
-
+debug("Create main pz2 object");
// 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": mkws_config.pazpar2_url || "http://mkws.indexdata.com/service-proxy/",
+ "pazpar2path": mkws_config.pazpar2_url,
"oninit": my_oninit,
"onstat": my_onstat,
"onterm": my_onterm,
"termlist": "xtargets,subject,author",
"onbytarget": my_onbytarget,
- "usesessions" : mkws_config.use_service_proxy ? false : true,
+ "usesessions" : mkws.usesessions,
"showResponseType": '', // or "json" (for debugging?)
"onrecord": my_onrecord } );
@@ -195,12 +261,15 @@ var recPerPage = 20;
var totalRec = 0;
var curDetRecId = '';
var curDetRecData = null;
-var curSort = 'relevance';
var submitted = false;
var SourceMax = 16;
var SubjectMax = 10;
var AuthorMax = 10;
+if (!isNaN(parseInt(mkws_config.perpage_default))) {
+ recPerPage = parseInt(mkws_config.perpage_default);
+}
+
//
// pz2.js event handlers:
//
@@ -228,24 +297,29 @@ function my_onshow(data) {
var html = [];
for (var i = 0; i < data.hits.length; i++) {
var hit = data.hits[i];
- html.push('