X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=194a59503ae04cf8e9f63a8ee30cefd037bb600a;hb=3c7d95c98c35d5767daaa19c750506fd3644c112;hp=1837390cfec590988004c9646611f5b897314fbf;hpb=a90455e88951e83ca8ceb430dde3a46c7726049d;p=mkws-moved-to-github.git
diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js
index 1837390..194a595 100644
--- a/tools/htdocs/mkws.js
+++ b/tools/htdocs/mkws.js
@@ -1,4 +1,7 @@
-/*! 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
@@ -10,7 +13,6 @@ Handlebars.registerHelper('json', function(obj) {
Handlebars.registerHelper('translate', function(s) {
- debug("translating '" + s + "'");
return mkws.M(s);
});
@@ -64,15 +66,9 @@ Handlebars.registerHelper('commaList', function(items, options) {
-// Some functions are visible to be called from outside code, namely
-// generated HTML: mkws.switchView(), showDetails(), limitTarget(),
-// limitQuery(), delimitTarget(), delimitQuery(), pagerPrev(),
-// pagerNext(), showPage(). Also mkws.M() is made available for the
-// Handlebars helper 'translate'
-
-
-// Set up global mkws object. Contains a hash of team objects,
-// indexed by windowid.
+// 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,
debug_function: undefined, // will be set during initialisation
@@ -84,6 +80,7 @@ var mkws = {
"Authors": "Autoren",
"Subjects": "Schlagwörter",
"Sources": "Daten und Quellen",
+ "source": "datenquelle",
"Termlists": "Termlisten",
"Next": "Weiter",
"Prev": "Zurück",
@@ -97,8 +94,10 @@ var mkws = {
"found": "gefunden",
"Title": "Titel",
"Author": "Autor",
+ "author": "autor",
"Date": "Datum",
"Subject": "Schlagwort",
+ "subject": "schlagwort",
"Location": "Ort",
"Records": "Datensätze",
"Targets": "Datenbanken",
@@ -110,6 +109,7 @@ var mkws = {
"Authors": "Forfattere",
"Subjects": "Emner",
"Sources": "Kilder",
+ "source": "kilder",
"Termlists": "Termlists",
"Next": "Næste",
"Prev": "Forrige",
@@ -123,8 +123,10 @@ var mkws = {
"found": "fandt",
"Title": "Title",
"Author": "Forfatter",
+ "author": "forfatter",
"Date": "Dato",
"Subject": "Emneord",
+ "subject": "emneord",
"Location": "Lokation",
"Records": "Poster",
"Targets": "Baser",
@@ -141,16 +143,24 @@ if (mkws_config == null || typeof mkws_config != 'object') {
}
-// wrapper for jQuery lib
-function _make_mkws_team($, teamName) {
+// 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_termName = teamName;
+ var m_teamName = teamName;
var m_submitted = false;
var m_query; // initially undefined
- var m_sort = 'relevance';
+ var m_sort; // will be set below
+ var m_perpage; // will be set below
var m_filters = [];
var m_totalRec = 0;
- var m_recPerPage = 20;
var m_curPage = 1;
var m_curDetRecId = '';
var m_curDetRecData = null;
@@ -163,10 +173,11 @@ function _make_mkws_team($, teamName) {
// if (console && console.log) // disabled, will fail in IE8
- // console.log("run _make_mkws_team(" + (teamName ? teamName : "") + ")");
+ // console.log("run team(" + (teamName ? teamName : "") + ")");
- // Needs to be defined inside _make_mkws_team() so it can see m_debug_time
+ // Needs to be defined inside team() so it can see m_debug_time
+ // ### member access won't work: there is only one instance of this function
mkws.debug_function = function (string) {
if (!mkws.debug_level)
return;
@@ -185,7 +196,7 @@ function _make_mkws_team($, teamName) {
} else if (mkws.debug_level >= 2) {
console.log(timestamp + ">>> called from function " + arguments.callee.caller.name + ' <<<');
}
- console.log(timestamp + string);
+ console.log(m_teamName + ": " + timestamp + string);
}
var debug = mkws.debug_function; // local alias
debug("start running MKWS");
@@ -225,15 +236,15 @@ function _make_mkws_team($, teamName) {
"pazpar2path": mkws_config.pazpar2_url,
"oninit": my_oninit,
"onstat": my_onstat,
- "onterm": my_onterm,
- "termlist": "xtargets,subject,author",
+ "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))) {
- m_recPerPage = parseInt(mkws_config.perpage_default);
+ m_perpage = parseInt(mkws_config.perpage_default);
}
@@ -241,28 +252,23 @@ function _make_mkws_team($, teamName) {
// pz2.js event handlers:
//
function my_oninit(teamName) {
- debug("init for " + teamName);
+ debug("init");
m_paz.stat();
m_paz.bytarget();
}
function my_onshow(data, teamName) {
- debug("show for " + teamName);
+ debug("show");
m_totalRec = data.merged;
- // move it out
- var pager = document.getElementById("mkwsPager");
- if (pager) {
- pager.innerHTML = "";
- pager.innerHTML +='
';
+
//client indexes pages from 1 but pz2 from 0
var onsides = 6;
- var pages = Math.ceil(m_totalRec / m_recPerPage);
+ var pages = Math.ceil(m_totalRec / m_perpage);
var firstClkbl = (m_curPage - onsides > 0)
? m_curPage - onsides
@@ -634,7 +662,7 @@ function _make_mkws_team($, teamName) {
var prev = '<< ' + M('Prev') + ' | ';
if (m_curPage > 1)
- prev = ''
+ prev = ''
+'<< ' + M('Prev') + ' | ';
var middle = '';
@@ -643,13 +671,13 @@ function _make_mkws_team($, teamName) {
if(i == m_curPage)
numLabel = '' + i + '';
- middle += ' '
+ middle += ' '
+ numLabel + ' ';
}
var next = ' | ' + M('Next') + ' >>';
if (pages - m_curPage > 0)
- next = ' | '
+ next = ' | '
+ M('Next') + ' >>';
var predots = '';
@@ -660,12 +688,14 @@ function _make_mkws_team($, teamName) {
if (lastClkbl < pages)
postdots = '...';
- pagerDiv.innerHTML += '
'
+ s += '
'
+ prev + predots + middle + postdots + next + '
';
+
+ return s;
}
- mkws.showPage = function (pageNum)
+ that.showPage = function (pageNum)
{
m_curPage = pageNum;
m_paz.showPage(m_curPage - 1);
@@ -673,48 +703,46 @@ function _make_mkws_team($, teamName) {
// simple paging functions
- mkws.pagerNext = function () {
- if (m_totalRec - m_recPerPage*m_curPage > 0) {
+ that.pagerNext = function () {
+ if (m_totalRec - m_perpage*m_curPage > 0) {
m_paz.showNext();
m_curPage++;
}
}
- mkws.pagerPrev = function () {
+ that.pagerPrev = function () {
if (m_paz.showPrev() != false)
m_curPage--;
}
// switching view between targets and records
- mkws.switchView = function(view) {
- debug("switchView: " + view);
-
- var targets = document.getElementById('mkwsTargets');
- var results = document.getElementById('mkwsResults') ||
- document.getElementById('mkwsRecords');
- var blanket = document.getElementById('mkwsBlanket');
- var motd = document.getElementById('mkwsMOTD');
+ that.switchView = function(view) {
+ var targets = $('.mkwsTargets.mkwsTeam_' + m_teamName);
+ var results = $('.mkwsResults.mkwsTeam_' + m_teamName + ',.mkwsRecords.mkwsTeam_' + m_teamName);
+ var blanket = $('.mkwsBlanket.mkwsTeam_' + m_teamName);
+ var motd = $('.mkwsMOTD.mkwsTeam_' + m_teamName);
switch(view) {
case 'targets':
- if (targets) targets.style.display = "block";
- if (results) results.style.display = "none";
- if (blanket) blanket.style.display = "none";
- if (motd) motd.style.display = "none";
+ if (targets) targets.css('display', 'block');
+ if (results) results.css('display', 'none');
+ if (blanket) blanket.css('display', 'none');
+ if (motd) motd.css('display', 'none');
break;
case 'records':
- if (targets) targets.style.display = "none";
- if (results) results.style.display = "block";
- if (blanket) blanket.style.display = "block";
- if (motd) motd.style.display = "none";
+ if (targets) targets.css('display', 'none');
+ if (results) results.css('display', 'block');
+ if (blanket) blanket.css('display', 'block');
+ if (motd) motd.css('display', 'none');
break;
case 'none':
- if (targets) targets.style.display = "none";
- if (results) results.style.display = "none";
- if (blanket) blanket.style.display = "none";
- if (motd) motd.style.display = "none";
+ alert("mkws.switchView(" + m_teamName + ", 'none') shouldn't happen");
+ if (targets) targets.css('display', 'none');
+ if (results) results.css('display', 'none');
+ if (blanket) blanket.css('display', 'none');
+ if (motd) motd.css('display', 'none');
break;
default:
alert("Unknown view '" + view + "'");
@@ -723,7 +751,7 @@ function _make_mkws_team($, teamName) {
// detailed record drawing
- mkws.showDetails = function (prefixRecId) {
+ that.showDetails = function (prefixRecId) {
var recId = prefixRecId.replace('mkwsRec_', '');
var oldRecId = m_curDetRecId;
m_curDetRecId = recId;
@@ -741,25 +769,11 @@ function _make_mkws_team($, teamName) {
return;
}
// request the record
+ debug("showDetails() requesting record '" + recId + "'");
m_paz.record(recId);
}
- function replaceHtml(el, html) {
- var oldEl = typeof el === "string" ? document.getElementById(el) : el;
- /*@cc_on // Pure innerHTML is slightly faster in IE
- oldEl.innerHTML = html;
- return oldEl;
- @*/
- var newEl = oldEl.cloneNode(false);
- newEl.innerHTML = html;
- oldEl.parentNode.replaceChild(newEl, oldEl);
- /* Since we just removed the old element from the DOM, return a reference
- to the new element, which can be used to restore variable references. */
- return newEl;
- };
-
-
function renderDetails(data, marker)
{
var template = loadTemplate("Record");
@@ -879,46 +893,54 @@ function _make_mkws_team($, teamName) {
// For some reason, doing this programmatically results in
// document.mkwsSearchForm.mkwsQuery being undefined, hence the raw HTML.
debug("HTML search form");
- $("#mkwsSearch").html('\
-');
+ });
+ });
debug("HTML records");
- // If the application has an #mkwsResults, populate it in the
- // usual way. If not, assume that it's a smarter application that
- // defines its own subcomponents:
- // #mkwsTermlists
- // #mkwsRanking
- // #mkwsPager
- // #mkwsNavi
- // #mkwsRecords
- if ($("#mkwsResults").length) {
- $("#mkwsResults").html('\
+ // If the team has a .mkwsResults, populate it in the usual
+ // way. If not, assume that it's a smarter application that
+ // defines its own subcomponents, some or all of the
+ // following:
+ // .mkwsTermlists
+ // .mkwsRanking
+ // .mkwsPager
+ // .mkwsNavi
+ // .mkwsRecords
+ if ($(".mkwsResults.mkwsTeam_" + m_teamName).length) {
+ $(".mkwsResults.mkwsTeam_" + m_teamName).html('\
\
\
-
\
- \
+
\
+ \
\
-
\
- \
- \
- \
- \
+
\
+ \
+ \
+ \
+ \
\
\
\
\
- \
+ \
\
\
');
}
- if ($("#mkwsRanking").length) {
+ var node = $(".mkwsRanking.mkwsTeam_" + m_teamName);
+ if (node.length) {
var ranking_data = '';
- ranking_data += '';
- $("#mkwsRanking").html(ranking_data);
+ node.html(ranking_data);
}
mkws_html_switch();
@@ -935,21 +957,20 @@ function _make_mkws_team($, teamName) {
if (mkws_config.responsive_design_width) {
// Responsive web design - change layout on the fly based on
// current screen width. Required for mobile devices.
- $(window).resize(function(e) { mkws_resize_page() });
+ $(window).resize(function(e) { mkws.resize_page() });
// initial check after page load
- $(document).ready(function() { mkws_resize_page() });
+ $(document).ready(function() { mkws.resize_page() });
}
domReady();
// on first page, hide the termlist
- $(document).ready(function() { $("#mkwsTermlists").hide(); });
- var motd = document.getElementById("mkwsMOTD");
- var container = document.getElementById("mkwsMOTDContainer");
- if (motd && container) {
+ $(document).ready(function() { $(".mkwsTermlists.mkwsTeam_" + m_teamName).hide(); });
+ var motd = $(".mkwsMOTD.mkwsTeam_" + m_teamName);
+ var container = $(".mkwsMOTDContainer.mkwsTeam_" + m_teamName);
+ if (motd.length && container.length) {
// Move the MOTD from the provided element down into the container
- motd.parentNode.removeChild(motd);
- container.appendChild(motd);
+ motd.appendTo(container);
}
}
@@ -981,24 +1002,26 @@ function _make_mkws_team($, teamName) {
function mkws_html_switch() {
- debug("HTML switch");
+ debug("HTML switch for team " + m_teamName);
- $("#mkwsSwitch").append($('' + M('Records') + ''));
- $("#mkwsSwitch").append($("", { text: " | " }));
- $("#mkwsSwitch").append($('' + M('Targets') + ''));
+ var node = $(".mkwsSwitch.mkwsTeam_" + m_teamName);
+ node.append($('' + M('Records') + ''));
+ node.append($("", { text: " | " }));
+ node.append($('' + M('Targets') + ''));
debug("HTML targets");
- $("#mkwsTargets").html('\
-