X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=d8065d63677ad1a38ec1753fade22853d01c22cf;hb=3a0a0a1568521adc95c57fd44e1c39c84d809a99;hp=12f3f710de31677386d47b42eac24677c9e7051a;hpb=cbc77f8ae0471f0c2702a78743aebc711a15e781;p=mkws-moved-to-github.git
diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js
index 12f3f71..c268c8e 100644
--- a/tools/htdocs/mkws.js
+++ b/tools/htdocs/mkws.js
@@ -1,25 +1,85 @@
-/*! MKWS, the MasterKey Widget Set. Copyright (C) 2013-2014, Index Data */
+/*! MKWS, the MasterKey Widget Set.
+ * Copyright (C) 2013-2014 Index Data
+ * See the file LICENSE for details
+ */
"use strict"; // HTML5: disable for debug_level >= 2
-// Some functions are visible to be called from outside code, namely
-// generated HTML: mkws.switchView(), showDetails(), limitTarget(),
-// limitQuery(), delimitTarget(), delimitQuery(), pagerPrev(),
-// pagerNext(), showPage()
-// Set up global mkws object. Contains a hash of session objects,
-// indexed by windowid.
+// Handlebars helpers
+Handlebars.registerHelper('json', function(obj) {
+ return $.toJSON(obj);
+});
+
+
+Handlebars.registerHelper('translate', function(s) {
+ return mkws.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 "";
+});
+
+
+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('commaList', function(items, options) {
+ var out = "";
+
+ for (var i in items) {
+ if (i > 0) out += ", ";
+ out += options.fn(items[i])
+ }
+
+ return out;
+});
+
+
+
+// Set up global mkws object. Contains truly global state such as SP
+// authentication, and a hash of team objects, indexed by windowid.
+//
var mkws = {
authenticated: false,
- init: false,
- debug_function: undefined, // will be set during initialisation
debug_level: undefined, // will be initialised from mkws_config
- sessions: {},
+ paz: undefined, // will be set up during initialisation
+ teams: {},
locale_lang: {
"de": {
"Authors": "Autoren",
"Subjects": "Schlagwörter",
"Sources": "Daten und Quellen",
+ "source": "datenquelle",
"Termlists": "Termlisten",
"Next": "Weiter",
"Prev": "Zurück",
@@ -33,8 +93,10 @@ var mkws = {
"found": "gefunden",
"Title": "Titel",
"Author": "Autor",
+ "author": "autor",
"Date": "Datum",
"Subject": "Schlagwort",
+ "subject": "schlagwort",
"Location": "Ort",
"Records": "Datensätze",
"Targets": "Datenbanken",
@@ -46,6 +108,7 @@ var mkws = {
"Authors": "Forfattere",
"Subjects": "Emner",
"Sources": "Kilder",
+ "source": "kilder",
"Termlists": "Termlists",
"Next": "Næste",
"Prev": "Forrige",
@@ -59,8 +122,10 @@ var mkws = {
"found": "fandt",
"Title": "Title",
"Author": "Forfatter",
+ "author": "forfatter",
"Date": "Dato",
"Subject": "Emneord",
+ "subject": "emneord",
"Location": "Lokation",
"Records": "Poster",
"Targets": "Baser",
@@ -70,159 +135,51 @@ var mkws = {
}
};
+
// 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 _make_mkws_team($, teamName) {
- // if (console && console.log) // disabled, will fail in IE8
- // console.log("run _make_mkws_team(" + (teamName ? teamName : "") + ")");
-
- // call this function only once
- if (mkws.init) {
- alert("_make_mkws_team() called twice: how did that happen?!");
- return;
- }
- var m_sort = 'relevance';
+// Factory function for team objects. As much as possible, this uses
+// only member variables (prefixed "m_") and inner functions with
+// private scope. Some functions are visibl as member-functions to be
+// called from outside code -- specifically, from generated
+// HTML. These functions are that.switchView(), showDetails(),
+// limitTarget(), limitQuery(), delimitTarget(), delimitQuery(),
+// pagerPrev(), pagerNext(), showPage(). Also mkws.M() is made
+// available for the Handlebars helper 'translate'
+//
+function team($, teamName) {
+ var that = {};
+ var m_teamName = teamName;
+ var m_submitted = false;
+ var m_query; // initially undefined
+ var m_sort; // will be set below
+ var m_perpage; // will be set below
var m_filters = [];
-
- // keep time state for debugging
+ var m_totalRec = 0;
+ var m_curPage = 1;
+ var m_curDetRecId = '';
+ var m_curDetRecData = null;
var m_debug_time = {
+ // Timestamps for logging
"start": $.now(),
"last": $.now()
};
+ var m_paz; // will be initialised below
- mkws.debug_function = function (string) {
- if (!mkws.debug_level)
- return;
-
- if (typeof console === "undefined" || typeof console.log === "undefined") { /* ARGH!!! old IE */
- return;
- }
+ var debug = function (s) {
var now = $.now();
var timestamp = ((now - m_debug_time.start)/1000).toFixed(3) + " (+" + ((now - m_debug_time.last)/1000).toFixed(3) + ") "
m_debug_time.last = now;
- // you need to disable use strict at the top of the file!!!
- if (mkws.debug_level >= 3) {
- console.log(timestamp + arguments.callee.caller);
- } else if (mkws.debug_level >= 2) {
- console.log(timestamp + ">>> called from function " + arguments.callee.caller.name + ' <<<');
- }
- 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('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 "";
- });
-
-
- 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('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"]],
- perpage_options: [10, 20, 30, 50],
- sort_default: "relevance",
- perpage_default: 20,
- query_width: 50,
- show_lang: true, /* show/hide language menu */
- show_sort: true, /* show/hide sort menu */
- show_perpage: true, /* show/hide perpage menu */
- lang_options: [], /* display languages links for given languages, [] for all */
- facets: ["sources", "subjects", "authors"], /* display facets, in this order, [] for none */
- responsive_design_width: undefined, /* a page with less pixel width considered as narrow */
- debug_level: 1, /* debug level for development: 0..2 */
-
- dummy: "dummy"
- };
-
- /* set global debug_level flag early */
- if (typeof mkws_config.debug_level !== 'undefined') {
- mkws.debug_level = mkws_config.debug_level;
- } else if (typeof config_default.debug_level !== 'undefined') {
- 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')
- mkws_config[k] = config_default[k];
- debug("Set config: " + k + ' => ' + mkws_config[k]);
- }
+ mkws.debug(m_teamName + ": " + timestamp + s);
}
+ debug("start running MKWS");
m_sort = mkws_config.sort_default;
debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to m_sort");
@@ -243,67 +200,55 @@ function _make_mkws_team($, teamName) {
}
}
- // protocol independend link for pazpar2: "//mkws/sp" -> "https://mkws/sp"
+ // protocol independent link for pazpar2: "//mkws/sp" -> "https://mkws/sp"
if (mkws_config.pazpar2_url.match(/^\/\//)) {
mkws_config.pazpar2_url = document.location.protocol + mkws_config.pazpar2_url;
- debug("adjust protocol independend links: " + mkws_config.pazpar2_url);
+ debug("adjust protocol independent links: " + mkws_config.pazpar2_url);
}
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 m_paz = new pz2( { "onshow": my_onshow,
- "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way
- "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,
- "showResponseType": '', // or "json" (for debugging?)
- "onrecord": my_onrecord } );
-
- // some state vars
- var curPage = 1;
- var recPerPage = 20;
- var totalRec = 0;
- var curDetRecId = '';
- var curDetRecData = null;
- var submitted = false;
- var SourceMax = 16;
- var SubjectMax = 10;
- var AuthorMax = 10;
- var m_query; // initially undefined
+ m_paz = new pz2({ "onshow": my_onshow,
+ "windowid": teamName,
+ "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way
+ "pazpar2path": mkws_config.pazpar2_url,
+ "oninit": my_oninit,
+ "onstat": my_onstat,
+ "onterm": (mkws_config.facets.length ? my_onterm : undefined),
+ "termlist": mkws_config.facets.join(','),
+ "onbytarget": my_onbytarget,
+ "usesessions" : mkws_config.use_service_proxy ? false : true,
+ "showResponseType": '', // or "json" (for debugging?)
+ "onrecord": my_onrecord });
if (!isNaN(parseInt(mkws_config.perpage_default))) {
- recPerPage = parseInt(mkws_config.perpage_default);
+ m_perpage = parseInt(mkws_config.perpage_default);
}
+
//
// pz2.js event handlers:
//
- function my_oninit() {
+ function my_oninit(teamName) {
+ debug("init");
m_paz.stat();
m_paz.bytarget();
}
- function my_onshow(data) {
- totalRec = data.merged;
- // move it out
- var pager = document.getElementById("mkwsPager");
- if (pager) {
- pager.innerHTML = "";
- pager.innerHTML +='
');
}
- function my_onrecord(data) {
+
+ function my_onrecord(data, args, teamName) {
+ debug("record");
// FIXME: record is async!!
clearTimeout(m_paz.recordTimer);
// in case on_show was faster to redraw element
var detRecordDiv = document.getElementById('mkwsDet_'+data.recid);
if (detRecordDiv) return;
- curDetRecData = data;
- var recordDiv = document.getElementById('mkwsRecdiv_'+curDetRecData.recid);
- var html = renderDetails(curDetRecData);
+ m_curDetRecData = data;
+ var recordDiv = document.getElementById('mkwsRecdiv_'+m_curDetRecData.recid);
+ var html = renderDetails(m_curDetRecData);
recordDiv.innerHTML += html;
}
- function my_onbytarget(data) {
- var targetDiv = document.getElementById("mkwsBytarget");
+
+ function my_onbytarget(data, teamName) {
+ debug("target");
+ var targetDiv = $('.mkwsBytarget.mkwsTeam_' + teamName);
if (!targetDiv) {
- // No mkwsTargets div.
return;
}
@@ -419,7 +374,7 @@ function _make_mkws_team($, teamName) {
'
' + M('State') + '
' +
'';
- for (var i = 0; i < data.length; i++ ) {
+ for (var i = 0; i < data.length; i++) {
table += "